01: /*
02:
03: Derby - Class org.apache.derby.impl.sql.compile.SubstituteExpressionVisitor
04:
05: Licensed to the Apache Software Foundation (ASF) under one or more
06: contributor license agreements. See the NOTICE file distributed with
07: this work for additional information regarding copyright ownership.
08: The ASF licenses this file to you under the Apache License, Version 2.0
09: (the "License"); you may not use this file except in compliance with
10: the License. You may obtain a copy of the License at
11:
12: http://www.apache.org/licenses/LICENSE-2.0
13:
14: Unless required by applicable law or agreed to in writing, software
15: distributed under the License is distributed on an "AS IS" BASIS,
16: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17: See the License for the specific language governing permissions and
18: limitations under the License.
19:
20: */
21: package org.apache.derby.impl.sql.compile;
22:
23: import org.apache.derby.iapi.error.StandardException;
24: import org.apache.derby.iapi.sql.compile.Visitable;
25: import org.apache.derby.iapi.sql.compile.Visitor;
26:
27: /**
28: * Replaces a <em>source</em> expression with a <em>target</em>
29: * expression.
30: *
31: * @author manish
32: */
33: class SubstituteExpressionVisitor implements Visitor {
34: private ValueNode source;
35: private ValueNode target;
36: private Class skipOverClass;
37:
38: SubstituteExpressionVisitor(ValueNode s, ValueNode t,
39: Class skipThisClass) {
40: source = s;
41: target = t;
42: skipOverClass = skipThisClass;
43: }
44:
45: public Visitable visit(Visitable node) throws StandardException {
46: if (!(node instanceof ValueNode)) {
47: return node;
48: }
49:
50: ValueNode nd = (ValueNode) node;
51: if (nd.isEquivalent(source)) {
52: return target;
53: } else {
54: return node;
55: }
56: }
57:
58: public boolean stopTraversal() {
59: return false;
60: }
61:
62: public boolean skipChildren(Visitable node) {
63: return (skipOverClass == null) ? false : skipOverClass
64: .isInstance(node);
65: }
66: }
|