From aa314094f25a050d15245aa7f0736c42488fad2b Mon Sep 17 00:00:00 2001 From: juicer Date: Fri, 29 Jul 2016 18:30:33 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=B3=E4=BA=8E=20NULL?= =?UTF-8?q?=20=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Oracle 中 原始sql :alter table aaa modify bbb null; 转换后成为: ALTER TABLE aaa MODIFY ( bbb DEFAULT NULL ); 原始Sql的语义改变了,改变了字段的default值 --- .../sql/ast/statement/NullConstraint.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/com/alibaba/druid/sql/ast/statement/NullConstraint.java diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/NullConstraint.java b/src/main/java/com/alibaba/druid/sql/ast/statement/NullConstraint.java new file mode 100644 index 0000000000..e55329a13c --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/NullConstraint.java @@ -0,0 +1,30 @@ +/* + * Copyright 1999-2101 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.ast.statement; + +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +public class NullConstraint extends SQLConstraintImpl implements SQLColumnConstraint { + + public NullConstraint(){ + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + visitor.visit(this); + visitor.endVisit(this); + } +} From 381ec854b570b70310a801cd5052f4fb26ddd2f6 Mon Sep 17 00:00:00 2001 From: juicer Date: Fri, 29 Jul 2016 18:31:41 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=B3=E4=BA=8E=20NULL?= =?UTF-8?q?=20=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Oracle 中 原始sql :alter table aaa modify bbb null; 转换后成为: ALTER TABLE aaa MODIFY ( bbb DEFAULT NULL ); 原始Sql的语义改变了,改变了字段的default值 --- src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 aae45f4a2b..883b0595d3 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -65,6 +65,7 @@ import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLUnaryOperator; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.NotNullConstraint; +import com.alibaba.druid.sql.ast.statement.NullConstraint; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLCharacterDataType; import com.alibaba.druid.sql.ast.statement.SQLCheck; @@ -1688,7 +1689,7 @@ public class SQLExprParser extends SQLParser { if (lexer.token() == Token.NULL) { lexer.nextToken(); - column.setDefaultExpr(new SQLNullExpr()); + column.getConstraints().add(new NullConstraint()); return parseColumnRest(column); } From 6ad7fa902ba12615d6b31136c5a83dd8d402a64d Mon Sep 17 00:00:00 2001 From: juicer Date: Fri, 29 Jul 2016 18:33:22 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=B3=E4=BA=8E=20NULL?= =?UTF-8?q?=20=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Oracle 中 原始sql :alter table aaa modify bbb null; 转换后成为: ALTER TABLE aaa MODIFY ( bbb DEFAULT NULL ); 原始Sql的语义改变了,改变了字段的default值 --- .../alibaba/druid/sql/visitor/SQLASTOutputVisitor.java | 10 ++++++++++ .../com/alibaba/druid/sql/visitor/SQLASTVisitor.java | 5 +++++ .../druid/sql/visitor/SQLASTVisitorAdapter.java | 9 +++++++++ 3 files changed, 24 insertions(+) diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 4c0781932e..39b0841064 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -1192,6 +1192,16 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab return false; } + public boolean visit(NullConstraint x) { + if (x.getName() != null) { + print0(ucase ? "CONSTRAINT " : "constraint "); + x.getName().accept(this); + print(' '); + } + print0(ucase ? "NULL" : "null"); + return false; + } + @Override public boolean visit(SQLUnionQuery x) { x.getLeft().accept(this); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java index 0f641957e7..61df27ff28 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -716,4 +716,9 @@ public interface SQLASTVisitor { boolean visit(SQLErrorLoggingClause x); void endVisit(SQLErrorLoggingClause x); + + boolean visit(NullConstraint x); + + void endVisit(NullConstraint x); + } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java index fb20641240..182962c8df 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -1565,4 +1565,13 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { public void endVisit(SQLErrorLoggingClause x) { } + + @Override + public boolean visit(NullConstraint x) { + return true; + } + + @Override + public void endVisit(NullConstraint x) { + } }