From abd5c4b2ff344f7d2b46efd729e634a6ed6a710b Mon Sep 17 00:00:00 2001 From: kiki Date: Thu, 6 Jun 2013 21:31:48 +0800 Subject: [PATCH] add setParent --- .../druid/sql/ast/expr/SQLBinaryOpExpr.java | 4 ++-- .../druid/sql/ast/expr/SQLCaseExpr.java | 23 +++++++++++++++++-- .../druid/sql/parser/SQLExprParser.java | 2 +- .../druid/sql/visitor/functions/Isnull.java | 2 +- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLBinaryOpExpr.java b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLBinaryOpExpr.java index c374a2a443..dd87f215e7 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLBinaryOpExpr.java +++ b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLBinaryOpExpr.java @@ -41,8 +41,8 @@ public class SQLBinaryOpExpr extends SQLExprImpl implements Serializable { public SQLBinaryOpExpr(SQLExpr left, SQLExpr right, SQLBinaryOperator operator){ - this.left = left; - this.right = right; + setLeft(left); + setRight(right); this.operator = operator; } diff --git a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLCaseExpr.java b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLCaseExpr.java index 390f9c48cc..826c28424d 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/expr/SQLCaseExpr.java +++ b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLCaseExpr.java @@ -63,6 +63,9 @@ public class SQLCaseExpr extends SQLExprImpl implements Serializable { } public void setValueExpr(SQLExpr valueExpr) { + if (valueExpr != null) { + valueExpr.setParent(this); + } this.valueExpr = valueExpr; } @@ -71,6 +74,9 @@ public class SQLCaseExpr extends SQLExprImpl implements Serializable { } public void setElseExpr(SQLExpr elseExpr) { + if (elseExpr != null) { + elseExpr.setParent(this); + } this.elseExpr = elseExpr; } @@ -78,6 +84,13 @@ public class SQLCaseExpr extends SQLExprImpl implements Serializable { return this.items; } + public void addItem(Item item) { + if (item != null) { + item.setParent(this); + this.items.add(item); + } + } + protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, this.valueExpr); @@ -99,8 +112,8 @@ public class SQLCaseExpr extends SQLExprImpl implements Serializable { public Item(SQLExpr conditionExpr, SQLExpr valueExpr){ - this.conditionExpr = conditionExpr; - this.valueExpr = valueExpr; + setConditionExpr(conditionExpr); + setValueExpr(valueExpr); } public SQLExpr getConditionExpr() { @@ -108,6 +121,9 @@ public class SQLCaseExpr extends SQLExprImpl implements Serializable { } public void setConditionExpr(SQLExpr conditionExpr) { + if (conditionExpr != null) { + conditionExpr.setParent(this); + } this.conditionExpr = conditionExpr; } @@ -116,6 +132,9 @@ public class SQLCaseExpr extends SQLExprImpl implements Serializable { } public void setValueExpr(SQLExpr valueExpr) { + if (valueExpr != null) { + valueExpr.setParent(this); + } this.valueExpr = valueExpr; } diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index d78e405e37..9daf0f2e29 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -241,7 +241,7 @@ public class SQLExprParser extends SQLParser { accept(Token.THEN); SQLExpr valueExpr = expr(); SQLCaseExpr.Item caseItem = new SQLCaseExpr.Item(testExpr, valueExpr); - caseExpr.getItems().add(caseItem); + caseExpr.addItem(caseItem); while (lexer.token() == Token.WHEN) { lexer.nextToken(); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Isnull.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Isnull.java index f0cd82fbb2..43e6056426 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/functions/Isnull.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Isnull.java @@ -38,7 +38,7 @@ public class Isnull implements Function { SQLExpr condition = parameters.get(0); condition.accept(visitor); Object itemValue = condition.getAttributes().get(EVAL_VALUE); - if (itemValue == null || itemValue == EVAL_VALUE_NULL) { + if (itemValue == EVAL_VALUE_NULL) { return Boolean.TRUE; } else { return Boolean.FALSE;