mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved sql parser schema repository.
This commit is contained in:
@@ -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;
|
||||
|
||||
+11
-1
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+11
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user