improved sql parser schema repository.

This commit is contained in:
wenshao
2017-08-07 16:18:13 +08:00
parent b0c38aef68
commit ea8017382f
25 changed files with 722 additions and 66 deletions
@@ -16,9 +16,11 @@
package com.alibaba.druid.sql.dialect.mysql.ast;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem;
import com.alibaba.druid.sql.ast.statement.SQLTableConstraint;
import com.alibaba.druid.sql.ast.statement.SQLUnique;
import com.alibaba.druid.sql.ast.statement.SQLUniqueConstraint;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableChangeColumn;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
import com.alibaba.druid.util.JdbcConstants;
@@ -28,6 +28,7 @@ import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.SQLObject;
import com.alibaba.druid.sql.ast.SQLPartitionBy;
import com.alibaba.druid.sql.ast.statement.*;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUnique;
@@ -295,13 +296,14 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement
insertIndex = beforeIndex;
} else if (afterIndex != -1) {
insertIndex = afterIndex + 1;
} else if (item.isFirst()) {
insertIndex = 0;
}
SQLColumnDefinition column = item.getNewColumnDefinition().clone();
column.setParent(this);
if (insertIndex == -1 || insertIndex == columnIndex) {
tableElementList.set(columnIndex, column);
return true;
} else {
if (insertIndex > columnIndex) {
tableElementList.add(insertIndex, column);
@@ -312,6 +314,14 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement
}
}
for (SQLTableElement e : tableElementList) {
if(e instanceof MySqlTableIndex) {
((MySqlTableIndex) e).apply(item);
} else if (e instanceof MySqlKey) {
((MySqlKey) e).applyColumnRename(columnName, column.getName());
}
}
return true;
}
@@ -84,4 +84,8 @@ public class MySqlTableIndex extends MySqlObjectImpl implements SQLTableElement
}
return x;
}
public boolean apply(MySqlAlterTableChangeColumn x) {
return false;
}
}
@@ -18,6 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.visitor.transform;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.SQLObject;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.expr.*;
import com.alibaba.druid.sql.ast.statement.*;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitorAdapter;
@@ -28,6 +29,16 @@ import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitorAdapter;
public class NameResolveVisitor extends OracleASTVisitorAdapter {
public boolean visit(SQLIdentifierExpr x) {
SQLObject parent = x.getParent();
if (parent instanceof SQLBinaryOpExpr) {
SQLBinaryOpExpr binaryOpExpr = (SQLBinaryOpExpr) parent;
boolean isJoinCondition = binaryOpExpr.getLeft() instanceof SQLName
&& binaryOpExpr.getRight() instanceof SQLName;
if (isJoinCondition) {
return false;
}
}
String name = x.getName();
if ("ROWNUM".equalsIgnoreCase(name)) {
@@ -33,6 +33,14 @@ public class OracleOuterExpr extends SQLExprImpl implements OracleExpr {
this.expr = expr;
}
public OracleOuterExpr clone() {
OracleOuterExpr x = new OracleOuterExpr();
if (expr != null) {
x.setExpr(expr.clone());
}
return x;
}
public SQLExpr getExpr() {
return this.expr;
}
@@ -145,4 +145,9 @@ public class OracleSelectJoin extends SQLJoinTableSource implements OracleSelect
}
this.setRight(tableSource);
}
public SQLJoinTableSource join(SQLTableSource right, JoinType joinType, SQLExpr condition) {
SQLJoinTableSource joined = new OracleSelectJoin(this, joinType, right, condition);
return joined;
}
}