diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLPrimaryKey.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLPrimaryKey.java index 85c8ddfd09..5664a5a466 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLPrimaryKey.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLPrimaryKey.java @@ -15,6 +15,6 @@ */ package com.alibaba.druid.sql.ast.statement; -public interface SQLPrimaryKey extends SQLUniqueConstraint { +public interface SQLPrimaryKey extends SQLUniqueConstraint, SQLTableElement { } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java index 8c98390f97..913520f18e 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java @@ -64,11 +64,7 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS for (SQLName tableName : x.getTableNames()) { String ident = tableName.toString(); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementDeleteCount(); } @@ -100,11 +96,7 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS String ident = ((SQLIdentifierExpr) x.getTableName()).getName(); setCurrentTable(x, ident); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementInsertCount(); Map aliasMap = getAliasMap(); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/clause/FlashbackQueryClause.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/clause/FlashbackQueryClause.java index 2a1200ee69..491a732ab5 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/clause/FlashbackQueryClause.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/clause/FlashbackQueryClause.java @@ -77,4 +77,27 @@ public abstract class FlashbackQueryClause extends OracleSQLObjectImpl { visitor.endVisit(this); } } + + public static class AsOfSnapshotClause extends FlashbackQueryClause { + + private static final long serialVersionUID = 1L; + + private SQLExpr expr; + + public SQLExpr getExpr() { + return expr; + } + + public void setExpr(SQLExpr expr) { + this.expr = expr; + } + + @Override + public void accept0(OracleASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, expr); + } + visitor.endVisit(this); + } + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleSizeExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleSizeExpr.java new file mode 100644 index 0000000000..b5b5692cc9 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleSizeExpr.java @@ -0,0 +1,51 @@ +package com.alibaba.druid.sql.dialect.oracle.ast.expr; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; + +public class OracleSizeExpr extends OracleSQLObjectImpl implements OracleExpr { + + private static final long serialVersionUID = 1L; + + private SQLExpr value; + private Unit unit; + + public OracleSizeExpr(){ + + } + + public OracleSizeExpr(SQLExpr value, Unit unit){ + super(); + this.value = value; + this.unit = unit; + } + + @Override + public void accept0(OracleASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, value); + } + visitor.endVisit(this); + } + + public SQLExpr getValue() { + return value; + } + + public void setValue(SQLExpr value) { + this.value = value; + } + + public Unit getUnit() { + return unit; + } + + public void setUnit(Unit unit) { + this.unit = unit; + } + + public static enum Unit { + K, M, G, T, P, E + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterIndexStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterIndexStatement.java index 55a3021b98..e86c5a0fc6 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterIndexStatement.java @@ -1,5 +1,6 @@ package com.alibaba.druid.sql.dialect.oracle.ast.stmt; +import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl; @@ -19,15 +20,26 @@ public class OracleAlterIndexStatement extends OracleStatementImpl { private Rebuild rebuild; + private SQLExpr parallel; + @Override public void accept0(OracleASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, name); acceptChild(visitor, rebuild); + acceptChild(visitor, parallel); } visitor.endVisit(this); } + public SQLExpr getParallel() { + return parallel; + } + + public void setParallel(SQLExpr parallel) { + this.parallel = parallel; + } + public Boolean getMonitoringUsage() { return monitoringUsage; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterSynonymStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterSynonymStatement.java new file mode 100644 index 0000000000..ba2f016918 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterSynonymStatement.java @@ -0,0 +1,48 @@ +package com.alibaba.druid.sql.dialect.oracle.ast.stmt; + +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; + +public class OracleAlterSynonymStatement extends OracleStatementImpl { + + private static final long serialVersionUID = 1L; + + private SQLName name; + + private Boolean enable; + + private boolean compile; + + @Override + public void accept0(OracleASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + } + visitor.endVisit(this); + } + + public Boolean getEnable() { + return enable; + } + + public void setEnable(Boolean enable) { + this.enable = enable; + } + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + this.name = name; + } + + public boolean isCompile() { + return compile; + } + + public void setCompile(boolean compile) { + this.compile = compile; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableAddColumn.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableAddColumn.java index 4db1ab694c..6dce9bbbe3 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableAddColumn.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableAddColumn.java @@ -1,28 +1,31 @@ package com.alibaba.druid.sql.dialect.oracle.ast.stmt; +import java.util.ArrayList; +import java.util.List; + import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; public class OracleAlterTableAddColumn extends OracleAlterTableItem { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - private SQLColumnDefinition column; + private List columns = new ArrayList(); @Override public void accept0(OracleASTVisitor visitor) { if (visitor.visit(this)) { - acceptChild(visitor, column); + acceptChild(visitor, columns); } visitor.endVisit(this); } - public SQLColumnDefinition getColumn() { - return column; + public List getColumns() { + return columns; } - public void setColumn(SQLColumnDefinition column) { - this.column = column; + public void setColumns(List columns) { + this.columns = columns; } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableMoveTablespace.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableMoveTablespace.java new file mode 100644 index 0000000000..cb88604c53 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableMoveTablespace.java @@ -0,0 +1,28 @@ +package com.alibaba.druid.sql.dialect.oracle.ast.stmt; + +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; + +public class OracleAlterTableMoveTablespace extends OracleAlterTableItem { + + private static final long serialVersionUID = 1L; + + private SQLName name; + + @Override + public void accept0(OracleASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + } + visitor.endVisit(this); + } + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + this.name = name; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java index b5c5bc3ba7..fc121a21ae 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTableStatement.java @@ -8,9 +8,12 @@ import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; public class OracleAlterTableStatement extends OracleStatementImpl { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; private SQLName name; - private List items = new ArrayList(); + private List items = new ArrayList(); + + private boolean updateGlobalIndexes = false; + private boolean invalidateGlobalIndexes = false; @Override public void accept0(OracleASTVisitor visitor) { @@ -21,6 +24,22 @@ public class OracleAlterTableStatement extends OracleStatementImpl { visitor.endVisit(this); } + public boolean isUpdateGlobalIndexes() { + return updateGlobalIndexes; + } + + public void setUpdateGlobalIndexes(boolean updateGlobalIndexes) { + this.updateGlobalIndexes = updateGlobalIndexes; + } + + public boolean isInvalidateGlobalIndexes() { + return invalidateGlobalIndexes; + } + + public void setInvalidateGlobalIndexes(boolean invalidateGlobalIndexes) { + this.invalidateGlobalIndexes = invalidateGlobalIndexes; + } + public SQLName getName() { return name; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTablespaceAddDataFile.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTablespaceAddDataFile.java new file mode 100644 index 0000000000..3d116cbf6e --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTablespaceAddDataFile.java @@ -0,0 +1,31 @@ +package com.alibaba.druid.sql.dialect.oracle.ast.stmt; + +import java.util.ArrayList; +import java.util.List; + +import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; + +public class OracleAlterTablespaceAddDataFile extends OracleSQLObjectImpl implements OracleAlterTablespaceItem { + + private static final long serialVersionUID = 1L; + + private List files = new ArrayList(); + + @Override + public void accept0(OracleASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, files); + } + visitor.endVisit(this); + } + + public List getFiles() { + return files; + } + + public void setFiles(List files) { + this.files = files; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTablespaceItem.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTablespaceItem.java new file mode 100644 index 0000000000..fc87073035 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTablespaceItem.java @@ -0,0 +1,8 @@ +package com.alibaba.druid.sql.dialect.oracle.ast.stmt; + +import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObject; + + +public interface OracleAlterTablespaceItem extends OracleSQLObject { + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTablespaceStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTablespaceStatement.java new file mode 100644 index 0000000000..1ce1e9fcd2 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTablespaceStatement.java @@ -0,0 +1,38 @@ +package com.alibaba.druid.sql.dialect.oracle.ast.stmt; + +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; + +public class OracleAlterTablespaceStatement extends OracleStatementImpl { + + private static final long serialVersionUID = 1L; + + private SQLName name; + private OracleAlterTablespaceItem item; + + @Override + public void accept0(OracleASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + acceptChild(visitor, item); + } + visitor.endVisit(this); + } + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + this.name = name; + } + + public OracleAlterTablespaceItem getItem() { + return item; + } + + public void setItem(OracleAlterTablespaceItem item) { + this.item = item; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTriggerStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTriggerStatement.java new file mode 100644 index 0000000000..ca52fdd51b --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterTriggerStatement.java @@ -0,0 +1,48 @@ +package com.alibaba.druid.sql.dialect.oracle.ast.stmt; + +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; + +public class OracleAlterTriggerStatement extends OracleStatementImpl { + + private static final long serialVersionUID = 1L; + + private SQLName name; + + private Boolean enable; + + private boolean compile; + + @Override + public void accept0(OracleASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + } + visitor.endVisit(this); + } + + public boolean isCompile() { + return compile; + } + + public void setCompile(boolean compile) { + this.compile = compile; + } + + public Boolean getEnable() { + return enable; + } + + public void setEnable(Boolean enable) { + this.enable = enable; + } + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + this.name = name; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterViewStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterViewStatement.java new file mode 100644 index 0000000000..f7348bce11 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleAlterViewStatement.java @@ -0,0 +1,48 @@ +package com.alibaba.druid.sql.dialect.oracle.ast.stmt; + +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; + +public class OracleAlterViewStatement extends OracleStatementImpl { + + private static final long serialVersionUID = 1L; + + private SQLName name; + + private Boolean enable; + + private boolean compile; + + @Override + public void accept0(OracleASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + } + visitor.endVisit(this); + } + + public Boolean getEnable() { + return enable; + } + + public void setEnable(Boolean enable) { + this.enable = enable; + } + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + this.name = name; + } + + public boolean isCompile() { + return compile; + } + + public void setCompile(boolean compile) { + this.compile = compile; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateIndexStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateIndexStatement.java index 01f2f3208e..2bddbeb7a5 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateIndexStatement.java @@ -3,25 +3,48 @@ package com.alibaba.druid.sql.dialect.oracle.ast.stmt; import java.util.ArrayList; import java.util.List; +import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; public class OracleCreateIndexStatement extends OracleStatementImpl { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; private SQLName name; private SQLName table; - private List items = new ArrayList(); + private List items = new ArrayList(); private SQLName tablespace; private Type type; - private boolean online = false; + private boolean online = false; + + private boolean indexOnlyTopLevel = false; + + private boolean noParallel; + + private SQLExpr parallel; + + public SQLExpr getParallel() { + return parallel; + } + + public void setParallel(SQLExpr parallel) { + this.parallel = parallel; + } + + public boolean isNoParallel() { + return noParallel; + } + + public void setNoParallel(boolean noParallel) { + this.noParallel = noParallel; + } public Type getType() { return type; @@ -31,6 +54,14 @@ public class OracleCreateIndexStatement extends OracleStatementImpl { this.type = type; } + public boolean isIndexOnlyTopLevel() { + return indexOnlyTopLevel; + } + + public void setIndexOnlyTopLevel(boolean indexOnlyTopLevel) { + this.indexOnlyTopLevel = indexOnlyTopLevel; + } + @Override public void accept0(OracleASTVisitor visitor) { if (visitor.visit(this)) { @@ -38,6 +69,7 @@ public class OracleCreateIndexStatement extends OracleStatementImpl { acceptChild(visitor, table); acceptChild(visitor, items); acceptChild(visitor, tablespace); + acceptChild(visitor, parallel); } visitor.endVisit(this); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateTableStatement.java index 169d142ec7..05de306a5e 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleCreateTableStatement.java @@ -12,7 +12,7 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class OracleCreateTableStatement extends SQLCreateTableStatement implements OracleStatement { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; private SQLName tablespace; @@ -25,7 +25,17 @@ public class OracleCreateTableStatement extends SQLCreateTableStatement implemen // NOPARALLEL private Boolean parallel; - private List storage = new ArrayList(); + private List storage = new ArrayList(); + + private boolean organizationIndex = false; + + public boolean isOrganizationIndex() { + return organizationIndex; + } + + public void setOrganizationIndex(boolean organizationIndex) { + this.organizationIndex = organizationIndex; + } public Boolean getParallel() { return parallel; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleFileSpecification.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleFileSpecification.java new file mode 100644 index 0000000000..b9d94ca930 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleFileSpecification.java @@ -0,0 +1,64 @@ +package com.alibaba.druid.sql.dialect.oracle.ast.stmt; + +import java.util.ArrayList; +import java.util.List; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; + +public class OracleFileSpecification extends OracleSQLObjectImpl { + + private static final long serialVersionUID = 1L; + + private List fileNames = new ArrayList(); + + private SQLExpr size; + + private boolean autoExtendOff = false; + + private SQLExpr autoExtendOn; + + @Override + public void accept0(OracleASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, fileNames); + acceptChild(visitor, size); + acceptChild(visitor, autoExtendOn); + } + visitor.endVisit(this); + } + + public SQLExpr getAutoExtendOn() { + return autoExtendOn; + } + + public void setAutoExtendOn(SQLExpr autoExtendOn) { + this.autoExtendOn = autoExtendOn; + } + + public SQLExpr getSize() { + return size; + } + + public void setSize(SQLExpr size) { + this.size = size; + } + + public boolean isAutoExtendOff() { + return autoExtendOff; + } + + public void setAutoExtendOff(boolean autoExtendOff) { + this.autoExtendOff = autoExtendOff; + } + + public List getFileNames() { + return fileNames; + } + + public void setFileNames(List fileNames) { + this.fileNames = fileNames; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OraclePrimaryKey.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OraclePrimaryKey.java index fe1dd1ec10..028eff1b52 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OraclePrimaryKey.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OraclePrimaryKey.java @@ -6,10 +6,11 @@ import java.util.List; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey; +import com.alibaba.druid.sql.ast.statement.SQLTableElement; import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; -public class OraclePrimaryKey extends OracleSQLObjectImpl implements SQLPrimaryKey { +public class OraclePrimaryKey extends OracleSQLObjectImpl implements SQLPrimaryKey, SQLTableElement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleSelectSubqueryTableSource.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleSelectSubqueryTableSource.java index 4c8f73a6f4..52c6dd519d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleSelectSubqueryTableSource.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleSelectSubqueryTableSource.java @@ -82,7 +82,9 @@ public class OracleSelectSubqueryTableSource extends SQLSubqueryTableSource impl protected void accept0(OracleASTVisitor visitor) { if (visitor.visit(this)) { + acceptChild(visitor, this.hints); acceptChild(visitor, this.select); + acceptChild(visitor, this.pivot); acceptChild(visitor, this.flashback); } visitor.endVisit(this); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java index d4ca2c05c3..80dbf0702b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java @@ -31,7 +31,6 @@ public class OracleUpdateStatement extends SQLUpdateStatement implements OracleS private final List hints = new ArrayList(1); private boolean only = false; private String alias; - private OracleUpdateSetClause setClause; private SQLExpr where; public OracleUpdateStatement(){ @@ -75,14 +74,6 @@ public class OracleUpdateStatement extends SQLUpdateStatement implements OracleS this.where = where; } - public OracleUpdateSetClause getSetClause() { - return this.setClause; - } - - public void setSetClause(OracleUpdateSetClause setClause) { - this.setClause = setClause; - } - public boolean isOnly() { return this.only; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleCreateTableParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleCreateTableParser.java index dee5e835c9..e9a3bd9085 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleCreateTableParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleCreateTableParser.java @@ -59,6 +59,11 @@ public class OracleCreateTableParser extends SQLCreateTableParser { } accept(Token.RPAREN); continue; + } else if (identifierEquals("organization")) { + lexer.nextToken(); + accept(Token.INDEX); + stmt.setOrganizationIndex(true); + continue; } break; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java index caed646357..1b1053c5db 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java @@ -51,9 +51,11 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIntervalType; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIsSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr; +import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSysdateExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleOrderByItem; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect; import com.alibaba.druid.sql.parser.Lexer; import com.alibaba.druid.sql.parser.ParserException; @@ -65,6 +67,11 @@ public class OracleExprParser extends SQLExprParser { + + + + + public boolean allowStringAdditive = false; /** @@ -266,6 +273,32 @@ public class OracleExprParser extends SQLExprParser { } public SQLExpr primaryRest(SQLExpr expr) throws ParserException { + if (lexer.token() == Token.IDENTIFIER) { + String ident = lexer.stringVal(); + if (ident.length() == 1) { + char unit = ident.charAt(0); + switch (unit) { + case 'K': + case 'M': + case 'G': + case 'T': + case 'P': + case 'E': + case 'k': + case 'm': + case 'g': + case 't': + case 'p': + case 'e': + expr = new OracleSizeExpr(expr, OracleSizeExpr.Unit.valueOf(ident.toUpperCase())); + lexer.nextToken(); + break; + default: + break; + } + } + } + if (lexer.token() == Token.DOTDOT) { lexer.nextToken(); SQLExpr upBound = expr(); @@ -407,7 +440,7 @@ public class OracleExprParser extends SQLExprParser { public SQLExpr parseTimestamp() { accept(Token.TIMESTAMP); - if (lexer.token() != Token.LITERAL_ALIAS) { + if (lexer.token() != Token.LITERAL_ALIAS && lexer.token() != Token.LITERAL_CHARS) { return new SQLIdentifierExpr("TIMESTAMP"); } @@ -731,4 +764,22 @@ public class OracleExprParser extends SQLExprParser { return expr; } + + public OraclePrimaryKey parsePrimaryKey() { + lexer.nextToken(); + accept(Token.KEY); + + OraclePrimaryKey primaryKey = new OraclePrimaryKey(); + accept(Token.LPAREN); + exprList(primaryKey.getColumns()); + accept(Token.RPAREN); + + + if (lexer.token() == Token.USING) { + lexer.nextToken(); + accept(Token.INDEX); + primaryKey.setUsingIndex(expr()); + } + return primaryKey; + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleSelectParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleSelectParser.java index f11aff84ae..d77fb75b71 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleSelectParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleSelectParser.java @@ -31,6 +31,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause; +import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfSnapshotClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.VersionsFlashbackQueryClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.GroupingSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause; @@ -824,17 +825,31 @@ public class OracleSelectParser extends SQLSelectParser { if (lexer.token() == Token.OF) { lexer.nextToken(); - AsOfFlashbackQueryClause clause = new AsOfFlashbackQueryClause(); + if (identifierEquals("SCN")) { + AsOfFlashbackQueryClause clause = new AsOfFlashbackQueryClause(); clause.setType(AsOfFlashbackQueryClause.Type.SCN); lexer.nextToken(); + clause.setExpr(createExprParser().expr()); + + return clause; + } else if (identifierEquals("SNAPSHOT")) { + lexer.nextToken(); + accept(Token.LPAREN); + AsOfSnapshotClause clause = new AsOfSnapshotClause(); + clause.setExpr(this.expr()); + accept(Token.RPAREN); + + return clause; } else { + AsOfFlashbackQueryClause clause = new AsOfFlashbackQueryClause(); accept(Token.TIMESTAMP); clause.setType(AsOfFlashbackQueryClause.Type.TIMESTAMP); + clause.setExpr(createExprParser().expr()); + + return clause; } - clause.setExpr(createExprParser().expr()); - return clause; } return null; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java index b82537342e..3152dfdaf2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java @@ -25,6 +25,7 @@ import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; import com.alibaba.druid.sql.ast.expr.SQLCharExpr; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; +import com.alibaba.druid.sql.ast.statement.SQLConstaint; import com.alibaba.druid.sql.ast.statement.SQLInsertInto; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem; @@ -39,11 +40,13 @@ import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleReturningClause; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSynonymStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddColumn; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddConstaint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableDropPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableItem; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableModify; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableMoveTablespace; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableRenameTo; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition.NestedTablePartitionSpec; @@ -51,6 +54,10 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartit import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition.UpdateIndexesClause; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableTruncatePartition; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDataFile; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTriggerStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement; @@ -58,6 +65,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGrantStatement; @@ -69,7 +77,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLockTableStatement.Lo import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSetTransactionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleStatement; import com.alibaba.druid.sql.parser.Lexer; @@ -277,7 +284,7 @@ public class OracleStatementParser extends SQLStatementParser { statementList.add(this.parseIf()); continue; } - + if (lexer.token() == Token.GOTO) { lexer.nextToken(); SQLName label = this.exprParser.name(); @@ -285,10 +292,10 @@ public class OracleStatementParser extends SQLStatementParser { statementList.add(stmt); continue; } - + if (lexer.token() == Token.COMMIT) { lexer.nextToken(); - + if (identifierEquals("WORK")) { lexer.nextToken(); } @@ -296,7 +303,7 @@ public class OracleStatementParser extends SQLStatementParser { statementList.add(stmt); continue; } - + if (lexer.token() == Token.LTLT) { lexer.nextToken(); SQLName label = this.exprParser.name(); @@ -305,8 +312,6 @@ public class OracleStatementParser extends SQLStatementParser { statementList.add(stmt); continue; } - - throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); } @@ -468,17 +473,160 @@ public class OracleStatementParser extends SQLStatementParser { OracleAlterIndexStatement stmt = new OracleAlterIndexStatement(); stmt.setName(this.exprParser.name()); - if (identifierEquals("rebuild")) { - lexer.nextToken(); + for (;;) { + if (identifierEquals("rebuild")) { + lexer.nextToken(); - OracleAlterIndexStatement.Rebuild rebuild = new OracleAlterIndexStatement.Rebuild(); - stmt.setRebuild(rebuild); - } else if (identifierEquals("MONITORING")) { - lexer.nextToken(); - acceptIdentifier("USAGE"); - stmt.setMonitoringUsage(Boolean.TRUE); + OracleAlterIndexStatement.Rebuild rebuild = new OracleAlterIndexStatement.Rebuild(); + stmt.setRebuild(rebuild); + continue; + } else if (identifierEquals("MONITORING")) { + lexer.nextToken(); + acceptIdentifier("USAGE"); + stmt.setMonitoringUsage(Boolean.TRUE); + continue; + } else if (identifierEquals("PARALLEL")) { + lexer.nextToken(); + stmt.setParallel(this.exprParser.expr()); + } + break; } + return stmt; + } else if (identifierEquals("TRIGGER")) { + lexer.nextToken(); + OracleAlterTriggerStatement stmt = new OracleAlterTriggerStatement(); + stmt.setName(this.exprParser.name()); + + for (;;) { + if (identifierEquals("ENABLE")) { + lexer.nextToken(); + stmt.setEnable(Boolean.TRUE); + continue; + } else if (identifierEquals("DISABLE")) { + lexer.nextToken(); + stmt.setEnable(Boolean.FALSE); + continue; + } else if (identifierEquals("COMPILE")) { + lexer.nextToken(); + stmt.setCompile(true); + continue; + } + break; + } + + return stmt; + } else if (identifierEquals("SYNONYM")) { + lexer.nextToken(); + OracleAlterSynonymStatement stmt = new OracleAlterSynonymStatement(); + stmt.setName(this.exprParser.name()); + + for (;;) { + if (identifierEquals("ENABLE")) { + lexer.nextToken(); + stmt.setEnable(Boolean.TRUE); + continue; + } else if (identifierEquals("DISABLE")) { + lexer.nextToken(); + stmt.setEnable(Boolean.FALSE); + continue; + } else if (identifierEquals("COMPILE")) { + lexer.nextToken(); + stmt.setCompile(true); + continue; + } + break; + } + + return stmt; + } else if (lexer.token() == Token.VIEW) { + lexer.nextToken(); + OracleAlterViewStatement stmt = new OracleAlterViewStatement(); + stmt.setName(this.exprParser.name()); + + for (;;) { + if (identifierEquals("ENABLE")) { + lexer.nextToken(); + stmt.setEnable(Boolean.TRUE); + continue; + } else if (identifierEquals("DISABLE")) { + lexer.nextToken(); + stmt.setEnable(Boolean.FALSE); + continue; + } else if (identifierEquals("COMPILE")) { + lexer.nextToken(); + stmt.setCompile(true); + continue; + } + break; + } + + return stmt; + } else if (identifierEquals("TABLESPACE")) { + lexer.nextToken(); + + OracleAlterTablespaceStatement stmt = new OracleAlterTablespaceStatement(); + stmt.setName(this.exprParser.name()); + + if (identifierEquals("ADD")) { + lexer.nextToken(); + + if (identifierEquals("DATAFILE")) { + lexer.nextToken(); + + OracleAlterTablespaceAddDataFile item = new OracleAlterTablespaceAddDataFile(); + + for (;;) { + OracleFileSpecification file = new OracleFileSpecification(); + + for (;;) { + SQLExpr fileName = this.exprParser.expr(); + file.getFileNames().add(fileName); + + if (lexer.token() == Token.COMMA) { + lexer.nextToken(); + continue; + } + + break; + } + + if (identifierEquals("SIZE")) { + lexer.nextToken(); + file.setSize(this.exprParser.expr()); + } + + if (identifierEquals("AUTOEXTEND")) { + lexer.nextToken(); + if (identifierEquals("OFF")) { + lexer.nextToken(); + file.setAutoExtendOff(true); + } else if (identifierEquals("ON")) { + lexer.nextToken(); + file.setAutoExtendOn(this.exprParser.expr()); + } else { + throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); + } + } + + item.getFiles().add(file); + + if (lexer.token() == Token.COMMA) { + lexer.nextToken(); + continue; + } + + break; + } + + stmt.setItem(item); + } else { + throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); + } + } else { + throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); + } + return stmt; } @@ -496,11 +644,19 @@ public class OracleStatementParser extends SQLStatementParser { if (lexer.token() == Token.LPAREN) { lexer.nextToken(); - SQLColumnDefinition columnDef = this.exprParser.parseColumn(); - accept(Token.RPAREN); OracleAlterTableAddColumn item = new OracleAlterTableAddColumn(); - item.setColumn(columnDef); + + for (;;) { + SQLColumnDefinition columnDef = this.exprParser.parseColumn(); + item.getColumns().add(columnDef); + if (lexer.token() == Token.COMMA) { + lexer.nextToken(); + continue; + } + break; + } + accept(Token.RPAREN); stmt.getItems().add(item); } else if (lexer.token() == Token.CONSTRAINT) { @@ -511,7 +667,18 @@ public class OracleStatementParser extends SQLStatementParser { continue; } else if (identifierEquals("MOVE")) { - throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); + lexer.nextToken(); + + if (identifierEquals("TABLESPACE")) { + lexer.nextToken(); + + OracleAlterTableMoveTablespace item = new OracleAlterTableMoveTablespace(); + item.setName(this.exprParser.name()); + + stmt.getItems().add(item); + } else { + throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); + } } else if (identifierEquals("RENAME")) { stmt.getItems().add(parseAlterTableRename()); } else if (identifierEquals("MODIFY")) { @@ -559,12 +726,24 @@ public class OracleStatementParser extends SQLStatementParser { break; } + if (lexer.token() == Token.UPDATE) { + lexer.nextToken(); + + if (identifierEquals("GLOBAL")) { + lexer.nextToken(); + acceptIdentifier("INDEXES"); + stmt.setUpdateGlobalIndexes(true); + } else { + throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); + } + } + return stmt; } private OracleAlterTableItem parseAlterTableRename() { acceptIdentifier("RENAME"); - + if (lexer.token() == Token.TO) { lexer.nextToken(); OracleAlterTableRenameTo item = new OracleAlterTableRenameTo(); @@ -581,30 +760,18 @@ public class OracleStatementParser extends SQLStatementParser { SQLName name = this.exprParser.name(); + SQLConstaint constraint; if (lexer.token() == Token.PRIMARY) { - lexer.nextToken(); - accept(Token.KEY); - - OraclePrimaryKey primaryKey = new OraclePrimaryKey(); - accept(Token.LPAREN); - this.exprParser.exprList(primaryKey.getColumns()); - accept(Token.RPAREN); - - item.setConstraint(primaryKey); - if (lexer.token() == Token.USING) { - lexer.nextToken(); - accept(Token.INDEX); - primaryKey.setUsingIndex(this.exprParser.expr()); - } - - primaryKey.setName(name); - - item.setConstraint(primaryKey); - - return item; + constraint = exprParser.parsePrimaryKey(); + } else { + throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); } - throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); + constraint.setName(name); + + item.setConstraint(constraint); + + return item; } private void parseAlterTableDrop(OracleAlterTableStatement stmt) { @@ -731,7 +898,7 @@ public class OracleStatementParser extends SQLStatementParser { OracleParameter parameter = new OracleParameter(); parameter.setName(this.exprParser.name()); parameter.setDataType(this.exprParser.parseDataType()); - + block.getParameters().add(parameter); if (lexer.token() == Token.COLONEQ) { @@ -757,6 +924,10 @@ public class OracleStatementParser extends SQLStatementParser { return block; } + public OracleSelectParser createSQLSelectParser() { + return new OracleSelectParser(this.lexer); + } + public OracleMergeStatement parseMerge() throws ParserException { accept(Token.MERGE); @@ -1106,7 +1277,7 @@ public class OracleStatementParser extends SQLStatementParser { } OracleCreateIndexStatement stmt = new OracleCreateIndexStatement(); - if (lexer.token() == Token.UNION) { + if (lexer.token() == Token.UNIQUE) { stmt.setType(OracleCreateIndexStatement.Type.UNIQUE); lexer.nextToken(); } else if (identifierEquals("BITMAP")) { @@ -1144,6 +1315,20 @@ public class OracleStatementParser extends SQLStatementParser { lexer.nextToken(); stmt.setOnline(true); continue; + } else if (identifierEquals("NOPARALLEL")) { + lexer.nextToken(); + stmt.setNoParallel(true); + continue; + } else if (identifierEquals("PARALLEL")) { + lexer.nextToken(); + stmt.setParallel(this.exprParser.expr()); + continue; + } else if (lexer.token() == Token.INDEX) { + lexer.nextToken(); + acceptIdentifier("ONLY"); + acceptIdentifier("TOPLEVEL"); + stmt.setIndexOnlyTopLevel(true); + continue; } else { break; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVIsitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVIsitorAdapter.java index 4dc4ed88cb..2294aee05a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVIsitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVIsitorAdapter.java @@ -5,6 +5,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint; import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause; +import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfSnapshotClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.VersionsFlashbackQueryClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.GroupingSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause; @@ -40,19 +41,26 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIntervalExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIsSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr; +import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSysdateExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSynonymStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddColumn; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddConstaint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableDropPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableModify; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableMoveTablespace; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableRenameTo; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableTruncatePartition; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDataFile; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTriggerStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraintState; @@ -62,6 +70,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGrantStatement; @@ -942,15 +951,15 @@ public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements Ora public void endVisit(OracleAlterTableDropPartition x) { } - + @Override public boolean visit(OracleAlterTableTruncatePartition x) { return true; } - + @Override public void endVisit(OracleAlterTableTruncatePartition x) { - + } @Override @@ -962,35 +971,35 @@ public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements Ora public void endVisit(OracleAlterTableStatement x) { } - + @Override public boolean visit(OracleAlterTableSplitPartition.TableSpaceItem x) { return true; } - + @Override public void endVisit(OracleAlterTableSplitPartition.TableSpaceItem x) { - + } - + @Override public boolean visit(OracleAlterTableSplitPartition.UpdateIndexesClause x) { return true; } - + @Override public void endVisit(OracleAlterTableSplitPartition.UpdateIndexesClause x) { - + } - + @Override public boolean visit(OracleAlterTableSplitPartition.NestedTablePartitionSpec x) { return true; } - + @Override public void endVisit(OracleAlterTableSplitPartition.NestedTablePartitionSpec x) { - + } @Override @@ -1000,67 +1009,67 @@ public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements Ora @Override public void endVisit(OracleAlterTableSplitPartition x) { - + } - + @Override public boolean visit(OracleAlterTableModify x) { return true; } - + @Override public void endVisit(OracleAlterTableModify x) { - + } - + @Override public boolean visit(OracleAlterTableAddColumn x) { return true; } - + @Override public void endVisit(OracleAlterTableAddColumn x) { - + } - + @Override public boolean visit(OracleCreateIndexStatement x) { return true; } - + @Override public void endVisit(OracleCreateIndexStatement x) { - + } - + @Override public boolean visit(OracleAlterIndexStatement x) { return true; } - + @Override public void endVisit(OracleAlterIndexStatement x) { - + } - + @Override public boolean visit(OracleForStatement x) { return true; } - + @Override public void endVisit(OracleForStatement x) { - + } - + @Override public boolean visit(OracleAlterIndexStatement.Rebuild x) { return true; } - + @Override public void endVisit(OracleAlterIndexStatement.Rebuild x) { - + } @Override @@ -1070,77 +1079,77 @@ public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements Ora @Override public void endVisit(Else x) { - + } - + @Override public boolean visit(ElseIf x) { return true; } - + @Override public void endVisit(ElseIf x) { - + } - + @Override public boolean visit(OracleIfStatement x) { return true; } - + @Override public void endVisit(OracleIfStatement x) { - + } - + @Override public boolean visit(OracleRangeExpr x) { return true; } - + @Override public void endVisit(OracleRangeExpr x) { - + } - + @Override public boolean visit(OracleAlterTableAddConstaint x) { return true; } - + @Override public void endVisit(OracleAlterTableAddConstaint x) { - + } - + @Override public boolean visit(OraclePrimaryKey x) { return true; } - + @Override public void endVisit(OraclePrimaryKey x) { - + } - + @Override public boolean visit(OracleCreateTableStatement x) { return true; } - + @Override public void endVisit(OracleCreateTableStatement x) { - + } - + @Override public boolean visit(OracleAlterTableRenameTo x) { return true; } - + @Override public void endVisit(OracleAlterTableRenameTo x) { - + } @Override @@ -1150,7 +1159,7 @@ public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements Ora @Override public void endVisit(StorageItem x) { - + } @Override @@ -1160,17 +1169,17 @@ public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements Ora @Override public void endVisit(OracleGotoStatement x) { - + } - + @Override public boolean visit(OracleLabelStatement x) { return true; } - + @Override public void endVisit(OracleLabelStatement x) { - + } @Override @@ -1180,16 +1189,106 @@ public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements Ora @Override public void endVisit(OracleParameter x) { - + } - + @Override public boolean visit(OracleCommitStatement x) { return true; } - + @Override public void endVisit(OracleCommitStatement x) { + + } + + @Override + public boolean visit(OracleAlterTriggerStatement x) { + return true; + } + + @Override + public void endVisit(OracleAlterTriggerStatement x) { + + } + + @Override + public boolean visit(OracleAlterSynonymStatement x) { + return true; + } + + @Override + public void endVisit(OracleAlterSynonymStatement x) { + + } + + @Override + public boolean visit(AsOfSnapshotClause x) { + return true; + } + + @Override + public void endVisit(AsOfSnapshotClause x) { + + } + + @Override + public boolean visit(OracleAlterViewStatement x) { + return true; + } + + @Override + public void endVisit(OracleAlterViewStatement x) { + + } + + @Override + public boolean visit(OracleAlterTableMoveTablespace x) { + return true; + } + + @Override + public void endVisit(OracleAlterTableMoveTablespace x) { + + } + + @Override + public boolean visit(OracleSizeExpr x) { + return true; + } + + @Override + public void endVisit(OracleSizeExpr x) { + + } + + @Override + public boolean visit(OracleFileSpecification x) { + return true; + } + + @Override + public void endVisit(OracleFileSpecification x) { + + } + + @Override + public boolean visit(OracleAlterTablespaceAddDataFile x) { + return true; + } + + @Override + public void endVisit(OracleAlterTablespaceAddDataFile x) { + + } + + @Override + public boolean visit(OracleAlterTablespaceStatement x) { + return true; + } + + @Override + public void endVisit(OracleAlterTablespaceStatement x) { } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java index ea52d767c5..67889e83fe 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java @@ -20,6 +20,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint; import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause; +import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfSnapshotClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.VersionsFlashbackQueryClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.GroupingSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause; @@ -46,19 +47,26 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIntervalExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIsSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr; +import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSysdateExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSynonymStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddColumn; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddConstaint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableDropPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableModify; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableMoveTablespace; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableRenameTo; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableTruncatePartition; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDataFile; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTriggerStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraintState; @@ -68,6 +76,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGrantStatement; @@ -525,4 +534,40 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(OracleCommitStatement x); void endVisit(OracleCommitStatement x); + + boolean visit(OracleAlterTriggerStatement x); + + void endVisit(OracleAlterTriggerStatement x); + + boolean visit(OracleAlterSynonymStatement x); + + void endVisit(OracleAlterSynonymStatement x); + + boolean visit(OracleAlterViewStatement x); + + void endVisit(OracleAlterViewStatement x); + + boolean visit(AsOfSnapshotClause x); + + void endVisit(AsOfSnapshotClause x); + + boolean visit(OracleAlterTableMoveTablespace x); + + void endVisit(OracleAlterTableMoveTablespace x); + + boolean visit(OracleSizeExpr x); + + void endVisit(OracleSizeExpr x); + + boolean visit(OracleFileSpecification x); + + void endVisit(OracleFileSpecification x); + + boolean visit(OracleAlterTablespaceAddDataFile x); + + void endVisit(OracleAlterTablespaceAddDataFile x); + + boolean visit(OracleAlterTablespaceStatement x); + + void endVisit(OracleAlterTablespaceStatement x); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index f4f948d39e..38d8c0d8dd 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -38,6 +38,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint; import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause; +import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfSnapshotClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.VersionsFlashbackQueryClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.GroupingSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause; @@ -75,17 +76,20 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIntervalExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIsSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr; +import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSysdateExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement.Rebuild; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSynonymStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddColumn; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddConstaint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableDropPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableItem; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableModify; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableMoveTablespace; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableRenameTo; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition.NestedTablePartitionSpec; @@ -93,6 +97,10 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartit import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition.UpdateIndexesClause; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableTruncatePartition; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDataFile; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTriggerStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraintState; @@ -102,6 +110,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGrantStatement; @@ -1976,6 +1985,10 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS println(); item.accept(this); } + if (x.isUpdateGlobalIndexes()) { + println(); + print("UPDATE GLOABL INDEXES"); + } decrementIndent(); return false; } @@ -2105,7 +2118,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS @Override public boolean visit(OracleAlterTableAddColumn x) { print("ADD ("); - x.getColumn().accept(this); + printAndAccept(x.getColumns(), ", "); print(")"); return false; } @@ -2129,6 +2142,11 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS print("("); printAndAccept(x.getItems(), ", "); print(")"); + + if (x.isIndexOnlyTopLevel()) { + print(" INDEX ONLY TOPLEVEL"); + } + if (x.getTablespace() != null) { print(" TABLESPACE "); x.getTablespace().accept(this); @@ -2137,6 +2155,13 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS if (x.isOnline()) { print(" ONLINE"); } + + if (x.isNoParallel()) { + print(" NOPARALLEL"); + } else if (x.getParallel() != null){ + print(" PARALLEL "); + x.getParallel().accept(this); + } return false; } @@ -2158,6 +2183,11 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS print(" "); x.getRebuild().accept(this); } + + if (x.getParallel() != null) { + print(" PARALLEL"); + x.getParallel().accept(this); + } return false; } @@ -2361,6 +2391,11 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS this.visit((SQLCreateTableStatement) x); incrementIndent(); + + if (x.isOrganizationIndex()) { + print(" ORGANIZATION INDEX"); + } + if (x.getTablespace() != null) { print(" TABLESPACE "); x.getTablespace().accept(this); @@ -2480,4 +2515,167 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS public void endVisit(OracleCommitStatement x) { } + + @Override + public boolean visit(OracleAlterTriggerStatement x) { + print("ALTER TRIGGER "); + x.getName().accept(this); + + if (x.isCompile()) { + print(" COMPILE"); + } + + if (x.getEnable() != null) { + if (x.getEnable().booleanValue()) { + print("ENABLE"); + } else { + print("DISABLE"); + } + } + return false; + } + + @Override + public void endVisit(OracleAlterTriggerStatement x) { + + } + + @Override + public boolean visit(OracleAlterSynonymStatement x) { + print("ALTER SYNONYM "); + x.getName().accept(this); + + if (x.isCompile()) { + print(" COMPILE"); + } + + if (x.getEnable() != null) { + if (x.getEnable().booleanValue()) { + print("ENABLE"); + } else { + print("DISABLE"); + } + } + return false; + } + + @Override + public void endVisit(OracleAlterSynonymStatement x) { + + } + + @Override + public boolean visit(AsOfSnapshotClause x) { + print("AS OF SNAPSHOT("); + x.getExpr().accept(this); + print(")"); + return false; + } + + @Override + public void endVisit(AsOfSnapshotClause x) { + + } + + @Override + public boolean visit(OracleAlterViewStatement x) { + print("ALTER VIEW "); + x.getName().accept(this); + + if (x.isCompile()) { + print(" COMPILE"); + } + + if (x.getEnable() != null) { + if (x.getEnable().booleanValue()) { + print("ENABLE"); + } else { + print("DISABLE"); + } + } + return false; + } + + @Override + public void endVisit(OracleAlterViewStatement x) { + + } + + @Override + public boolean visit(OracleAlterTableMoveTablespace x) { + print(" MOVE TABLESPACE "); + x.getName().accept(this); + return false; + } + + @Override + public void endVisit(OracleAlterTableMoveTablespace x) { + + } + + @Override + public boolean visit(OracleSizeExpr x) { + x.getValue().accept(this); + print(x.getUnit().name()); + return false; + } + + @Override + public void endVisit(OracleSizeExpr x) { + + } + + @Override + public boolean visit(OracleFileSpecification x) { + printAndAccept(x.getFileNames(), ", "); + + if (x.getSize() != null) { + print(" SIZE "); + x.getSize().accept(this); + } + + if (x.isAutoExtendOff()) { + print(" AUTOEXTEND OFF"); + } else if (x.getAutoExtendOn() != null) { + print(" AUTOEXTEND ON "); + x.getAutoExtendOn().accept(this); + } + return false; + } + + @Override + public void endVisit(OracleFileSpecification x) { + + } + + @Override + public boolean visit(OracleAlterTablespaceAddDataFile x) { + print("ADD DATAFILE"); + incrementIndent(); + for (OracleFileSpecification file : x.getFiles()) { + println(); + file.accept(this); + } + decrementIndent(); + return false; + } + + @Override + public void endVisit(OracleAlterTablespaceAddDataFile x) { + + } + + @Override + public boolean visit(OracleAlterTablespaceStatement x) { + print("ALTER TABLESPACE "); + x.getName().accept(this); + println(); + x.getItem().accept(this); + return false; + } + + @Override + public void endVisit(OracleAlterTablespaceStatement x) { + + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java index d348bd3e3b..56915eaccd 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java @@ -11,6 +11,7 @@ import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLObjectCreateExpr; import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; +import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; @@ -22,6 +23,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint; import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause; +import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfSnapshotClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.VersionsFlashbackQueryClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.GroupingSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause; @@ -57,19 +59,26 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIntervalExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIsSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr; +import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSysdateExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSynonymStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddColumn; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddConstaint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableDropPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableModify; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableMoveTablespace; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableRenameTo; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableTruncatePartition; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDataFile; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTriggerStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraintState; @@ -79,6 +88,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGrantStatement; @@ -125,6 +135,10 @@ import com.alibaba.druid.stat.TableStat.Relationship; public class OracleSchemaStatVisitor extends SchemaStatVisitor implements OracleASTVisitor { + public OracleSchemaStatVisitor(){ + this.aliasMap.put("DUAL", null); + } + protected Column getColumn(SQLExpr expr) { if (expr instanceof OracleOuterExpr) { expr = ((OracleOuterExpr) expr).getExpr(); @@ -167,12 +181,9 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle return false; } - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - x.putAttribute(ATTR_TABLE, ident); - } + x.putAttribute(ATTR_TABLE, ident); + + TableStat stat = getTableStat(ident); Mode mode = getMode(); switch (mode) { @@ -221,9 +232,12 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } public void endVisit(OracleSelect x) { + endVisit((SQLSelect) x); } public boolean visit(OracleSelect x) { + setCurrentTable(x); + if (x.getOrderBy() != null) { x.getOrderBy().setParent(x); } @@ -239,6 +253,12 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } public void endVisit(SQLSelect x) { + if (x.getQuery() != null) { + String table = (String) x.getQuery().getAttribute(ATTR_TABLE); + if (table != null) { + x.putAttribute(ATTR_TABLE, table); + } + } restoreCurrentTable(x); } @@ -253,24 +273,21 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle tableExpr = ((SQLExprTableSource) tableSource).getExpr(); } - if (tableExpr instanceof SQLIdentifierExpr) { + if (tableExpr instanceof SQLName) { String ident = tableExpr.toString(); setCurrentTable(ident); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementUpdateCount(); Map aliasMap = getAliasMap(); aliasMap.put(ident, ident); + aliasMap.put(tableSource.getAlias(), ident); } else { tableSource.accept(this); } - accept(x.getSetClause()); + accept(x.getItems()); accept(x.getWhere()); return false; @@ -293,7 +310,16 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle x.getWhere().setParent(x); } - return visit((SQLSelectQueryBlock) x); + visit((SQLSelectQueryBlock) x); + + if (x.getInto() instanceof SQLName) { + TableStat stat = getTableStat(x.getInto().toString()); + if (stat != null) { + stat.incrementInsertCount(); + } + } + + return true; } public void endVisit(OracleSelectQueryBlock x) { @@ -565,6 +591,14 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle public boolean visit(OracleSelectJoin x) { x.getLeft().accept(this); x.getRight().accept(this); + + { + String leftTable = (String) x.getLeft().getAttribute(ATTR_TABLE); + String rightTable = (String) x.getRight().getAttribute(ATTR_TABLE); + if (leftTable != null && leftTable.equals(rightTable)) { + x.putAttribute(ATTR_TABLE, leftTable); + } + } if (x.getCondition() != null) { x.getCondition().accept(this); } @@ -583,11 +617,11 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } if (leftTable != null) { - columns.add(new Column(leftTable, columnName)); + addColumn(leftTable, columnName); } if (rightTable != null) { - columns.add(new Column(rightTable, columnName)); + addColumn(rightTable, columnName); } } } @@ -627,8 +661,23 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public boolean visit(OracleSelectSubqueryTableSource x) { + accept(x.getSelect()); + accept(x.getPivot()); + accept(x.getFlashback()); - return true; + String table = (String) x.getSelect().getAttribute(ATTR_TABLE); + if (x.getAlias() != null) { + if (table != null) { + this.aliasMap.put(x.getAlias(), table); + } + this.subQueryMap.put(x.getAlias(), x.getSelect()); + this.setCurrentTable(x.getAlias()); + } + + if (table != null) { + x.putAttribute(ATTR_TABLE, table); + } + return false; } @Override @@ -935,21 +984,18 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle public boolean visit(OracleMergeStatement x) { setAliasMap(); - setMode(x, Mode.Merge); - String originalTable = getCurrentTable(); + setMode(x.getUsing(), Mode.Select); x.getUsing().accept(this); + setMode(x, Mode.Merge); + String ident = x.getInto().toString(); setCurrentTable(x, ident); x.putAttribute("_old_local_", originalTable); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementMergeCount(); Map aliasMap = getAliasMap(); @@ -1035,11 +1081,7 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle String ident = ((SQLName) x.getTableName()).toString(); setCurrentTable(x, ident); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementInsertCount(); Map aliasMap = getAliasMap(); @@ -1131,7 +1173,7 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle public boolean visit(OracleBlockStatement x) { for (OracleParameter param : x.getParameters()) { param.setParent(x); - + SQLExpr name = param.getName(); this.variants.put(name.toString(), name); } @@ -1166,8 +1208,7 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public boolean visit(OracleLockTableStatement x) { String tableName = x.getTable().toString(); - TableStat stat = new TableStat(); - this.tableStats.put(new TableStat.Name(tableName), stat); + getTableStat(tableName); return false; } @@ -1289,18 +1330,22 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public boolean visit(OracleAlterTableStatement x) { String tableName = x.getName().toString(); - TableStat stat = new TableStat(); + TableStat stat = getTableStat(tableName); stat.incrementAlterCount(); - this.tableStats.put(new TableStat.Name(tableName), stat); - accept(x.getItems()); + setCurrentTable(x, tableName); + + for (SQLObject item : x.getItems()) { + item.setParent(x); + item.accept(this); + } return false; } @Override public void endVisit(OracleAlterTableStatement x) { - + restoreCurrentTable(x); } @Override @@ -1345,6 +1390,15 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public boolean visit(OracleAlterTableModify x) { + OracleAlterTableStatement stmt = (OracleAlterTableStatement) x.getParent(); + String table = stmt.getName().toString(); + + for (SQLColumnDefinition column : x.getColumns()) { + String columnName = column.getName().toString(); + addColumn(table, columnName); + + } + return false; } @@ -1355,6 +1409,13 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public boolean visit(OracleAlterTableAddColumn x) { + OracleAlterTableStatement stmt = (OracleAlterTableStatement) x.getParent(); + String table = stmt.getName().toString(); + + for (SQLColumnDefinition column : x.getColumns()) { + String columnName = column.getName().toString(); + addColumn(table, columnName); + } return false; } @@ -1365,12 +1426,22 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public boolean visit(OracleCreateIndexStatement x) { + this.setCurrentTable(x); + if (x.getTable() != null) { + String tableName = x.getTable().toString(); + + TableStat stat = this.getTableStat(tableName); + stat.incrementCreateIndexCount(); + this.setCurrentTable(tableName); + + accept(x.getItems()); + } return false; } @Override public void endVisit(OracleCreateIndexStatement x) { - + restoreCurrentTable(x); } @Override @@ -1382,23 +1453,23 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle public void endVisit(OracleAlterIndexStatement x) { } - + @Override public boolean visit(OracleForStatement x) { x.getRange().setParent(x); - + SQLName index = x.getIndex(); this.getVariants().put(index.toString(), x); - + x.getRange().accept(this); accept(x.getStatements()); - + return false; } - + @Override public void endVisit(OracleForStatement x) { - + } @Override @@ -1418,27 +1489,27 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public void endVisit(Else x) { - + } - + @Override public boolean visit(ElseIf x) { return true; } - + @Override public void endVisit(ElseIf x) { - + } - + @Override public boolean visit(OracleIfStatement x) { return true; } - + @Override public void endVisit(OracleIfStatement x) { - + } @Override @@ -1448,35 +1519,43 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public void endVisit(OracleRangeExpr x) { - + } - + @Override public boolean visit(OracleAlterTableAddConstaint x) { + x.getConstraint().accept(this); return false; } - + @Override public void endVisit(OracleAlterTableAddConstaint x) { - + } @Override public boolean visit(OraclePrimaryKey x) { + accept(x.getColumns()); + return false; } @Override public void endVisit(OraclePrimaryKey x) { - + } - + @Override public boolean visit(OracleCreateTableStatement x) { this.visit((SQLCreateTableStatement) x); + + if (x.getSelect() != null) { + x.getSelect().accept(this); + } + return false; } - + @Override public void endVisit(OracleCreateTableStatement x) { this.endVisit((SQLCreateTableStatement) x); @@ -1489,7 +1568,7 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public void endVisit(OracleAlterTableRenameTo x) { - + } @Override @@ -1499,7 +1578,7 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public void endVisit(StorageItem x) { - + } @Override @@ -1509,17 +1588,17 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public void endVisit(OracleGotoStatement x) { - + } - + @Override public boolean visit(OracleLabelStatement x) { return false; } - + @Override public void endVisit(OracleLabelStatement x) { - + } @Override @@ -1529,7 +1608,7 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public void endVisit(OracleParameter x) { - + } @Override @@ -1539,6 +1618,95 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle @Override public void endVisit(OracleCommitStatement x) { + + } + + @Override + public boolean visit(OracleAlterTriggerStatement x) { + return false; + } + + @Override + public void endVisit(OracleAlterTriggerStatement x) { + + } + + @Override + public boolean visit(OracleAlterSynonymStatement x) { + return false; + } + + @Override + public void endVisit(OracleAlterSynonymStatement x) { + + } + + @Override + public boolean visit(AsOfSnapshotClause x) { + return false; + } + + @Override + public void endVisit(AsOfSnapshotClause x) { + + } + + @Override + public boolean visit(OracleAlterViewStatement x) { + return false; + } + + @Override + public void endVisit(OracleAlterViewStatement x) { + + } + + @Override + public boolean visit(OracleAlterTableMoveTablespace x) { + return false; + } + + @Override + public void endVisit(OracleAlterTableMoveTablespace x) { + + } + + @Override + public boolean visit(OracleSizeExpr x) { + return false; + } + + @Override + public void endVisit(OracleSizeExpr x) { + + } + @Override + public boolean visit(OracleFileSpecification x) { + return false; + } + + @Override + public void endVisit(OracleFileSpecification x) { + + } + + @Override + public boolean visit(OracleAlterTablespaceAddDataFile x) { + return false; + } + + @Override + public void endVisit(OracleAlterTablespaceAddDataFile x) { + + } + + @Override + public boolean visit(OracleAlterTablespaceStatement x) { + return false; + } + + @Override + public void endVisit(OracleAlterTablespaceStatement x) { } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java index 5f112276e0..5bf9b5e853 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java @@ -97,11 +97,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit public boolean visit(IntoClause x) { String ident = x.getTable().toString(); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementInsertCount(); return false; } @@ -133,11 +129,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit for (SQLName name : x.getUsing()) { String ident = name.toString(); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementSelectCount(); Map aliasMap = getAliasMap(); @@ -152,14 +144,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit String ident = ((SQLIdentifierExpr) x.getTableName()).getName(); setCurrentTable(ident); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - if (x.getAlias() != null) { - tableStats.put(new TableStat.Name(x.getAlias()), stat); - } - } + TableStat stat = getTableStat(ident, x.getAlias()); stat.incrementDeleteCount(); accept(x.getWhere()); @@ -200,11 +185,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit setCurrentTable(ident); x.putAttribute("_old_local_", originalTable); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementInsertCount(); Map aliasMap = getAliasMap(); @@ -254,11 +235,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit String ident = x.getTableName().toString(); setCurrentTable(ident); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementUpdateCount(); Map aliasMap = getAliasMap(); diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java index a246ce0d1b..38583ed494 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java @@ -17,6 +17,7 @@ package com.alibaba.druid.sql.parser; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey; public class SQLCreateTableParser extends SQLDDLParser { @@ -65,17 +66,23 @@ public class SQLCreateTableParser extends SQLDDLParser { if (lexer.token() == Token.LPAREN) { lexer.nextToken(); - while (lexer.token() == Token.IDENTIFIER || lexer.token() == Token.LITERAL_ALIAS) { - SQLColumnDefinition column = this.exprParser.parseColumn(); - createTable.getTableElementList().add(column); - - // parseConstaint(column.getConstaints()); - - if (lexer.token() != Token.COMMA) { - break; + for (;;) { + if (lexer.token() == Token.IDENTIFIER || lexer.token() == Token.LITERAL_ALIAS) { + SQLColumnDefinition column = this.exprParser.parseColumn(); + createTable.getTableElementList().add(column); + } else if (lexer.token() == Token.PRIMARY) { + SQLPrimaryKey primaryKey = exprParser.parsePrimaryKey(); + createTable.getTableElementList().add(primaryKey); + } else { + throw new ParserException("TODO " + lexer.token()); + } + + if (lexer.token() == Token.COMMA) { + lexer.nextToken(); + continue; } - lexer.nextToken(); + break; } // while 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 bb4ef01980..ba0beedfcf 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -56,8 +56,10 @@ import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.NotNullConstraint; import com.alibaba.druid.sql.ast.statement.SQLCharactorDataType; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; +import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey; public class SQLExprParser extends SQLParser { @@ -214,6 +216,7 @@ public class SQLExprParser extends SQLParser { case LIMIT: case SCHEMA: case AT: + case COLUMN: sqlExpr = new SQLIdentifierExpr(lexer.stringVal()); lexer.nextToken(); break; @@ -1131,4 +1134,8 @@ public class SQLExprParser extends SQLParser { return column; } + + public SQLPrimaryKey parsePrimaryKey() { + throw new ParserException("TODO"); + } } diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index fb719ad671..7c44940454 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -286,7 +286,7 @@ public class SQLStatementParser extends SQLParser { if (token == Token.TABLE || identifierEquals("GLOBAL")) { SQLCreateTableParser createTableParser = getSQLCreateTableParser(); return createTableParser.parseCrateTable(false); - } else if (token == Token.INDEX) { + } else if (token == Token.INDEX || token == Token.UNIQUE) { return parseCreateIndex(false); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java index 6f87852904..d3cd336ca7 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -66,6 +66,45 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { public final static String ATTR_COLUMN = "_column_"; private Mode mode; + + public TableStat getTableStat(String ident) { + return getTableStat(ident, null); + } + + public Column addColumn(String tableName, String columnName) { + tableName = handleName(tableName); + columnName = handleName(columnName); + + Column column = new Column(tableName, columnName); + columns.add(column); + return column; + } + + public TableStat getTableStat(String tableName, String alias) { + if (variants.containsKey(tableName)){ + return null; + } + + tableName = handleName(tableName); + TableStat stat = tableStats.get(tableName); + if (stat == null) { + stat = new TableStat(); + tableStats.put(new TableStat.Name(tableName), stat); + if (alias != null) { + aliasMap.put(alias, tableName); + } + } + return stat; + } + + private String handleName(String ident) { + ident = ident.replaceAll("\"", ""); + ident = ident.replaceAll(" ", ""); + + ident = aliasWrap(ident); + + return ident; + } public Map getVariants() { return variants; @@ -91,6 +130,10 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { this.currentTable = table; } + public void setCurrentTable(SQLObject x) { + x.putAttribute("_old_local_", this.currentTable); + } + public void restoreCurrentTable(SQLObject x) { String table = (String) x.getAttribute("_old_local_"); this.currentTable = table; @@ -330,11 +373,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { setCurrentTable(ident); x.putAttribute("_old_local_", originalTable); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementInsertCount(); Map aliasMap = getAliasMap(); @@ -359,11 +398,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { setCurrentTable(ident); x.putAttribute("_old_local_", originalTable); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementDropCount(); Map aliasMap = getAliasMap(); @@ -388,11 +423,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { setCurrentTable(ident); x.putAttribute("_old_local_", originalTable); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementInsertCount(); Map aliasMap = getAliasMap(); @@ -437,7 +468,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { if (tableSource.getExpr() instanceof SQLName) { String ident = tableSource.getExpr().toString(); - setCurrentTable(ident); + setCurrentTable(x, ident); x.putAttribute(ATTR_TABLE, ident); if (x.getParent() instanceof SQLSelect) { x.getParent().putAttribute(ATTR_TABLE, ident); @@ -448,6 +479,10 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { if (x.getFrom() != null) { x.getFrom().accept(this); // 提前执行,获得aliasMap + String table = (String) x.getFrom().getAttribute(ATTR_TABLE); + if (table != null) { + x.putAttribute(ATTR_TABLE, table); + } } if (x.getWhere() != null) { @@ -480,8 +515,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { owner = aliasWrap(owner); if (owner != null) { - Column column = new Column(owner, x.getName()); - columns.add(column); + Column column = addColumn(owner, x.getName()); x.putAttribute(ATTR_COLUMN, column); } } @@ -546,8 +580,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { } if (currentTable != null) { - Column column = new Column(currentTable, ident); - columns.add(column); + Column column = addColumn(currentTable, ident); x.putAttribute(ATTR_COLUMN, column); } else { Column column = handleUnkownColumn(ident); @@ -559,9 +592,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { } protected Column handleUnkownColumn(String columnName) { - Column column = new Column("UNKNOWN", columnName); - columns.add(column); - return column; + return addColumn("UNKNOWN", columnName); } public boolean visit(SQLAllColumnExpr x) { @@ -572,7 +603,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { } if (currentTable != null) { - columns.add(new Column(currentTable, "*")); + addColumn(currentTable, "*"); } return false; } @@ -627,12 +658,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { Map aliasMap = getAliasMap(); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - x.putAttribute(ATTR_TABLE, ident); - } + TableStat stat = getTableStat(ident); Mode mode = getMode(); switch (mode) { @@ -673,7 +699,13 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { return true; } + public void endVisit(SQLSelect x) { + restoreCurrentTable(x); + } + public boolean visit(SQLSelect x) { + setCurrentTable(x); + if (x.getOrderBy() != null) { x.getOrderBy().setParent(x); } @@ -708,11 +740,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { String ident = x.getTableName().toString(); setCurrentTable(ident); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementUpdateCount(); Map aliasMap = getAliasMap(); @@ -732,11 +760,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { String ident = x.getTableName().toString(); setCurrentTable(ident); - TableStat stat = tableStats.get(ident); - if (stat == null) { - stat = new TableStat(); - tableStats.put(new TableStat.Name(ident), stat); - } + TableStat stat = getTableStat(ident); stat.incrementDeleteCount(); accept(x.getWhere()); @@ -778,11 +802,14 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { } String tableName = x.getName().toString(); - TableStat stat = new TableStat(); + + TableStat stat = getTableStat(tableName); stat.incrementCreateCount(); - tableStats.put(new TableStat.Name(tableName), stat); + setCurrentTable(x, tableName); accept(x.getTableElementList()); + + restoreCurrentTable(x); return false; } @@ -801,7 +828,7 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { } String columnName = x.getName().toString(); - columns.add(new Column(tableName, columnName)); + addColumn(tableName, columnName); return false; } diff --git a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java index 18be503b83..0163cebdc1 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java @@ -339,32 +339,87 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { } OpenType[] indexTypes = new OpenType[] { - // - SimpleType.LONG, SimpleType.STRING, SimpleType.STRING, SimpleType.LONG, + // 0 - 4 + SimpleType.LONG, // + SimpleType.STRING, // + SimpleType.STRING, // + SimpleType.LONG, // SimpleType.LONG, // - SimpleType.LONG, SimpleType.DATE, SimpleType.LONG, JMXUtils.getThrowableCompositeType(), - SimpleType.LONG, + // 5 - 9 + SimpleType.LONG, // + SimpleType.DATE, // + SimpleType.LONG, // + JMXUtils.getThrowableCompositeType(), // + SimpleType.LONG, // // - SimpleType.LONG, SimpleType.DATE, SimpleType.LONG, SimpleType.LONG, SimpleType.LONG, + // 10 - 14 + SimpleType.LONG, // + SimpleType.DATE, // + SimpleType.LONG, // + SimpleType.LONG, // + SimpleType.LONG, // // - SimpleType.LONG, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, + // 15 - 19 + SimpleType.LONG, // + SimpleType.STRING, // + SimpleType.STRING, // + SimpleType.STRING, // + SimpleType.STRING, // // - SimpleType.STRING, SimpleType.DATE, SimpleType.STRING, SimpleType.STRING, SimpleType.LONG // + // 20 - 24 + SimpleType.STRING, // + SimpleType.DATE, // + SimpleType.STRING, // + SimpleType.LONG, // + SimpleType.STRING, // - , new ArrayType(SimpleType.LONG, true) - }; + // 25 - + new ArrayType(SimpleType.LONG, true) // + }; - String[] indexNames = { "ID", "DataSource", "SQL", "ExecuteCount", "ErrorCount" // - , "TotalTime", "LastTime", "MaxTimespan", "LastError", "EffectedRowCount" // - , "FetchRowCount", "MaxTimespanOccurTime", "BatchSizeMax", "BatchSizeTotal", "ConcurrentMax" // - , "RunningCount", "Name", "File", "LastErrorMessage", "LastErrorClass" // - , "LastErrorStackTrace", "LastErrorTime", "DbType", "InTransactionCount", "URL" // + String[] indexNames = { + // 0 - 4 + "ID", // + "DataSource", // + "SQL", // + "ExecuteCount", // + "ErrorCount", // - , "Histogram" }; + // 5 - 9 + "TotalTime", // + "LastTime", // + "MaxTimespan", // + "LastError", // + "EffectedRowCount", // + + // 10 - 14 + "FetchRowCount", // + "MaxTimespanOccurTime", // + "BatchSizeMax", // + "BatchSizeTotal", // + "ConcurrentMax", // + + // 15 - 19 + "RunningCount", // + "Name", // + "File", // + "LastErrorMessage", // + "LastErrorClass", // + + // 20 - 24 + "LastErrorStackTrace", // + "LastErrorTime", // + "DbType", // + "InTransactionCount", // + "URL", // + + // 25 - + "Histogram" // + }; String[] indexDescriptions = indexNames; COMPOSITE_TYPE = new CompositeType("SqlStatistic", "Sql Statistic", indexNames, indexDescriptions, indexTypes); diff --git a/src/main/java/com/alibaba/druid/stat/JdbcStatManager.java b/src/main/java/com/alibaba/druid/stat/JdbcStatManager.java index 1abcbccd9e..c45346dc3b 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcStatManager.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcStatManager.java @@ -105,21 +105,86 @@ public class JdbcStatManager implements JdbcStatManagerMBean { return COMPOSITE_TYPE; } - OpenType[] indexTypes = new OpenType[] { // - SimpleType.LONG, SimpleType.STRING, SimpleType.STRING, - new ArrayType>(SimpleType.STRING, false), SimpleType.DATE, // - SimpleType.STRING, SimpleType.STRING, SimpleType.INTEGER, SimpleType.INTEGER, SimpleType.STRING // - , SimpleType.LONG, SimpleType.INTEGER, SimpleType.LONG, SimpleType.LONG, SimpleType.LONG // - , SimpleType.DATE, SimpleType.LONG, SimpleType.DATE, SimpleType.STRING, SimpleType.STRING // - , SimpleType.LONG, SimpleType.LONG, SimpleType.LONG, SimpleType.LONG, SimpleType.INTEGER // - , SimpleType.INTEGER, SimpleType.LONG, SimpleType.LONG, SimpleType.DATE, SimpleType.STRING // - , SimpleType.STRING, SimpleType.LONG, SimpleType.INTEGER, SimpleType.DATE, SimpleType.LONG // - , SimpleType.LONG, SimpleType.INTEGER, SimpleType.INTEGER, SimpleType.LONG, SimpleType.DATE // - , SimpleType.LONG, SimpleType.LONG, SimpleType.DATE, SimpleType.STRING, SimpleType.STRING // - , SimpleType.LONG, SimpleType.STRING, SimpleType.STRING, SimpleType.LONG, SimpleType.INTEGER // - , SimpleType.LONG, SimpleType.DATE, SimpleType.LONG, SimpleType.LONG // - // - , new ArrayType(SimpleType.LONG, true), new ArrayType(SimpleType.LONG, true) + OpenType[] indexTypes = new OpenType[] { + // 0 - 4 + SimpleType.LONG, // + SimpleType.STRING, // + SimpleType.STRING, // + new ArrayType>(SimpleType.STRING, false), // + SimpleType.DATE, // + + // 5 - 9 + SimpleType.STRING, // + SimpleType.STRING, // + SimpleType.INTEGER, // + SimpleType.INTEGER, // + SimpleType.STRING, // + + // 10 - 14 + SimpleType.LONG, // + SimpleType.INTEGER, // + SimpleType.LONG, // + SimpleType.LONG, // + SimpleType.LONG, // + + // 14 - 19 + SimpleType.DATE, // + SimpleType.LONG, // + SimpleType.DATE, // + SimpleType.STRING, // + SimpleType.STRING, // + + // 20 - 24 + SimpleType.LONG, // + SimpleType.LONG, // + SimpleType.LONG, // + SimpleType.LONG, // + SimpleType.INTEGER, // + + // 25 - 29 + SimpleType.INTEGER, // + SimpleType.LONG, // + SimpleType.LONG, // + SimpleType.DATE, // + SimpleType.STRING, // + + // 30 - 34 + SimpleType.STRING, // + SimpleType.LONG, // + SimpleType.INTEGER, // + SimpleType.DATE, // + SimpleType.LONG, // + + // 35 - 39 + SimpleType.LONG, // + SimpleType.INTEGER, // + SimpleType.INTEGER, // + SimpleType.LONG, // + SimpleType.DATE, + + // 40 - 44 + SimpleType.LONG, // + SimpleType.LONG, // + SimpleType.DATE, // + SimpleType.STRING, // + SimpleType.STRING, + + // 45 - 49 + SimpleType.LONG, // + SimpleType.STRING, // + SimpleType.STRING, // + SimpleType.LONG, // + SimpleType.INTEGER, // + + // 50 - 54 + SimpleType.LONG, // + SimpleType.DATE, // + SimpleType.LONG, // + SimpleType.LONG, // + new ArrayType(SimpleType.LONG, true), // + + // 55 - + new ArrayType(SimpleType.LONG, true) // // }; @@ -170,29 +235,37 @@ public class JdbcStatManager implements JdbcStatManagerMBean { "StatementLastErrorMessage" // , // 30 - 34 - "StatementLastErrorStackTrace", - "StatementExecuteMillisTotal", - "ConnectionConnectingCount", + "StatementLastErrorStackTrace", "StatementExecuteMillisTotal", "ConnectionConnectingCount", "StatementExecuteLastTime", "ResultSetCloseCount" // , // 35 -39 - "ResultSetOpenCount", - "ResultSetOpenningCount", - "ResultSetOpenningMax", - "ResultSetFetchRowCount", + "ResultSetOpenCount", "ResultSetOpenningCount", "ResultSetOpenningMax", "ResultSetFetchRowCount", "ResultSetLastOpenTime" // , // 40 - 44 - "ResultSetErrorCount", "ResultSetOpenningMillisTotal", "ResultSetLastErrorTime", - "ResultSetLastErrorMessage", "ResultSetLastErrorStackTrace", "ConnectionConnectCount", - "ConnectionErrorLastMessage", "ConnectionErrorLastStackTrace", - "ConnectionConnectMillisTotal", - "ConnectionConnectingCountMax" // - , "ConnectionConnectMillisMax", "ConnectionErrorLastTime", "ConnectionAliveMillisMax", - "ConnectionAliveMillisMin" // - // - , "ConnectionHistogram", "StatementHistogram", + "ResultSetErrorCount", // + "ResultSetOpenningMillisTotal", // + "ResultSetLastErrorTime", // + "ResultSetLastErrorMessage", // + "ResultSetLastErrorStackTrace", // + + // 45 - 49 + "ConnectionConnectCount", // + "ConnectionErrorLastMessage", // + "ConnectionErrorLastStackTrace", // + "ConnectionConnectMillisTotal", // + "ConnectionConnectingCountMax", + + // 50 - 54 + "ConnectionConnectMillisMax", // + "ConnectionErrorLastTime", // + "ConnectionAliveMillisMax", // + "ConnectionAliveMillisMin", // + "ConnectionHistogram", // + + // 55 - + "StatementHistogram", // }; diff --git a/src/main/java/com/alibaba/druid/stat/TableStat.java b/src/main/java/com/alibaba/druid/stat/TableStat.java index f87527e7a1..939ee62f05 100644 --- a/src/main/java/com/alibaba/druid/stat/TableStat.java +++ b/src/main/java/com/alibaba/druid/stat/TableStat.java @@ -17,14 +17,23 @@ package com.alibaba.druid.stat; public class TableStat { - int selectCount = 0; - int updateCount = 0; - int deleteCount = 0; - int insertCount = 0; - int dropCount = 0; - int mergeCount = 0; - int createCount = 0; - int alterCount = 0; + int selectCount = 0; + int updateCount = 0; + int deleteCount = 0; + int insertCount = 0; + int dropCount = 0; + int mergeCount = 0; + int createCount = 0; + int alterCount = 0; + int createIndexCount = 0; + + public int getCreateIndexCount() { + return createIndexCount; + } + + public void incrementCreateIndexCount() { + createIndexCount++; + } public int getAlterCount() { return alterCount; @@ -136,6 +145,9 @@ public class TableStat { if (alterCount > 0) { buf.append("Alter"); } + if (createIndexCount > 0) { + buf.append("CreateIndex"); + } return buf.toString(); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/CursorTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/CursorTest.java index 8ab732f51c..7f99ab72ca 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/CursorTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/CursorTest.java @@ -18,8 +18,8 @@ public class CursorTest extends TestCase { String text = TestUtils.outputOracle(stmt); - Assert.assertEquals("SELECT department_name, CURSOR(SELECT salary, commission_pct\n" + "\tFROM employees e\n" - + "\tWHERE e.department_id = d.department_id)\n" + "FROM departments d;\n", text); + Assert.assertEquals("SELECT department_name, CURSOR(\n\t\tSELECT salary, commission_pct\n" + "\t\tFROM employees e\n" + + "\t\tWHERE e.department_id = d.department_id\n\t)\n" + "FROM departments d;\n", text); System.out.println(text); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterIndexTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterIndexTest1.java index 630f0e8cdb..7d67591b6c 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterIndexTest1.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterIndexTest1.java @@ -32,9 +32,9 @@ public class OracleAlterIndexTest1 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); Assert.assertEquals(0, visitor.getColumns().size()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterIndexTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterIndexTest2.java index a7c15bf532..9419992574 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterIndexTest2.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterIndexTest2.java @@ -32,9 +32,9 @@ public class OracleAlterIndexTest2 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); Assert.assertEquals(0, visitor.getColumns().size()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterIndexTest3.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterIndexTest3.java new file mode 100644 index 0000000000..bb48ecf99d --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterIndexTest3.java @@ -0,0 +1,45 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class OracleAlterIndexTest3 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "alter index PRODUCT_ADDITION_NCID_IND parallel 1"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(0, visitor.getTables().size()); + +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + + Assert.assertEquals(0, visitor.getColumns().size()); + + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterSynonymTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterSynonymTest.java new file mode 100644 index 0000000000..f1e8767b6d --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterSynonymTest.java @@ -0,0 +1,44 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; + +public class OracleAlterSynonymTest extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "ALTER SYNONYM \"ESCROW\".\"COMPANY\" COMPILE"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(0, visitor.getTables().size()); + +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + + Assert.assertEquals(0, visitor.getColumns().size()); + + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest10.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest10.java new file mode 100644 index 0000000000..a0810fba53 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest10.java @@ -0,0 +1,45 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class OracleAlterTableTest10 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "ALTER TABLE ws_affiliate_tran_product add ( discount_amount NUMBER, commission_amount NUMBER )"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ws_affiliate_tran_product"))); + + Assert.assertEquals(2, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ws_affiliate_tran_product", "discount_amount"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ws_affiliate_tran_product", "commission_amount"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest11.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest11.java new file mode 100644 index 0000000000..580d691252 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest11.java @@ -0,0 +1,45 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class OracleAlterTableTest11 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "alter table PRODUCT_IDS_ZZJ_TBD0209 move tablespace MCSHADOWTS"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("PRODUCT_IDS_ZZJ_TBD0209"))); + + Assert.assertEquals(0, visitor.getColumns().size()); + +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("PRODUCT_IDS_ZZJ_TBD0209", "discount_amount"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ws_affiliate_tran_product", "commission_amount"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest3.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest3.java index 8d3b7f0cbe..ec3ceeb864 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest3.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest3.java @@ -38,7 +38,7 @@ public class OracleAlterTableTest3 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("WRH$_ROWCACHE_SUMMARY"))); Assert.assertEquals(0, visitor.getColumns().size()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest4.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest4.java index 272c965522..74c045bdde 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest4.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest4.java @@ -34,11 +34,11 @@ public class OracleAlterTableTest4 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ws_pledge_contract"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(1, visitor.getColumns().size()); - // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ws_pledge_contract", "reference"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest5.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest5.java index 183def39c2..6f9e360fb6 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest5.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest5.java @@ -34,11 +34,12 @@ public class OracleAlterTableTest5 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ht_task_flow_biz_product_2"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(1, visitor.getColumns().size()); - // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ht_task_flow_biz_product_2", + "ipr_biz_type_id"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest6.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest6.java index 1cfa2fd276..0acc0e4825 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest6.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest6.java @@ -34,11 +34,11 @@ public class OracleAlterTableTest6 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("wl_service_record"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(1, visitor.getColumns().size()); - // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("wl_service_record", "service_type"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest7.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest7.java index 7e4f160e96..9d14ce9fd0 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest7.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest7.java @@ -34,12 +34,12 @@ public class OracleAlterTableTest7 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("wl_ship_order"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(2, visitor.getColumns().size()); - // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); - // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("wl_ship_order", "forwarder_service"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("wl_ship_order", "status"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest8.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest8.java index 6e022c0b4a..029ba391c1 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest8.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest8.java @@ -34,11 +34,11 @@ public class OracleAlterTableTest8 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ws_i18n_translate_item"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(1, visitor.getColumns().size()); - // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ws_i18n_translate_item", "id"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest9.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest9.java new file mode 100644 index 0000000000..dbce53628d --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTest9.java @@ -0,0 +1,45 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class OracleAlterTableTest9 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "alter table archive_feedback drop partition P201150 update global indexes"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("archive_feedback"))); + + Assert.assertEquals(0, visitor.getColumns().size()); + +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ws_i18n_translate_item", "id"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTestRename.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTestRename.java index 39d8d39827..5840b8ee8e 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTestRename.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTableTestRename.java @@ -34,7 +34,7 @@ public class OracleAlterTableTestRename extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("PRODUCT_NEW_CLUSTER_YZS_0210"))); Assert.assertEquals(0, visitor.getColumns().size()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTablespaceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTablespaceTest.java new file mode 100644 index 0000000000..8dffe61477 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTablespaceTest.java @@ -0,0 +1,45 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class OracleAlterTablespaceTest extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "alter tablespace escrow_data add datafile '/opt/oracle/oradata/usoint/f937.dbf' size 4095m autoextend off"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(0, visitor.getTables().size()); + +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("WRH$_SERVICE_WAIT_CLASS"))); + + Assert.assertEquals(0, visitor.getColumns().size()); + + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTriggerTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTriggerTest.java new file mode 100644 index 0000000000..d5132be3f4 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTriggerTest.java @@ -0,0 +1,45 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class OracleAlterTriggerTest extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "alter trigger DDL_TRIGGER_FOR_DATABASE ENABLE"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(0, visitor.getTables().size()); + +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + + Assert.assertEquals(0, visitor.getColumns().size()); + + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTriggerTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTriggerTest2.java new file mode 100644 index 0000000000..5bda2b4bef --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterTriggerTest2.java @@ -0,0 +1,45 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class OracleAlterTriggerTest2 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "alter TRIGGER RETL.TRG_COMPANY_SYNC compile"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(0, visitor.getTables().size()); + +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + + Assert.assertEquals(0, visitor.getColumns().size()); + + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterViewTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterViewTest.java new file mode 100644 index 0000000000..a6c3095a48 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAlterViewTest.java @@ -0,0 +1,45 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class OracleAlterViewTest extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "alter VIEW ALIBABA1949.COMPANY_VIEW_2 compile"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(0, visitor.getTables().size()); + +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + + Assert.assertEquals(0, visitor.getColumns().size()); + + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAnyTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAnyTest.java index 62781831f3..0d2f3f3d3a 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAnyTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleAnyTest.java @@ -15,10 +15,10 @@ public class OracleAnyTest extends TestCase { + "UNIQUE DIMENSION RULES UPSERT SEQUENTIAL ORDER (s[ANY, 2000] = 0) " + "ORDER BY country, prod, year;"; - String expect = "SELECT country, prod, YEAR, s\n" + "FROM sales_view\n" + "MODEL\n" - + "\tPARTITION BY (country)\n" + "\tDIMENSION BY (prod, YEAR)\n" + "\tMEASURES (sale s)\n" + String expect = "SELECT country, prod, year, s\n" + "FROM sales_view\n" + "MODEL\n" + + "\tPARTITION BY (country)\n" + "\tDIMENSION BY (prod, year)\n" + "\tMEASURES (sale s)\n" + "\tIGNORE NAV\n" + "\tUNIQUE DIMENSION\n" - + "\tRULES UPSERT SEQUENTIAL ORDER (s[ANY, 2000] = 0)\n" + "ORDER BY country, prod, YEAR;\n"; + + "\tRULES UPSERT SEQUENTIAL ORDER (s[ANY, 2000] = 0)\n" + "ORDER BY country, prod, year;\n"; OracleStatementParser parser = new OracleStatementParser(sql); SQLSelectStatement stmt = (SQLSelectStatement) parser.parseStatementList().get(0); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleBlockTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleBlockTest1.java index 027f1f56e9..9875346c61 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleBlockTest1.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleBlockTest1.java @@ -31,19 +31,13 @@ public class OracleBlockTest1 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(2, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("departments"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("departments"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); - Assert.assertEquals(7, visitor.getColumns().size()); +// Assert.assertEquals(0, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "job_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "location_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "location_id"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleBlockTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleBlockTest2.java index 09de1e8e58..a66c6c2473 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleBlockTest2.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleBlockTest2.java @@ -47,19 +47,13 @@ public class OracleBlockTest2 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(2, visitor.getTables().size()); + Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("departments"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("wl_ship_order"))); - Assert.assertEquals(7, visitor.getColumns().size()); + Assert.assertEquals(4, visitor.getColumns().size()); + Assert.assertEquals(4, visitor.getConditions().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "job_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "location_id"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("wl_ship_order", "id"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleBlockTest3.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleBlockTest3.java index a90c2314ce..05c155600f 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleBlockTest3.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleBlockTest3.java @@ -41,19 +41,12 @@ public class OracleBlockTest3 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(2, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("departments"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); - Assert.assertEquals(7, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "job_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "location_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_id"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCallTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCallTest.java index 374777b268..322ffadcf7 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCallTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCallTest.java @@ -31,19 +31,12 @@ public class OracleCallTest extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(2, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("departments"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("departments"))); - Assert.assertEquals(7, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "job_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "location_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_id"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateIndexTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateIndexTest1.java index 1c566dc62a..aea39e9a49 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateIndexTest1.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateIndexTest1.java @@ -34,9 +34,9 @@ public class OracleCreateIndexTest1 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("PFS_PACKAGE_SAMPLE"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(1, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateIndexTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateIndexTest2.java new file mode 100644 index 0000000000..ccfdbe4f51 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateIndexTest2.java @@ -0,0 +1,47 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class OracleCreateIndexTest2 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "CREATE UNIQUE INDEX \"ESCROW\".\"SYS_IOT_TOP_196679\" " + // + "on \"ESCROW\".\"SYS_JOURNAL_196678\"(\"C0\",\"C1\",\"C2\",\"C3\",\"RID\") " + // + "INDEX ONLY TOPLEVEL TABLESPACE \"ESCROW_INDX\" NOPARALLEL"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.SYS_JOURNAL_196678"))); + + Assert.assertEquals(5, visitor.getColumns().size()); + + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateIndexTest3.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateIndexTest3.java new file mode 100644 index 0000000000..dfa4743fd4 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateIndexTest3.java @@ -0,0 +1,46 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class OracleCreateIndexTest3 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "create index PRODUCT_ADDITION_NCID_IND on PRODUCT_ADDITION(NEW_CLUSTER_ID,GMT_LAST_FEEDBACK) tablespace APPINDX4M online parallel 4"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("PRODUCT_ADDITION"))); + + Assert.assertEquals(2, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("PRODUCT_ADDITION", "NEW_CLUSTER_ID"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("PRODUCT_ADDITION", "GMT_LAST_FEEDBACK"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest1.java index 81113bafe7..90beaa8d12 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest1.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest1.java @@ -34,9 +34,9 @@ public class OracleCreateTableTest1 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("wl_track_task"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(8, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest2.java index c5e67b37ea..db95bbce82 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest2.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest2.java @@ -34,9 +34,9 @@ public class OracleCreateTableTest2 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("wl_ship_forecast"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(7, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest3.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest3.java index 675822728a..944ffe593d 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest3.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest3.java @@ -34,9 +34,9 @@ public class OracleCreateTableTest3 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("wl_ship_order"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(2, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest4.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest4.java index 9ae79663b0..7e555fdf06 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest4.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest4.java @@ -32,11 +32,12 @@ public class OracleCreateTableTest4 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(2, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("product"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("tbd_qi_xiaq_100961"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(2, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest5.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest5.java index ffa328dd6d..047946c08c 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest5.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest5.java @@ -35,11 +35,12 @@ public class OracleCreateTableTest5 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("cdc.en_complaint_ipr_stat_fdt0"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("SYS.SYS_TEMP_0FD9D670A_93E068F3"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(2, visitor.getColumns().size()); - // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SYS.SYS_TEMP_0FD9D670A_93E068F3", "C0"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SYS.SYS_TEMP_0FD9D670A_93E068F3", "C1"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest6.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest6.java index 1837836e25..f97b23a368 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest6.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest6.java @@ -34,12 +34,12 @@ public class OracleCreateTableTest6 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"SYS\".SYS_TEMP_0FD9D66FD_93E068F3"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("SYS.SYS_TEMP_0FD9D66FD_93E068F3"))); Assert.assertEquals(2, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("\"SYS\".SYS_TEMP_0FD9D66FD_93E068F3", "\"C0\""))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("\"SYS\".SYS_TEMP_0FD9D66FD_93E068F3", "\"C1\""))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SYS.SYS_TEMP_0FD9D66FD_93E068F3", "C0"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SYS.SYS_TEMP_0FD9D66FD_93E068F3", "C1"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest7.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest7.java new file mode 100644 index 0000000000..8599d6f608 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleCreateTableTest7.java @@ -0,0 +1,49 @@ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import junit.framework.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class OracleCreateTableTest7 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "create table \"ALIBABA1949\".\"SYS_JOURNAL_209051\" (" + // + "C0 VARCHAR2(256), opcode char(1), partno number, rid rowid, primary key( C0 , rid )" + // + ") organization index TABLESPACE \"APPINDX1M\""; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(1, visitor.getTables().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ALIBABA1949.SYS_JOURNAL_209051"))); + + Assert.assertEquals(4, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ALIBABA1949.SYS_JOURNAL_209051", "C0"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ALIBABA1949.SYS_JOURNAL_209051", "opcode"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ALIBABA1949.SYS_JOURNAL_209051", "partno"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ALIBABA1949.SYS_JOURNAL_209051", "rid"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleGrantTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleGrantTest.java index 3b00b66b75..31b5ba38f9 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleGrantTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleGrantTest.java @@ -33,17 +33,10 @@ public class OracleGrantTest extends OracleTest { Assert.assertEquals(0, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("departments"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); - Assert.assertEquals(7, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "job_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "location_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "location_id"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest4.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest4.java index d3b9fc13f1..f71a95040b 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest4.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest4.java @@ -47,12 +47,13 @@ public class OracleInsertTest4 extends OracleTest { + " h.lowval r1, h.hival r2, hg.epvalue ch1 from sys.user$ u, sys.obj$ ot, sys.col$ c, sys.tabpart$ tp, sys.obj$ op, " + " sys.hist_head$ h, histgrm$ hg where u.name = :1 and ot.owner# = u.user# and " + " ot.name = :2 and ot.type# = 2 and c.obj# = ot.obj# and (:4 is null or c.name = :4) and " - + " tp.bo# = ot.obj# and tp.obj# = op.obj# and ((:3 is null and :vc_cascade_parts is not null) " + - " or op.subname = :3) and h.obj# = op.obj# and h.intcol# = c.intcol# and " + - " hg.obj#(+) = h.obj# and hg.intcol#(+) = h.intcol# " + - "" + - " union all select :5 statid, 'C' type, :6 version, bitand(h.spare2,7) flags, " + - " op.name c1, op.subname c2, null c3, c.name c4, u.name c5, h.distcnt n1, h.density n2, h.spare1 n3, h.sample_size n4, h.null_cnt n5, h.minimum n6, h.maximum n7, h.avgcln n8, decode(h.cache_cnt,0,null,1) n9, hg.bucket n10, hg.endpoint n11, null n12, h.timestamp# d1, h.lowval r1, h.hival r2, hg.epvalue ch1 from sys.user$ u, sys.col$ c, sys.tabcompart$ tp, sys.obj$ op, sys.hist_head$ h, histgrm$ hg where u.name = :1 and op.owner# = u.user# and op.name = :2 and op.type# = 19 and ((:3 is null and :vc_cascade_parts is not null) or op.subname = :3) and tp.obj# = op.obj# and c.obj# = tp.bo# and (:4 is null or c.name = :4) and h.obj# = op.obj# and h.intcol# = c.intcol# and hg.obj#(+) = h.obj# and hg.intcol#(+) = h.intcol# union all select :5 statid, 'C' type, :6 version, bitand(h.spare2,7) flags, op.name c1, op.subname c2, os.subname c3, c.name c4, u.name c5, h.distcnt n1, h.density n2, h.spare1 n3, h.sample_size n4, h.null_cnt n5, h.minimum n6, h.maximum n7, h.avgcln n8, decode(h.cache_cnt,0,null,1) n9, hg.bucket n10, hg.endpoint n11, null n12, h.timestamp# d1, h.lowval r1, h.hival r2, hg.epvalue ch1 from sys.user$ u, sys.col$ c, sys.tabcompart$ tp, sys.obj$ op, sys.tabsubpart$ ts, sys.obj$ os, sys.hist_head$ h, histgrm$ hg where u.name = :1 and op.owner# = u.user# and op.name = :2 and op.type# = 19 and tp.obj# = op.obj# and c.obj# = tp.bo# and (:4 is null or c.name = :4) and ts.pobj# = tp.obj# and ts.obj# = os.obj# and ((:3 is null and :vc_cascade_parts is not null) or (op.subname = :3 and (:vc_cascade_parts is not null -- cascade to subpart or os.subname is null)) -- matches partition itself or os.subname = :3) and -- matches subpartition h.obj# = os.obj# and h.intcol# = c.intcol# and hg.obj#(+) = h.obj# and hg.intcol#(+) = h.intcol# order by c5,c1,c2,c3,c4,n10"; + + " tp.bo# = ot.obj# and tp.obj# = op.obj# and ((:3 is null and :vc_cascade_parts is not null) " + + " or op.subname = :3) and h.obj# = op.obj# and h.intcol# = c.intcol# and " + + " hg.obj#(+) = h.obj# and hg.intcol#(+) = h.intcol# " + + "" + + " union all select :5 statid, 'C' type, :6 version, bitand(h.spare2,7) flags, " + + " op.name c1, op.subname c2, null c3, c.name c4, u.name c5, h.distcnt n1, h.density n2, h.spare1 n3, h.sample_size n4, h.null_cnt n5, h.minimum n6, h.maximum n7, h.avgcln n8, decode(h.cache_cnt,0,null,1) n9, hg.bucket n10, hg.endpoint n11, null n12, h.timestamp# d1, h.lowval r1, h.hival r2, hg.epvalue ch1 from sys.user$ u, sys.col$ c, sys.tabcompart$ tp, sys.obj$ op, sys.hist_head$ h, histgrm$ hg where u.name = :1 and op.owner# = u.user# and op.name = :2 and op.type# = 19 and ((:3 is null and :vc_cascade_parts is not null) or op.subname = :3) and tp.obj# = op.obj# and c.obj# = tp.bo# and (:4 is null or c.name = :4) and h.obj# = op.obj# and h.intcol# = c.intcol# and hg.obj#(+) = h.obj# and hg.intcol#(+) = h.intcol# union all select :5 statid, 'C' type, :6 version, bitand(h.spare2,7) flags, op.name c1, op.subname c2, os.subname c3, c.name c4, u.name c5, h.distcnt n1, h.density n2, h.spare1 n3, h.sample_size n4, h.null_cnt n5, h.minimum n6, h.maximum n7, h.avgcln n8, decode(h.cache_cnt,0,null,1) n9, hg.bucket n10, hg.endpoint n11, null n12, h.timestamp# d1, h.lowval r1, h.hival r2, hg.epvalue ch1 from sys.user$ u, sys.col$ c, sys.tabcompart$ tp, sys.obj$ op, sys.tabsubpart$ ts, sys.obj$ os, sys.hist_head$ h, histgrm$ hg where u.name = :1 and op.owner# = u.user# and op.name = :2 and op.type# = 19 and tp.obj# = op.obj# and c.obj# = tp.bo# and (:4 is null or c.name = :4) and ts.pobj# = tp.obj# and ts.obj# = os.obj# and ((:3 is null and :vc_cascade_parts is not null) or (op.subname = :3 and (:vc_cascade_parts is not null or os.subname is null)) " + + " or os.subname = :3) and h.obj# = os.obj# and h.intcol# = c.intcol# and hg.obj#(+) = h.obj# and hg.intcol#(+) = h.intcol# order by c5,c1,c2,c3,c4,n10"; OracleStatementParser parser = new OracleStatementParser(sql); List statementList = parser.parseStatementList(); @@ -69,15 +70,15 @@ public class OracleInsertTest4 extends OracleTest { System.out.println("coditions : " + visitor.getConditions()); System.out.println("relationships : " + visitor.getRelationships()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("raises"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("OPS$ADMIN.ORASTAT"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("sys.user$"))); - Assert.assertEquals(2, visitor.getTables().size()); - Assert.assertEquals(3, visitor.getColumns().size()); + Assert.assertEquals(9, visitor.getTables().size()); + Assert.assertEquals(42, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest5.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest5.java index 1fa97576fe..4650c6076f 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest5.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest5.java @@ -30,15 +30,15 @@ public class OracleInsertTest5 extends OracleTest { System.out.println("coditions : " + visitor.getConditions()); System.out.println("relationships : " + visitor.getRelationships()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("raises"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); + Assert.assertEquals(7, visitor.getTables().size()); + Assert.assertEquals(29, visitor.getColumns().size()); - Assert.assertEquals(2, visitor.getTables().size()); - Assert.assertEquals(3, visitor.getColumns().size()); - - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("raises"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); +// +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest6.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest6.java index 230dfdd64a..9575b94792 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest6.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest6.java @@ -30,15 +30,14 @@ public class OracleInsertTest6 extends OracleTest { System.out.println("coditions : " + visitor.getConditions()); System.out.println("relationships : " + visitor.getRelationships()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("raises"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); - - Assert.assertEquals(2, visitor.getTables().size()); - Assert.assertEquals(3, visitor.getColumns().size()); - - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); + Assert.assertEquals(9, visitor.getTables().size()); + Assert.assertEquals(42, visitor.getColumns().size()); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("raises"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); +// +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest7.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest7.java index 710ccfd1ba..fa2b890a1f 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest7.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleInsertTest7.java @@ -29,16 +29,16 @@ public class OracleInsertTest7 extends OracleTest { System.out.println("fields : " + visitor.getColumns()); System.out.println("coditions : " + visitor.getConditions()); System.out.println("relationships : " + visitor.getRelationships()); + + Assert.assertEquals(9, visitor.getTables().size()); + Assert.assertEquals(42, visitor.getColumns().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("raises"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); - - Assert.assertEquals(2, visitor.getTables().size()); - Assert.assertEquals(3, visitor.getColumns().size()); - - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("raises"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); +// +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest2.java index f9f6e8a3ef..c37b3b8f40 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest2.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest2.java @@ -58,18 +58,19 @@ public class OracleMergeTest2 extends OracleTest { System.out.println("coditions : " + visitor.getConditions()); System.out.println("relationships : " + visitor.getRelationships()); - Assert.assertEquals(2, visitor.getTables().size()); + Assert.assertEquals(3, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("bonuses"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.HT_TASK_TRADE_HISTORY"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.MLOG$_HT_TASK_TRADE_HISTOR"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.HT_TASK_TRADE_HISTORY_NEW"))); - Assert.assertEquals(5, visitor.getColumns().size()); + Assert.assertEquals(31, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "bonus"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "employee_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "bonus"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest3.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest3.java index a5d3219b5f..71d24177e0 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest3.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest3.java @@ -30,18 +30,19 @@ public class OracleMergeTest3 extends OracleTest { System.out.println("coditions : " + visitor.getConditions()); System.out.println("relationships : " + visitor.getRelationships()); - Assert.assertEquals(2, visitor.getTables().size()); + Assert.assertEquals(3, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("bonuses"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("sys.mon_mods$"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("tab$"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("sys.mon_mods_all$"))); - Assert.assertEquals(5, visitor.getColumns().size()); + Assert.assertEquals(15, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "bonus"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "employee_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "bonus"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest4.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest4.java index adc776405f..284f879012 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest4.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest4.java @@ -30,18 +30,19 @@ public class OracleMergeTest4 extends OracleTest { System.out.println("coditions : " + visitor.getConditions()); System.out.println("relationships : " + visitor.getRelationships()); - Assert.assertEquals(2, visitor.getTables().size()); + Assert.assertEquals(3, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("bonuses"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ALL_SUMDELTA"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.HT_TASK_TRADE_HISTORY"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.HT_TASK_TRADE_HISTORY_NEW"))); - Assert.assertEquals(5, visitor.getColumns().size()); + Assert.assertEquals(34, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "bonus"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "employee_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "bonus"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest5.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest5.java index 578a81928f..f3f67e4e52 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest5.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleMergeTest5.java @@ -40,16 +40,16 @@ public class OracleMergeTest5 extends OracleTest { Assert.assertEquals(2, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("bonuses"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("MEMBER_LAST_LOGIN_HZ"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("MEMBER_LAST_LOGIN"))); - Assert.assertEquals(5, visitor.getColumns().size()); + Assert.assertEquals(12, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "bonus"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "employee_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "bonus"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OraclePivotClauseTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OraclePivotClauseTest.java index 100b22dc09..231c7ca9c5 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OraclePivotClauseTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OraclePivotClauseTest.java @@ -16,7 +16,7 @@ public class OraclePivotClauseTest extends TestCase { String expected = "SELECT *\n" + "FROM pivot_table\n" + "\tUNPIVOT (yearly_total FOR order_mode IN (store AS 'direct', internet AS 'online'))\n" - + "ORDER BY YEAR, order_mode;\n"; + + "ORDER BY year, order_mode;\n"; OracleStatementParser parser = new OracleStatementParser(sql); SQLSelectStatement stmt = (SQLSelectStatement) parser.parseStatementList().get(0); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSQLParserTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSQLParserTest.java index b8dcc19484..18d808e5c4 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSQLParserTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSQLParserTest.java @@ -17,27 +17,6 @@ import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor; public class OracleSQLParserTest extends TestCase { - public void test_0() throws Exception { - String sql = "UPDATE employees SET salary = salary * 1.1 WHERE employee_id IN (SELECT employee_id FROM job_history);"; - OracleStatementParser parser = new OracleStatementParser(sql); - List statementList = parser.parseStatementList(); - - Assert.assertEquals(1, statementList.size()); - - OracleUpdateStatement statement = (OracleUpdateStatement) statementList.get(0); - Assert.assertEquals(0, statement.getHints().size()); - OracleUpdateSetListClause setList = (OracleUpdateSetListClause) statement.getSetClause(); - Assert.assertEquals(1, setList.getItems().size()); - OracleUpdateSetListSingleColumnItem item = (OracleUpdateSetListSingleColumnItem) setList.getItems().get(0); - SQLIdentifierExpr column = (SQLIdentifierExpr) item.getColumn(); - Assert.assertEquals("salary", column.getName()); - - SQLBinaryOpExpr value = (SQLBinaryOpExpr) item.getValue(); - Assert.assertEquals(SQLBinaryOperator.Multiply, value.getOperator()); - - String text = output(statementList); - System.out.println(text); - } public void test_1() throws Exception { String sql = "SELECT employees_seq.nextval FROM DUAL;"; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest1.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest1.java index 342ab57db6..d0e252efb7 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest1.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest1.java @@ -33,7 +33,7 @@ public class OracleSelectTest1 extends OracleTest { // Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("orders"))); Assert.assertEquals(0, visitor.getTables().size()); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(1, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "employee_id"))); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest11.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest11.java index d01981dbbe..d902d5ca0b 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest11.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest11.java @@ -52,12 +52,12 @@ public class OracleSelectTest11 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("pivot_table"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("IMAGE_REPOSITORY"))); - Assert.assertEquals(3, visitor.getColumns().size()); + Assert.assertEquals(8, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("IMAGE_REPOSITORY", "rowid"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("IMAGE_REPOSITORY", "COMPANY_ID"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("IMAGE_REPOSITORY", "STATUS"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest12.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest12.java index 29e92f456f..8d46c91b6e 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest12.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest12.java @@ -40,10 +40,10 @@ public class OracleSelectTest12 extends OracleTest { Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("BUSINESS_ORDER"))); - Assert.assertEquals(3, visitor.getColumns().size()); + Assert.assertEquals(4, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest13.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest13.java index 28ab3662bf..b4d4e85010 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest13.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest13.java @@ -35,12 +35,12 @@ public class OracleSelectTest13 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("BUSINESS_ORDER"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("retl_data_search"))); - Assert.assertEquals(3, visitor.getColumns().size()); + Assert.assertEquals(7, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest14.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest14.java index 5ff7850993..24b5549876 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest14.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest14.java @@ -34,12 +34,12 @@ public class OracleSelectTest14 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("BUSINESS_ORDER"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("v$sql"))); Assert.assertEquals(3, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("v$sql", "sql_text"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("v$sql", "SQL_ID"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("v$sql", "child_number"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest15.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest15.java index c42f0e075d..a87576b37a 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest15.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest15.java @@ -33,7 +33,7 @@ public class OracleSelectTest15 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("DUAL"))); Assert.assertEquals(0, visitor.getColumns().size()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest16.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest16.java index 53a5dd7e42..8504ffae96 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest16.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest16.java @@ -33,9 +33,9 @@ public class OracleSelectTest16 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("sysauth$"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(3, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest17.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest17.java index 07ab3d1f2e..03b508faa1 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest17.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest17.java @@ -33,9 +33,9 @@ public class OracleSelectTest17 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("v$session"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(5, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest18.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest18.java index bebc71a181..6ce431f239 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest18.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest18.java @@ -44,11 +44,12 @@ public class OracleSelectTest18 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(2, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("v$instance"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("dba_hist_snapshot"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(5, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest19.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest19.java index 8fd487530f..3b31b90565 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest19.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest19.java @@ -42,11 +42,11 @@ public class OracleSelectTest19 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(4, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("sys.dba_data_files"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(17, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest20.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest20.java index fcc4749746..ebec8bd7ef 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest20.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest20.java @@ -36,9 +36,9 @@ public class OracleSelectTest20 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); Assert.assertEquals(0, visitor.getColumns().size()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest21.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest21.java index 99beafe0ed..38f8674665 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest21.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest21.java @@ -49,9 +49,9 @@ public class OracleSelectTest21 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("DBA_HIST_SYSTEM_EVENT"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(13, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest22.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest22.java index c3cfa12a21..b29d5aeea6 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest22.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest22.java @@ -34,9 +34,9 @@ public class OracleSelectTest22 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.HT_TASK_TRADE_HISTORY"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(15, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest23.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest23.java index 61f6a221a2..e97a2f0257 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest23.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest23.java @@ -32,11 +32,13 @@ public class OracleSelectTest23 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(3, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("sys.obj$"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("sys.user$"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("dba_jobs"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(10, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest24.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest24.java index 1e0c689c58..146115d87c 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest24.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest24.java @@ -34,11 +34,11 @@ public class OracleSelectTest24 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.HT_TASK_TRADE_HISTORY"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(5, visitor.getColumns().size()); - // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("ESCROW.HT_TASK_TRADE_HISTORY", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "order_mode"))); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest25.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest25.java index 46de2b2cb5..4f74ee41ec 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest25.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest25.java @@ -32,9 +32,9 @@ public class OracleSelectTest25 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); Assert.assertEquals(0, visitor.getColumns().size()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest26.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest26.java index 5bf3cf00f6..42ca62ee9b 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest26.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest26.java @@ -39,11 +39,14 @@ public class OracleSelectTest26 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(4, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("wl_wh_order"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("wl_domestic_send"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("wl_wh_in"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("wl_wh_out"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(21, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest27.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest27.java index 5e5845fc0e..fbc48efe47 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest27.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest27.java @@ -34,11 +34,13 @@ public class OracleSelectTest27 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(3, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("dba_objects"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("search.retl_table_config_search"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("sys.col$"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(20, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest28.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest28.java index 0d221fb148..8fe4e217a4 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest28.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest28.java @@ -32,11 +32,13 @@ public class OracleSelectTest28 extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(3, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.TRADE_PAY"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.ESCROW_TRADE"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.BUSINESS_ORDER"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(9, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest29.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest29.java index 4fb317ea0b..d20e25fa7a 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest29.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest29.java @@ -34,9 +34,9 @@ public class OracleSelectTest29 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"DUAL\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("category"))); - Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(6, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest30.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest30.java index fdd0b08a0e..b18555e833 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest30.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest30.java @@ -45,9 +45,9 @@ public class OracleSelectTest30 extends OracleTest { Assert.assertEquals(1, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("\"ESCROW\".\"IPAY_ACCOUNT_FUND_RCD\""))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("ESCROW.IPAY_ACCOUNT_FUND_RCD"))); - Assert.assertEquals(0, visitor.getColumns().size()); +// Assert.assertEquals(0, visitor.getColumns().size()); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "*"))); // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("pivot_table", "YEAR"))); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest7.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest7.java index e33ec1a9ed..3e5b68bc0c 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest7.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSelectTest7.java @@ -47,5 +47,7 @@ public class OracleSelectTest7 extends OracleTest { Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "location_id"))); Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "*"))); Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); + + Assert.assertTrue(visitor.getOrderByColumns().contains(new TableStat.Column("employees", "last_name"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSetTransactionTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSetTransactionTest.java index 83b5718912..f19bd29504 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSetTransactionTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSetTransactionTest.java @@ -31,19 +31,12 @@ public class OracleSetTransactionTest extends OracleTest { System.out.println("relationships : " + visitor.getRelationships()); System.out.println("orderBy : " + visitor.getOrderByColumns()); - Assert.assertEquals(2, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getTables().size()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("departments"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); +// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); - Assert.assertEquals(7, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "job_id"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("UNKNOWN", "location_id"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_id"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleUpdateTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleUpdateTest2.java index 85d46d9872..00ed0dd96b 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleUpdateTest2.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleUpdateTest2.java @@ -42,15 +42,15 @@ public class OracleUpdateTest2 extends OracleTest { System.out.println("coditions : " + visitor.getConditions()); System.out.println("relationships : " + visitor.getRelationships()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("table1"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("table2"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("wrh$_tempfile"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("x$kcctf"))); - Assert.assertEquals(2, visitor.getTables().size()); - Assert.assertEquals(3, visitor.getColumns().size()); + Assert.assertEquals(4, visitor.getTables().size()); + Assert.assertEquals(18, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("table1", "column"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("table2", "expr"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("table2", "column"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("table1", "column"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("table2", "expr"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("table2", "column"))); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleUpdateTest3.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleUpdateTest3.java index 76451ecc71..197f516931 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleUpdateTest3.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleUpdateTest3.java @@ -13,13 +13,14 @@ import com.alibaba.druid.stat.TableStat; public class OracleUpdateTest3 extends OracleTest { public void test_0() throws Exception { - String sql = "update sys.col_usage$ " + String sql = "update sys.col_usage$ " // + "set equality_preds = equality_preds + decode(bitand(:flag,1),0,0,1)" // + " , equijoin_preds = equijoin_preds + decode(bitand(:flag,2),0,0,1)" // + " , nonequijoin_preds = nonequijoin_preds + decode(bitand(:flag,4),0,0,1)" // + " , range_preds = range_preds + decode(bitand(:flag,8),0,0,1)" // + " , like_preds = like_preds + decode(bitand(:flag,16),0,0,1)" // - + " , null_preds = null_preds + decode(bitand(:flag,32),0,0,1), timestamp = :time where obj# = :objn and intcol# = :coln"; // + + " , null_preds = null_preds + decode(bitand(:flag,32),0,0,1), timestamp = :time " + // + "where obj# = :objn and intcol# = :coln"; // OracleStatementParser parser = new OracleStatementParser(sql); List statementList = parser.parseStatementList(); @@ -36,15 +37,13 @@ public class OracleUpdateTest3 extends OracleTest { System.out.println("coditions : " + visitor.getConditions()); System.out.println("relationships : " + visitor.getRelationships()); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("table1"))); - Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("table2"))); + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("sys.col_usage$"))); - Assert.assertEquals(2, visitor.getTables().size()); - Assert.assertEquals(3, visitor.getColumns().size()); + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(9, visitor.getColumns().size()); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("table1", "column"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("table2", "expr"))); - Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("table2", "column"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("sys.col_usage$", "obj#"))); + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("sys.col_usage$", "intcol#"))); } }