From b5b5d6601592eb858ad6c0b2e84763b629bfac53 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 21 May 2017 19:39:29 +0800 Subject: [PATCH] improved sql parser. --- .../mysql/visitor/MySqlOutputVisitor.java | 7 +- .../ast/stmt/OracleCreateTableStatement.java | 85 ++++++ .../parser/OracleCreateTableParser.java | 76 ++++- .../oracle/visitor/OracleASTVisitor.java | 4 + .../visitor/OracleASTVisitorAdapter.java | 8 + .../oracle/visitor/OracleOutputVisitor.java | 186 +++++++----- .../visitor/OracleSchemaStatVisitor.java | 10 + .../sql/visitor/SQLASTOutputVisitor.java | 14 +- .../bvt/sql/MappingTest_createTable.java | 4 +- .../create/OracleCreateTableTest18.java | 1 + .../create/OracleCreateTableTest19.java | 19 +- .../create/OracleCreateTableTest20.java | 11 +- .../create/OracleCreateTableTest21.java | 15 +- .../create/OracleCreateTableTest22.java | 4 +- .../create/OracleCreateTableTest41.java | 150 ++++++++++ .../create/OracleCreateTableTest42.java | 102 +++++++ .../create/OracleCreateTableTest43.java | 104 +++++++ .../create/OracleCreateTableTest44.java | 145 ++++++++++ .../create/OracleCreateTableTest45.java | 99 +++++++ .../create/OracleCreateTableTest46.java | 115 ++++++++ .../create/OracleCreateTableTest47.java | 140 +++++++++ .../create/OracleCreateTableTest48.java | 120 ++++++++ .../create/OracleCreateTableTest49.java | 248 ++++++++++++++++ .../create/OracleCreateTableTest50.java | 270 ++++++++++++++++++ .../create/OracleCreateTableTest51.java | 84 ++++++ .../create/OracleCreateTableTest52.java | 119 ++++++++ .../create/OracleCreateTableTest53.java | 123 ++++++++ .../create/OracleCreateTableTest54.java | 94 ++++++ .../create/OracleCreateTableTest55.java | 100 +++++++ .../create/OracleCreateTableTest56.java | 117 ++++++++ .../create/OracleCreateTableTest57.java | 200 +++++++++++++ .../create/OracleCreateTableTest58.java | 144 ++++++++++ .../create/OracleCreateTableTest59.java | 102 +++++++ .../create/OracleCreateTableTest60.java | 91 ++++++ .../create/OracleCreateTableTest61.java | 158 ++++++++++ .../create/OracleCreateTableTest62.java | 137 +++++++++ .../oracle/create/OracleCreateViewTest2.java | 113 ++++++++ .../oracle/create/OracleCreateViewTest3.java | 125 ++++++++ .../sql/oracle/select/OracleSelectTest61.java | 72 +++++ 39 files changed, 3622 insertions(+), 94 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest41.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest42.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest43.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest44.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest45.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest46.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest47.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest48.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest49.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest50.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest51.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest52.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest53.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest54.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest55.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest56.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest57.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest58.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest59.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest60.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest61.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest62.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest2.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest3.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/select/OracleSelectTest61.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java index f1c9dfe747..f93ed72cd6 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java @@ -423,12 +423,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV @Override public boolean visit(SQLCharacterDataType x) { - print0(x.getName()); - if (!x.getArguments().isEmpty()) { - print('('); - printAndAccept(x.getArguments(), ", "); - print(')'); - } + printDataType(x); if (x.isHasBinary()) { print0(ucase ? " BINARY " : " binary "); 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 2dcfb37925..515f27d809 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 @@ -15,9 +15,11 @@ */ 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.ast.SQLPartitionBy; +import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObject; import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl; @@ -299,6 +301,12 @@ public class OracleCreateTableStatement extends SQLCreateTableStatement implemen public static class Organization extends OracleSegmentAttributesImpl implements OracleSegmentAttributes, OracleSQLObject { public String type; + private SQLName externalType; + private SQLExpr externalDirectory; + private OracleExternalRecordFormat externalDirectoryRecordFormat; + private List externalDirectoryLocation = new ArrayList(); + private SQLExpr externalRejectLimit; + protected void accept0(SQLASTVisitor visitor) { this.accept0((OracleASTVisitor) visitor); } @@ -319,5 +327,82 @@ public class OracleCreateTableStatement extends SQLCreateTableStatement implemen this.type = type; } + public SQLName getExternalType() { + return externalType; + } + + public void setExternalType(SQLName externalType) { + this.externalType = externalType; + } + + public SQLExpr getExternalDirectory() { + return externalDirectory; + } + + public void setExternalDirectory(SQLExpr externalDirectory) { + this.externalDirectory = externalDirectory; + } + + public OracleExternalRecordFormat getExternalDirectoryRecordFormat() { + return externalDirectoryRecordFormat; + } + + public void setExternalDirectoryRecordFormat(OracleExternalRecordFormat recordFormat) { + if (recordFormat != null) { + recordFormat.setParent(this); + } + this.externalDirectoryRecordFormat = recordFormat; + } + + public SQLExpr getExternalRejectLimit() { + return externalRejectLimit; + } + + public void setExternalRejectLimit(SQLExpr externalRejectLimit) { + if (externalRejectLimit != null) { + externalRejectLimit.setParent(this); + } + this.externalRejectLimit = externalRejectLimit; + } + + public List getExternalDirectoryLocation() { + return externalDirectoryLocation; + } + } + + public static class OracleExternalRecordFormat extends OracleSQLObjectImpl { + private SQLExpr delimitedBy; + private SQLExpr terminatedBy; + + @Override + public void accept0(OracleASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, delimitedBy); + acceptChild(visitor, terminatedBy); + } + visitor.endVisit(this); + } + + public SQLExpr getDelimitedBy() { + return delimitedBy; + } + + public void setDelimitedBy(SQLExpr delimitedBy) { + if (delimitedBy != null) { + delimitedBy.setParent(this); + } + this.delimitedBy = delimitedBy; + } + + public SQLExpr getTerminatedBy() { + return terminatedBy; + } + + public void setTerminatedBy(SQLExpr terminatedBy) { + if (terminatedBy != null) { + terminatedBy.setParent(this); + } + this.terminatedBy = terminatedBy; + } } } 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 0014d1bb78..2a10e562bf 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 @@ -26,6 +26,7 @@ import com.alibaba.druid.sql.ast.SQLSubPartition; import com.alibaba.druid.sql.ast.SQLSubPartitionBy; import com.alibaba.druid.sql.ast.SQLSubPartitionByHash; import com.alibaba.druid.sql.ast.SQLSubPartitionByList; +import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLIntegerExpr; import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; @@ -247,7 +248,80 @@ public class OracleCreateTableParser extends SQLCreateTableParser { lexer.nextToken(); organization.setType("EXTERNAL"); accept(Token.LPAREN); - throw new ParserException("TODO " + lexer.info()); + + if (identifierEquals("TYPE")) { + lexer.nextToken(); + organization.setExternalType(this.exprParser.name()); + } + + accept(Token.DEFAULT); + acceptIdentifier("DIRECTORY"); + + organization.setExternalDirectory(this.exprParser.expr()); + + if (identifierEquals("ACCESS")) { + lexer.nextToken(); + acceptIdentifier("PARAMETERS"); + + if (lexer.token() == Token.LPAREN) { + lexer.nextToken(); + + OracleCreateTableStatement.OracleExternalRecordFormat recordFormat = new OracleCreateTableStatement.OracleExternalRecordFormat(); + + if (identifierEquals("RECORDS")) { + lexer.nextToken(); + + + if (identifierEquals("DELIMITED")) { + lexer.nextToken(); + accept(Token.BY); + + if (identifierEquals("NEWLINE")) { + lexer.nextToken(); + recordFormat.setDelimitedBy(new SQLIdentifierExpr("NEWLINE")); + } else { + throw new ParserException("TODO " + lexer.info()); + } + } else { + throw new ParserException("TODO " + lexer.info()); + } + } + + if (identifierEquals("FIELDS")) { + lexer.nextToken(); + + if (identifierEquals("TERMINATED")) { + lexer.nextToken(); + accept(Token.BY); + recordFormat.setTerminatedBy(this.exprParser.primary()); + } else { + throw new ParserException("TODO " + lexer.info()); + } + } + + organization.setExternalDirectoryRecordFormat(recordFormat); + accept(Token.RPAREN); + } else if (lexer.token() == Token.USING) { + lexer.nextToken(); + acceptIdentifier("CLOB"); + throw new ParserException("TODO " + lexer.info()); + } + } + + acceptIdentifier("LOCATION"); + accept(Token.LPAREN); + this.exprParser.exprList(organization.getExternalDirectoryLocation(), organization); + accept(Token.RPAREN); + + accept(Token.RPAREN); + + if (lexer.token() == Token.REJECT) { + lexer.nextToken(); + accept(Token.LIMIT); + + organization.setExternalRejectLimit(this.exprParser.primary()); + } + // } else { throw new ParserException("TODO " + lexer.info()); } 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 4c41ecd0c9..9b17dab9cf 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 @@ -452,4 +452,8 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(OracleCreateTableStatement.Organization x); void endVisit(OracleCreateTableStatement.Organization x); + + boolean visit(OracleCreateTableStatement.OracleExternalRecordFormat x); + + void endVisit(OracleCreateTableStatement.OracleExternalRecordFormat 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 d6bf5ace95..4aa8514b4c 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 @@ -1094,4 +1094,12 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora public void endVisit(OracleCreateTableStatement.Organization x) { } + + public boolean visit(OracleCreateTableStatement.OracleExternalRecordFormat x) { + return true; + } + + public void endVisit(OracleCreateTableStatement.OracleExternalRecordFormat 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 6a5ecb7efe..7d7e75ec1d 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 @@ -2175,63 +2175,58 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS public boolean visit(OracleStorageClause x) { print0(ucase ? "STORAGE (" : "storage ("); - boolean first = true; + incrementIndent(); if (x.getInitial() != null) { - if (!first) { - print(' '); - } + println(); print0(ucase ? "INITIAL " : "initial "); x.getInitial().accept(this); - first = false; } if (x.getMaxSize() != null) { - if (!first) { - print(' '); - } + println(); print0(ucase ? "MAXSIZE " : "maxsize "); x.getMaxSize().accept(this); - first = false; } if (x.getFreeLists() != null) { - if (!first) { - print(' '); - } + println(); print0(ucase ? "FREELISTS " : "freelists "); x.getFreeLists().accept(this); - first = false; } if (x.getFreeListGroups() != null) { - if (!first) { - print(' '); - } - + println(); print0(ucase ? "FREELIST GROUPS " : "freelist groups "); x.getFreeListGroups().accept(this); - first = false; } if (x.getBufferPool() != null) { - if (!first) { - print(' '); - } + println(); print0(ucase ? "BUFFER_POOL " : "buffer_pool "); x.getBufferPool().accept(this); - first = false; } if (x.getObjno() != null) { - if (!first) { - print(' '); - } + println(); print0(ucase ? "OBJNO " : "objno "); x.getObjno().accept(this); - first = false; } + if (x.getFlashCache() != null) { + println(); + print0(ucase ? "FLASH_CACHE " : "flash_cache "); + print0(ucase ? x.getFlashCache().name() : x.getFlashCache().name().toLowerCase()); + } + + if (x.getCellFlashCache() != null) { + println(); + print0(ucase ? "CELL_FLASH_CACHE " : "cell_flash_cache "); + print0(ucase ? x.getCellFlashCache().name() : x.getCellFlashCache().name().toLowerCase()); + } + decrementIndent(); + println(); print(')'); + return false; } @@ -2837,108 +2832,87 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS public boolean visit(OracleLobStorageClause x) { print0(ucase ? "LOB (" : "lob ("); printAndAccept(x.getItems(), ","); - print0(ucase ? ") STORE AS " : ") store as "); + print0(ucase ? ") STORE AS" : ") store as"); + if (x.isSecureFile()) { - print0(ucase ? "SECUREFILE " : "securefile "); + print0(ucase ? " SECUREFILE" : " securefile"); } if (x.isBasicFile()) { - print0(ucase ? "BASICFILE " : "basicfile "); + print0(ucase ? " BASICFILE" : " basicfile"); } - - boolean first = true; - print('('); + print0(" ("); + incrementIndent(); if (x.getTableSpace() != null) { - if (!first) { - print(' '); - } + println(); print0(ucase ? "TABLESPACE " : "tablespace "); x.getTableSpace().accept(this); - first = false; } if (x.getEnable() != null) { - if (!first) { - print(' '); - } + println(); if (x.getEnable().booleanValue()) { print0(ucase ? "ENABLE STORAGE IN ROW" : "enable storage in row"); } else { print0(ucase ? "DISABLE STORAGE IN ROW" : "disable storage in row"); } - first = false; } if (x.getStorageClause() != null) { - if (!first) { - print(' '); - } + println(); x.getStorageClause().accept(this); - first = false; } if (x.getChunk() != null) { - if (!first) { - print(' '); - } + println(); print0(ucase ? "CHUNK " : "chunk "); x.getChunk().accept(this); - first = false; } if (x.getCache() != null) { - if (!first) { - print(' '); - } + println(); if (x.getCache().booleanValue()) { print0(ucase ? "CACHE" : "cache"); } else { print0(ucase ? "NOCACHE" : "nocache"); } + } - if (x.getLogging() != null) { - if (x.getLogging().booleanValue()) { - print0(ucase ? " LOGGING" : " logging"); - } else { - print0(ucase ? " NOLOGGING" : " nologging"); - } + if (x.getLogging() != null) { + println(); + if (x.getLogging().booleanValue()) { + print0(ucase ? "LOGGING" : "logging"); + } else { + print0(ucase ? "NOLOGGING" : "nologging"); } - first = false; } if (x.getCompress() != null) { - if (!first) { - print(' '); - } + println(); if (x.getCompress().booleanValue()) { print0(ucase ? "COMPRESS" : "compress"); } else { print0(ucase ? "NOCOMPRESS" : "nocompress"); } - first = false; } if (x.getKeepDuplicate() != null) { - if (!first) { - print(' '); - } + println(); if (x.getKeepDuplicate().booleanValue()) { print0(ucase ? "KEEP_DUPLICATES" : "keep_duplicates"); } else { print0(ucase ? "DEDUPLICATE" : "deduplicate"); } - first = false; } if (x.isRetention()) { - if (!first) { - print(' '); - } + println(); print0(ucase ? "RETENTION" : "retention"); - first = false; } + decrementIndent(); + println(); print(')'); return false; } @@ -3097,11 +3071,12 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } - - public boolean visit(OracleCreateTableStatement.Organization x) { + + String type = x.getType(); + print0(ucase ? "ORGANIZATION " : "organization "); - print0(ucase ? x.getType() : x.getType().toLowerCase()); + print0(ucase ? type : type.toLowerCase()); printOracleSegmentAttributes(x); @@ -3110,10 +3085,75 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS print0(ucase ? "PCTTHRESHOLD " : "pctthreshold "); print(x.getPctfree()); } + + if ("EXTERNAL".equalsIgnoreCase(type)) { + print0(" ("); + + incrementIndent(); + if (x.getExternalType() != null) { + println(); + print0(ucase ? "TYPE " : "type "); + x.getExternalType().accept(this); + } + + if (x.getExternalDirectory() != null) { + println(); + print0(ucase ? "DEFAULT DIRECTORY " : "default directory "); + x.getExternalDirectory().accept(this); + } + + if (x.getExternalDirectoryRecordFormat() != null) { + println(); + incrementIndent(); + print0(ucase ? "ACCESS PARAMETERS (" : "access parameters ("); + x.getExternalDirectoryRecordFormat().accept(this); + decrementIndent(); + println(); + print(')'); + } + + if (x.getExternalDirectoryLocation().size() > 0) { + println(); + print0(ucase ? "LOCATION (" : " location("); + printAndAccept(x.getExternalDirectoryLocation(), ", "); + print(')'); + } + + decrementIndent(); + println(); + print(')'); + + if (x.getExternalRejectLimit() != null) { + println(); + print0(ucase ? "REJECT LIMIT " : "reject limit "); + x.getExternalRejectLimit().accept(this); + } + } + return false; } public void endVisit(OracleCreateTableStatement.Organization x) { } + + public boolean visit(OracleCreateTableStatement.OracleExternalRecordFormat x) { + if (x.getDelimitedBy() != null) { + println(); + print0(ucase ? "RECORDS DELIMITED BY " : "records delimited by "); + x.getDelimitedBy().accept(this); + } + + if (x.getTerminatedBy() != null) { + println(); + print0(ucase ? "FIELDS TERMINATED BY " : "fields terminated by "); + x.getTerminatedBy().accept(this); + } + + return false; + } + + public void endVisit(OracleCreateTableStatement.OracleExternalRecordFormat 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 775792b38d..3292b313a2 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 @@ -1427,4 +1427,14 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle public void endVisit(OracleCreateTableStatement.Organization x) { } + + @Override + public boolean visit(OracleCreateTableStatement.OracleExternalRecordFormat x) { + return false; + } + + @Override + public void endVisit(OracleCreateTableStatement.OracleExternalRecordFormat x) { + + } } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 3724cf2ab4..f79a74c233 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -582,14 +582,18 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet } public boolean visit(SQLDataType x) { + printDataType(x); + + return false; + } + + protected void printDataType(SQLDataType x) { print0(x.getName()); if (x.getArguments().size() > 0) { print('('); printAndAccept(x.getArguments(), ", "); print(')'); } - - return false; } public boolean visit(SQLCharacterDataType x) { @@ -4155,6 +4159,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet print(x.getPctfree()); } + if (x.getPctused() != null) { + println(); + print0(ucase ? "PCTUSED " : "pctused "); + print(x.getPctused()); + } + if (x.getInitrans() != null) { println(); print0(ucase ? "INITRANS " : "initrans "); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/MappingTest_createTable.java b/src/test/java/com/alibaba/druid/bvt/sql/MappingTest_createTable.java index fef32c9ade..b3f9bd52ee 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/MappingTest_createTable.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/MappingTest_createTable.java @@ -31,8 +31,8 @@ public class MappingTest_createTable extends TestCase { public void test_mapping_createTable_mysql() throws Exception { String result = SQLUtils.refactor(sql, JdbcConstants.MYSQL, mapping); assertEquals("CREATE TABLE user_01 (\n" + - "\tsource_key int, \n" + - "\tsource_value varchar(32), \n" + + "\tsource_key int,\n" + + "\tsource_value varchar(32),\n" + "\tPRIMARY KEY (source_key)\n" + ")", result); } 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 43e73177f7..5974cbd96b 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 @@ -68,6 +68,7 @@ public class OracleCreateTableTest18 extends OracleTest { "\t\tENABLE\n" + ")\n" + "PCTFREE 10\n" + + "PCTUSED 40\n" + "INITRANS 1\n" + "MAXTRANS 255\n" + "NOCOMPRESS\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 a33a96580e..c30f405e77 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 @@ -70,15 +70,30 @@ public class OracleCreateTableTest19 extends OracleTest { "\t\tCOMPUTE STATISTICS\n" + "\t\tTABLESPACE \"USERS\"\n" + "\t\tENABLE\n" + - "\t\tSTORAGE (INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\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\tFLASH_CACHE DEFAULT\n" + + "\t\t\tCELL_FLASH_CACHE DEFAULT\n" + + "\t\t)\n" + ")\n" + "PCTFREE 10\n" + + "PCTUSED 40\n" + "INITRANS 1\n" + "MAXTRANS 255\n" + "NOCOMPRESS\n" + "LOGGING\n" + "TABLESPACE \"USERS\"\n" + - "STORAGE (INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)", // + "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" + + ")", // SQLUtils.toSQLString(statement, JdbcConstants.ORACLE)); OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); 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 04506e794f..2b90d051c2 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 @@ -73,12 +73,21 @@ public class OracleCreateTableTest20 extends OracleTest { "\t\tENABLE\n" + ")\n" + "PCTFREE 10\n" + + "PCTUSED 40\n" + "INITRANS 1\n" + "MAXTRANS 255\n" + "NOCOMPRESS\n" + "LOGGING\n" + "TABLESPACE \"USERS\"\n" + - "LOB (\"DATA\") STORE AS SECUREFILE (TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 NOCACHE LOGGING NOCOMPRESS KEEP_DUPLICATES)",// + "LOB (\"DATA\") STORE AS SECUREFILE (\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)); OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest21.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest21.java index 89ea8654d7..7c4b6748b1 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest21.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest21.java @@ -44,12 +44,15 @@ public class OracleCreateTableTest21 extends OracleTest { Assert.assertEquals(1, statementList.size()); - Assert.assertEquals("CREATE TABLE divisions ("// - + "\n\tdiv_no NUMBER(2),"// - + "\n\tdiv_name VARCHAR2(14),"// - + "\n\tlocation VARCHAR2(13)"// - + "\n)"// - + "\nSTORAGE (INITIAL 8M MAXSIZE 1G)",// + Assert.assertEquals("CREATE TABLE divisions (\n" + + "\tdiv_no NUMBER(2),\n" + + "\tdiv_name VARCHAR2(14),\n" + + "\tlocation VARCHAR2(13)\n" + + ")\n" + + "STORAGE (\n" + + "\tINITIAL 8M\n" + + "\tMAXSIZE 1G\n" + + ")",// SQLUtils.toSQLString(statement, JdbcConstants.ORACLE)); OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest22.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest22.java index 491322e865..43925dc4ed 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest22.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest22.java @@ -61,7 +61,9 @@ public class OracleCreateTableTest22 extends OracleTest { "\t\tUSING INDEX\n" + "\t\tPCTFREE 20\n" + "\t\tTABLESPACE stocks\n" + - "\t\tSTORAGE (INITIAL 8M)\n" + + "\t\tSTORAGE (\n" + + "\t\t\tINITIAL 8M\n" + + "\t\t)\n" + ")",// SQLUtils.toSQLString(stmt, 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 new file mode 100644 index 0000000000..dab4fc5624 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest41.java @@ -0,0 +1,150 @@ +/* + * 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 OracleCreateTableTest41 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " (\t\"NUM\" NUMBER(2,0), \n" + + "\t\"BLOB_COL\" BLOB, \n" + + "\t\"CLOB_COL\" CLOB, \n" + + "\t\"CH\" VARCHAR2(55), \n" + + "\t CONSTRAINT \"PK_A\" PRIMARY KEY (\"NUM\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"USERS\" ENABLE, \n" + + "\t SUPPLEMENTAL LOG GROUP \"GGS_16346\" (\"NUM\") ALWAYS, \n" + + "\t SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS, \n" + + "\t SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS, \n" + + "\t SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS, \n" + + "\t SUPPLEMENTAL LOG DATA (ALL) COLUMNS, \n" + + "\t SUPPLEMENTAL LOG GROUP \"ALLINS_POLNO\" (\"NUM\") ALWAYS\n" + + " ) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING\n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"USERS\" \n" + + " LOB (\"BLOB_COL\") STORE AS BASICFILE (\n" + + " TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n" + + " NOCACHE LOGGING \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) \n" + + " LOB (\"CLOB_COL\") STORE AS BASICFILE (\n" + + " TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n" + + " NOCACHE LOGGING \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) "; + +// System.out.println(sql); + + 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\"NUM\" NUMBER(2, 0),\n" + + "\t\"BLOB_COL\" BLOB,\n" + + "\t\"CLOB_COL\" CLOB,\n" + + "\t\"CH\" VARCHAR2(55),\n" + + "\tCONSTRAINT \"PK_A\" PRIMARY KEY (\"NUM\")\n" + + "\t\tUSING INDEX\n" + + "\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" + + "\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" + + "\tSUPPLEMENTAL LOG GROUP \"GGS_16346\" (\"NUM\") ALWAYS,\n" + + "\tSUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS,\n" + + "\tSUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS,\n" + + "\tSUPPLEMENTAL LOG DATA (FOREIGHN KEY) COLUMNS,\n" + + "\tSUPPLEMENTAL LOG DATA (ALL) COLUMNS,\n" + + "\tSUPPLEMENTAL LOG GROUP \"ALLINS_POLNO\" (\"NUM\") ALWAYS\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"USERS\"\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 (\"CLOB_COL\") STORE AS BASICFILE (\n" + + "\tTABLESPACE \"USERS\"\n" + + "\tENABLE STORAGE IN ROW\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" + + "\tCHUNK 8192\n" + + "\tNOCACHE\n" + + "\tLOGGING\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(6, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "BLOB_COL"))); + } +} 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 new file mode 100644 index 0000000000..1a0e70820e --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest42.java @@ -0,0 +1,102 @@ +/* + * 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 OracleCreateTableTest42 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + "CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"GROUP_NAME\" VARCHAR2(8) NOT NULL ENABLE, \n" + + " \"GROUP_KEY\" NUMBER(19,0) NOT NULL ENABLE, \n" + + " \"LOG_CMPLT_CSN\" VARCHAR2(128) NOT NULL ENABLE, \n" + + " \"LOG_CMPLT_XIDS_SEQ\" NUMBER(5,0) NOT NULL ENABLE, \n" + + " \"LOG_CMPLT_XIDS\" VARCHAR2(2000) NOT NULL ENABLE, \n" + + " PRIMARY KEY (\"GROUP_NAME\", \"GROUP_KEY\", \"LOG_CMPLT_CSN\", \"LOG_CMPLT_XIDS_SEQ\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS NOCOMPRESS LOGGING\n" + + " TABLESPACE \"USERS\" ENABLE, \n" + + " SUPPLEMENTAL LOG GROUP \"GGS_15754\" (\"GROUP_NAME\", \"GROUP_KEY\", \"LOG_CMPLT_CSN\", \"LOG_CMPLT_XIDS_SEQ\") ALWAYS, \n" + + " SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS, \n" + + " SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS, \n" + + " SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS\n" + + " ) SEGMENT CREATION DEFERRED \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING\n" + + " TABLESPACE \"USERS\" \n"; + + 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\"GROUP_NAME\" VARCHAR2(8) NOT NULL ENABLE,\n" + + "\t\"GROUP_KEY\" NUMBER(19, 0) NOT NULL ENABLE,\n" + + "\t\"LOG_CMPLT_CSN\" VARCHAR2(128) NOT NULL ENABLE,\n" + + "\t\"LOG_CMPLT_XIDS_SEQ\" NUMBER(5, 0) NOT NULL ENABLE,\n" + + "\t\"LOG_CMPLT_XIDS\" VARCHAR2(2000) NOT NULL ENABLE,\n" + + "\tPRIMARY KEY (\"GROUP_NAME\", \"GROUP_KEY\", \"LOG_CMPLT_CSN\", \"LOG_CMPLT_XIDS_SEQ\")\n" + + "\t\tUSING INDEX\n" + + "\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" + + "\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" + + "\tSUPPLEMENTAL LOG DATA (FOREIGHN KEY) COLUMNS\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"USERS\"",// + 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(6, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "GROUP_NAME"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest43.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest43.java new file mode 100644 index 0000000000..28c3dfefdd --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest43.java @@ -0,0 +1,104 @@ +/* + * 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 OracleCreateTableTest43 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + "CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " (\t\"DNAME\" VARCHAR2(10), \n" + + "\t\"DATA\" VARCHAR2(20)\n" + + " ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " STORAGE(\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"USERS\" \n" + + " PARTITION BY LIST (\"DNAME\") \n" + + " (PARTITION \"PART02\" VALUES ('SMT', 'SALE') \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"USERS\" NOCOMPRESS ) \n" + + " "; + + 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\"DNAME\" VARCHAR2(10),\n" + + "\t\"DATA\" VARCHAR2(20)\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "TABLESPACE \"USERS\"\n" + + "STORAGE (\n" + + "\tBUFFER_POOL DEFAULT\n" + + "\tFLASH_CACHE DEFAULT\n" + + "\tCELL_FLASH_CACHE DEFAULT\n" + + ")\n" + + "PARTITION BY LIST (\"DNAME\")\n" + + "(\n" + + "\tPARTITION \"PART02\" VALUES ('SMT', 'SALE')\n" + + "\t\tPCTFREE 10\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tNOCOMPRESS\n" + + "\t\tTABLESPACE \"USERS\"\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\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(2, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "DNAME"))); + } +} 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 new file mode 100644 index 0000000000..c1b15c88cb --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest44.java @@ -0,0 +1,145 @@ +/* + * 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 OracleCreateTableTest44 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + "CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"PK1\" NUMBER, \n" + + " \"COL1\" CHAR(1), \n" + + " \"COL2\" NCHAR(20), \n" + + " \"COL3\" VARCHAR2(30), \n" + + " \"COL4\" NVARCHAR2(30), \n" + + " \"COL5\" NUMBER(*,0), \n" + + " \"COL6\" FLOAT(10), \n" + + " \"COL7\" DATE, \n" + + " \"COL8\" TIMESTAMP (6), \n" + + " \"COL9\" BLOB, \n" + + " \"COL10\" LONG, \n" + + " PRIMARY KEY (\"PK1\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"USERS\" ENABLE\n" + + " ) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING\n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"USERS\" \n" + + " LOB (\"COL9\") STORE AS BASICFILE (\n" + + " TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n" + + " NOCACHE LOGGING \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 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\"PK1\" NUMBER,\n" + + "\t\"COL1\" CHAR(1),\n" + + "\t\"COL2\" NCHAR(20),\n" + + "\t\"COL3\" VARCHAR2(30),\n" + + "\t\"COL4\" NVARCHAR2(30),\n" + + "\t\"COL5\" NUMBER(*, 0),\n" + + "\t\"COL6\" FLOAT(10),\n" + + "\t\"COL7\" DATE,\n" + + "\t\"COL8\" TIMESTAMP(6),\n" + + "\t\"COL9\" BLOB,\n" + + "\t\"COL10\" LONG,\n" + + "\tPRIMARY KEY (\"PK1\")\n" + + "\t\tUSING INDEX\n" + + "\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" + + "\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" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"USERS\"\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 (\"COL9\") STORE AS BASICFILE (\n" + + "\tTABLESPACE \"USERS\"\n" + + "\tENABLE STORAGE IN ROW\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" + + "\tCHUNK 8192\n" + + "\tNOCACHE\n" + + "\tLOGGING\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(11, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "PK1"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest45.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest45.java new file mode 100644 index 0000000000..f864353b09 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest45.java @@ -0,0 +1,99 @@ +/* + * 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 OracleCreateTableTest45 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + "CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"ID\" NUMBER, \n" + + " \"COL_CHAR1\" CHAR(128), \n" + + " \"COL_VARCHAR1\" VARCHAR2(128), \n" + + " \"COL_DATE\" DATE, \n" + + " \"COL_TIMESTAMP\" TIMESTAMP (6), \n" + + " \"COL_CHAR2\" CHAR(128), \n" + + " \"COL_VARCHAR2\" VARCHAR2(128), \n" + + " \"COL_CHAR3\" CHAR(128), \n" + + " \"COL_NUMBER\" NUMBER\n" + + " ) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 COMPRESS FOR OLTP LOGGING\n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE 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" + + "\t\"ID\" NUMBER,\n" + + "\t\"COL_CHAR1\" CHAR(128),\n" + + "\t\"COL_VARCHAR1\" VARCHAR2(128),\n" + + "\t\"COL_DATE\" DATE,\n" + + "\t\"COL_TIMESTAMP\" TIMESTAMP(6),\n" + + "\t\"COL_CHAR2\" CHAR(128),\n" + + "\t\"COL_VARCHAR2\" VARCHAR2(128),\n" + + "\t\"COL_CHAR3\" CHAR(128),\n" + + "\t\"COL_NUMBER\" NUMBER\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "COMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"USERS\"\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" + + ")",// + 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(9, 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/OracleCreateTableTest46.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest46.java new file mode 100644 index 0000000000..890002ed60 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest46.java @@ -0,0 +1,115 @@ +/* + * 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 OracleCreateTableTest46 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"ID\" NUMBER NOT NULL ENABLE, \n" + + " \"GMT_CREATE\" DATE NOT NULL ENABLE, \n" + + " \"GMT_MODIFIED\" DATE NOT NULL ENABLE, \n" + + " \"SETTING_LEVEL\" VARCHAR2(8) NOT NULL ENABLE, \n" + + " \"OWNER\" NUMBER DEFAULT 0 NOT NULL ENABLE NOVALIDATE, \n" + + " \"ITEM_KEY\" VARCHAR2(64) NOT NULL ENABLE NOVALIDATE, \n" + + " \"ITEM_VALUE\" VARCHAR2(64), \n" + + " \"MODIFIER\" NUMBER NOT NULL ENABLE NOVALIDATE, \n" + + " \"MEMO\" VARCHAR2(512), \n" + + " CONSTRAINT \"AMAIL_USER_SETTING_PK\" PRIMARY KEY (\"ID\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APPDATA1M\" ENABLE\n" + + " ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING\n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APPDATA1M\" "; + + 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\" NUMBER NOT NULL ENABLE,\n" + + "\t\"GMT_CREATE\" DATE NOT NULL ENABLE,\n" + + "\t\"GMT_MODIFIED\" DATE NOT NULL ENABLE,\n" + + "\t\"SETTING_LEVEL\" VARCHAR2(8) NOT NULL ENABLE,\n" + + "\t\"OWNER\" NUMBER DEFAULT 0 NOT NULL ENABLE,\n" + + "\t\"ITEM_KEY\" VARCHAR2(64) NOT NULL ENABLE,\n" + + "\t\"ITEM_VALUE\" VARCHAR2(64),\n" + + "\t\"MODIFIER\" NUMBER NOT NULL ENABLE,\n" + + "\t\"MEMO\" VARCHAR2(512),\n" + + "\tCONSTRAINT \"AMAIL_USER_SETTING_PK\" PRIMARY KEY (\"ID\")\n" + + "\t\tUSING INDEX\n" + + "\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" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"APPDATA1M\"\n" + + "STORAGE (\n" + + "\tINITIAL 65536\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(9, 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/OracleCreateTableTest47.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest47.java new file mode 100644 index 0000000000..9203516850 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest47.java @@ -0,0 +1,140 @@ +/* + * 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 OracleCreateTableTest47 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " (\t\"ID\" NUMBER, \n" + + "\t\"IS_DELETED\" CHAR(1), \n" + + "\t\"GMT_MODIFIED\" DATE, \n" + + "\t\"GMT_CREATE\" DATE, \n" + + "\t\"CREATOR\" VARCHAR2(32), \n" + + "\t\"MODIFIER\" VARCHAR2(32), \n" + + "\t\"SEND_TIME\" DATE, \n" + + "\t\"SUBJECT\" VARCHAR2(256), \n" + + "\t\"SENDER\" VARCHAR2(128), \n" + + "\t\"PROVIDER\" VARCHAR2(16), \n" + + "\t\"AVINFO_ID\" NUMBER, \n" + + "\t\"CONTENT\" CLOB, \n" + + "\t CONSTRAINT \"AV_EMAIL_PK\" PRIMARY KEY (\"ID\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" + + " STORAGE(INITIAL 4194304 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APPINDX1M\" ENABLE\n" + + " ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING\n" + + "\n" + + " STORAGE(INITIAL 4194304 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APPDATA1M\" \n" + + " LOB (\"CONTENT\") STORE AS (\n" + + " TABLESPACE \"APPDATA1M\" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10\n" + + " NOCACHE LOGGING \n" + + " STORAGE(INITIAL 4194304 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL 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\"ID\" NUMBER,\n" + + "\t\"IS_DELETED\" CHAR(1),\n" + + "\t\"GMT_MODIFIED\" DATE,\n" + + "\t\"GMT_CREATE\" DATE,\n" + + "\t\"CREATOR\" VARCHAR2(32),\n" + + "\t\"MODIFIER\" VARCHAR2(32),\n" + + "\t\"SEND_TIME\" DATE,\n" + + "\t\"SUBJECT\" VARCHAR2(256),\n" + + "\t\"SENDER\" VARCHAR2(128),\n" + + "\t\"PROVIDER\" VARCHAR2(16),\n" + + "\t\"AVINFO_ID\" NUMBER,\n" + + "\t\"CONTENT\" CLOB,\n" + + "\tCONSTRAINT \"AV_EMAIL_PK\" PRIMARY KEY (\"ID\")\n" + + "\t\tUSING INDEX\n" + + "\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" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"APPDATA1M\"\n" + + "STORAGE (\n" + + "\tINITIAL 4194304\n" + + "\tFREELISTS 1\n" + + "\tFREELIST GROUPS 1\n" + + "\tBUFFER_POOL DEFAULT\n" + + ")\n" + + "LOB (\"CONTENT\") STORE AS (\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" + + "\tCHUNK 8192\n" + + "\tNOCACHE\n" + + "\tLOGGING\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(12, 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/OracleCreateTableTest48.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest48.java new file mode 100644 index 0000000000..30b4e7d6b2 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest48.java @@ -0,0 +1,120 @@ +/* + * 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 OracleCreateTableTest48 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " \n" + + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"ID\" NUMBER, \n" + + " \"GMT_CREATE\" DATE, \n" + + " \"GMT_MODIFIED\" DATE, \n" + + " \"TEMPLATE\" VARCHAR2(64), \n" + + " \"COMPANY_ID\" NUMBER, \n" + + " \"COLUMN_NAME\" VARCHAR2(64), \n" + + " \"COLUMN_PROFILE\" VARCHAR2(4000), \n" + + " \"COLUMN_IMAGE\" VARCHAR2(128), \n" + + " \"ORDERING\" NUMBER, \n" + + " \"STATUS\" VARCHAR2(16), \n" + + " \"CREATE_TYPE\" VARCHAR2(256), \n" + + " CONSTRAINT \"COLUMNS_PK\" PRIMARY KEY (\"ID\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"BOPSINDXTS\" ENABLE\n" + + " ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS NOLOGGING\n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"BOPSDATATS\" "; + + 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\" NUMBER,\n" + + "\t\"GMT_CREATE\" DATE,\n" + + "\t\"GMT_MODIFIED\" DATE,\n" + + "\t\"TEMPLATE\" VARCHAR2(64),\n" + + "\t\"COMPANY_ID\" NUMBER,\n" + + "\t\"COLUMN_NAME\" VARCHAR2(64),\n" + + "\t\"COLUMN_PROFILE\" VARCHAR2(4000),\n" + + "\t\"COLUMN_IMAGE\" VARCHAR2(128),\n" + + "\t\"ORDERING\" NUMBER,\n" + + "\t\"STATUS\" VARCHAR2(16),\n" + + "\t\"CREATE_TYPE\" VARCHAR2(256),\n" + + "\tCONSTRAINT \"COLUMNS_PK\" PRIMARY KEY (\"ID\")\n" + + "\t\tUSING INDEX\n" + + "\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" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "NOLOGGING\n" + + "TABLESPACE \"BOPSDATATS\"\n" + + "STORAGE (\n" + + "\tINITIAL 65536\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(11, 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/OracleCreateTableTest49.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest49.java new file mode 100644 index 0000000000..6bd92e57ef --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest49.java @@ -0,0 +1,248 @@ +/* + * 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 OracleCreateTableTest49 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"ID\" NUMBER NOT NULL ENABLE, \n" + + " \"GMT_CREATE\" DATE, \n" + + " \"GMT_MODIFIED\" DATE, \n" + + " \"POSTING_TYPE\" VARCHAR2(20), \n" + + " \"POSTING_ID\" NUMBER, \n" + + " \"SYS_FRAUD\" NUMBER, \n" + + " \"CONFIRM_FRAUD\" NUMBER, \n" + + " \"FRAUD_RESON\" VARCHAR2(128), \n" + + " \"USER_ID\" NUMBER, \n" + + " \"IDENTIFIER_ID\" NUMBER, \n" + + " \"POSTING_CREATE\" DATE, \n" + + " \"POSTING_MODIFIER\" DATE, \n" + + " \"MEMBER_ID\" VARCHAR2(32), \n" + + " \"MEMBER_LEVEL\" VARCHAR2(16), \n" + + " \"SERVICE_VALUE\" VARCHAR2(32), \n" + + " \"ADDRESS\" VARCHAR2(256), \n" + + " \"COUNTRY\" VARCHAR2(64), \n" + + " \"PROVINCE\" VARCHAR2(128), \n" + + " \"CITY\" VARCHAR2(128), \n" + + " \"ZIP\" VARCHAR2(32), \n" + + " \"FIRST_NAME\" VARCHAR2(128), \n" + + " \"LAST_NAME\" VARCHAR2(128), \n" + + " \"PHONE_COUNTRY\" VARCHAR2(8), \n" + + " \"PHONE_AREA\" VARCHAR2(8), \n" + + " \"PHONE_NUMBER\" VARCHAR2(128), \n" + + " \"FAX_COUNTRY\" VARCHAR2(8), \n" + + " \"FAX_AREA\" VARCHAR2(8), \n" + + " \"FAX_NUMBER\" VARCHAR2(128), \n" + + " \"IP_COUNTRY\" VARCHAR2(128), \n" + + " \"MOBILE_NO\" VARCHAR2(128), \n" + + " \"EMAIL\" VARCHAR2(128), \n" + + " \"ALT_EMAIL\" VARCHAR2(128), \n" + + " \"COMPANY\" VARCHAR2(128), \n" + + " \"HOMEPAGE_URL\" VARCHAR2(128), \n" + + " \"CATEGORY_ID_1\" NUMBER, \n" + + " \"CATEGORY_ID_2\" NUMBER, \n" + + " \"CATEGORY_ID_3\" NUMBER, \n" + + " \"CATEGORY_ID_4\" NUMBER, \n" + + " \"CATEGORY_ID_5\" NUMBER, \n" + + " \"SUBJECT\" VARCHAR2(256), \n" + + " \"KEYWORDS\" VARCHAR2(512), \n" + + " \"DETAIL\" CLOB, \n" + + " \"POSTING_STATUS\" VARCHAR2(16), \n" + + " \"OFFER_TYPE\" VARCHAR2(32)\n" + + " ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " STORAGE(\n" + + " BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APP_DATA1K\" \n" + + " LOB (\"DETAIL\") STORE AS (\n" + + " ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10\n" + + " NOCACHE LOGGING \n" + + " STORAGE(\n" + + " BUFFER_POOL DEFAULT)) \n" + + " PARTITION BY RANGE (\"GMT_CREATE\") \n" + + " (PARTITION \"P2008\" VALUES LESS THAN (TO_DATE(' 2009-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APP_DATA1K\" \n" + + " LOB (\"DETAIL\") STORE AS (\n" + + " TABLESPACE \"APP_DATA1K\" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10\n" + + " NOCACHE LOGGING \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)) NOCOMPRESS , \n" + + " PARTITION \"P2009\" VALUES LESS THAN (TO_DATE(' 2010-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APP_DATA1K\" \n" + + " LOB (\"DETAIL\") STORE AS (\n" + + " TABLESPACE \"APP_DATA1K\" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10\n" + + " NOCACHE LOGGING \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)) NOCOMPRESS , \n" + + " PARTITION \"P2010\" VALUES LESS THAN (TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APPDATA1M\" \n" + + " LOB (\"DETAIL\") STORE AS (\n" + + " TABLESPACE \"BOPSDATATS\" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10\n" + + " NOCACHE LOGGING \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)) NOCOMPRESS ) "; + + 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\" NUMBER NOT NULL ENABLE,\n" + + "\t\"GMT_CREATE\" DATE,\n" + + "\t\"GMT_MODIFIED\" DATE,\n" + + "\t\"POSTING_TYPE\" VARCHAR2(20),\n" + + "\t\"POSTING_ID\" NUMBER,\n" + + "\t\"SYS_FRAUD\" NUMBER,\n" + + "\t\"CONFIRM_FRAUD\" NUMBER,\n" + + "\t\"FRAUD_RESON\" VARCHAR2(128),\n" + + "\t\"USER_ID\" NUMBER,\n" + + "\t\"IDENTIFIER_ID\" NUMBER,\n" + + "\t\"POSTING_CREATE\" DATE,\n" + + "\t\"POSTING_MODIFIER\" DATE,\n" + + "\t\"MEMBER_ID\" VARCHAR2(32),\n" + + "\t\"MEMBER_LEVEL\" VARCHAR2(16),\n" + + "\t\"SERVICE_VALUE\" VARCHAR2(32),\n" + + "\t\"ADDRESS\" VARCHAR2(256),\n" + + "\t\"COUNTRY\" VARCHAR2(64),\n" + + "\t\"PROVINCE\" VARCHAR2(128),\n" + + "\t\"CITY\" VARCHAR2(128),\n" + + "\t\"ZIP\" VARCHAR2(32),\n" + + "\t\"FIRST_NAME\" VARCHAR2(128),\n" + + "\t\"LAST_NAME\" VARCHAR2(128),\n" + + "\t\"PHONE_COUNTRY\" VARCHAR2(8),\n" + + "\t\"PHONE_AREA\" VARCHAR2(8),\n" + + "\t\"PHONE_NUMBER\" VARCHAR2(128),\n" + + "\t\"FAX_COUNTRY\" VARCHAR2(8),\n" + + "\t\"FAX_AREA\" VARCHAR2(8),\n" + + "\t\"FAX_NUMBER\" VARCHAR2(128),\n" + + "\t\"IP_COUNTRY\" VARCHAR2(128),\n" + + "\t\"MOBILE_NO\" VARCHAR2(128),\n" + + "\t\"EMAIL\" VARCHAR2(128),\n" + + "\t\"ALT_EMAIL\" VARCHAR2(128),\n" + + "\t\"COMPANY\" VARCHAR2(128),\n" + + "\t\"HOMEPAGE_URL\" VARCHAR2(128),\n" + + "\t\"CATEGORY_ID_1\" NUMBER,\n" + + "\t\"CATEGORY_ID_2\" NUMBER,\n" + + "\t\"CATEGORY_ID_3\" NUMBER,\n" + + "\t\"CATEGORY_ID_4\" NUMBER,\n" + + "\t\"CATEGORY_ID_5\" NUMBER,\n" + + "\t\"SUBJECT\" VARCHAR2(256),\n" + + "\t\"KEYWORDS\" VARCHAR2(512),\n" + + "\t\"DETAIL\" CLOB,\n" + + "\t\"POSTING_STATUS\" VARCHAR2(16),\n" + + "\t\"OFFER_TYPE\" VARCHAR2(32)\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "TABLESPACE \"APP_DATA1K\"\n" + + "STORAGE (\n" + + "\tBUFFER_POOL DEFAULT\n" + + ")\n" + + "LOB (\"DETAIL\") STORE AS (\n" + + "\tENABLE STORAGE IN ROW\n" + + "\tSTORAGE (\n" + + "\t\tBUFFER_POOL DEFAULT\n" + + "\t)\n" + + "\tCHUNK 8192\n" + + "\tNOCACHE\n" + + "\tLOGGING\n" + + ")\n" + + "PARTITION BY RANGE (\"GMT_CREATE\")\n" + + "(\n" + + "\tPARTITION \"P2008\" VALUES LESS THAN (TO_DATE(' 2009-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" + + "\t\tPCTFREE 10\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tNOCOMPRESS\n" + + "\t\tTABLESPACE \"APP_DATA1K\"\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" + + "\tPARTITION \"P2009\" VALUES LESS THAN (TO_DATE(' 2010-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" + + "\t\tPCTFREE 10\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tNOCOMPRESS\n" + + "\t\tTABLESPACE \"APP_DATA1K\"\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" + + "\tPARTITION \"P2010\" VALUES LESS THAN (TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" + + "\t\tPCTFREE 10\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tNOCOMPRESS\n" + + "\t\tTABLESPACE \"APPDATA1M\"\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" + + ")",// + 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(44, 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/OracleCreateTableTest50.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest50.java new file mode 100644 index 0000000000..d0ef507e32 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest50.java @@ -0,0 +1,270 @@ +/* + * 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 OracleCreateTableTest50 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"ID\" NUMBER NOT NULL ENABLE, \n" + + " \"GMT_CREATE\" DATE, \n" + + " \"GMT_MODIFIED\" DATE, \n" + + " \"COMPANY_ID\" NUMBER, \n" + + " \"IMAGE_REPOSITORY_IDS\" VARCHAR2(128), \n" + + " \"HAVE_IMAGE\" CHAR(1), \n" + + " \"IMAGE_COUNT\" NUMBER, \n" + + " \"IMAGE_WATERMARK\" CHAR(1), \n" + + " \"IMAGE_PROCESS\" VARCHAR2(16), \n" + + " \"MEMBER_ID\" VARCHAR2(32), \n" + + " \"MEMBER_SEQ\" NUMBER, \n" + + " \"SUBJECT\" VARCHAR2(256), \n" + + " \"KEYWORDS\" VARCHAR2(512), \n" + + " \"REPOSITORY_TYPE\" VARCHAR2(16), \n" + + " \"TYPE\" VARCHAR2(16), \n" + + " \"CATEGORY_ID\" NUMBER, \n" + + " \"GROUP_ID\" NUMBER DEFAULT 0, \n" + + " \"STATUS\" VARCHAR2(16), \n" + + " \"IS_DISPLAY\" CHAR(1), \n" + + " \"HS_CODE\" VARCHAR2(16), \n" + + " \"IND_BY_ALL\" NUMBER, \n" + + " \"IND_BY_GROUP\" NUMBER, \n" + + " \"OWNER_MEMBER_ID\" VARCHAR2(32), \n" + + " \"OWNER_MEMBER_SEQ\" NUMBER, \n" + + " \"CERTIFICATE_IDS\" VARCHAR2(256), \n" + + " \"MONEY_TYPE\" NUMBER, \n" + + " \"PRICE_RANGE\" VARCHAR2(256), \n" + + " \"PORT\" VARCHAR2(256), \n" + + " \"PAYMENT_METHOD\" VARCHAR2(128), \n" + + " \"PAYMENT_METHOD_OTHER\" VARCHAR2(256), \n" + + " \"MIN_ORDER_QUANTITY\" VARCHAR2(64), \n" + + " \"MIN_ORDER_UNIT\" NUMBER, \n" + + " \"MIN_ORDER_OTHER\" VARCHAR2(256), \n" + + " \"SUPPLY_QUANTITY\" VARCHAR2(64), \n" + + " \"SUPPLY_UNIT\" NUMBER, \n" + + " \"SUPPLY_PERIOD\" VARCHAR2(16), \n" + + " \"SUPPLY_OTHER\" VARCHAR2(256), \n" + + " \"PACKAGING_DESC\" VARCHAR2(512), \n" + + " \"CONSIGNMENT_TERM\" VARCHAR2(64), \n" + + " \"IS_VALIDATE\" CHAR(1), \n" + + " \"CREATE_TYPE\" VARCHAR2(16), \n" + + " \"RED_MODEL\" VARCHAR2(128), \n" + + " \"DRAFT_STATUS\" VARCHAR2(16) DEFAULT 'no_status', \n" + + " \"EXPORT_TYPE\" VARCHAR2(16) DEFAULT 'normal', \n" + + " \"IS_ESCROW\" CHAR(1) DEFAULT 'N', \n" + + " \"SALE_TYPE\" VARCHAR2(64) DEFAULT 'sourcing', \n" + + " \"WS_DISPLAY\" VARCHAR2(16), \n" + + " \"WS_OFFLINE_DATE\" DATE, \n" + + " \"WS_VALID_NUM\" NUMBER, \n" + + " \"WS_REPOST_NUM\" NUMBER, \n" + + " \"WS_AUTO_REPOST\" CHAR(1), \n" + + " \"PRICE_UNIT\" NUMBER, \n" + + " \"IMAGE_VERSION\" NUMBER, \n" + + " \"SCORE\" NUMBER, \n" + + " \"GROUP_ID2\" NUMBER, \n" + + " \"GROUP_ID3\" NUMBER, \n" + + " \"IND_BY_GROUP2\" NUMBER, \n" + + " \"IND_BY_GROUP3\" NUMBER, \n" + + " CONSTRAINT \"P_PRODUCT_PK1\" PRIMARY KEY (\"ID\", \"COMPANY_ID\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 \n" + + " STORAGE(\n" + + " BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APPINDX1M\" LOCAL\n" + + " (PARTITION \"PRODUCT_HASH_P1\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P2\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P3\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P4\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P5\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P6\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P7\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P8\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P9\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P10\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P11\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P12\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P13\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P14\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P15\" \n" + + " TABLESPACE \"APPINDX1M\", \n" + + " PARTITION \"PRODUCT_HASH_P16\" \n" + + " TABLESPACE \"APPINDX1M\") ENABLE NOVALIDATE\n" + + " ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " STORAGE(\n" + + " BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APP_DATA1K\" \n" + + " PARTITION BY HASH (\"COMPANY_ID\") \n" + + " (PARTITION \"PRODUCT_HASH_P1\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P2\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P3\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P4\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P5\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P6\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P7\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P8\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P9\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P10\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P11\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P12\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P13\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P14\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P15\" \n" + + " TABLESPACE \"APPDATA1M\", \n" + + " PARTITION \"PRODUCT_HASH_P16\" \n" + + " TABLESPACE \"APPDATA1M\") "; + + 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\" NUMBER NOT NULL ENABLE,\n" + + "\t\"GMT_CREATE\" DATE,\n" + + "\t\"GMT_MODIFIED\" DATE,\n" + + "\t\"COMPANY_ID\" NUMBER,\n" + + "\t\"IMAGE_REPOSITORY_IDS\" VARCHAR2(128),\n" + + "\t\"HAVE_IMAGE\" CHAR(1),\n" + + "\t\"IMAGE_COUNT\" NUMBER,\n" + + "\t\"IMAGE_WATERMARK\" CHAR(1),\n" + + "\t\"IMAGE_PROCESS\" VARCHAR2(16),\n" + + "\t\"MEMBER_ID\" VARCHAR2(32),\n" + + "\t\"MEMBER_SEQ\" NUMBER,\n" + + "\t\"SUBJECT\" VARCHAR2(256),\n" + + "\t\"KEYWORDS\" VARCHAR2(512),\n" + + "\t\"REPOSITORY_TYPE\" VARCHAR2(16),\n" + + "\t\"TYPE\" VARCHAR2(16),\n" + + "\t\"CATEGORY_ID\" NUMBER,\n" + + "\t\"GROUP_ID\" NUMBER DEFAULT 0,\n" + + "\t\"STATUS\" VARCHAR2(16),\n" + + "\t\"IS_DISPLAY\" CHAR(1),\n" + + "\t\"HS_CODE\" VARCHAR2(16),\n" + + "\t\"IND_BY_ALL\" NUMBER,\n" + + "\t\"IND_BY_GROUP\" NUMBER,\n" + + "\t\"OWNER_MEMBER_ID\" VARCHAR2(32),\n" + + "\t\"OWNER_MEMBER_SEQ\" NUMBER,\n" + + "\t\"CERTIFICATE_IDS\" VARCHAR2(256),\n" + + "\t\"MONEY_TYPE\" NUMBER,\n" + + "\t\"PRICE_RANGE\" VARCHAR2(256),\n" + + "\t\"PORT\" VARCHAR2(256),\n" + + "\t\"PAYMENT_METHOD\" VARCHAR2(128),\n" + + "\t\"PAYMENT_METHOD_OTHER\" VARCHAR2(256),\n" + + "\t\"MIN_ORDER_QUANTITY\" VARCHAR2(64),\n" + + "\t\"MIN_ORDER_UNIT\" NUMBER,\n" + + "\t\"MIN_ORDER_OTHER\" VARCHAR2(256),\n" + + "\t\"SUPPLY_QUANTITY\" VARCHAR2(64),\n" + + "\t\"SUPPLY_UNIT\" NUMBER,\n" + + "\t\"SUPPLY_PERIOD\" VARCHAR2(16),\n" + + "\t\"SUPPLY_OTHER\" VARCHAR2(256),\n" + + "\t\"PACKAGING_DESC\" VARCHAR2(512),\n" + + "\t\"CONSIGNMENT_TERM\" VARCHAR2(64),\n" + + "\t\"IS_VALIDATE\" CHAR(1),\n" + + "\t\"CREATE_TYPE\" VARCHAR2(16),\n" + + "\t\"RED_MODEL\" VARCHAR2(128),\n" + + "\t\"DRAFT_STATUS\" VARCHAR2(16) DEFAULT 'no_status',\n" + + "\t\"EXPORT_TYPE\" VARCHAR2(16) DEFAULT 'normal',\n" + + "\t\"IS_ESCROW\" CHAR(1) DEFAULT 'N',\n" + + "\t\"SALE_TYPE\" VARCHAR2(64) DEFAULT 'sourcing',\n" + + "\t\"WS_DISPLAY\" VARCHAR2(16),\n" + + "\t\"WS_OFFLINE_DATE\" DATE,\n" + + "\t\"WS_VALID_NUM\" NUMBER,\n" + + "\t\"WS_REPOST_NUM\" NUMBER,\n" + + "\t\"WS_AUTO_REPOST\" CHAR(1),\n" + + "\t\"PRICE_UNIT\" NUMBER,\n" + + "\t\"IMAGE_VERSION\" NUMBER,\n" + + "\t\"SCORE\" NUMBER,\n" + + "\t\"GROUP_ID2\" NUMBER,\n" + + "\t\"GROUP_ID3\" NUMBER,\n" + + "\t\"IND_BY_GROUP2\" NUMBER,\n" + + "\t\"IND_BY_GROUP3\" NUMBER,\n" + + "\tCONSTRAINT \"P_PRODUCT_PK1\" PRIMARY KEY (\"ID\", \"COMPANY_ID\")\n" + + "\t\tUSING INDEX\n" + + "\t\tPCTFREE 10\n" + + "\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" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "TABLESPACE \"APP_DATA1K\"\n" + + "STORAGE (\n" + + "\tBUFFER_POOL DEFAULT\n" + + ")\n" + + "PARTITION BY HASH (\"COMPANY_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(1, visitor.getTables().size()); + + Assert.assertEquals(58, 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/OracleCreateTableTest51.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest51.java new file mode 100644 index 0000000000..f1ea26e78a --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest51.java @@ -0,0 +1,84 @@ +/* + * 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 OracleCreateTableTest51 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"A\" NUMBER, \n" + + " \"C\" VARCHAR2(7), \n" + + " \"DC1\" VARCHAR2(120)\n" + + " ) PCTFREE 0 PCTUSED 40 INITRANS 1 MAXTRANS 255 COMPRESS NOLOGGING\n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APP_DATA1K\" "; + + 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\"A\" NUMBER,\n" + + "\t\"C\" VARCHAR2(7),\n" + + "\t\"DC1\" VARCHAR2(120)\n" + + ")\n" + + "PCTFREE 0\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "COMPRESS\n" + + "NOLOGGING\n" + + "TABLESPACE \"APP_DATA1K\"\n" + + "STORAGE (\n" + + "\tINITIAL 65536\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(3, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "A"))); + } +} 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 new file mode 100644 index 0000000000..7e998dcb53 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest52.java @@ -0,0 +1,119 @@ +/* + * 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 OracleCreateTableTest52 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"ID\" NUMBER NOT NULL ENABLE, \n" + + " \"GMT_CREATE\" DATE NOT NULL ENABLE, \n" + + " \"GMT_MODIFIED\" DATE NOT NULL ENABLE, \n" + + " \"ADMIN_SEQ\" NUMBER, \n" + + " \"COMPANY_ID\" NUMBER, \n" + + " \"NOW_LEVEL\" NUMBER, \n" + + " \"GMV_30DAY\" NUMBER, \n" + + " \"REFUND_30DAY\" NUMBER, \n" + + " \"REPUTATION_30DAY\" NUMBER, \n" + + " \"REBUY_AMOUNT\" NUMBER, \n" + + " \"STANDARD_CNT\" NUMBER, \n" + + " CONSTRAINT \"WS_SELLER_LEVEL_PK\" PRIMARY KEY (\"ID\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APPDATA1M\" ENABLE\n" + + " ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING\n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APPDATA1M\" ENABLE ROW MOVEMENT "; + + 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\" NUMBER NOT NULL ENABLE,\n" + + "\t\"GMT_CREATE\" DATE NOT NULL ENABLE,\n" + + "\t\"GMT_MODIFIED\" DATE NOT NULL ENABLE,\n" + + "\t\"ADMIN_SEQ\" NUMBER,\n" + + "\t\"COMPANY_ID\" NUMBER,\n" + + "\t\"NOW_LEVEL\" NUMBER,\n" + + "\t\"GMV_30DAY\" NUMBER,\n" + + "\t\"REFUND_30DAY\" NUMBER,\n" + + "\t\"REPUTATION_30DAY\" NUMBER,\n" + + "\t\"REBUY_AMOUNT\" NUMBER,\n" + + "\t\"STANDARD_CNT\" NUMBER,\n" + + "\tCONSTRAINT \"WS_SELLER_LEVEL_PK\" PRIMARY KEY (\"ID\")\n" + + "\t\tUSING INDEX\n" + + "\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" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"APPDATA1M\"\n" + + "STORAGE (\n" + + "\tINITIAL 65536\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(11, 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/OracleCreateTableTest53.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest53.java new file mode 100644 index 0000000000..40f4079bc3 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest53.java @@ -0,0 +1,123 @@ +/* + * 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 OracleCreateTableTest53 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"RUNID\" NUMBER, \n" + + " \"UNIT_NUMBER\" NUMBER, \n" + + " \"LINE#\" NUMBER NOT NULL ENABLE, \n" + + " \"TOTAL_OCCUR\" NUMBER, \n" + + " \"TOTAL_TIME\" NUMBER, \n" + + " \"MIN_TIME\" NUMBER, \n" + + " \"MAX_TIME\" NUMBER, \n" + + " \"SPARE1\" NUMBER, \n" + + " \"SPARE2\" NUMBER, \n" + + " \"SPARE3\" NUMBER, \n" + + " \"SPARE4\" NUMBER, \n" + + " PRIMARY KEY (\"RUNID\", \"UNIT_NUMBER\", \"LINE#\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"SYSTEM\" ENABLE, \n" + + " FOREIGN KEY (\"RUNID\", \"UNIT_NUMBER\")\n" + + " REFERENCES \"B2BDBA\".\"PLSQL_PROFILER_UNITS\" (\"RUNID\", \"UNIT_NUMBER\") ENABLE\n" + + " ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING\n" + + " STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"SYSTEM\" "; + + 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\"RUNID\" NUMBER,\n" + + "\t\"UNIT_NUMBER\" NUMBER,\n" + + "\t\"LINE#\" NUMBER NOT NULL ENABLE,\n" + + "\t\"TOTAL_OCCUR\" NUMBER,\n" + + "\t\"TOTAL_TIME\" NUMBER,\n" + + "\t\"MIN_TIME\" NUMBER,\n" + + "\t\"MAX_TIME\" NUMBER,\n" + + "\t\"SPARE1\" NUMBER,\n" + + "\t\"SPARE2\" NUMBER,\n" + + "\t\"SPARE3\" NUMBER,\n" + + "\t\"SPARE4\" NUMBER,\n" + + "\tPRIMARY KEY (\"RUNID\", \"UNIT_NUMBER\", \"LINE#\")\n" + + "\t\tUSING INDEX\n" + + "\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" + + "\tFOREIGN KEY (\"RUNID\", \"UNIT_NUMBER\")\n" + + "\t\tREFERENCES \"B2BDBA\".\"PLSQL_PROFILER_UNITS\" (\"RUNID\", \"UNIT_NUMBER\") ENABLE\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"SYSTEM\"\n" + + "STORAGE (\n" + + "\tINITIAL 65536\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(2, visitor.getTables().size()); + + Assert.assertEquals(13, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "RUNID"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest54.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest54.java new file mode 100644 index 0000000000..e56b3a6e83 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest54.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 OracleCreateTableTest54 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"PUSH\" NUMBER, \n" + + " \"LOAD\" NUMBER, \n" + + " \"TABLE_ID\" NUMBER, \n" + + " \"TABLE_NAME\" VARCHAR2(50), \n" + + " \"PRI_KEY\" VARCHAR2(50), \n" + + " \"TEMP_TABLE_NAME\" VARCHAR2(50)\n" + + " ) \n" + + " ORGANIZATION EXTERNAL \n" + + " ( TYPE ORACLE_LOADER\n" + + " DEFAULT DIRECTORY \"DIR_MQ\"\n" + + " ACCESS PARAMETERS\n" + + " ( records delimited by newline fields terminated by '|' )\n" + + " LOCATION\n" + + " ( 'retl-table.cfg'\n" + + " )\n" + + " )\n" + + " REJECT LIMIT UNLIMITED "; + + 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\"PUSH\" NUMBER,\n" + + "\t\"LOAD\" NUMBER,\n" + + "\t\"TABLE_ID\" NUMBER,\n" + + "\t\"TABLE_NAME\" VARCHAR2(50),\n" + + "\t\"PRI_KEY\" VARCHAR2(50),\n" + + "\t\"TEMP_TABLE_NAME\" VARCHAR2(50)\n" + + ")\n" + + "ORGANIZATION EXTERNAL (\n" + + "\t\tTYPE ORACLE_LOADER\n" + + "\t\tDEFAULT DIRECTORY \"DIR_MQ\"\n" + + "\t\tACCESS PARAMETERS (\n" + + "\t\t\tRECORDS DELIMITED BY NEWLINE\n" + + "\t\t\tFIELDS TERMINATED BY '|'\n" + + "\t\t)\n" + + "\t\tLOCATION ('retl-table.cfg')\n" + + "\t)\n" + + "\tREJECT LIMIT UNLIMITED",// + 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(6, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "LOAD"))); + } +} 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 new file mode 100644 index 0000000000..0d5bc8dcf5 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest55.java @@ -0,0 +1,100 @@ +/* + * 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 OracleCreateTableTest55 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"I\" NUMBER, \n" + + " \"C\" CLOB\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\" \n" + + " LOB (\"C\") STORE AS (\n" + + " TABLESPACE \"USERS\" DISABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10\n" + + " NOCACHE LOGGING \n" + + " STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL 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\"I\" NUMBER,\n" + + "\t\"C\" CLOB\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" + + ")\n" + + "LOB (\"C\") STORE AS (\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" + + "\tCHUNK 8192\n" + + "\tNOCACHE\n" + + "\tLOGGING\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(2, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "I"))); + } +} 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 new file mode 100644 index 0000000000..77c1cb40e7 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest56.java @@ -0,0 +1,117 @@ +/* + * 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 OracleCreateTableTest56 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " \n" + + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"SNAP_ID\" NUMBER(6,0) NOT NULL ENABLE, \n" + + " \"DBID\" NUMBER NOT NULL ENABLE, \n" + + " \"INSTANCE_NUMBER\" NUMBER NOT NULL ENABLE, \n" + + " \"EVENT\" VARCHAR2(64) NOT NULL ENABLE, \n" + + " \"TOTAL_WAITS\" NUMBER, \n" + + " \"TOTAL_TIMEOUTS\" NUMBER, \n" + + " \"TIME_WAITED_MICRO\" NUMBER, \n" + + " CONSTRAINT \"STATS$BG_EVENT_SUMMARY_PK\" PRIMARY KEY (\"SNAP_ID\", \"DBID\", \"INSTANCE_NUMBER\", \"EVENT\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" + + " STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"PERFSTAT\" ENABLE, \n" + + " CONSTRAINT \"STATS$BG_EVENT_SUMMARY_FK\" FOREIGN KEY (\"SNAP_ID\", \"DBID\", \"INSTANCE_NUMBER\")\n" + + " REFERENCES \"PERFSTAT\".\"STATS$SNAPSHOT\" (\"SNAP_ID\", \"DBID\", \"INSTANCE_NUMBER\") ON DELETE CASCADE ENABLE\n" + + " ) PCTFREE 5 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 \"PERFSTAT\" "; + + 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\"SNAP_ID\" NUMBER(6, 0) NOT NULL ENABLE,\n" + + "\t\"DBID\" NUMBER NOT NULL ENABLE,\n" + + "\t\"INSTANCE_NUMBER\" NUMBER NOT NULL ENABLE,\n" + + "\t\"EVENT\" VARCHAR2(64) NOT NULL ENABLE,\n" + + "\t\"TOTAL_WAITS\" NUMBER,\n" + + "\t\"TOTAL_TIMEOUTS\" NUMBER,\n" + + "\t\"TIME_WAITED_MICRO\" NUMBER,\n" + + "\tCONSTRAINT \"STATS$BG_EVENT_SUMMARY_PK\" PRIMARY KEY (\"SNAP_ID\", \"DBID\", \"INSTANCE_NUMBER\", \"EVENT\")\n" + + "\t\tUSING INDEX\n" + + "\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" + + "\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" + + ")\n" + + "PCTFREE 5\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"PERFSTAT\"\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(2, visitor.getTables().size()); + + Assert.assertEquals(10, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "SNAP_ID"))); + } +} 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 new file mode 100644 index 0000000000..3349d8c431 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest57.java @@ -0,0 +1,200 @@ +/* + * 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 OracleCreateTableTest57 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"ID\" NUMBER NOT NULL ENABLE, \n" + + " \"GMT_CREATE\" DATE, \n" + + " \"GMT_MODIFIED\" DATE, \n" + + " \"COMPANY_ID\" NUMBER, \n" + + " \"IMAGE_REPOSITORY_IDS\" VARCHAR2(128), \n" + + " \"HAVE_IMAGE\" CHAR(1), \n" + + " \"IMAGE_COUNT\" NUMBER, \n" + + " \"IMAGE_WATERMARK\" CHAR(1), \n" + + " \"IMAGE_PROCESS\" VARCHAR2(16), \n" + + " \"MEMBER_ID\" VARCHAR2(32), \n" + + " \"MEMBER_SEQ\" NUMBER, \n" + + " \"SUBJECT\" VARCHAR2(256), \n" + + " \"KEYWORDS\" VARCHAR2(512), \n" + + " \"REPOSITORY_TYPE\" VARCHAR2(16), \n" + + " \"TYPE\" VARCHAR2(16), \n" + + " \"CATEGORY_ID\" NUMBER, \n" + + " \"GROUP_ID\" NUMBER, \n" + + " \"STATUS\" VARCHAR2(16), \n" + + " \"IS_DISPLAY\" CHAR(1), \n" + + " \"HS_CODE\" VARCHAR2(16), \n" + + " \"IND_BY_ALL\" NUMBER, \n" + + " \"IND_BY_GROUP\" NUMBER, \n" + + " \"OWNER_MEMBER_ID\" VARCHAR2(32), \n" + + " \"OWNER_MEMBER_SEQ\" NUMBER, \n" + + " \"CERTIFICATE_IDS\" VARCHAR2(256), \n" + + " \"MONEY_TYPE\" NUMBER, \n" + + " \"PRICE_RANGE\" VARCHAR2(256), \n" + + " \"PORT\" VARCHAR2(256), \n" + + " \"PAYMENT_METHOD\" VARCHAR2(128), \n" + + " \"PAYMENT_METHOD_OTHER\" VARCHAR2(256), \n" + + " \"MIN_ORDER_QUANTITY\" VARCHAR2(64), \n" + + " \"MIN_ORDER_UNIT\" NUMBER, \n" + + " \"MIN_ORDER_OTHER\" VARCHAR2(256), \n" + + " \"SUPPLY_QUANTITY\" VARCHAR2(64), \n" + + " \"SUPPLY_UNIT\" NUMBER, \n" + + " \"SUPPLY_PERIOD\" VARCHAR2(16), \n" + + " \"SUPPLY_OTHER\" VARCHAR2(256), \n" + + " \"PACKAGING_DESC\" VARCHAR2(512), \n" + + " \"CONSIGNMENT_TERM\" VARCHAR2(64), \n" + + " \"IS_VALIDATE\" CHAR(1), \n" + + " \"CREATE_TYPE\" VARCHAR2(16), \n" + + " \"RED_MODEL\" VARCHAR2(128), \n" + + " \"DRAFT_STATUS\" VARCHAR2(16) DEFAULT 'no_status', \n" + + " \"EXPORT_TYPE\" VARCHAR2(16) DEFAULT 'normal', \n" + + " \"IS_ESCROW\" CHAR(1), \n" + + " \"SALE_TYPE\" VARCHAR2(64), \n" + + " \"WS_DISPLAY\" VARCHAR2(16), \n" + + " \"WS_OFFLINE_DATE\" DATE, \n" + + " \"WS_VALID_NUM\" NUMBER, \n" + + " \"WS_REPOST_NUM\" NUMBER, \n" + + " \"WS_AUTO_REPOST\" CHAR(1), \n" + + " \"PRICE_UNIT\" NUMBER, \n" + + " \"IMAGE_VERSION\" NUMBER, \n" + + " \"SCORE\" NUMBER, \n" + + " \"GROUP_ID2\" NUMBER, \n" + + " \"GROUP_ID3\" NUMBER, \n" + + " \"IND_BY_GROUP2\" NUMBER, \n" + + " \"IND_BY_GROUP3\" NUMBER, \n" + + " CONSTRAINT \"PRODUCT_PK\" PRIMARY KEY (\"ID\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" + + " STORAGE(INITIAL 83886080 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APPINDX1M\" ENABLE\n" + + " ) CLUSTER \"SEARCHTEST\".\"CLUSTER_PRODUCT_COMPANY_ID\" (\"COMPANY_ID\")\n" + + "\n" + + " "; + + 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\" NUMBER NOT NULL ENABLE,\n" + + "\t\"GMT_CREATE\" DATE,\n" + + "\t\"GMT_MODIFIED\" DATE,\n" + + "\t\"COMPANY_ID\" NUMBER,\n" + + "\t\"IMAGE_REPOSITORY_IDS\" VARCHAR2(128),\n" + + "\t\"HAVE_IMAGE\" CHAR(1),\n" + + "\t\"IMAGE_COUNT\" NUMBER,\n" + + "\t\"IMAGE_WATERMARK\" CHAR(1),\n" + + "\t\"IMAGE_PROCESS\" VARCHAR2(16),\n" + + "\t\"MEMBER_ID\" VARCHAR2(32),\n" + + "\t\"MEMBER_SEQ\" NUMBER,\n" + + "\t\"SUBJECT\" VARCHAR2(256),\n" + + "\t\"KEYWORDS\" VARCHAR2(512),\n" + + "\t\"REPOSITORY_TYPE\" VARCHAR2(16),\n" + + "\t\"TYPE\" VARCHAR2(16),\n" + + "\t\"CATEGORY_ID\" NUMBER,\n" + + "\t\"GROUP_ID\" NUMBER,\n" + + "\t\"STATUS\" VARCHAR2(16),\n" + + "\t\"IS_DISPLAY\" CHAR(1),\n" + + "\t\"HS_CODE\" VARCHAR2(16),\n" + + "\t\"IND_BY_ALL\" NUMBER,\n" + + "\t\"IND_BY_GROUP\" NUMBER,\n" + + "\t\"OWNER_MEMBER_ID\" VARCHAR2(32),\n" + + "\t\"OWNER_MEMBER_SEQ\" NUMBER,\n" + + "\t\"CERTIFICATE_IDS\" VARCHAR2(256),\n" + + "\t\"MONEY_TYPE\" NUMBER,\n" + + "\t\"PRICE_RANGE\" VARCHAR2(256),\n" + + "\t\"PORT\" VARCHAR2(256),\n" + + "\t\"PAYMENT_METHOD\" VARCHAR2(128),\n" + + "\t\"PAYMENT_METHOD_OTHER\" VARCHAR2(256),\n" + + "\t\"MIN_ORDER_QUANTITY\" VARCHAR2(64),\n" + + "\t\"MIN_ORDER_UNIT\" NUMBER,\n" + + "\t\"MIN_ORDER_OTHER\" VARCHAR2(256),\n" + + "\t\"SUPPLY_QUANTITY\" VARCHAR2(64),\n" + + "\t\"SUPPLY_UNIT\" NUMBER,\n" + + "\t\"SUPPLY_PERIOD\" VARCHAR2(16),\n" + + "\t\"SUPPLY_OTHER\" VARCHAR2(256),\n" + + "\t\"PACKAGING_DESC\" VARCHAR2(512),\n" + + "\t\"CONSIGNMENT_TERM\" VARCHAR2(64),\n" + + "\t\"IS_VALIDATE\" CHAR(1),\n" + + "\t\"CREATE_TYPE\" VARCHAR2(16),\n" + + "\t\"RED_MODEL\" VARCHAR2(128),\n" + + "\t\"DRAFT_STATUS\" VARCHAR2(16) DEFAULT 'no_status',\n" + + "\t\"EXPORT_TYPE\" VARCHAR2(16) DEFAULT 'normal',\n" + + "\t\"IS_ESCROW\" CHAR(1),\n" + + "\t\"SALE_TYPE\" VARCHAR2(64),\n" + + "\t\"WS_DISPLAY\" VARCHAR2(16),\n" + + "\t\"WS_OFFLINE_DATE\" DATE,\n" + + "\t\"WS_VALID_NUM\" NUMBER,\n" + + "\t\"WS_REPOST_NUM\" NUMBER,\n" + + "\t\"WS_AUTO_REPOST\" CHAR(1),\n" + + "\t\"PRICE_UNIT\" NUMBER,\n" + + "\t\"IMAGE_VERSION\" NUMBER,\n" + + "\t\"SCORE\" NUMBER,\n" + + "\t\"GROUP_ID2\" NUMBER,\n" + + "\t\"GROUP_ID3\" NUMBER,\n" + + "\t\"IND_BY_GROUP2\" NUMBER,\n" + + "\t\"IND_BY_GROUP3\" NUMBER,\n" + + "\tCONSTRAINT \"PRODUCT_PK\" PRIMARY KEY (\"ID\")\n" + + "\t\tUSING INDEX\n" + + "\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" + + ")\n" + + "CLUSTER \"SEARCHTEST\".\"CLUSTER_PRODUCT_COMPANY_ID\" (\"COMPANY_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(1, visitor.getTables().size()); + + Assert.assertEquals(58, 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/OracleCreateTableTest58.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest58.java new file mode 100644 index 0000000000..01e3a6b31d --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest58.java @@ -0,0 +1,144 @@ +/* + * 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 OracleCreateTableTest58 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"ID\" NUMBER NOT NULL ENABLE, \n" + + " \"PROPS\" VARCHAR2(4000), \n" + + " CONSTRAINT \"PRODUCT_PROPERTY_SEARCH_PK\" PRIMARY KEY (\"ID\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING \n" + + " STORAGE(\n" + + " BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APPINDX1K\" LOCAL\n" + + " (PARTITION \"P1\" \n" + + " PCTFREE 10 INITRANS 2 MAXTRANS 255 \n" + + " STORAGE(INITIAL 24117248 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APPINDX1K\" , \n" + + " PARTITION \"P2\" \n" + + " 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 \"APPINDX1K\" ) ENABLE\n" + + " ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING \n" + + " STORAGE(\n" + + " BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APP_DATA1K\" \n" + + " PARTITION BY RANGE (\"ID\") \n" + + " (PARTITION \"P1\" VALUES LESS THAN (2000000000) \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" + + " STORAGE(INITIAL 150994944 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" + + " TABLESPACE \"APPDATA1M\" NOCOMPRESS , \n" + + " PARTITION \"P2\" VALUES LESS THAN (MAXVALUE) \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 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 \"APP_DATA1K\" NOCOMPRESS ) "; + + 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\" NUMBER NOT NULL ENABLE,\n" + + "\t\"PROPS\" VARCHAR2(4000),\n" + + "\tCONSTRAINT \"PRODUCT_PROPERTY_SEARCH_PK\" PRIMARY KEY (\"ID\")\n" + + "\t\tUSING INDEX\n" + + "\t\tPCTFREE 10\n" + + "\t\tINITRANS 2\n" + + "\t\tMAXTRANS 255\n" + + "\t\tTABLESPACE \"APPINDX1K\"\n" + + "\t\tENABLE\n" + + "\t\tSTORAGE (\n" + + "\t\t\tBUFFER_POOL DEFAULT\n" + + "\t\t)\n" + + "\t\tLOGGING\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "LOGGING\n" + + "TABLESPACE \"APP_DATA1K\"\n" + + "STORAGE (\n" + + "\tBUFFER_POOL DEFAULT\n" + + ")\n" + + "PARTITION BY RANGE (\"ID\")\n" + + "(\n" + + "\tPARTITION \"P1\" VALUES LESS THAN (2000000000)\n" + + "\t\tPCTFREE 10\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tNOCOMPRESS\n" + + "\t\tTABLESPACE \"APPDATA1M\"\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),\n" + + "\tPARTITION \"P2\" VALUES LESS THAN (MAXVALUE)\n" + + "\t\tPCTFREE 10\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tNOCOMPRESS\n" + + "\t\tTABLESPACE \"APP_DATA1K\"\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" + + ")",// + 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(2, 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/OracleCreateTableTest59.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest59.java new file mode 100644 index 0000000000..2e394bbd71 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest59.java @@ -0,0 +1,102 @@ +/* + * 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 OracleCreateTableTest59 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"CATEGORY_ROOT_ID\" NUMBER NOT NULL ENABLE, \n" + + " \"CATEGORY_ROOT_DESC\" VARCHAR2(128) NOT NULL ENABLE, \n" + + " \"CATEGORY_LEVEL2_ID\" NUMBER, \n" + + " \"CATEGORY_LEVEL2_DESC\" VARCHAR2(128), \n" + + " \"CATEGORY_LEVEL3_ID\" NUMBER, \n" + + " \"CATEGORY_LEVEL3_DESC\" VARCHAR2(128), \n" + + " \"CATEGORY_LEAF_ID\" NUMBER, \n" + + " \"CATEGORY_LEAF_DESC\" VARCHAR2(128), \n" + + " \"IS_LEAF\" CHAR(1), \n" + + " CONSTRAINT \"EN_CATE_POST_C_DIMT0_PK\" PRIMARY KEY (\"CATEGORY_LEVEL2_ID\", \"CATEGORY_LEAF_ID\") ENABLE\n" + + " ) ORGANIZATION INDEX COMPRESS 1 PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING\n" + + " STORAGE(INITIAL 4194304 NEXT 4194304 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"ZEUS_IND\" \n" + + " PCTTHRESHOLD 50 "; + + 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\"CATEGORY_ROOT_ID\" NUMBER NOT NULL ENABLE,\n" + + "\t\"CATEGORY_ROOT_DESC\" VARCHAR2(128) NOT NULL ENABLE,\n" + + "\t\"CATEGORY_LEVEL2_ID\" NUMBER,\n" + + "\t\"CATEGORY_LEVEL2_DESC\" VARCHAR2(128),\n" + + "\t\"CATEGORY_LEVEL3_ID\" NUMBER,\n" + + "\t\"CATEGORY_LEVEL3_DESC\" VARCHAR2(128),\n" + + "\t\"CATEGORY_LEAF_ID\" NUMBER,\n" + + "\t\"CATEGORY_LEAF_DESC\" VARCHAR2(128),\n" + + "\t\"IS_LEAF\" CHAR(1),\n" + + "\tCONSTRAINT \"EN_CATE_POST_C_DIMT0_PK\" PRIMARY KEY (\"CATEGORY_LEVEL2_ID\", \"CATEGORY_LEAF_ID\") ENABLE\n" + + ")\n" + + "ORGANIZATION INDEX\n" + + "\tPCTFREE 10\n" + + "\tINITRANS 2\n" + + "\tMAXTRANS 255\n" + + "\tCOMPRESS\n" + + "\tLOGGING\n" + + "\tTABLESPACE \"ZEUS_IND\"\n" + + "\tSTORAGE (\n" + + "\t\tINITIAL 4194304\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" + + "\tPCTTHRESHOLD 10",// + 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(9, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "CATEGORY_ROOT_DESC"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest60.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest60.java new file mode 100644 index 0000000000..016e750cd5 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest60.java @@ -0,0 +1,91 @@ +/* + * 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 OracleCreateTableTest60 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"MEMBER_ID\" VARCHAR2(32) NOT NULL ENABLE, \n" + + " \"CATEGORY_LEVEL2_ID\" NUMBER NOT NULL ENABLE, \n" + + " \"CATEGORY_LEVEL2_DESC\" VARCHAR2(128), \n" + + " \"AVG_INQUIRY_CNT\" NUMBER, \n" + + " \"AVG_INQUIRY_CNT_TOP10\" NUMBER\n" + + " ) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 0 PCTUSED 40 INITRANS 1 MAXTRANS 255 COMPRESS BASIC LOGGING\n" + + " STORAGE(INITIAL 50331648 NEXT 4194304 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"ZEUS_IND\" "; + + 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\"MEMBER_ID\" VARCHAR2(32) NOT NULL ENABLE,\n" + + "\t\"CATEGORY_LEVEL2_ID\" NUMBER NOT NULL ENABLE,\n" + + "\t\"CATEGORY_LEVEL2_DESC\" VARCHAR2(128),\n" + + "\t\"AVG_INQUIRY_CNT\" NUMBER,\n" + + "\t\"AVG_INQUIRY_CNT_TOP10\" NUMBER\n" + + ")\n" + + "PCTFREE 0\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "COMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"ZEUS_IND\"\n" + + "STORAGE (\n" + + "\tINITIAL 50331648\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(5, 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/OracleCreateTableTest61.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest61.java new file mode 100644 index 0000000000..073cacf9aa --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest61.java @@ -0,0 +1,158 @@ +/* + * 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 OracleCreateTableTest61 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"ID\" NUMBER(11,0) NOT NULL ENABLE, \n" + + " \"GMT_CREATED\" DATE, \n" + + " \"GMT_MODIFIED\" DATE, \n" + + " \"CREATOR\" VARCHAR2(32), \n" + + " \"MODIFIER\" VARCHAR2(32), \n" + + " \"TEMPLATE_NAME\" VARCHAR2(64), \n" + + " \"MAIL_CATEGORY_ID\" NUMBER(11,0) NOT NULL ENABLE, \n" + + " \"DEFAULT_SUBJECT\" VARCHAR2(128), \n" + + " \"CONTENT_TYPE\" VARCHAR2(32) NOT NULL ENABLE, \n" + + " \"CONTENT\" CLOB, \n" + + " \"SHARE_FLAG\" VARCHAR2(32), \n" + + " \"STATUS\" VARCHAR2(32), \n" + + " \"DOUBT_IDS\" VARCHAR2(4000), \n" + + " \"PARA_1\" VARCHAR2(128), \n" + + " \"PARA_2\" VARCHAR2(128), \n" + + " \"PARA_3\" VARCHAR2(128), \n" + + " CONSTRAINT \"PK_ADMIN_MAIL_TEMPLATE\" PRIMARY KEY (\"ID\")\n" + + " USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" + + " STORAGE(INITIAL 1048576 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"NIRVANA1M_IND\" ENABLE, \n" + + " CONSTRAINT \"FK_ADMIN_MA_REFERENCE_ADMIN_MA\" FOREIGN KEY (\"MAIL_CATEGORY_ID\")\n" + + " REFERENCES \"NIRVANA\".\"ADMIN_MAIL_CATEGORY\" (\"ID\") ENABLE NOVALIDATE\n" + + " ) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING\n" + + " STORAGE(INITIAL 1048576 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"NIRVANA1M\" \n" + + " LOB (\"CONTENT\") STORE AS BASICFILE (\n" + + " TABLESPACE \"NIRVANA1M\" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10\n" + + " NOCACHE LOGGING \n" + + " STORAGE(INITIAL 1048576 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) \n "; + + 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\" NUMBER(11, 0) NOT NULL ENABLE,\n" + + "\t\"GMT_CREATED\" DATE,\n" + + "\t\"GMT_MODIFIED\" DATE,\n" + + "\t\"CREATOR\" VARCHAR2(32),\n" + + "\t\"MODIFIER\" VARCHAR2(32),\n" + + "\t\"TEMPLATE_NAME\" VARCHAR2(64),\n" + + "\t\"MAIL_CATEGORY_ID\" NUMBER(11, 0) NOT NULL ENABLE,\n" + + "\t\"DEFAULT_SUBJECT\" VARCHAR2(128),\n" + + "\t\"CONTENT_TYPE\" VARCHAR2(32) NOT NULL ENABLE,\n" + + "\t\"CONTENT\" CLOB,\n" + + "\t\"SHARE_FLAG\" VARCHAR2(32),\n" + + "\t\"STATUS\" VARCHAR2(32),\n" + + "\t\"DOUBT_IDS\" VARCHAR2(4000),\n" + + "\t\"PARA_1\" VARCHAR2(128),\n" + + "\t\"PARA_2\" VARCHAR2(128),\n" + + "\t\"PARA_3\" VARCHAR2(128),\n" + + "\tCONSTRAINT \"PK_ADMIN_MAIL_TEMPLATE\" PRIMARY KEY (\"ID\")\n" + + "\t\tUSING INDEX\n" + + "\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" + + "\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" + + "\tCONSTRAINT \"FK_ADMIN_MA_REFERENCE_ADMIN_MA\" FOREIGN KEY (\"MAIL_CATEGORY_ID\")\n" + + "\t\tREFERENCES \"NIRVANA\".\"ADMIN_MAIL_CATEGORY\" (\"ID\") ENABLE\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "NOCOMPRESS\n" + + "LOGGING\n" + + "TABLESPACE \"NIRVANA1M\"\n" + + "STORAGE (\n" + + "\tINITIAL 1048576\n" + + "\tFREELISTS 1\n" + + "\tFREELIST GROUPS 1\n" + + "\tBUFFER_POOL DEFAULT\n" + + "\tFLASH_CACHE DEFAULT\n" + + "\tCELL_FLASH_CACHE DEFAULT\n" + + ")\n" + + "LOB (\"CONTENT\") STORE AS BASICFILE (\n" + + "\tTABLESPACE \"NIRVANA1M\"\n" + + "\tENABLE 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\tFLASH_CACHE DEFAULT\n" + + "\t\tCELL_FLASH_CACHE DEFAULT\n" + + "\t)\n" + + "\tCHUNK 8192\n" + + "\tNOCACHE\n" + + "\tLOGGING\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(2, visitor.getTables().size()); + + Assert.assertEquals(17, 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/OracleCreateTableTest62.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest62.java new file mode 100644 index 0000000000..4e838614b5 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateTableTest62.java @@ -0,0 +1,137 @@ +/* + * 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 OracleCreateTableTest62 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE TABLE \"SC_001\".\"TB_001\" \n" + + " ( \"TOTAL_PRICE_ACTUAL\" NUMBER, \n" + + " \"GMT_VOUCHER_RECEIVE\" DATE, \n" + + " \"CS4_OWNER_ID\" VARCHAR2(32), \n" + + " \"DISABLE_DATE\" DATE, \n" + + " \"MEMBER_ID\" VARCHAR2(32) NOT NULL ENABLE, \n" + + " \"ITEM_ID\" NUMBER NOT NULL ENABLE, \n" + + " \"CONTACT_COUNT\" NUMBER(11,0), \n" + + " \"ORIGIN_DISABLE_DATE\" DATE, \n" + + " \"GMT_PAYMENT_REMIT\" DATE, \n" + + " \"PRODUCT_ID\" NUMBER, \n" + + " \"PERIOD\" NUMBER, \n" + + " \"PERIOD_UNIT\" VARCHAR2(32), \n" + + " \"MEMBER_TYPE\" VARCHAR2(20), \n" + + " \"GMT_AV_SEND\" DATE, \n" + + " \"GMT_ENABLE\" DATE, \n" + + " \"COMPANY\" VARCHAR2(128), \n" + + " \"PAYMENT_STATUS\" VARCHAR2(32), \n" + + " \"TMP_ALIID\" VARCHAR2(64)\n" + + " ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING \n" + + " STORAGE(\n" + + " BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"NIRVANA1M\" \n" + + " PARTITION BY RANGE (\"GMT_VOUCHER_RECEIVE\") \n" + + " (PARTITION \"PONLY\" VALUES LESS THAN (MAXVALUE) SEGMENT CREATION IMMEDIATE \n" + + " PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING \n" + + " STORAGE(INITIAL 1048576 NEXT 131072 MINEXTENTS 1 MAXEXTENTS 2147483645\n" + + " PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" + + " TABLESPACE \"NIRVANA1M\" ) "; + + 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\"TOTAL_PRICE_ACTUAL\" NUMBER,\n" + + "\t\"GMT_VOUCHER_RECEIVE\" DATE,\n" + + "\t\"CS4_OWNER_ID\" VARCHAR2(32),\n" + + "\t\"DISABLE_DATE\" DATE,\n" + + "\t\"MEMBER_ID\" VARCHAR2(32) NOT NULL ENABLE,\n" + + "\t\"ITEM_ID\" NUMBER NOT NULL ENABLE,\n" + + "\t\"CONTACT_COUNT\" NUMBER(11, 0),\n" + + "\t\"ORIGIN_DISABLE_DATE\" DATE,\n" + + "\t\"GMT_PAYMENT_REMIT\" DATE,\n" + + "\t\"PRODUCT_ID\" NUMBER,\n" + + "\t\"PERIOD\" NUMBER,\n" + + "\t\"PERIOD_UNIT\" VARCHAR2(32),\n" + + "\t\"MEMBER_TYPE\" VARCHAR2(20),\n" + + "\t\"GMT_AV_SEND\" DATE,\n" + + "\t\"GMT_ENABLE\" DATE,\n" + + "\t\"COMPANY\" VARCHAR2(128),\n" + + "\t\"PAYMENT_STATUS\" VARCHAR2(32),\n" + + "\t\"TMP_ALIID\" VARCHAR2(64)\n" + + ")\n" + + "PCTFREE 10\n" + + "PCTUSED 40\n" + + "INITRANS 1\n" + + "MAXTRANS 255\n" + + "LOGGING\n" + + "TABLESPACE \"NIRVANA1M\"\n" + + "STORAGE (\n" + + "\tBUFFER_POOL DEFAULT\n" + + "\tFLASH_CACHE DEFAULT\n" + + "\tCELL_FLASH_CACHE DEFAULT\n" + + ")\n" + + "PARTITION BY RANGE (\"GMT_VOUCHER_RECEIVE\")\n" + + "(\n" + + "\tPARTITION \"PONLY\" VALUES LESS THAN (MAXVALUE)\n" + + "\t\tPCTFREE 10\n" + + "\t\tPCTUSED 40\n" + + "\t\tINITRANS 1\n" + + "\t\tMAXTRANS 255\n" + + "\t\tNOCOMPRESS\n" + + "\t\tLOGGING\n" + + "\t\tTABLESPACE \"NIRVANA1M\"\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\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(18, 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/OracleCreateViewTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest2.java new file mode 100644 index 0000000000..dc3ba15fe7 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest2.java @@ -0,0 +1,113 @@ +/* + * 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 OracleCreateViewTest2 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE OR REPLACE FORCE VIEW \"RMAN\".\"V_001\" (\"DB_KEY\", \"DB_ID\", \"BS_KEY\", \"RECID\", \"STAMP\", \"SET_STAMP\", \"SET_COUNT\", \"BACKUP_TYPE\", \"INCREMENTAL_LEVEL\", \"PIECES\", \"START_TIME\", \"COMPLETION_TIME\", \"ELAPSED_SECONDS\", \"STATUS\", \"CONTROLFILE_INCLUDED\", \"INPUT_FILE_SCAN_ONLY\", \"KEEP\", \"KEEP_UNTIL\", \"KEEP_OPTIONS\") AS \n" + + " select db.db_key,\n" + + " db.db_id,\n" + + " bs.bs_key,\n" + + " bs.bs_recid recid,\n" + + " bs.bs_stamp stamp,\n" + + " bs.set_stamp,\n" + + " bs.set_count,\n" + + " bs.bck_type backup_type,\n" + + " bs.incr_level incremental_level,\n" + + " bs.pieces,\n" + + " bs.start_time,\n" + + " bs.completion_time,\n" + + " abs((bs.completion_time - bs.start_time) * 86400) elapsed_seconds,\n" + + " bs.status,\n" + + " bs.controlfile_included,\n" + + " bs.input_file_scan_only,\n" + + " decode(keep_options, 0, 'NO',\n" + + " 'YES') keep,\n" + + " keep_until,\n" + + " decode(keep_options, 256, 'LOGS',\n" + + " 512, 'NOLOGS',\n" + + " 1024, 'CONSISTENT',\n" + + " NULL) keep_options\n" + + "from db, bs\n" + + "where db.db_key = bs.db_key "; + + 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 \"RMAN\".\"V_001\"\n" + + "(\n" + + "\t\"DB_KEY\", \n" + + "\t\"DB_ID\", \n" + + "\t\"BS_KEY\", \n" + + "\t\"RECID\", \n" + + "\t\"STAMP\", \n" + + "\t\"SET_STAMP\", \n" + + "\t\"SET_COUNT\", \n" + + "\t\"BACKUP_TYPE\", \n" + + "\t\"INCREMENTAL_LEVEL\", \n" + + "\t\"PIECES\", \n" + + "\t\"START_TIME\", \n" + + "\t\"COMPLETION_TIME\", \n" + + "\t\"ELAPSED_SECONDS\", \n" + + "\t\"STATUS\", \n" + + "\t\"CONTROLFILE_INCLUDED\", \n" + + "\t\"INPUT_FILE_SCAN_ONLY\", \n" + + "\t\"KEEP\", \n" + + "\t\"KEEP_UNTIL\", \n" + + "\t\"KEEP_OPTIONS\"\n" + + ")\n" + + "AS\n" + + "SELECT db.db_key, db.db_id, bs.bs_key, bs.bs_recid AS recid, bs.bs_stamp AS stamp\n" + + "\t, bs.set_stamp, bs.set_count, bs.bck_type AS backup_type, bs.incr_level AS incremental_level, bs.pieces\n" + + "\t, bs.start_time, bs.completion_time, abs((bs.completion_time - bs.start_time) * 86400) AS elapsed_seconds, bs.status, bs.controlfile_included\n" + + "\t, bs.input_file_scan_only, decode(keep_options, 0, 'NO', 'YES') AS keep, keep_until, decode(keep_options, 256, 'LOGS', 512, 'NOLOGS', 1024, 'CONSISTENT', NULL) AS keep_options\n" + + "FROM db, bs\n" + + "WHERE db.db_key = bs.db_key",// + 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(18, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("db", "db_key"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest3.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest3.java new file mode 100644 index 0000000000..2bb53d3526 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/create/OracleCreateViewTest3.java @@ -0,0 +1,125 @@ +/* + * 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 OracleCreateViewTest3 extends OracleTest { + + public void test_types() throws Exception { + String sql = // + " CREATE OR REPLACE FORCE VIEW \"RMAN\".\"V_001\" (\"DB_KEY\", \"DBINC_KEY\", \"FILE#\", \"BLOCK#\", \"BLOCKS\", \"CORRUPTION_CHANGE#\", \"CORRUPTION_TYPE\") AS \n" + + " select distinct\n" + + " db_key, dbinc_key, file#, block#, blocks, corruption_change#,\n" + + " corruption_type from\n" + + " (select db_key, dbinc_key, file#, block#, blocks,\n" + + " corruption_change#, copy_stamp stamp, corruption_type\n" + + " from tb_004 union\n" + + " select bs.db_key, dbinc_key, file#, block#, blocks,\n" + + " corruption_change#, bs.stamp, corruption_type\n" + + " from tb_005 bc, tb_006 bs\n" + + " where bc.bs_key = bs.bs_key) outer\n" + + "where not exists\n" + + " (select 1\n" + + " from tb_001\n" + + " where outer.db_key = db_key and\n" + + " outer.dbinc_key = dbinc_key and\n" + + " scanned = 'YES' and\n" + + " outer.file# = file# and\n" + + " outer.stamp < stamp\n" + + " union\n" + + " select 1\n" + + " from tb_002 bdf, tb_003 bs\n" + + " where bdf.bs_key = bs.bs_key and\n" + + " outer.db_key = bdf.db_key and\n" + + " outer.dbinc_key = bdf.dbinc_key and\n" + + " outer.file# = file# and\n" + + " outer.stamp < bs.stamp) "; + + 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 \"RMAN\".\"V_001\"\n" + + "(\n" + + "\t\"DB_KEY\", \n" + + "\t\"DBINC_KEY\", \n" + + "\t\"FILE#\", \n" + + "\t\"BLOCK#\", \n" + + "\t\"BLOCKS\", \n" + + "\t\"CORRUPTION_CHANGE#\", \n" + + "\t\"CORRUPTION_TYPE\"\n" + + ")\n" + + "AS\n" + + "SELECT DISTINCT db_key, dbinc_key, file#, block#, blocks\n" + + "\t, corruption_change#, corruption_type\n" + + "FROM (\n" + + "\tSELECT db_key, dbinc_key, file#, block#, blocks\n" + + "\t\t, corruption_change#, copy_stamp AS stamp, corruption_type\n" + + "\tFROM tb_004\n" + + "\tUNION\n" + + "\tSELECT bs.db_key, dbinc_key, file#, block#, blocks\n" + + "\t\t, corruption_change#, bs.stamp, corruption_type\n" + + "\tFROM tb_005 bc, tb_006 bs\n" + + "\tWHERE bc.bs_key = bs.bs_key\n" + + ") outer\n" + + "WHERE NOT EXISTS (\n" + + "\tSELECT 1\n" + + "\tFROM tb_001\n" + + "\tWHERE outer.db_key = db_key\n" + + "\t\tAND outer.dbinc_key = dbinc_key\n" + + "\t\tAND scanned = 'YES'\n" + + "\t\tAND outer.file# = file#\n" + + "\t\tAND outer.stamp < stamp\n" + + "\tUNION\n" + + "\tSELECT 1\n" + + "\tFROM tb_002 bdf, tb_003 bs\n" + + "\tWHERE bdf.bs_key = bs.bs_key\n" + + "\t\tAND outer.db_key = bdf.db_key\n" + + "\t\tAND outer.dbinc_key = bdf.dbinc_key\n" + + "\t\tAND outer.file# = file#\n" + + "\t\tAND outer.stamp < bs.stamp\n" + + "\t)",// + 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(6, visitor.getTables().size()); + + Assert.assertEquals(28, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("tb_002", "db_key"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/select/OracleSelectTest61.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/select/OracleSelectTest61.java new file mode 100644 index 0000000000..9f77a1c227 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/select/OracleSelectTest61.java @@ -0,0 +1,72 @@ +/* + * 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.select; + +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 org.junit.Assert; + +import java.util.List; + +public class OracleSelectTest61 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "Select column_expression from sys.ALL_IND_EXPRESSIONS where column_position =: cp"; // + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + 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(2, visitor.getColumns().size()); + + { + String text = SQLUtils.toOracleString(stmt); + + Assert.assertEquals("SELECT column_expression\n" + + "FROM sys.ALL_IND_EXPRESSIONS\n" + + "WHERE column_position = :cp", text); + } + + { + String text = SQLUtils.toOracleString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION); + + Assert.assertEquals("select column_expression\n" + + "from sys.ALL_IND_EXPRESSIONS\n" + + "where column_position = :cp", text); + } + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("acduser.vw_acd_info", "xzqh"))); + + // Assert.assertTrue(visitor.getOrderByColumns().contains(new TableStat.Column("employees", "last_name"))); + } +}