diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleSegmentAttributes.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleSegmentAttributes.java index e98aa4ed5e..88e0e20dd2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleSegmentAttributes.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleSegmentAttributes.java @@ -54,4 +54,8 @@ public interface OracleSegmentAttributes extends SQLObject { SQLObject getStorage(); void setStorage(SQLObject storage); + + boolean isCompressForOltp(); + + void setCompressForOltp(boolean compressForOltp); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleSegmentAttributesImpl.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleSegmentAttributesImpl.java index 3dde93ed0b..08328db941 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleSegmentAttributesImpl.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleSegmentAttributesImpl.java @@ -32,6 +32,7 @@ public abstract class OracleSegmentAttributesImpl extends SQLObjectImpl implemen private Integer freeLists; private Boolean compress; private Integer compressLevel; + private boolean compressForOltp; private Integer pctthreshold; private Boolean logging; @@ -137,4 +138,12 @@ public abstract class OracleSegmentAttributesImpl extends SQLObjectImpl implemen public void setStorage(SQLObject storage) { this.storage = storage; } + + public boolean isCompressForOltp() { + return compressForOltp; + } + + public void setCompressForOltp(boolean compressForOltp) { + this.compressForOltp = compressForOltp; + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/clause/OracleLobStorageClause.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/clause/OracleLobStorageClause.java index f1c7c0a138..1e03fc04c6 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/clause/OracleLobStorageClause.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/clause/OracleLobStorageClause.java @@ -20,17 +20,19 @@ import java.util.List; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObject; import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl; +import com.alibaba.druid.sql.dialect.oracle.ast.OracleSegmentAttributesImpl; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class OracleLobStorageClause extends OracleSQLObjectImpl { +public class OracleLobStorageClause extends OracleSegmentAttributesImpl implements OracleSQLObject { private final List items = new ArrayList(); private boolean secureFile = false; private boolean basicFile = false; - private SQLName tableSpace; private Boolean enable; @@ -47,11 +49,15 @@ public class OracleLobStorageClause extends OracleSQLObjectImpl { private SQLExpr pctversion; + protected void accept0(SQLASTVisitor visitor) { + this.accept0((OracleASTVisitor) visitor); + } + @Override public void accept0(OracleASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, items); - acceptChild(visitor, tableSpace); + acceptChild(visitor, tablespace); } visitor.endVisit(this); } @@ -92,14 +98,6 @@ public class OracleLobStorageClause extends OracleSQLObjectImpl { this.basicFile = basicFile; } - public SQLName getTableSpace() { - return tableSpace; - } - - public void setTableSpace(SQLName tableSpace) { - this.tableSpace = tableSpace; - } - public Boolean getCache() { return cache; } 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 515f27d809..a26eb8e9e6 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 @@ -59,6 +59,7 @@ public class OracleCreateTableStatement extends SQLCreateTableStatement implemen private Boolean logging; private Boolean compress; private Integer compressLevel; + private boolean compressForOltp; private boolean onCommit; private boolean preserveRows; @@ -68,14 +69,15 @@ public class OracleCreateTableStatement extends SQLCreateTableStatement implemen private DeferredSegmentCreation deferredSegmentCreation; - private boolean forOLTP; - private Boolean enableRowMovement; private List clusterColumns = new ArrayList(); private SQLName cluster; private Organization organization; + + private SQLName of; + private OIDIndex oidIndex; public OracleCreateTableStatement() { super (JdbcConstants.ORACLE); @@ -240,12 +242,34 @@ public class OracleCreateTableStatement extends SQLCreateTableStatement implemen this.storage = (OracleStorageClause) storage; } - public boolean isForOLTP() { - return forOLTP; + public SQLName getOf() { + return of; } - public void setForOLTP(boolean forOLTP) { - this.forOLTP = forOLTP; + public void setOf(SQLName of) { + if (of != null) { + of.setParent(this); + } + this.of = of; + } + + public OIDIndex getOidIndex() { + return oidIndex; + } + + public void setOidIndex(OIDIndex oidIndex) { + if (oidIndex != null) { + oidIndex.setParent(this); + } + this.oidIndex = oidIndex; + } + + public boolean isCompressForOltp() { + return compressForOltp; + } + + public void setCompressForOltp(boolean compressForOltp) { + this.compressForOltp = compressForOltp; } public Boolean getEnableRowMovement() { @@ -405,4 +429,33 @@ public class OracleCreateTableStatement extends SQLCreateTableStatement implemen this.terminatedBy = terminatedBy; } } + + public static class OIDIndex extends OracleSegmentAttributesImpl implements OracleSQLObject{ + private SQLName name; + + @Override + public void accept0(OracleASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + acceptChild(visitor, tablespace); + acceptChild(visitor, storage); + } + visitor.endVisit(this); + } + + protected void accept0(SQLASTVisitor visitor) { + accept0((OracleASTVisitor) visitor); + } + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + if (name != null) { + name.setParent(this); + } + this.name = name; + } + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUsingIndexClause.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUsingIndexClause.java index a60dad8782..3c75ecbf91 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUsingIndexClause.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUsingIndexClause.java @@ -18,32 +18,24 @@ 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.SQLPartition; +import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObject; import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl; +import com.alibaba.druid.sql.dialect.oracle.ast.OracleSegmentAttributesImpl; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleStorageClause; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; import java.util.ArrayList; import java.util.List; -public class OracleUsingIndexClause extends OracleSQLObjectImpl { +public class OracleUsingIndexClause extends OracleSegmentAttributesImpl implements OracleSQLObject { private SQLName index; - private SQLName tablespace; - - private SQLExpr ptcfree; - private SQLExpr pctused; - private SQLExpr initrans; - private SQLExpr maxtrans; private Boolean enable = null; private boolean computeStatistics = false; - - private OracleStorageClause storage; - - private Integer compress = null; - private boolean nocompress = false; - private Boolean logging = null; + private boolean reverse; private List localPartitionIndex = new ArrayList(); @@ -51,6 +43,10 @@ public class OracleUsingIndexClause extends OracleSQLObjectImpl { } + protected void accept0(SQLASTVisitor visitor) { + accept0((OracleASTVisitor) visitor); + } + @Override public void accept0(OracleASTVisitor visitor) { if (visitor.visit(this)) { @@ -61,14 +57,6 @@ public class OracleUsingIndexClause extends OracleSQLObjectImpl { visitor.endVisit(this); } - public OracleStorageClause getStorage() { - return storage; - } - - public void setStorage(OracleStorageClause storage) { - this.storage = storage; - } - public Boolean getEnable() { return enable; } @@ -93,68 +81,12 @@ public class OracleUsingIndexClause extends OracleSQLObjectImpl { this.index = index; } - public SQLName getTablespace() { - return tablespace; + public boolean isReverse() { + return reverse; } - public void setTablespace(SQLName tablespace) { - this.tablespace = tablespace; - } - - public SQLExpr getPtcfree() { - return ptcfree; - } - - public void setPtcfree(SQLExpr ptcfree) { - this.ptcfree = ptcfree; - } - - public SQLExpr getPctused() { - return pctused; - } - - public void setPctused(SQLExpr pctused) { - this.pctused = pctused; - } - - public SQLExpr getInitrans() { - return initrans; - } - - public void setInitrans(SQLExpr initrans) { - this.initrans = initrans; - } - - public SQLExpr getMaxtrans() { - return maxtrans; - } - - public void setMaxtrans(SQLExpr maxtrans) { - this.maxtrans = maxtrans; - } - - public Integer getCompress() { - return compress; - } - - public void setCompress(Integer compress) { - this.compress = compress; - } - - public boolean isNocompress() { - return nocompress; - } - - public void setNocompress(boolean nocompress) { - this.nocompress = nocompress; - } - - public Boolean getLogging() { - return logging; - } - - public void setLogging(Boolean logging) { - this.logging = logging; + public void setReverse(boolean reverse) { + this.reverse = reverse; } public List getLocalPartitionIndex() { 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 2a10e562bf..1de07e8c38 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 @@ -56,6 +56,26 @@ public class OracleCreateTableParser extends SQLCreateTableParser { public OracleCreateTableStatement parseCrateTable(boolean acceptCreate) { OracleCreateTableStatement stmt = (OracleCreateTableStatement) super.parseCrateTable(acceptCreate); + if (lexer.token() == Token.OF) { + lexer.nextToken(); + stmt.setOf(this.exprParser.name()); + + if (identifierEquals("OIDINDEX")) { + lexer.nextToken(); + + OracleCreateTableStatement.OIDIndex oidIndex = new OracleCreateTableStatement.OIDIndex(); + + if (lexer.token() != Token.LPAREN) { + oidIndex.setName(this.exprParser.name()); + } + accept(Token.LPAREN); + this.getExprParser().parseSegmentAttributes(oidIndex); + accept(Token.RPAREN); + + stmt.setOidIndex(oidIndex); + } + } + for (;;) { this.getExprParser().parseSegmentAttributes(stmt); @@ -101,31 +121,6 @@ public class OracleCreateTableParser extends SQLCreateTableParser { } //stmt.setEnable(Boolean.FALSE); continue; - } else if (lexer.token() == Token.NOCOMPRESS || identifierEquals("NOCOMPRESS")) { - lexer.nextToken(); - stmt.setCompress(Boolean.FALSE); - continue; - } else if (identifierEquals("COMPRESS")) { - lexer.nextToken(); - stmt.setCompress(Boolean.TRUE); - - if (lexer.token() == Token.LITERAL_INT) { - int compressLevel = ((SQLNumericLiteralExpr)this.exprParser.primary()).getNumber().intValue(); - stmt.setCompressLevel(compressLevel); - } - continue; - } else if (lexer.token() == Token.FOR) { - lexer.nextToken(); - if (lexer.token() == Token.ALL) { - lexer.nextToken(); - throw new ParserException("TODO : " + lexer.info()); - } else if (identifierEquals("OLTP")) { - lexer.nextToken(); - stmt.setForOLTP(true); - } else { - throw new ParserException("TODO : " + lexer.info()); - } - continue; } else if (lexer.token() == Token.ON) { lexer.nextToken(); accept(Token.COMMIT); @@ -151,10 +146,10 @@ public class OracleCreateTableParser extends SQLCreateTableParser { this.exprParser.names(stmt.getClusterColumns(), cluster); accept(Token.RPAREN); continue; - } else if (lexer.token() == Token.STORAGE) { - OracleStorageClause storage = ((OracleExprParser) this.exprParser).parseStorage(); - stmt.setStorage(storage); - continue; +// } else if (lexer.token() == Token.STORAGE) { +// OracleStorageClause storage = ((OracleExprParser) this.exprParser).parseStorage(); +// stmt.setStorage(storage); +// continue; } else if (lexer.token() == Token.LOB) { OracleLobStorageClause lobStorage = ((OracleExprParser) this.exprParser).parseLobStorage(); stmt.setLobStorage(lobStorage); 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 8d95544a53..f58e51cabd 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 @@ -1030,23 +1030,9 @@ public class OracleExprParser extends SQLExprParser { OracleUsingIndexClause using = new OracleUsingIndexClause(); for (;;) { - if (lexer.token() == Token.TABLESPACE) { - lexer.nextToken(); - using.setTablespace(this.name()); - continue; - } else if (lexer.token() == Token.PCTFREE) { - lexer.nextToken(); - using.setPtcfree(this.expr()); - continue; - } else if (lexer.token() == Token.INITRANS) { - lexer.nextToken(); - using.setInitrans(this.expr()); - continue; - } else if (lexer.token() == Token.MAXTRANS) { - lexer.nextToken(); - using.setMaxtrans(this.expr()); - continue; - } else if (lexer.token() == Token.COMPUTE) { + this.parseSegmentAttributes(using); + + if (lexer.token() == Token.COMPUTE) { lexer.nextToken(); acceptIdentifier("STATISTICS"); using.setComputeStatistics(true); @@ -1055,14 +1041,14 @@ public class OracleExprParser extends SQLExprParser { lexer.nextToken(); using.setEnable(true); continue; + } else if (identifierEquals("REVERSE")) { + lexer.nextToken(); + using.setReverse(true); + continue; } else if (lexer.token() == Token.DISABLE) { lexer.nextToken(); using.setEnable(false); continue; - } else if (lexer.token() == Token.STORAGE) { - OracleStorageClause storage = parseStorage(); - using.setStorage(storage); - continue; } else if (identifierEquals("LOCAL")) { lexer.nextToken(); accept(Token.LPAREN); @@ -1084,23 +1070,9 @@ public class OracleExprParser extends SQLExprParser { } accept(Token.RPAREN); continue; - } else if (identifierEquals("NOLOGGING")) { - lexer.nextToken(); - using.setLogging(Boolean.FALSE); - continue; - } else if (identifierEquals("COMPRESS")) { - throw new ParserException("TODO " + lexer.token()); } else if (lexer.token() == Token.IDENTIFIER) { using.setTablespace(this.name()); break; - } else if (lexer.token() == Token.NOCOMPRESS || identifierEquals("NOCOMPRESS")) { - lexer.nextToken(); - using.setNocompress(true); - continue; - } else if (lexer.token() == Token.LOGGING || identifierEquals("LOGGING")) { - lexer.nextToken(); - using.setLogging(Boolean.TRUE); - continue; } else { break; } @@ -1175,11 +1147,7 @@ public class OracleExprParser extends SQLExprParser { lexer.nextToken(); for (;;) { - if (lexer.token() == Token.TABLESPACE) { - lexer.nextToken(); - clause.setTableSpace(this.name()); - continue; - } + this.parseSegmentAttributes(clause); if (lexer.token() == Token.ENABLE) { lexer.nextToken(); @@ -1212,13 +1180,7 @@ public class OracleExprParser extends SQLExprParser { } continue; } - - if (lexer.token() == Token.NOCOMPRESS) { - lexer.nextToken(); - clause.setCompress(false); - continue; - } - + if (lexer.token() == Token.KEEP_DUPLICATES) { lexer.nextToken(); clause.setKeepDuplicate(true); @@ -1528,6 +1490,14 @@ public class OracleExprParser extends SQLExprParser { } else if (identifierEquals("BASIC")) { lexer.nextToken(); // TODO COMPRESS BASIC + } else if (lexer.token() == Token.FOR) { + lexer.nextToken(); + if (identifierEquals("OLTP")) { + lexer.nextToken(); + attributes.setCompressForOltp(true); + } else { + throw new ParserException("TODO : " + lexer.info()); + } } continue; } else if (identifierEquals("NOCOMPRESS")) { 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 9b17dab9cf..31d97a1d3a 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 @@ -456,4 +456,8 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(OracleCreateTableStatement.OracleExternalRecordFormat x); void endVisit(OracleCreateTableStatement.OracleExternalRecordFormat x); + + boolean visit(OracleCreateTableStatement.OIDIndex x); + + void endVisit(OracleCreateTableStatement.OIDIndex x); } 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 4aa8514b4c..fe8733d86b 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 @@ -1101,5 +1101,12 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora public void endVisit(OracleCreateTableStatement.OracleExternalRecordFormat x) { + } + public boolean visit(OracleCreateTableStatement.OIDIndex x) { + return true; + } + + public void endVisit(OracleCreateTableStatement.OIDIndex 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 7d7e75ec1d..3ee3248e47 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 @@ -2093,6 +2093,17 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS public boolean visit(OracleCreateTableStatement x) { this.visit((SQLCreateTableStatement) x); + if (x.getOf() != null) { + println(); + print0(ucase ? "OF " : "of "); + x.getOf().accept(this); + } + + if (x.getOidIndex() != null) { + println(); + x.getOidIndex().accept(this); + } + if (x.getOrganization() != null) { println(); incrementIndent(); @@ -2760,66 +2771,31 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS if (x.getIndex() != null) { print(' '); x.getIndex().accept(this); - } else { - if (x.getPtcfree() != null) { - println(); - print0(ucase ? "PCTFREE " : "pctfree "); - x.getPtcfree().accept(this); - } + } - if (x.getInitrans() != null) { - println(); - print0(ucase ? "INITRANS " : "initrans "); - x.getInitrans().accept(this); - } + printOracleSegmentAttributes(x); - if (x.getMaxtrans() != null) { - println(); - print0(ucase ? "MAXTRANS " : "maxtrans "); - x.getMaxtrans().accept(this); - } + if (x.isComputeStatistics()) { + println(); + print0(ucase ? "COMPUTE STATISTICS" : "compute statistics"); + } - if (x.isComputeStatistics()) { + if (x.getEnable() != null) { + if (x.getEnable().booleanValue()) { println(); - print0(ucase ? "COMPUTE STATISTICS" : "compute statistics"); - } - - if (x.getTablespace() != null) { + print0(ucase ? "ENABLE" : "enable"); + } else { println(); - print0(ucase ? "TABLESPACE " : "tablespace "); - x.getTablespace().accept(this); - } - - if (x.getEnable() != null) { - if (x.getEnable().booleanValue()) { - println(); - print0(ucase ? "ENABLE" : "enable"); - } else { - println(); - print0(ucase ? "DISABLE" : "disable"); - } - } - - if (x.getStorage() != null) { - println(); - x.getStorage().accept(this); - } - - if (x.isNocompress()) { - println(); - print0(ucase ? "NOCOMPRESS" : "nocompress"); - } - - if (x.getLogging() != null) { - println(); - if (x.getLogging().booleanValue()) { - print0(ucase ? "LOGGING" : "logging"); - } else { - print0(ucase ? "NOLOGGING" : "nologging"); - } + print0(ucase ? "DISABLE" : "disable"); } } + if (x.isReverse()) { + println(); + print0(ucase ? "REVERSE" : "reverse"); + } + + return false; } @@ -2844,11 +2820,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } print0(" ("); incrementIndent(); - if (x.getTableSpace() != null) { - println(); - print0(ucase ? "TABLESPACE " : "tablespace "); - x.getTableSpace().accept(this); - } + printOracleSegmentAttributes(x); if (x.getEnable() != null) { println(); @@ -2859,11 +2831,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } } - if (x.getStorageClause() != null) { - println(); - x.getStorageClause().accept(this); - } - if (x.getChunk() != null) { println(); print0(ucase ? "CHUNK " : "chunk "); @@ -2879,24 +2846,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } } - if (x.getLogging() != null) { - println(); - if (x.getLogging().booleanValue()) { - print0(ucase ? "LOGGING" : "logging"); - } else { - print0(ucase ? "NOLOGGING" : "nologging"); - } - } - - if (x.getCompress() != null) { - println(); - if (x.getCompress().booleanValue()) { - print0(ucase ? "COMPRESS" : "compress"); - } else { - print0(ucase ? "NOCOMPRESS" : "nocompress"); - } - } - if (x.getKeepDuplicate() != null) { println(); if (x.getKeepDuplicate().booleanValue()) { @@ -3156,4 +3105,24 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS public void endVisit(OracleCreateTableStatement.OracleExternalRecordFormat x) { } + + public boolean visit(OracleCreateTableStatement.OIDIndex x) { + print0(ucase ? "OIDINDEX" : "oidindex"); + + if (x.getName() != null) { + print(' '); + x.getName().accept(this); + } + print(" ("); + incrementIndent(); + printOracleSegmentAttributes(x); + decrementIndent(); + println(); + print(")"); + return false; + } + + public void endVisit(OracleCreateTableStatement.OIDIndex 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 3292b313a2..7dc6e55652 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 @@ -1437,4 +1437,14 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle public void endVisit(OracleCreateTableStatement.OracleExternalRecordFormat x) { } + + @Override + public boolean visit(OracleCreateTableStatement.OIDIndex x) { + return false; + } + + @Override + public void endVisit(OracleCreateTableStatement.OIDIndex x) { + + } } 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 0bc28625d9..d91c0288d6 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -381,6 +381,7 @@ public class SQLExprParser extends SQLParser { case IDENTITY: case EXTRACT: case DESC: + case DO: sqlExpr = new SQLIdentifierExpr(lexer.stringVal()); lexer.nextToken(); break; @@ -1037,6 +1038,7 @@ public class SQLExprParser extends SQLParser { case OVER: case ORDER: case DO: + case JOIN: identName = lexer.stringVal(); lexer.nextToken(); break; @@ -2249,7 +2251,7 @@ public class SQLExprParser extends SQLParser { expr = this.primaryRest(expr); expr = this.exprRest(expr); } - } else if (lexer.token() == Token.DO) { + } else if (lexer.token() == Token.DO || lexer.token() == Token.JOIN) { expr = this.name(); } else { expr = expr(); diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java index 3f32928b2b..7a3b5ff822 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java @@ -120,6 +120,7 @@ public class SQLParser { case END: case DEFERRED: case OUTER: + case DO: alias = lexer.stringVal(); lexer.nextToken(); break; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest18.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest18.java index 5974cbd96b..96ee00ae45 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest18.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest18.java @@ -63,8 +63,8 @@ public class OracleCreateTableTest18 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"USERS\"\n" + + "\t\tCOMPUTE STATISTICS\n" + "\t\tENABLE\n" + ")\n" + "PCTFREE 10\n" + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest19.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest19.java index c30f405e77..dff0d20434 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest19.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest19.java @@ -67,9 +67,7 @@ public class OracleCreateTableTest19 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"USERS\"\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tINITIAL 65536\n" + "\t\t\tFREELISTS 1\n" + @@ -78,6 +76,8 @@ public class OracleCreateTableTest19 extends OracleTest { "\t\t\tFLASH_CACHE DEFAULT\n" + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE\n" + ")\n" + "PCTFREE 10\n" + "PCTUSED 40\n" + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest20.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest20.java index 2b90d051c2..fb44637009 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest20.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest20.java @@ -68,8 +68,8 @@ public class OracleCreateTableTest20 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"USERS\"\n" + + "\t\tCOMPUTE STATISTICS\n" + "\t\tENABLE\n" + ")\n" + "PCTFREE 10\n" + @@ -80,12 +80,12 @@ public class OracleCreateTableTest20 extends OracleTest { "LOGGING\n" + "TABLESPACE \"USERS\"\n" + "LOB (\"DATA\") STORE AS SECUREFILE (\n" + + "\tNOCOMPRESS\n" + + "\tLOGGING\n" + "\tTABLESPACE \"USERS\"\n" + "\tENABLE STORAGE IN ROW\n" + "\tCHUNK 8192\n" + "\tNOCACHE\n" + - "\tLOGGING\n" + - "\tNOCOMPRESS\n" + "\tKEEP_DUPLICATES\n" + ")",// SQLUtils.toSQLString(statement, JdbcConstants.ORACLE)); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest41.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest41.java index dab4fc5624..179ff5db18 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest41.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest41.java @@ -81,9 +81,7 @@ public class OracleCreateTableTest41 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"USERS\"\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tINITIAL 65536\n" + "\t\t\tFREELISTS 1\n" + @@ -91,7 +89,9 @@ public class OracleCreateTableTest41 extends OracleTest { "\t\t\tBUFFER_POOL DEFAULT\n" + "\t\t\tFLASH_CACHE DEFAULT\n" + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + - "\t\t),\n" + + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE,\n" + "\tSUPPLEMENTAL LOG GROUP \"GGS_16346\" (\"NUM\") ALWAYS,\n" + "\tSUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS,\n" + "\tSUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS,\n" + @@ -115,8 +115,8 @@ public class OracleCreateTableTest41 extends OracleTest { "\tCELL_FLASH_CACHE DEFAULT\n" + ")\n" + "LOB (\"CLOB_COL\") STORE AS BASICFILE (\n" + + "\tLOGGING\n" + "\tTABLESPACE \"USERS\"\n" + - "\tENABLE STORAGE IN ROW\n" + "\tSTORAGE (\n" + "\t\tINITIAL 65536\n" + "\t\tFREELISTS 1\n" + @@ -125,9 +125,9 @@ public class OracleCreateTableTest41 extends OracleTest { "\t\tFLASH_CACHE DEFAULT\n" + "\t\tCELL_FLASH_CACHE DEFAULT\n" + "\t)\n" + + "\tENABLE STORAGE IN ROW\n" + "\tCHUNK 8192\n" + "\tNOCACHE\n" + - "\tLOGGING\n" + "\tRETENTION\n" + ")",// SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest42.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest42.java index 1a0e70820e..484204716a 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest42.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest42.java @@ -65,11 +65,11 @@ public class OracleCreateTableTest42 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + - "\t\tTABLESPACE \"USERS\"\n" + - "\t\tENABLE\n" + "\t\tNOCOMPRESS\n" + - "\t\tLOGGING,\n" + + "\t\tLOGGING\n" + + "\t\tTABLESPACE \"USERS\"\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE,\n" + "\tSUPPLEMENTAL LOG GROUP \"GGS_15754\" (\"GROUP_NAME\", \"GROUP_KEY\", \"LOG_CMPLT_CSN\", \"LOG_CMPLT_XIDS_SEQ\") ALWAYS,\n" + "\tSUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS,\n" + "\tSUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS,\n" + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest44.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest44.java index c1b15c88cb..eea8c97880 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest44.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest44.java @@ -82,9 +82,7 @@ public class OracleCreateTableTest44 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"USERS\"\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tINITIAL 65536\n" + "\t\t\tFREELISTS 1\n" + @@ -93,6 +91,8 @@ public class OracleCreateTableTest44 extends OracleTest { "\t\t\tFLASH_CACHE DEFAULT\n" + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE\n" + ")\n" + "PCTFREE 10\n" + "PCTUSED 40\n" + @@ -110,8 +110,8 @@ public class OracleCreateTableTest44 extends OracleTest { "\tCELL_FLASH_CACHE DEFAULT\n" + ")\n" + "LOB (\"COL9\") STORE AS BASICFILE (\n" + + "\tLOGGING\n" + "\tTABLESPACE \"USERS\"\n" + - "\tENABLE STORAGE IN ROW\n" + "\tSTORAGE (\n" + "\t\tINITIAL 65536\n" + "\t\tFREELISTS 1\n" + @@ -120,9 +120,9 @@ public class OracleCreateTableTest44 extends OracleTest { "\t\tFLASH_CACHE DEFAULT\n" + "\t\tCELL_FLASH_CACHE DEFAULT\n" + "\t)\n" + + "\tENABLE STORAGE IN ROW\n" + "\tCHUNK 8192\n" + "\tNOCACHE\n" + - "\tLOGGING\n" + "\tRETENTION\n" + ")",// SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest46.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest46.java index 890002ed60..c868984f9b 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest46.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest46.java @@ -72,15 +72,15 @@ public class OracleCreateTableTest46 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"APPDATA1M\"\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tINITIAL 65536\n" + "\t\t\tFREELISTS 1\n" + "\t\t\tFREELIST GROUPS 1\n" + "\t\t\tBUFFER_POOL DEFAULT\n" + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE\n" + ")\n" + "PCTFREE 10\n" + "PCTUSED 40\n" + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest47.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest47.java index 9203516850..ce8f147841 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest47.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest47.java @@ -84,15 +84,15 @@ public class OracleCreateTableTest47 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"APPINDX1M\"\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tINITIAL 4194304\n" + "\t\t\tFREELISTS 1\n" + "\t\t\tFREELIST GROUPS 1\n" + "\t\t\tBUFFER_POOL DEFAULT\n" + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE\n" + ")\n" + "PCTFREE 10\n" + "PCTUSED 40\n" + @@ -108,17 +108,17 @@ public class OracleCreateTableTest47 extends OracleTest { "\tBUFFER_POOL DEFAULT\n" + ")\n" + "LOB (\"CONTENT\") STORE AS (\n" + + "\tLOGGING\n" + "\tTABLESPACE \"APPDATA1M\"\n" + - "\tENABLE STORAGE IN ROW\n" + "\tSTORAGE (\n" + "\t\tINITIAL 4194304\n" + "\t\tFREELISTS 1\n" + "\t\tFREELIST GROUPS 1\n" + "\t\tBUFFER_POOL DEFAULT\n" + "\t)\n" + + "\tENABLE STORAGE IN ROW\n" + "\tCHUNK 8192\n" + "\tNOCACHE\n" + - "\tLOGGING\n" + ")",// SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest48.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest48.java index 30b4e7d6b2..bb106cee98 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest48.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest48.java @@ -77,15 +77,15 @@ public class OracleCreateTableTest48 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"BOPSINDXTS\"\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tINITIAL 65536\n" + "\t\t\tFREELISTS 1\n" + "\t\t\tFREELIST GROUPS 1\n" + "\t\t\tBUFFER_POOL DEFAULT\n" + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE\n" + ")\n" + "PCTFREE 10\n" + "PCTUSED 40\n" + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest49.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest49.java index 6bd92e57ef..7427f1810f 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest49.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest49.java @@ -178,13 +178,13 @@ public class OracleCreateTableTest49 extends OracleTest { "\tBUFFER_POOL DEFAULT\n" + ")\n" + "LOB (\"DETAIL\") STORE AS (\n" + - "\tENABLE STORAGE IN ROW\n" + + "\tLOGGING\n" + "\tSTORAGE (\n" + "\t\tBUFFER_POOL DEFAULT\n" + "\t)\n" + + "\tENABLE STORAGE IN ROW\n" + "\tCHUNK 8192\n" + "\tNOCACHE\n" + - "\tLOGGING\n" + ")\n" + "PARTITION BY RANGE (\"GMT_CREATE\")\n" + "(\n" + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest50.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest50.java index d0ef507e32..c25180418f 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest50.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest50.java @@ -236,10 +236,10 @@ public class OracleCreateTableTest50 extends OracleTest { "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + "\t\tTABLESPACE NOVALIDATE\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tBUFFER_POOL DEFAULT\n" + "\t\t)\n" + + "\t\tENABLE\n" + ")\n" + "PCTFREE 10\n" + "PCTUSED 40\n" + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest52.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest52.java index 7e998dcb53..347d5a7e42 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest52.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest52.java @@ -76,15 +76,15 @@ public class OracleCreateTableTest52 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"APPDATA1M\"\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tINITIAL 65536\n" + "\t\t\tFREELISTS 1\n" + "\t\t\tFREELIST GROUPS 1\n" + "\t\t\tBUFFER_POOL DEFAULT\n" + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE\n" + ")\n" + "PCTFREE 10\n" + "PCTUSED 40\n" + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest53.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest53.java index 40f4079bc3..39cbb4b0c0 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest53.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest53.java @@ -78,15 +78,15 @@ public class OracleCreateTableTest53 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"SYSTEM\"\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tINITIAL 65536\n" + "\t\t\tFREELISTS 1\n" + "\t\t\tFREELIST GROUPS 1\n" + "\t\t\tBUFFER_POOL DEFAULT\n" + - "\t\t),\n" + + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE,\n" + "\tFOREIGN KEY (\"RUNID\", \"UNIT_NUMBER\")\n" + "\t\tREFERENCES \"B2BDBA\".\"PLSQL_PROFILER_UNITS\" (\"RUNID\", \"UNIT_NUMBER\") ENABLE\n" + ")\n" + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest55.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest55.java index 0d5bc8dcf5..5cf87623d5 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest55.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest55.java @@ -68,17 +68,17 @@ public class OracleCreateTableTest55 extends OracleTest { "\tBUFFER_POOL DEFAULT\n" + ")\n" + "LOB (\"C\") STORE AS (\n" + + "\tLOGGING\n" + "\tTABLESPACE \"USERS\"\n" + - "\tDISABLE STORAGE IN ROW\n" + "\tSTORAGE (\n" + "\t\tINITIAL 1048576\n" + "\t\tFREELISTS 1\n" + "\t\tFREELIST GROUPS 1\n" + "\t\tBUFFER_POOL DEFAULT\n" + "\t)\n" + + "\tDISABLE STORAGE IN ROW\n" + "\tCHUNK 8192\n" + "\tNOCACHE\n" + - "\tLOGGING\n" + ")",// SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest56.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest56.java index 77c1cb40e7..41cf9cb54d 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest56.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest56.java @@ -71,15 +71,15 @@ public class OracleCreateTableTest56 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"PERFSTAT\"\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tINITIAL 1048576\n" + "\t\t\tFREELISTS 1\n" + "\t\t\tFREELIST GROUPS 1\n" + "\t\t\tBUFFER_POOL DEFAULT\n" + - "\t\t),\n" + + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE,\n" + "\tCONSTRAINT \"STATS$BG_EVENT_SUMMARY_FK\" FOREIGN KEY (\"SNAP_ID\", \"DBID\", \"INSTANCE_NUMBER\")\n" + "\t\tREFERENCES \"PERFSTAT\".\"STATS$SNAPSHOT\" (\"SNAP_ID\", \"DBID\", \"INSTANCE_NUMBER\")\n" + "\t\tON DELETE CASCADE ENABLE\n" + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest57.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest57.java index 3349d8c431..ea6b939fbe 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest57.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest57.java @@ -169,15 +169,15 @@ public class OracleCreateTableTest57 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"APPINDX1M\"\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tINITIAL 83886080\n" + "\t\t\tFREELISTS 1\n" + "\t\t\tFREELIST GROUPS 1\n" + "\t\t\tBUFFER_POOL DEFAULT\n" + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE\n" + ")\n" + "CLUSTER \"SEARCHTEST\".\"CLUSTER_PRODUCT_COMPANY_ID\" (\"COMPANY_ID\")",// SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest58.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest58.java index 01e3a6b31d..5f6adad0cc 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest58.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest58.java @@ -79,12 +79,12 @@ public class OracleCreateTableTest58 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + + "\t\tLOGGING\n" + "\t\tTABLESPACE \"APPINDX1K\"\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tBUFFER_POOL DEFAULT\n" + "\t\t)\n" + - "\t\tLOGGING\n" + + "\t\tENABLE\n" + ")\n" + "PCTFREE 10\n" + "PCTUSED 40\n" + diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest61.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest61.java index 073cacf9aa..389544ea6c 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest61.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest61.java @@ -94,9 +94,7 @@ public class OracleCreateTableTest61 extends OracleTest { "\t\tPCTFREE 10\n" + "\t\tINITRANS 2\n" + "\t\tMAXTRANS 255\n" + - "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"NIRVANA1M_IND\"\n" + - "\t\tENABLE\n" + "\t\tSTORAGE (\n" + "\t\t\tINITIAL 1048576\n" + "\t\t\tFREELISTS 1\n" + @@ -104,7 +102,9 @@ public class OracleCreateTableTest61 extends OracleTest { "\t\t\tBUFFER_POOL DEFAULT\n" + "\t\t\tFLASH_CACHE DEFAULT\n" + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + - "\t\t),\n" + + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE,\n" + "\tCONSTRAINT \"FK_ADMIN_MA_REFERENCE_ADMIN_MA\" FOREIGN KEY (\"MAIL_CATEGORY_ID\")\n" + "\t\tREFERENCES \"NIRVANA\".\"ADMIN_MAIL_CATEGORY\" (\"ID\") ENABLE\n" + ")\n" + @@ -124,8 +124,8 @@ public class OracleCreateTableTest61 extends OracleTest { "\tCELL_FLASH_CACHE DEFAULT\n" + ")\n" + "LOB (\"CONTENT\") STORE AS BASICFILE (\n" + + "\tLOGGING\n" + "\tTABLESPACE \"NIRVANA1M\"\n" + - "\tENABLE STORAGE IN ROW\n" + "\tSTORAGE (\n" + "\t\tINITIAL 1048576\n" + "\t\tFREELISTS 1\n" + @@ -134,9 +134,9 @@ public class OracleCreateTableTest61 extends OracleTest { "\t\tFLASH_CACHE DEFAULT\n" + "\t\tCELL_FLASH_CACHE DEFAULT\n" + "\t)\n" + + "\tENABLE STORAGE IN ROW\n" + "\tCHUNK 8192\n" + "\tNOCACHE\n" + - "\tLOGGING\n" + ")",// SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest63.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest63.java new file mode 100644 index 0000000000..35fca77c47 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest63.java @@ -0,0 +1,94 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.oracle.create; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +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; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; + +import java.util.List; + +public class OracleCreateTableTest63 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" OF \"ZHANGZJ\".\"T_OBJECT\" \n" + + " OIDINDEX ( PCTFREE 10 INITRANS 2 MAXTRANS 255 \n" + + " STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"USERS\" ) \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING\n" + + " STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"USERS\" "; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("CREATE TABLE \"SC_001\".\"TB_001\"\n" + + "OF \"ZHANGZJ\".\"T_OBJECT\"\n" + + "OIDINDEX (\n" + + "\tPCTFREE 10\n" + + "\tINITRANS 2\n" + + "\tMAXTRANS 255\n" + + "\tTABLESPACE \"USERS\"\n" + + "\tSTORAGE (\n" + + "\t\tINITIAL 1048576\n" + + "\t\tFREELISTS 1\n" + + "\t\tFREELIST GROUPS 1\n" + + "\t\tBUFFER_POOL DEFAULT\n" + + "\t)\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"USERS\"\n" + + "STORAGE (\n" + + "\tINITIAL 1048576\n" + + "\tFREELISTS 1\n" + + "\tFREELIST GROUPS 1\n" + + "\tBUFFER_POOL DEFAULT\n" + + ")",// + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.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.assertEquals(0, visitor.getColumns().size()); + +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "MEMBER_ID"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest64.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest64.java new file mode 100644 index 0000000000..ef4b3c30bb --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest64.java @@ -0,0 +1,141 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.oracle.create; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +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; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; + +import java.util.List; + +public class OracleCreateTableTest64 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " (\t\"STOREID\" VARCHAR2(40) NOT NULL ENABLE, \n" + + "\t\"OPPTIME\" DATE, \n" + + "\t\"CREATETIME\" DATE, \n" + + "\t\"NAME\" VARCHAR2(254), \n" + + "\t\"FILEPATH\" VARCHAR2(254), \n" + + "\t\"FILENAME\" VARCHAR2(64), \n" + + "\t\"EVENTCODE\" VARCHAR2(200), \n" + + "\t\"FILECODE\" VARCHAR2(200), \n" + + "\t\"RESULTCODE\" VARCHAR2(200), \n" + + "\t\"RESULTMESSAGE\" VARCHAR2(4000), \n" + + "\t\"RESULTMEMO\" VARCHAR2(200), \n" + + "\t\"STATUSCODE\" VARCHAR2(200), \n" + + "\t\"STATUSMESSAGE\" VARCHAR2(4000), \n" + + "\t\"UPLOADSUCCESS\" VARCHAR2(200), \n" + + "\t\"BZ\" VARCHAR2(4000), \n" + + "\t\"DATACOUNT\" NUMBER, \n" + + "\t\"FILECONTS\" CLOB, \n" + + "\t\"XFJBH\" VARCHAR2(38)\n" + + " ) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " NOCOMPRESS NOLOGGING\n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"XINFANG\" \n" + + " LOB (\"FILECONTS\") STORE AS BASICFILE (\n" + + " TABLESPACE \"XINFANG\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n" + + " NOCACHE NOLOGGING \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) "; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("CREATE TABLE \"SC_001\".\"TB_001\" (\n" + + "\t\"STOREID\" VARCHAR2(40) NOT NULL ENABLE,\n" + + "\t\"OPPTIME\" DATE,\n" + + "\t\"CREATETIME\" DATE,\n" + + "\t\"NAME\" VARCHAR2(254),\n" + + "\t\"FILEPATH\" VARCHAR2(254),\n" + + "\t\"FILENAME\" VARCHAR2(64),\n" + + "\t\"EVENTCODE\" VARCHAR2(200),\n" + + "\t\"FILECODE\" VARCHAR2(200),\n" + + "\t\"RESULTCODE\" VARCHAR2(200),\n" + + "\t\"RESULTMESSAGE\" VARCHAR2(4000),\n" + + "\t\"RESULTMEMO\" VARCHAR2(200),\n" + + "\t\"STATUSCODE\" VARCHAR2(200),\n" + + "\t\"STATUSMESSAGE\" VARCHAR2(4000),\n" + + "\t\"UPLOADSUCCESS\" VARCHAR2(200),\n" + + "\t\"BZ\" VARCHAR2(4000),\n" + + "\t\"DATACOUNT\" NUMBER,\n" + + "\t\"FILECONTS\" CLOB,\n" + + "\t\"XFJBH\" VARCHAR2(38)\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "NOLOGGING\n" + + "TABLESPACE \"XINFANG\"\n" + + "STORAGE (\n" + + "\tINITIAL 65536\n" + + "\tFREELISTS 1\n" + + "\tFREELIST GROUPS 1\n" + + "\tBUFFER_POOL DEFAULT\n" + + "\tFLASH_CACHE DEFAULT\n" + + "\tCELL_FLASH_CACHE DEFAULT\n" + + ")\n" + + "LOB (\"FILECONTS\") STORE AS BASICFILE (\n" + + "\tNOLOGGING\n" + + "\tTABLESPACE \"XINFANG\"\n" + + "\tSTORAGE (\n" + + "\t\tINITIAL 65536\n" + + "\t\tFREELISTS 1\n" + + "\t\tFREELIST GROUPS 1\n" + + "\t\tBUFFER_POOL DEFAULT\n" + + "\t\tFLASH_CACHE DEFAULT\n" + + "\t\tCELL_FLASH_CACHE DEFAULT\n" + + "\t)\n" + + "\tENABLE STORAGE IN ROW\n" + + "\tCHUNK 8192\n" + + "\tNOCACHE\n" + + "\tRETENTION\n" + + ")",// + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.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.assertEquals(18, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "STOREID"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest65.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest65.java new file mode 100644 index 0000000000..502d774b31 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest65.java @@ -0,0 +1,142 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.oracle.create; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +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; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; + +import java.util.List; + +public class OracleCreateTableTest65 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " (\t\"ID_\" NVARCHAR2(64) NOT NULL ENABLE, \n" + + "\t\"PROC_DEF_ID_\" NVARCHAR2(64), \n" + + "\t\"TASK_DEF_KEY_\" NVARCHAR2(255), \n" + + "\t\"PROC_INST_ID_\" NVARCHAR2(64), \n" + + "\t\"EXECUTION_ID_\" NVARCHAR2(64), \n" + + "\t\"PARENT_TASK_ID_\" NVARCHAR2(64), \n" + + "\t\"NAME_\" NVARCHAR2(255), \n" + + "\t\"DESCRIPTION_\" NVARCHAR2(2000), \n" + + "\t\"OWNER_\" NVARCHAR2(255), \n" + + "\t\"ASSIGNEE_\" NVARCHAR2(255), \n" + + "\t\"START_TIME_\" TIMESTAMP (6) NOT NULL ENABLE, \n" + + "\t\"CLAIM_TIME_\" TIMESTAMP (6), \n" + + "\t\"END_TIME_\" TIMESTAMP (6), \n" + + "\t\"DURATION_\" NUMBER(19,0), \n" + + "\t\"DELETE_REASON_\" NVARCHAR2(2000), \n" + + "\t\"PRIORITY_\" NUMBER(*,0), \n" + + "\t\"DUE_DATE_\" TIMESTAMP (6), \n" + + "\t\"FORM_KEY_\" NVARCHAR2(255), \n" + + "\t PRIMARY KEY (\"ID_\")\n" + + " USING INDEX REVERSE PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" + + " STORAGE(INITIAL 196608 NEXT 8388608 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"RDP_IDX\" ENABLE\n" + + " ) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " NOCOMPRESS LOGGING\n" + + " STORAGE(INITIAL 2097152 NEXT 8388608 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"RDP_DATA\" "; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("CREATE TABLE \"SC_001\".\"TB_001\" (\n" + + "\t\"ID_\" NVARCHAR2(64) NOT NULL ENABLE,\n" + + "\t\"PROC_DEF_ID_\" NVARCHAR2(64),\n" + + "\t\"TASK_DEF_KEY_\" NVARCHAR2(255),\n" + + "\t\"PROC_INST_ID_\" NVARCHAR2(64),\n" + + "\t\"EXECUTION_ID_\" NVARCHAR2(64),\n" + + "\t\"PARENT_TASK_ID_\" NVARCHAR2(64),\n" + + "\t\"NAME_\" NVARCHAR2(255),\n" + + "\t\"DESCRIPTION_\" NVARCHAR2(2000),\n" + + "\t\"OWNER_\" NVARCHAR2(255),\n" + + "\t\"ASSIGNEE_\" NVARCHAR2(255),\n" + + "\t\"START_TIME_\" TIMESTAMP(6) NOT NULL ENABLE,\n" + + "\t\"CLAIM_TIME_\" TIMESTAMP(6),\n" + + "\t\"END_TIME_\" TIMESTAMP(6),\n" + + "\t\"DURATION_\" NUMBER(19, 0),\n" + + "\t\"DELETE_REASON_\" NVARCHAR2(2000),\n" + + "\t\"PRIORITY_\" NUMBER(*, 0),\n" + + "\t\"DUE_DATE_\" TIMESTAMP(6),\n" + + "\t\"FORM_KEY_\" NVARCHAR2(255),\n" + + "\tPRIMARY KEY (\"ID_\")\n" + + "\t\tUSING INDEX\n" + + "\t\tPCTFREE 10\n" + + "\t\tINITRANS 2\n" + + "\t\tMAXTRANS 255\n" + + "\t\tTABLESPACE \"RDP_IDX\"\n" + + "\t\tSTORAGE (\n" + + "\t\t\tINITIAL 196608\n" + + "\t\t\tFREELISTS 1\n" + + "\t\t\tFREELIST GROUPS 1\n" + + "\t\t\tBUFFER_POOL DEFAULT\n" + + "\t\t\tFLASH_CACHE DEFAULT\n" + + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE\n" + + "\t\tREVERSE\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"RDP_DATA\"\n" + + "STORAGE (\n" + + "\tINITIAL 2097152\n" + + "\tFREELISTS 1\n" + + "\tFREELIST GROUPS 1\n" + + "\tBUFFER_POOL DEFAULT\n" + + "\tFLASH_CACHE DEFAULT\n" + + "\tCELL_FLASH_CACHE DEFAULT\n" + + ")",// + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.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.assertEquals(18, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "ID_"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest66.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest66.java new file mode 100644 index 0000000000..64897ee85a --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest66.java @@ -0,0 +1,366 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.oracle.create; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +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; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; + +import java.util.List; + +public class OracleCreateTableTest66 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " (\t\"ID\" VARCHAR2(32) DEFAULT Sys_guid() NOT NULL ENABLE, \n" + + "\t\"ISDEL\" NUMBER(1,0) DEFAULT 0, \n" + + "\t\"DATAVERSION\" CHAR(14) DEFAULT to_char(sysdate,'yyyymmddhh24miss'), \n" + + "\t\"LRR_SFZH\" VARCHAR2(50), \n" + + "\t\"LRSJ\" DATE DEFAULT sysdate, \n" + + "\t\"JQZT\" VARCHAR2(10), \n" + + "\t\"JQDD\" VARCHAR2(200), \n" + + "\t\"BJFS\" VARCHAR2(10), \n" + + "\t\"BJSJ\" DATE, \n" + + "\t\"BJR\" VARCHAR2(150), \n" + + "\t\"BJDH\" VARCHAR2(50), \n" + + "\t\"BJNR\" VARCHAR2(4000), \n" + + "\t\"PDDDSJ\" DATE, \n" + + "\t\"PDJSSJ\" DATE, \n" + + "\t\"CJMJ\" VARCHAR2(50), \n" + + "\t\"CJDW\" VARCHAR2(50), \n" + + "\t\"CJSJ\" DATE, \n" + + "\t\"DDXCSJ\" DATE, \n" + + "\t\"CJCS\" VARCHAR2(2000), \n" + + "\t\"CJJG\" VARCHAR2(2000), \n" + + "\t\"GZYQ\" VARCHAR2(2000), \n" + + "\t\"JQBH\" VARCHAR2(30), \n" + + "\t\"XGR_SFZH\" VARCHAR2(50), \n" + + "\t\"XGSJ\" DATE DEFAULT sysdate, \n" + + "\t\"AJLY\" VARCHAR2(10) DEFAULT '03', \n" + + "\t\"JQMC\" VARCHAR2(200), \n" + + "\t\"CJJGSM\" VARCHAR2(2000), \n" + + "\t\"CJMJ_XM\" VARCHAR2(200), \n" + + "\t\"CJDW_MC\" VARCHAR2(200), \n" + + "\t\"JQLB\" VARCHAR2(20), \n" + + "\t\"XXLX\" VARCHAR2(20), \n" + + "\t\"JJDBH\" VARCHAR2(50), \n" + + "\t\"XZQH\" VARCHAR2(50), \n" + + "\t\"CBQY_BH\" VARCHAR2(50), \n" + + "\t\"SJLY\" VARCHAR2(200) DEFAULT '????', \n" + + "\t\"GXDWDM\" VARCHAR2(20), \n" + + "\t\"BJLXDM\" VARCHAR2(20), \n" + + "\t\"BJXLDM\" VARCHAR2(20), \n" + + "\t\"CJDW_OLD\" VARCHAR2(50), \n" + + "\t\"JQLY\" VARCHAR2(20), \n" + + "\t\"IS_AJ_ANALYZE\" VARCHAR2(1) DEFAULT '9', \n" + + "\t\"SJJE\" VARCHAR2(20), \n" + + "\t\"YSDWFL\" VARCHAR2(5), \n" + + "\t\"YSDWMC\" VARCHAR2(50), \n" + + "\t\"YSDWCBR\" VARCHAR2(20), \n" + + "\t\"CBRLXDH\" VARCHAR2(20), \n" + + "\t\"TBDW\" VARCHAR2(50), \n" + + "\t\"TBR\" VARCHAR2(20), \n" + + "\t\"TBRQ\" DATE, \n" + + "\t\"JZ_JQLB\" VARCHAR2(20), \n" + + "\t\"SFZR\" VARCHAR2(10), \n" + + "\t\"SJDWDM\" VARCHAR2(40), \n" + + "\t CONSTRAINT \"PK_CASE_GG_JQXX1\" PRIMARY KEY (\"ID\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" + + " STORAGE(INITIAL 150994944 NEXT 8388608 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"RDP_IDX\" ENABLE\n" + + " ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " STORAGE(\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"RDP_DATA\" \n" + + " PARTITION BY RANGE (\"LRSJ\") \n" + + " (PARTITION \"T_RANGE_V1\" VALUES LESS THAN (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 80 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " COMPRESS FOR OLTP LOGGING \n" + + " STORAGE(INITIAL 553648128 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"RDP_DATA\" , \n" + + " PARTITION \"T_RANGE_V2\" VALUES LESS THAN (TO_DATE(' 2015-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 80 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " COMPRESS FOR OLTP LOGGING \n" + + " STORAGE(INITIAL 553648128 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"RDP_DATA\" , \n" + + " PARTITION \"T_RANGE_V3\" VALUES LESS THAN (TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 80 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " COMPRESS FOR OLTP LOGGING \n" + + " STORAGE(INITIAL 553648128 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"RDP_DATA\" , \n" + + " PARTITION \"T_RANGE_V4\" VALUES LESS THAN (TO_DATE(' 2016-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 80 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " COMPRESS FOR OLTP LOGGING \n" + + " STORAGE(INITIAL 553648128 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"RDP_DATA\" , \n" + + " PARTITION \"T_RANGE_V5\" VALUES LESS THAN (TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 80 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " COMPRESS FOR OLTP LOGGING \n" + + " STORAGE(INITIAL 553648128 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"RDP_DATA\" , \n" + + " PARTITION \"T_RANGE_V6\" VALUES LESS THAN (TO_DATE(' 2017-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 80 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " COMPRESS FOR OLTP LOGGING \n" + + " STORAGE(INITIAL 553648128 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"RDP_DATA\" , \n" + + " PARTITION \"MAXPART\" VALUES LESS THAN (MAXVALUE) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " COMPRESS FOR OLTP LOGGING \n" + + " STORAGE(INITIAL 8388608 NEXT 8388608 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"RDP_DATA\" ) "; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("CREATE TABLE \"SC_001\".\"TB_001\" (\n" + + "\t\"ID\" VARCHAR2(32) DEFAULT Sys_guid() NOT NULL ENABLE,\n" + + "\t\"ISDEL\" NUMBER(1, 0) DEFAULT 0,\n" + + "\t\"DATAVERSION\" CHAR(14) DEFAULT to_char(SYSDATE, 'yyyymmddhh24miss'),\n" + + "\t\"LRR_SFZH\" VARCHAR2(50),\n" + + "\t\"LRSJ\" DATE DEFAULT SYSDATE,\n" + + "\t\"JQZT\" VARCHAR2(10),\n" + + "\t\"JQDD\" VARCHAR2(200),\n" + + "\t\"BJFS\" VARCHAR2(10),\n" + + "\t\"BJSJ\" DATE,\n" + + "\t\"BJR\" VARCHAR2(150),\n" + + "\t\"BJDH\" VARCHAR2(50),\n" + + "\t\"BJNR\" VARCHAR2(4000),\n" + + "\t\"PDDDSJ\" DATE,\n" + + "\t\"PDJSSJ\" DATE,\n" + + "\t\"CJMJ\" VARCHAR2(50),\n" + + "\t\"CJDW\" VARCHAR2(50),\n" + + "\t\"CJSJ\" DATE,\n" + + "\t\"DDXCSJ\" DATE,\n" + + "\t\"CJCS\" VARCHAR2(2000),\n" + + "\t\"CJJG\" VARCHAR2(2000),\n" + + "\t\"GZYQ\" VARCHAR2(2000),\n" + + "\t\"JQBH\" VARCHAR2(30),\n" + + "\t\"XGR_SFZH\" VARCHAR2(50),\n" + + "\t\"XGSJ\" DATE DEFAULT SYSDATE,\n" + + "\t\"AJLY\" VARCHAR2(10) DEFAULT '03',\n" + + "\t\"JQMC\" VARCHAR2(200),\n" + + "\t\"CJJGSM\" VARCHAR2(2000),\n" + + "\t\"CJMJ_XM\" VARCHAR2(200),\n" + + "\t\"CJDW_MC\" VARCHAR2(200),\n" + + "\t\"JQLB\" VARCHAR2(20),\n" + + "\t\"XXLX\" VARCHAR2(20),\n" + + "\t\"JJDBH\" VARCHAR2(50),\n" + + "\t\"XZQH\" VARCHAR2(50),\n" + + "\t\"CBQY_BH\" VARCHAR2(50),\n" + + "\t\"SJLY\" VARCHAR2(200) DEFAULT '????',\n" + + "\t\"GXDWDM\" VARCHAR2(20),\n" + + "\t\"BJLXDM\" VARCHAR2(20),\n" + + "\t\"BJXLDM\" VARCHAR2(20),\n" + + "\t\"CJDW_OLD\" VARCHAR2(50),\n" + + "\t\"JQLY\" VARCHAR2(20),\n" + + "\t\"IS_AJ_ANALYZE\" VARCHAR2(1) DEFAULT '9',\n" + + "\t\"SJJE\" VARCHAR2(20),\n" + + "\t\"YSDWFL\" VARCHAR2(5),\n" + + "\t\"YSDWMC\" VARCHAR2(50),\n" + + "\t\"YSDWCBR\" VARCHAR2(20),\n" + + "\t\"CBRLXDH\" VARCHAR2(20),\n" + + "\t\"TBDW\" VARCHAR2(50),\n" + + "\t\"TBR\" VARCHAR2(20),\n" + + "\t\"TBRQ\" DATE,\n" + + "\t\"JZ_JQLB\" VARCHAR2(20),\n" + + "\t\"SFZR\" VARCHAR2(10),\n" + + "\t\"SJDWDM\" VARCHAR2(40),\n" + + "\tCONSTRAINT \"PK_CASE_GG_JQXX1\" PRIMARY KEY (\"ID\")\n" + + "\t\tUSING INDEX\n" + + "\t\tPCTFREE 10\n" + + "\t\tINITRANS 2\n" + + "\t\tMAXTRANS 255\n" + + "\t\tTABLESPACE \"RDP_IDX\"\n" + + "\t\tSTORAGE (\n" + + "\t\t\tINITIAL 150994944\n" + + "\t\t\tFREELISTS 1\n" + + "\t\t\tFREELIST GROUPS 1\n" + + "\t\t\tBUFFER_POOL DEFAULT\n" + + "\t\t\tFLASH_CACHE DEFAULT\n" + + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + + "\t\t)\n" + + "\t\tCOMPUTE STATISTICS\n" + + "\t\tENABLE\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "TABLESPACE \"RDP_DATA\"\n" + + "STORAGE (\n" + + "\tBUFFER_POOL DEFAULT\n" + + "\tFLASH_CACHE DEFAULT\n" + + "\tCELL_FLASH_CACHE DEFAULT\n" + + ")\n" + + "PARTITION BY RANGE (\"LRSJ\")\n" + + "(\n" + + "\tPARTITION \"T_RANGE_V1\" VALUES LESS THAN (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" + + "\t\tPCTFREE 80\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tCOMPRESS\n" + + "\t\tLOGGING\n" + + "\t\tTABLESPACE \"RDP_DATA\"\n" + + "\t\tSTORAGE (\n" + + "\t\t\tINITIAL 553648128\n" + + "\t\t\tFREELISTS 1\n" + + "\t\t\tFREELIST GROUPS 1\n" + + "\t\t\tBUFFER_POOL DEFAULT\n" + + "\t\t\tFLASH_CACHE DEFAULT\n" + + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + + "\t\t),\n" + + "\tPARTITION \"T_RANGE_V2\" VALUES LESS THAN (TO_DATE(' 2015-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" + + "\t\tPCTFREE 80\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tCOMPRESS\n" + + "\t\tLOGGING\n" + + "\t\tTABLESPACE \"RDP_DATA\"\n" + + "\t\tSTORAGE (\n" + + "\t\t\tINITIAL 553648128\n" + + "\t\t\tFREELISTS 1\n" + + "\t\t\tFREELIST GROUPS 1\n" + + "\t\t\tBUFFER_POOL DEFAULT\n" + + "\t\t\tFLASH_CACHE DEFAULT\n" + + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + + "\t\t),\n" + + "\tPARTITION \"T_RANGE_V3\" VALUES LESS THAN (TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" + + "\t\tPCTFREE 80\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tCOMPRESS\n" + + "\t\tLOGGING\n" + + "\t\tTABLESPACE \"RDP_DATA\"\n" + + "\t\tSTORAGE (\n" + + "\t\t\tINITIAL 553648128\n" + + "\t\t\tFREELISTS 1\n" + + "\t\t\tFREELIST GROUPS 1\n" + + "\t\t\tBUFFER_POOL DEFAULT\n" + + "\t\t\tFLASH_CACHE DEFAULT\n" + + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + + "\t\t),\n" + + "\tPARTITION \"T_RANGE_V4\" VALUES LESS THAN (TO_DATE(' 2016-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" + + "\t\tPCTFREE 80\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tCOMPRESS\n" + + "\t\tLOGGING\n" + + "\t\tTABLESPACE \"RDP_DATA\"\n" + + "\t\tSTORAGE (\n" + + "\t\t\tINITIAL 553648128\n" + + "\t\t\tFREELISTS 1\n" + + "\t\t\tFREELIST GROUPS 1\n" + + "\t\t\tBUFFER_POOL DEFAULT\n" + + "\t\t\tFLASH_CACHE DEFAULT\n" + + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + + "\t\t),\n" + + "\tPARTITION \"T_RANGE_V5\" VALUES LESS THAN (TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" + + "\t\tPCTFREE 80\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tCOMPRESS\n" + + "\t\tLOGGING\n" + + "\t\tTABLESPACE \"RDP_DATA\"\n" + + "\t\tSTORAGE (\n" + + "\t\t\tINITIAL 553648128\n" + + "\t\t\tFREELISTS 1\n" + + "\t\t\tFREELIST GROUPS 1\n" + + "\t\t\tBUFFER_POOL DEFAULT\n" + + "\t\t\tFLASH_CACHE DEFAULT\n" + + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + + "\t\t),\n" + + "\tPARTITION \"T_RANGE_V6\" VALUES LESS THAN (TO_DATE(' 2017-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" + + "\t\tPCTFREE 80\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tCOMPRESS\n" + + "\t\tLOGGING\n" + + "\t\tTABLESPACE \"RDP_DATA\"\n" + + "\t\tSTORAGE (\n" + + "\t\t\tINITIAL 553648128\n" + + "\t\t\tFREELISTS 1\n" + + "\t\t\tFREELIST GROUPS 1\n" + + "\t\t\tBUFFER_POOL DEFAULT\n" + + "\t\t\tFLASH_CACHE DEFAULT\n" + + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + + "\t\t),\n" + + "\tPARTITION \"MAXPART\" VALUES LESS THAN (MAXVALUE)\n" + + "\t\tPCTFREE 10\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tCOMPRESS\n" + + "\t\tLOGGING\n" + + "\t\tTABLESPACE \"RDP_DATA\"\n" + + "\t\tSTORAGE (\n" + + "\t\t\tINITIAL 8388608\n" + + "\t\t\tFREELISTS 1\n" + + "\t\t\tFREELIST GROUPS 1\n" + + "\t\t\tBUFFER_POOL DEFAULT\n" + + "\t\t\tFLASH_CACHE DEFAULT\n" + + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + + "\t\t)\n" + + ")",// + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.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.assertEquals(52, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "ID"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest4.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest4.java new file mode 100644 index 0000000000..264a94d815 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest4.java @@ -0,0 +1,103 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.oracle.create; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +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; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; + +import java.util.List; + +public class OracleCreateViewTest4 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE OR REPLACE FORCE VIEW \"SC_001\".\"V_001\" (\"OBJ_OWNER\", \"OBJ_NAME\", \"OBJ_TYPE\", \"OBJ_ROWID\", \"DB_USER\", \"SID\", \"LOCK_TYPE\", \"ROW_WAIT_FILE#\", \"ROW_WAIT_BLOCK#\", \"ROW_WAIT_ROW#\") AS \n" + + " SELECT owner obj_owner,\n" + + " object_name obj_name,\n" + + " object_type obj_type,\n" + + " dbms_rowid.rowid_create(1, row_wait_obj#, ROW_WAIT_FILE#,\n" + + " ROW_WAIT_BLOCK#,ROW_WAIT_ROW#) obj_rowid,\n" + + " a.username db_user, a.SID SID, a.TYPE lock_type,\n" + + " a.row_wait_file#, a.row_wait_block#, a.row_wait_row#\n" + + " FROM TB_001,\n" + + " (SELECT /*+ no_merge(a) no_merge(b) */\n" + + " a.username, a.SID, a.row_wait_obj#, a.ROW_WAIT_FILE#,\n" + + " a.ROW_WAIT_BLOCK#, a.ROW_WAIT_ROW#, b.TYPE\n" + + " FROM sys.V_$SESSION a, sys.V_$LOCK b\n" + + " WHERE a.username IS NOT NULL\n" + + " AND a.row_wait_obj# <> -1\n" + + " AND a.SID = b.SID\n" + + " AND b.TYPE IN ('TX','TM')\n" + + " ) a\n" + + " WHERE object_id = a.row_wait_obj# "; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("CREATE OR REPLACE VIEW \"SC_001\".\"V_001\"\n" + + "(\n" + + "\t\"OBJ_OWNER\", \n" + + "\t\"OBJ_NAME\", \n" + + "\t\"OBJ_TYPE\", \n" + + "\t\"OBJ_ROWID\", \n" + + "\t\"DB_USER\", \n" + + "\t\"SID\", \n" + + "\t\"LOCK_TYPE\", \n" + + "\t\"ROW_WAIT_FILE#\", \n" + + "\t\"ROW_WAIT_BLOCK#\", \n" + + "\t\"ROW_WAIT_ROW#\"\n" + + ")\n" + + "AS\n" + + "SELECT owner AS obj_owner, object_name AS obj_name, object_type AS obj_type, dbms_rowid.rowid_create(1, row_wait_obj#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW#) AS obj_rowid, a.username AS db_user\n" + + "\t, a.SID AS SID, a.TYPE AS lock_type, a.row_wait_file#, a.row_wait_block#, a.row_wait_row#\n" + + "FROM TB_001, (\n" + + "\tSELECT /*+ no_merge(a) no_merge(b) */ a.username, a.SID, a.row_wait_obj#, a.ROW_WAIT_FILE#, a.ROW_WAIT_BLOCK#\n" + + "\t\t, a.ROW_WAIT_ROW#, b.TYPE\n" + + "\tFROM sys.V_$SESSION a, sys.V_$LOCK b\n" + + "\tWHERE a.username IS NOT NULL\n" + + "\t\tAND a.row_wait_obj# <> -1\n" + + "\t\tAND a.SID = b.SID\n" + + "\t\tAND b.TYPE IN ('TX', 'TM')\n" + + ") a\n" + + "WHERE object_id = a.row_wait_obj#",// + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.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(3, visitor.getTables().size()); + + Assert.assertEquals(9, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("sys.V_$SESSION", "SID"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest5.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest5.java new file mode 100644 index 0000000000..a27b881c2f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest5.java @@ -0,0 +1,86 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.oracle.create; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +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; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; + +import java.util.List; + +public class OracleCreateViewTest5 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE OR REPLACE FORCE VIEW \"SC_001\".\"TB_001\" (\"OBJECT_NAME\", \"SESSION_ID\", \"ORACLE_USERNAME\", \"OS_USER_NAME\", \"SQL_ACTIONS\", \"LOCK_MODE\") AS \n" + + " SELECT /*+ no_merge(lo) */\n" + + " DO.object_name, lo.SESSION_ID, lo.oracle_username, lo.OS_USER_NAME,\n" + + " DECODE(locked_mode,\n" + + " 1, 'SELECT',\n" + + " 2, 'SELECT FOR UPDATE / LOCK ROW SHARE',\n" + + " 3, 'INSERT/UPDATE/DELETE/LOCK ROW EXCLUSIVE',\n" + + " 4, 'CREATE INDEX/LOCK SHARE',\n" + + " 5, 'LOCK SHARE ROW EXCLUSIVE',\n" + + " 6, 'ALTER TABLE/DROP TABLE/DROP INDEX/TRUNCATE TABLE/LOCK EXCLUSIVE') sql_actions,\n" + + " DECODE(locked_mode, 1, 'NULL', 2, 'SS - SUB SHARE', 3, 'SX - SUB EXCLUSIVE',\n" + + " 4, 'S - SHARE', 5, 'SSX - SHARE/SUB EXCLUSIVE', 6, 'X - EXCLUSIVE') Lock_mode\n" + + " FROM sys.V_$LOCKED_OBJECT lo, TB_002 DO\n" + + " WHERE DO.object_id = lo.object_id "; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("CREATE OR REPLACE VIEW \"SC_001\".\"TB_001\"\n" + + "(\n" + + "\t\"OBJECT_NAME\", \n" + + "\t\"SESSION_ID\", \n" + + "\t\"ORACLE_USERNAME\", \n" + + "\t\"OS_USER_NAME\", \n" + + "\t\"SQL_ACTIONS\", \n" + + "\t\"LOCK_MODE\"\n" + + ")\n" + + "AS\n" + + "SELECT /*+ no_merge(lo) */ DO.object_name, lo.SESSION_ID, lo.oracle_username, lo.OS_USER_NAME, DECODE(locked_mode, 1, 'SELECT', 2, 'SELECT FOR UPDATE / LOCK ROW SHARE', 3, 'INSERT/UPDATE/DELETE/LOCK ROW EXCLUSIVE', 4, 'CREATE INDEX/LOCK SHARE', 5, 'LOCK SHARE ROW EXCLUSIVE', 6, 'ALTER TABLE/DROP TABLE/DROP INDEX/TRUNCATE TABLE/LOCK EXCLUSIVE') AS sql_actions\n" + + "\t, DECODE(locked_mode, 1, 'NULL', 2, 'SS - SUB SHARE', 3, 'SX - SUB EXCLUSIVE', 4, 'S - SHARE', 5, 'SSX - SHARE/SUB EXCLUSIVE', 6, 'X - EXCLUSIVE') AS Lock_mode\n" + + "FROM sys.V_$LOCKED_OBJECT lo, TB_002 DO\n" + + "WHERE DO.object_id = lo.object_id",// + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.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(2, visitor.getTables().size()); + + Assert.assertEquals(7, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("TB_002", "object_id"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest6.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest6.java new file mode 100644 index 0000000000..28fc11edda --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest6.java @@ -0,0 +1,148 @@ +/* + * Copyright 1999-2017 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.oracle.create; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +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; +import com.alibaba.druid.util.JdbcConstants; +import org.junit.Assert; + +import java.util.List; + +public class OracleCreateViewTest6 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE OR REPLACE FORCE VIEW \"SC_001\".\"TV_001\" (\"ID\", \"GMT_CREATE\", \"CREATOR\", \"GMT_MODIFIED\", \"MODIFIER\", \"IS_DELETED\", \"CONTRACT_PARTY\", \"COMPANY_NAME\", \"PRODUCT_TYPE\", \"PERIOD\", \"JOIN\", \"OVER\", \"CONTRACT_TERM\", \"CONTRACT_CASH\", \"EXEC_CASH\", \"CANCELED_CASH\", \"RECEIVERD_CASH\", \"O_S_CASH\", \"REMARK\", \"FENTAN_CHECK\", \"TOTAL_CASH\", \"NOT_CONFIRMED\", \"PRE_RECEIVED\", \"NOT_RECEIVED\", \"CONTRACT_DATE\", \"OWNER_1\", \"AREA_ID_1\", \"FIRST_OWNER\", \"FIRST_AREA_ID\", \"CONTRACT_ID\", \"IS_RENEW_UPGRADE\", \"CATEGORY_ID_1\", \"CATEGORY_ID_2\", \"FIRST_RECEIPT_DATE\", \"RECEIPT_REMARK\", \"CONTRACT_SERIAL\", \"IS_MERGED\") AS \n" + + " SELECT\n" + + "ID,\n" + + "GMT_CREATE,\n" + + "utl_raw.cast_to_raw(CREATOR) AS CREATOR,\n" + + "GMT_MODIFIED,\n" + + "utl_raw.cast_to_raw(MODIFIER) AS MODIFIER,\n" + + "IS_DELETED,\n" + + "utl_raw.cast_to_raw(CONTRACT_PARTY) AS CONTRACT_PARTY,\n" + + "utl_raw.cast_to_raw(COMPANY_NAME) AS COMPANY_NAME,\n" + + "utl_raw.cast_to_raw(PRODUCT_TYPE) AS PRODUCT_TYPE,\n" + + "utl_raw.cast_to_raw(PERIOD) AS PERIOD,\n" + + "JOIN,\n" + + "OVER,\n" + + "CONTRACT_TERM,\n" + + "CONTRACT_CASH,\n" + + "EXEC_CASH,\n" + + "CANCELED_CASH,\n" + + "RECEIVERD_CASH,\n" + + "O_S_CASH,\n" + + "utl_raw.cast_to_raw(REMARK) AS REMARK,\n" + + "FENTAN_CHECK,\n" + + "TOTAL_CASH,\n" + + "NOT_CONFIRMED,\n" + + "PRE_RECEIVED,\n" + + "NOT_RECEIVED,\n" + + "CONTRACT_DATE,\n" + + "utl_raw.cast_to_raw(OWNER_1) AS OWNER_1,\n" + + "AREA_ID_1,\n" + + "utl_raw.cast_to_raw(FIRST_OWNER) AS FIRST_OWNER,\n" + + "FIRST_AREA_ID,\n" + + "utl_raw.cast_to_raw(CONTRACT_ID) AS CONTRACT_ID,\n" + + "utl_raw.cast_to_raw(IS_RENEW_UPGRADE) AS IS_RENEW_UPGRADE,\n" + + "CATEGORY_ID_1,\n" + + "CATEGORY_ID_2,\n" + + "FIRST_RECEIPT_DATE,\n" + + "utl_raw.cast_to_raw(RECEIPT_REMARK) AS RECEIPT_REMARK,\n" + + "utl_raw.cast_to_raw(CONTRACT_SERIAL) AS CONTRACT_SERIAL,\n" + + "IS_MERGED\n" + + "FROM TB_002 "; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("CREATE OR REPLACE VIEW \"SC_001\".\"TV_001\"\n" + + "(\n" + + "\t\"ID\", \n" + + "\t\"GMT_CREATE\", \n" + + "\t\"CREATOR\", \n" + + "\t\"GMT_MODIFIED\", \n" + + "\t\"MODIFIER\", \n" + + "\t\"IS_DELETED\", \n" + + "\t\"CONTRACT_PARTY\", \n" + + "\t\"COMPANY_NAME\", \n" + + "\t\"PRODUCT_TYPE\", \n" + + "\t\"PERIOD\", \n" + + "\t\"JOIN\", \n" + + "\t\"OVER\", \n" + + "\t\"CONTRACT_TERM\", \n" + + "\t\"CONTRACT_CASH\", \n" + + "\t\"EXEC_CASH\", \n" + + "\t\"CANCELED_CASH\", \n" + + "\t\"RECEIVERD_CASH\", \n" + + "\t\"O_S_CASH\", \n" + + "\t\"REMARK\", \n" + + "\t\"FENTAN_CHECK\", \n" + + "\t\"TOTAL_CASH\", \n" + + "\t\"NOT_CONFIRMED\", \n" + + "\t\"PRE_RECEIVED\", \n" + + "\t\"NOT_RECEIVED\", \n" + + "\t\"CONTRACT_DATE\", \n" + + "\t\"OWNER_1\", \n" + + "\t\"AREA_ID_1\", \n" + + "\t\"FIRST_OWNER\", \n" + + "\t\"FIRST_AREA_ID\", \n" + + "\t\"CONTRACT_ID\", \n" + + "\t\"IS_RENEW_UPGRADE\", \n" + + "\t\"CATEGORY_ID_1\", \n" + + "\t\"CATEGORY_ID_2\", \n" + + "\t\"FIRST_RECEIPT_DATE\", \n" + + "\t\"RECEIPT_REMARK\", \n" + + "\t\"CONTRACT_SERIAL\", \n" + + "\t\"IS_MERGED\"\n" + + ")\n" + + "AS\n" + + "SELECT ID, GMT_CREATE, utl_raw.cast_to_raw(CREATOR) AS CREATOR, GMT_MODIFIED, utl_raw.cast_to_raw(MODIFIER) AS MODIFIER\n" + + "\t, IS_DELETED, utl_raw.cast_to_raw(CONTRACT_PARTY) AS CONTRACT_PARTY, utl_raw.cast_to_raw(COMPANY_NAME) AS COMPANY_NAME, utl_raw.cast_to_raw(PRODUCT_TYPE) AS PRODUCT_TYPE, utl_raw.cast_to_raw(PERIOD) AS PERIOD\n" + + "\t, JOIN, OVER, CONTRACT_TERM, CONTRACT_CASH, EXEC_CASH\n" + + "\t, CANCELED_CASH, RECEIVERD_CASH, O_S_CASH, utl_raw.cast_to_raw(REMARK) AS REMARK, FENTAN_CHECK\n" + + "\t, TOTAL_CASH, NOT_CONFIRMED, PRE_RECEIVED, NOT_RECEIVED, CONTRACT_DATE\n" + + "\t, utl_raw.cast_to_raw(OWNER_1) AS OWNER_1, AREA_ID_1, utl_raw.cast_to_raw(FIRST_OWNER) AS FIRST_OWNER, FIRST_AREA_ID, utl_raw.cast_to_raw(CONTRACT_ID) AS CONTRACT_ID\n" + + "\t, utl_raw.cast_to_raw(IS_RENEW_UPGRADE) AS IS_RENEW_UPGRADE, CATEGORY_ID_1, CATEGORY_ID_2, FIRST_RECEIPT_DATE, utl_raw.cast_to_raw(RECEIPT_REMARK) AS RECEIPT_REMARK\n" + + "\t, utl_raw.cast_to_raw(CONTRACT_SERIAL) AS CONTRACT_SERIAL, IS_MERGED\n" + + "FROM TB_002",// + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.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.assertEquals(37, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("TB_002", "ID"))); + } +}