1 21 package oracle.toplink.essentials.internal.parsing; 23 24 import java.util.*; 25 26 import oracle.toplink.essentials.expressions.*; 27 28 37 public class OrNode extends LogicalOperatorNode { 38 39 private Set leftOuterScopeVariables = null; 40 private Set rightOuterScopeVariables = null; 41 42 45 public OrNode() { 46 super(); 47 } 48 49 53 public void validate(ParseTreeContext context) { 54 Set saved = context.getOuterScopeVariables(); 55 if (left != null) { 56 context.resetOuterScopeVariables(); 57 left.validate(context); 58 leftOuterScopeVariables = context.getOuterScopeVariables(); 59 } 60 if (right != null) { 61 context.resetOuterScopeVariables(); 62 right.validate(context); 63 rightOuterScopeVariables = context.getOuterScopeVariables(); 64 } 65 context.resetOuterScopeVariables(saved); 66 if ((left != null) && (right != null)) { 67 left.validateParameter(context, right.getType()); 68 right.validateParameter(context, left.getType()); 69 } 70 71 TypeHelper typeHelper = context.getTypeHelper(); 72 setType(typeHelper.getBooleanType()); 73 } 74 75 79 public Expression generateExpression(GenerationContext context) { 80 Expression leftExpr = getLeft().generateExpression(context); 82 leftExpr = appendOuterScopeVariableJoins( 83 leftExpr, leftOuterScopeVariables, context); 84 85 Expression rightExpr = getRight().generateExpression(context); 86 rightExpr = appendOuterScopeVariableJoins( 87 rightExpr, rightOuterScopeVariables, context); 88 89 return leftExpr.or(rightExpr); 91 } 92 93 96 private Expression appendOuterScopeVariableJoins( 97 Expression expr, Set outerScopeVariables, GenerationContext context) { 98 if ((outerScopeVariables == null) || outerScopeVariables.isEmpty()) { 99 return expr; 101 } 102 Expression joins = context.joinVariables(outerScopeVariables); 103 return appendExpression(expr, joins); 104 } 105 106 } 107 | Popular Tags |