mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved oracle sql parser.
This commit is contained in:
@@ -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"),
|
||||
|
||||
+21
-12
@@ -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();
|
||||
|
||||
+22
-16
@@ -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();
|
||||
|
||||
+23
-17
@@ -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();
|
||||
|
||||
+13
-11
@@ -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();
|
||||
|
||||
+12
-11
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user