improved oracle sql parser.

This commit is contained in:
wenshao
2017-05-20 22:33:03 +08:00
parent 51139b00a6
commit 869c45695b
10 changed files with 94 additions and 76 deletions
@@ -459,7 +459,6 @@ public class OracleExprParser extends SQLExprParser {
case PCTINCREASE:
case FLASH_CACHE:
case CELL_FLASH_CACHE:
case KEEP:
case NONE:
case LOB:
case STORE:
@@ -765,7 +764,7 @@ public class OracleExprParser extends SQLExprParser {
accept(Token.RPAREN);
}
if (lexer.token() == Token.KEEP) {
if (identifierEquals("KEEP")) {
lexer.nextToken();
SQLKeep keep = new SQLKeep();
@@ -1317,7 +1316,7 @@ public class OracleExprParser extends SQLExprParser {
} else if (lexer.token() == Token.FLASH_CACHE) {
lexer.nextToken();
FlashCacheType flashCacheType;
if (lexer.token() == Token.KEEP) {
if (identifierEquals("KEEP")) {
flashCacheType = FlashCacheType.KEEP;
lexer.nextToken();
} else if (lexer.token() == Token.NONE) {
@@ -1332,7 +1331,7 @@ public class OracleExprParser extends SQLExprParser {
} else if (lexer.token() == Token.CELL_FLASH_CACHE) {
lexer.nextToken();
FlashCacheType flashCacheType;
if (lexer.token() == Token.KEEP) {
if (identifierEquals("KEEP")) {
flashCacheType = FlashCacheType.KEEP;
lexer.nextToken();
} else if (lexer.token() == Token.NONE) {
@@ -96,7 +96,6 @@ public class OracleLexer extends Lexer {
map.put("PCTINCREASE", Token.PCTINCREASE);
map.put("FLASH_CACHE", Token.FLASH_CACHE);
map.put("CELL_FLASH_CACHE", Token.CELL_FLASH_CACHE);
map.put("KEEP", Token.KEEP);
map.put("NONE", Token.NONE);
map.put("LOB", Token.LOB);
map.put("STORE", Token.STORE);
@@ -325,7 +325,6 @@ public class SQLExprParser extends SQLParser {
case PCTINCREASE:
case FLASH_CACHE:
case CELL_FLASH_CACHE:
case KEEP:
case NONE:
case LOB:
case STORE:
@@ -999,7 +998,6 @@ public class SQLExprParser extends SQLParser {
case PCTINCREASE:
case FLASH_CACHE:
case CELL_FLASH_CACHE:
case KEEP:
case NONE:
case LOB:
case STORE:
@@ -173,7 +173,6 @@ public class SQLParser {
case PCTINCREASE:
case FLASH_CACHE:
case CELL_FLASH_CACHE:
case KEEP:
case NONE:
case LOB:
case STORE:
@@ -220,7 +220,6 @@ public enum Token {
PCTINCREASE("PCTINCREASE"),
FLASH_CACHE("FLASH_CACHE"),
CELL_FLASH_CACHE("CELL_FLASH_CACHE"),
KEEP("KEEP"),
NONE("NONE"),
LOB("LOB"),
STORE("STORE"),
@@ -52,18 +52,27 @@ public class OracleCreateTableTest18 extends OracleTest {
Assert.assertEquals(1, statementList.size());
Assert.assertEquals("CREATE TABLE dept_20 (\n" +
"\temployee_id NUMBER(4),\n" +
"\tlast_name VARCHAR2(10),\n" +
"\tjob_id VARCHAR2(9),\n" +
"\tmanager_id NUMBER(4),\n" +
"\thire_date DATE,\n" +
"\tsalary NUMBER(7, 2),\n" +
"\tcommission_pct NUMBER(7, 2),\n" +
"\tdepartment_id,\n" +
"\tCONSTRAINT fk_deptno FOREIGN KEY (department_id)\n" +
"\t\tREFERENCES departments (department_id)\n" +
")", //
Assert.assertEquals("CREATE TABLE \"SONAR\".\"AUTHORS\" (\n" +
"\t\"ID\" NUMBER(38, 0) NOT NULL ENABLE,\n" +
"\t\"PERSON_ID\" NUMBER(38, 0) NOT NULL ENABLE,\n" +
"\t\"LOGIN\" VARCHAR2(100 BYTE),\n" +
"\t\"CREATED_AT\" TIMESTAMP(6),\n" +
"\t\"UPDATED_AT\" TIMESTAMP(6),\n" +
"\tPRIMARY 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 \"USERS\"\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\n" +
"INITRANS 1\n" +
"MAXTRANS 255\n" +
"NOCOMPRESS\n" +
"LOGGING\n" +
"TABLESPACE \"USERS\"", //
SQLUtils.toSQLString(statement, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
@@ -57,22 +57,28 @@ public class OracleCreateTableTest19 extends OracleTest {
Assert.assertEquals(1, statementList.size());
Assert.assertEquals("CREATE TABLE \"SONAR\".\"ACTIVE_DASHBOARDS\" (" //
+ "\n\t\"ID\" NUMBER(38, 0) NOT NULL ENABLE," //
+ "\n\t\"DASHBOARD_ID\" NUMBER(38, 0) NOT NULL ENABLE," //
+ "\n\t\"USER_ID\" NUMBER(38, 0)," //
+ "\n\t\"ORDER_INDEX\" NUMBER(38, 0)," //
+ "\n\tPRIMARY KEY (\"ID\")" //
+ "\n\tUSING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS TABLESPACE \"USERS\" ENABLE"
+ "\n\tSTORAGE (INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)" //
+ "\n)" //
+ "\nPCTFREE 10" //
+ "\nINITRANS 1" //
+ "\nMAXTRANS 255" //
+ "\nNOCOMPRESS" //
+ "\nLOGGING" //
+ "\nTABLESPACE \"USERS\"" //
+ "\nSTORAGE (INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)", //
Assert.assertEquals("CREATE TABLE \"SONAR\".\"ACTIVE_DASHBOARDS\" (\n" +
"\t\"ID\" NUMBER(38, 0) NOT NULL ENABLE,\n" +
"\t\"DASHBOARD_ID\" NUMBER(38, 0) NOT NULL ENABLE,\n" +
"\t\"USER_ID\" NUMBER(38, 0),\n" +
"\t\"ORDER_INDEX\" NUMBER(38, 0),\n" +
"\tPRIMARY 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 \"USERS\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" +
")\n" +
"PCTFREE 10\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)", //
SQLUtils.toSQLString(statement, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
@@ -56,23 +56,29 @@ public class OracleCreateTableTest20 extends OracleTest {
Assert.assertEquals(1, statementList.size());
Assert.assertEquals("CREATE TABLE \"SONAR\".\"ACTIVE_RULE_NOTES\" (" //
+ "\n\t\"ID\" NUMBER(38, 0) NOT NULL ENABLE,"//
+ "\n\t\"CREATED_AT\" TIMESTAMP(6),"//
+ "\n\t\"UPDATED_AT\" TIMESTAMP(6),"//
+ "\n\t\"ACTIVE_RULE_ID\" NUMBER(38, 0),"//
+ "\n\t\"USER_LOGIN\" VARCHAR2(40 BYTE),"//
+ "\n\t\"DATA\" BLOB,"//
+ "\n\tPRIMARY KEY (\"ID\")"//
+ "\n\tUSING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS TABLESPACE \"USERS\" ENABLE"//
+ "\n)"//
+ "\nPCTFREE 10"//
+ "\nINITRANS 1"//
+ "\nMAXTRANS 255"//
+ "\nNOCOMPRESS"//
+ "\nLOGGING"//
+ "\nTABLESPACE \"USERS\""//
+ "\nLOB (\"DATA\") STORE AS SECUREFILE (TABLESPACE \"USERS\" ENABLE STORAGE IN ROW CHUNK 8192 NOCACHE LOGGING NOCOMPRESS KEEP_DUPLICATES)",//
Assert.assertEquals("CREATE TABLE \"SONAR\".\"ACTIVE_RULE_NOTES\" (\n" +
"\t\"ID\" NUMBER(38, 0) NOT NULL ENABLE,\n" +
"\t\"CREATED_AT\" TIMESTAMP(6),\n" +
"\t\"UPDATED_AT\" TIMESTAMP(6),\n" +
"\t\"ACTIVE_RULE_ID\" NUMBER(38, 0),\n" +
"\t\"USER_LOGIN\" VARCHAR2(40 BYTE),\n" +
"\t\"DATA\" BLOB,\n" +
"\tPRIMARY 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 \"USERS\"\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\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)",//
SQLUtils.toSQLString(statement, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
@@ -50,17 +50,19 @@ public class OracleCreateTableTest22 extends OracleTest {
Assert.assertEquals(1, statementList.size());
Assert.assertEquals("CREATE TABLE promotions_var2 ("
+ "\n\tpromo_id NUMBER(6),"
+ "\n\tpromo_name VARCHAR2(20),"
+ "\n\tpromo_category VARCHAR2(15),"
+ "\n\tpromo_cost NUMBER(10, 2),"
+ "\n\tpromo_begin_date DATE,"
+ "\n\tpromo_end_date DATE,"
+ "\n\tCONSTRAINT promo_id_u UNIQUE (promo_id)"
+ "\n\tUSING INDEX PCTFREE 20 TABLESPACE stocks"
+ "\n\tSTORAGE (INITIAL 8M)"
+ "\n)",//
Assert.assertEquals("CREATE TABLE promotions_var2 (\n" +
"\tpromo_id NUMBER(6),\n" +
"\tpromo_name VARCHAR2(20),\n" +
"\tpromo_category VARCHAR2(15),\n" +
"\tpromo_cost NUMBER(10, 2),\n" +
"\tpromo_begin_date DATE,\n" +
"\tpromo_end_date DATE,\n" +
"\tCONSTRAINT promo_id_u UNIQUE (promo_id)\n" +
"\t\tUSING INDEX\n" +
"\t\tPCTFREE 20\n" +
"\t\tTABLESPACE stocks\n" +
"\t\tSTORAGE (INITIAL 8M)\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
@@ -51,17 +51,18 @@ public class OracleCreateTableTest27 extends OracleTest {
Assert.assertEquals(1, statementList.size());
Assert.assertEquals("CREATE TABLE dept_20 (" //
+ "\n\temployee_id NUMBER(4),"//
+ "\n\tlast_name VARCHAR2(10),"//
+ "\n\tjob_id VARCHAR2(9),"//
+ "\n\tmanager_id NUMBER(4),"//
+ "\n\thire_date DATE,"//
+ "\n\tsalary NUMBER(7, 2),"//
+ "\n\tcommission_pct NUMBER(7, 2),"//
+ "\n\tdepartment_id,"//
+ "\n\tCONSTRAINT fk_deptno FOREIGN KEY (department_id) REFERENCES departments (department_id)"//
+ "\n)",//
Assert.assertEquals("CREATE TABLE dept_20 (\n" +
"\temployee_id NUMBER(4),\n" +
"\tlast_name VARCHAR2(10),\n" +
"\tjob_id VARCHAR2(9),\n" +
"\tmanager_id NUMBER(4),\n" +
"\thire_date DATE,\n" +
"\tsalary NUMBER(7, 2),\n" +
"\tcommission_pct NUMBER(7, 2),\n" +
"\tdepartment_id,\n" +
"\tCONSTRAINT fk_deptno FOREIGN KEY (department_id)\n" +
"\t\tREFERENCES departments (department_id)\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();