improved oracle sql parser.

This commit is contained in:
wenshao
2017-05-22 00:13:09 +08:00
parent b5b5d66015
commit c3f84859da
38 changed files with 1338 additions and 304 deletions
@@ -63,8 +63,8 @@ public class OracleCreateTableTest18 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"USERS\"\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\n" +
@@ -67,9 +67,7 @@ public class OracleCreateTableTest19 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"USERS\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 65536\n" +
"\t\t\tFREELISTS 1\n" +
@@ -78,6 +76,8 @@ public class OracleCreateTableTest19 extends OracleTest {
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
@@ -68,8 +68,8 @@ public class OracleCreateTableTest20 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"USERS\"\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\n" +
@@ -80,12 +80,12 @@ public class OracleCreateTableTest20 extends OracleTest {
"LOGGING\n" +
"TABLESPACE \"USERS\"\n" +
"LOB (\"DATA\") STORE AS SECUREFILE (\n" +
"\tNOCOMPRESS\n" +
"\tLOGGING\n" +
"\tTABLESPACE \"USERS\"\n" +
"\tENABLE STORAGE IN ROW\n" +
"\tCHUNK 8192\n" +
"\tNOCACHE\n" +
"\tLOGGING\n" +
"\tNOCOMPRESS\n" +
"\tKEEP_DUPLICATES\n" +
")",//
SQLUtils.toSQLString(statement, JdbcConstants.ORACLE));
@@ -81,9 +81,7 @@ public class OracleCreateTableTest41 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"USERS\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 65536\n" +
"\t\t\tFREELISTS 1\n" +
@@ -91,7 +89,9 @@ public class OracleCreateTableTest41 extends OracleTest {
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t),\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE,\n" +
"\tSUPPLEMENTAL LOG GROUP \"GGS_16346\" (\"NUM\") ALWAYS,\n" +
"\tSUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS,\n" +
"\tSUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS,\n" +
@@ -115,8 +115,8 @@ public class OracleCreateTableTest41 extends OracleTest {
"\tCELL_FLASH_CACHE DEFAULT\n" +
")\n" +
"LOB (\"CLOB_COL\") STORE AS BASICFILE (\n" +
"\tLOGGING\n" +
"\tTABLESPACE \"USERS\"\n" +
"\tENABLE STORAGE IN ROW\n" +
"\tSTORAGE (\n" +
"\t\tINITIAL 65536\n" +
"\t\tFREELISTS 1\n" +
@@ -125,9 +125,9 @@ public class OracleCreateTableTest41 extends OracleTest {
"\t\tFLASH_CACHE DEFAULT\n" +
"\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t)\n" +
"\tENABLE STORAGE IN ROW\n" +
"\tCHUNK 8192\n" +
"\tNOCACHE\n" +
"\tLOGGING\n" +
"\tRETENTION\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
@@ -65,11 +65,11 @@ public class OracleCreateTableTest42 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"USERS\"\n" +
"\t\tENABLE\n" +
"\t\tNOCOMPRESS\n" +
"\t\tLOGGING,\n" +
"\t\tLOGGING\n" +
"\t\tTABLESPACE \"USERS\"\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE,\n" +
"\tSUPPLEMENTAL LOG GROUP \"GGS_15754\" (\"GROUP_NAME\", \"GROUP_KEY\", \"LOG_CMPLT_CSN\", \"LOG_CMPLT_XIDS_SEQ\") ALWAYS,\n" +
"\tSUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS,\n" +
"\tSUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS,\n" +
@@ -82,9 +82,7 @@ public class OracleCreateTableTest44 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"USERS\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 65536\n" +
"\t\t\tFREELISTS 1\n" +
@@ -93,6 +91,8 @@ public class OracleCreateTableTest44 extends OracleTest {
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
@@ -110,8 +110,8 @@ public class OracleCreateTableTest44 extends OracleTest {
"\tCELL_FLASH_CACHE DEFAULT\n" +
")\n" +
"LOB (\"COL9\") STORE AS BASICFILE (\n" +
"\tLOGGING\n" +
"\tTABLESPACE \"USERS\"\n" +
"\tENABLE STORAGE IN ROW\n" +
"\tSTORAGE (\n" +
"\t\tINITIAL 65536\n" +
"\t\tFREELISTS 1\n" +
@@ -120,9 +120,9 @@ public class OracleCreateTableTest44 extends OracleTest {
"\t\tFLASH_CACHE DEFAULT\n" +
"\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t)\n" +
"\tENABLE STORAGE IN ROW\n" +
"\tCHUNK 8192\n" +
"\tNOCACHE\n" +
"\tLOGGING\n" +
"\tRETENTION\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
@@ -72,15 +72,15 @@ public class OracleCreateTableTest46 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"APPDATA1M\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 65536\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
@@ -84,15 +84,15 @@ public class OracleCreateTableTest47 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"APPINDX1M\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 4194304\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
@@ -108,17 +108,17 @@ public class OracleCreateTableTest47 extends OracleTest {
"\tBUFFER_POOL DEFAULT\n" +
")\n" +
"LOB (\"CONTENT\") STORE AS (\n" +
"\tLOGGING\n" +
"\tTABLESPACE \"APPDATA1M\"\n" +
"\tENABLE STORAGE IN ROW\n" +
"\tSTORAGE (\n" +
"\t\tINITIAL 4194304\n" +
"\t\tFREELISTS 1\n" +
"\t\tFREELIST GROUPS 1\n" +
"\t\tBUFFER_POOL DEFAULT\n" +
"\t)\n" +
"\tENABLE STORAGE IN ROW\n" +
"\tCHUNK 8192\n" +
"\tNOCACHE\n" +
"\tLOGGING\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
@@ -77,15 +77,15 @@ public class OracleCreateTableTest48 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"BOPSINDXTS\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 65536\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
@@ -178,13 +178,13 @@ public class OracleCreateTableTest49 extends OracleTest {
"\tBUFFER_POOL DEFAULT\n" +
")\n" +
"LOB (\"DETAIL\") STORE AS (\n" +
"\tENABLE STORAGE IN ROW\n" +
"\tLOGGING\n" +
"\tSTORAGE (\n" +
"\t\tBUFFER_POOL DEFAULT\n" +
"\t)\n" +
"\tENABLE STORAGE IN ROW\n" +
"\tCHUNK 8192\n" +
"\tNOCACHE\n" +
"\tLOGGING\n" +
")\n" +
"PARTITION BY RANGE (\"GMT_CREATE\")\n" +
"(\n" +
@@ -236,10 +236,10 @@ public class OracleCreateTableTest50 extends OracleTest {
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tTABLESPACE NOVALIDATE\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t)\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
@@ -76,15 +76,15 @@ public class OracleCreateTableTest52 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"APPDATA1M\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 65536\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
@@ -78,15 +78,15 @@ public class OracleCreateTableTest53 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"SYSTEM\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 65536\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t),\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE,\n" +
"\tFOREIGN KEY (\"RUNID\", \"UNIT_NUMBER\")\n" +
"\t\tREFERENCES \"B2BDBA\".\"PLSQL_PROFILER_UNITS\" (\"RUNID\", \"UNIT_NUMBER\") ENABLE\n" +
")\n" +
@@ -68,17 +68,17 @@ public class OracleCreateTableTest55 extends OracleTest {
"\tBUFFER_POOL DEFAULT\n" +
")\n" +
"LOB (\"C\") STORE AS (\n" +
"\tLOGGING\n" +
"\tTABLESPACE \"USERS\"\n" +
"\tDISABLE STORAGE IN ROW\n" +
"\tSTORAGE (\n" +
"\t\tINITIAL 1048576\n" +
"\t\tFREELISTS 1\n" +
"\t\tFREELIST GROUPS 1\n" +
"\t\tBUFFER_POOL DEFAULT\n" +
"\t)\n" +
"\tDISABLE STORAGE IN ROW\n" +
"\tCHUNK 8192\n" +
"\tNOCACHE\n" +
"\tLOGGING\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
@@ -71,15 +71,15 @@ public class OracleCreateTableTest56 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"PERFSTAT\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 1048576\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t),\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE,\n" +
"\tCONSTRAINT \"STATS$BG_EVENT_SUMMARY_FK\" FOREIGN KEY (\"SNAP_ID\", \"DBID\", \"INSTANCE_NUMBER\")\n" +
"\t\tREFERENCES \"PERFSTAT\".\"STATS$SNAPSHOT\" (\"SNAP_ID\", \"DBID\", \"INSTANCE_NUMBER\")\n" +
"\t\tON DELETE CASCADE ENABLE\n" +
@@ -169,15 +169,15 @@ public class OracleCreateTableTest57 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"APPINDX1M\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 83886080\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE\n" +
")\n" +
"CLUSTER \"SEARCHTEST\".\"CLUSTER_PRODUCT_COMPANY_ID\" (\"COMPANY_ID\")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
@@ -79,12 +79,12 @@ public class OracleCreateTableTest58 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tLOGGING\n" +
"\t\tTABLESPACE \"APPINDX1K\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t)\n" +
"\t\tLOGGING\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
@@ -94,9 +94,7 @@ public class OracleCreateTableTest61 extends OracleTest {
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tTABLESPACE \"NIRVANA1M_IND\"\n" +
"\t\tENABLE\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 1048576\n" +
"\t\t\tFREELISTS 1\n" +
@@ -104,7 +102,9 @@ public class OracleCreateTableTest61 extends OracleTest {
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t),\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE,\n" +
"\tCONSTRAINT \"FK_ADMIN_MA_REFERENCE_ADMIN_MA\" FOREIGN KEY (\"MAIL_CATEGORY_ID\")\n" +
"\t\tREFERENCES \"NIRVANA\".\"ADMIN_MAIL_CATEGORY\" (\"ID\") ENABLE\n" +
")\n" +
@@ -124,8 +124,8 @@ public class OracleCreateTableTest61 extends OracleTest {
"\tCELL_FLASH_CACHE DEFAULT\n" +
")\n" +
"LOB (\"CONTENT\") STORE AS BASICFILE (\n" +
"\tLOGGING\n" +
"\tTABLESPACE \"NIRVANA1M\"\n" +
"\tENABLE STORAGE IN ROW\n" +
"\tSTORAGE (\n" +
"\t\tINITIAL 1048576\n" +
"\t\tFREELISTS 1\n" +
@@ -134,9 +134,9 @@ public class OracleCreateTableTest61 extends OracleTest {
"\t\tFLASH_CACHE DEFAULT\n" +
"\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t)\n" +
"\tENABLE STORAGE IN ROW\n" +
"\tCHUNK 8192\n" +
"\tNOCACHE\n" +
"\tLOGGING\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
@@ -0,0 +1,94 @@
/*
* Copyright 1999-2017 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.bvt.sql.oracle.create;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
import com.alibaba.druid.util.JdbcConstants;
import org.junit.Assert;
import java.util.List;
public class OracleCreateTableTest63 extends OracleTest {
public void test_types() throws Exception {
String sql = //
" CREATE TABLE \"SC_001\".\"TB_001\" OF \"ZHANGZJ\".\"T_OBJECT\" \n" +
" OIDINDEX ( PCTFREE 10 INITRANS 2 MAXTRANS 255 \n" +
" STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" +
" TABLESPACE \"USERS\" ) \n" +
" PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING\n" +
" STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)\n" +
" TABLESPACE \"USERS\" ";
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement stmt = statementList.get(0);
print(statementList);
Assert.assertEquals(1, statementList.size());
Assert.assertEquals("CREATE TABLE \"SC_001\".\"TB_001\"\n" +
"OF \"ZHANGZJ\".\"T_OBJECT\"\n" +
"OIDINDEX (\n" +
"\tPCTFREE 10\n" +
"\tINITRANS 2\n" +
"\tMAXTRANS 255\n" +
"\tTABLESPACE \"USERS\"\n" +
"\tSTORAGE (\n" +
"\t\tINITIAL 1048576\n" +
"\t\tFREELISTS 1\n" +
"\t\tFREELIST GROUPS 1\n" +
"\t\tBUFFER_POOL DEFAULT\n" +
"\t)\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
"INITRANS 1\n" +
"MAXTRANS 255\n" +
"NOCOMPRESS\n" +
"LOGGING\n" +
"TABLESPACE \"USERS\"\n" +
"STORAGE (\n" +
"\tINITIAL 1048576\n" +
"\tFREELISTS 1\n" +
"\tFREELIST GROUPS 1\n" +
"\tBUFFER_POOL DEFAULT\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(1, visitor.getTables().size());
Assert.assertEquals(0, visitor.getColumns().size());
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "MEMBER_ID")));
}
}
@@ -0,0 +1,141 @@
/*
* Copyright 1999-2017 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.bvt.sql.oracle.create;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
import com.alibaba.druid.util.JdbcConstants;
import org.junit.Assert;
import java.util.List;
public class OracleCreateTableTest64 extends OracleTest {
public void test_types() throws Exception {
String sql = //
" CREATE TABLE \"SC_001\".\"TB_001\" \n" +
" (\t\"STOREID\" VARCHAR2(40) NOT NULL ENABLE, \n" +
"\t\"OPPTIME\" DATE, \n" +
"\t\"CREATETIME\" DATE, \n" +
"\t\"NAME\" VARCHAR2(254), \n" +
"\t\"FILEPATH\" VARCHAR2(254), \n" +
"\t\"FILENAME\" VARCHAR2(64), \n" +
"\t\"EVENTCODE\" VARCHAR2(200), \n" +
"\t\"FILECODE\" VARCHAR2(200), \n" +
"\t\"RESULTCODE\" VARCHAR2(200), \n" +
"\t\"RESULTMESSAGE\" VARCHAR2(4000), \n" +
"\t\"RESULTMEMO\" VARCHAR2(200), \n" +
"\t\"STATUSCODE\" VARCHAR2(200), \n" +
"\t\"STATUSMESSAGE\" VARCHAR2(4000), \n" +
"\t\"UPLOADSUCCESS\" VARCHAR2(200), \n" +
"\t\"BZ\" VARCHAR2(4000), \n" +
"\t\"DATACOUNT\" NUMBER, \n" +
"\t\"FILECONTS\" CLOB, \n" +
"\t\"XFJBH\" VARCHAR2(38)\n" +
" ) SEGMENT CREATION IMMEDIATE \n" +
" PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" +
" NOCOMPRESS NOLOGGING\n" +
" STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"XINFANG\" \n" +
" LOB (\"FILECONTS\") STORE AS BASICFILE (\n" +
" TABLESPACE \"XINFANG\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n" +
" NOCACHE NOLOGGING \n" +
" STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) ";
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement stmt = statementList.get(0);
print(statementList);
Assert.assertEquals(1, statementList.size());
Assert.assertEquals("CREATE TABLE \"SC_001\".\"TB_001\" (\n" +
"\t\"STOREID\" VARCHAR2(40) NOT NULL ENABLE,\n" +
"\t\"OPPTIME\" DATE,\n" +
"\t\"CREATETIME\" DATE,\n" +
"\t\"NAME\" VARCHAR2(254),\n" +
"\t\"FILEPATH\" VARCHAR2(254),\n" +
"\t\"FILENAME\" VARCHAR2(64),\n" +
"\t\"EVENTCODE\" VARCHAR2(200),\n" +
"\t\"FILECODE\" VARCHAR2(200),\n" +
"\t\"RESULTCODE\" VARCHAR2(200),\n" +
"\t\"RESULTMESSAGE\" VARCHAR2(4000),\n" +
"\t\"RESULTMEMO\" VARCHAR2(200),\n" +
"\t\"STATUSCODE\" VARCHAR2(200),\n" +
"\t\"STATUSMESSAGE\" VARCHAR2(4000),\n" +
"\t\"UPLOADSUCCESS\" VARCHAR2(200),\n" +
"\t\"BZ\" VARCHAR2(4000),\n" +
"\t\"DATACOUNT\" NUMBER,\n" +
"\t\"FILECONTS\" CLOB,\n" +
"\t\"XFJBH\" VARCHAR2(38)\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
"INITRANS 1\n" +
"MAXTRANS 255\n" +
"NOCOMPRESS\n" +
"NOLOGGING\n" +
"TABLESPACE \"XINFANG\"\n" +
"STORAGE (\n" +
"\tINITIAL 65536\n" +
"\tFREELISTS 1\n" +
"\tFREELIST GROUPS 1\n" +
"\tBUFFER_POOL DEFAULT\n" +
"\tFLASH_CACHE DEFAULT\n" +
"\tCELL_FLASH_CACHE DEFAULT\n" +
")\n" +
"LOB (\"FILECONTS\") STORE AS BASICFILE (\n" +
"\tNOLOGGING\n" +
"\tTABLESPACE \"XINFANG\"\n" +
"\tSTORAGE (\n" +
"\t\tINITIAL 65536\n" +
"\t\tFREELISTS 1\n" +
"\t\tFREELIST GROUPS 1\n" +
"\t\tBUFFER_POOL DEFAULT\n" +
"\t\tFLASH_CACHE DEFAULT\n" +
"\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t)\n" +
"\tENABLE STORAGE IN ROW\n" +
"\tCHUNK 8192\n" +
"\tNOCACHE\n" +
"\tRETENTION\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(1, visitor.getTables().size());
Assert.assertEquals(18, visitor.getColumns().size());
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "STOREID")));
}
}
@@ -0,0 +1,142 @@
/*
* Copyright 1999-2017 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.bvt.sql.oracle.create;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
import com.alibaba.druid.util.JdbcConstants;
import org.junit.Assert;
import java.util.List;
public class OracleCreateTableTest65 extends OracleTest {
public void test_types() throws Exception {
String sql = //
" CREATE TABLE \"SC_001\".\"TB_001\" \n" +
" (\t\"ID_\" NVARCHAR2(64) NOT NULL ENABLE, \n" +
"\t\"PROC_DEF_ID_\" NVARCHAR2(64), \n" +
"\t\"TASK_DEF_KEY_\" NVARCHAR2(255), \n" +
"\t\"PROC_INST_ID_\" NVARCHAR2(64), \n" +
"\t\"EXECUTION_ID_\" NVARCHAR2(64), \n" +
"\t\"PARENT_TASK_ID_\" NVARCHAR2(64), \n" +
"\t\"NAME_\" NVARCHAR2(255), \n" +
"\t\"DESCRIPTION_\" NVARCHAR2(2000), \n" +
"\t\"OWNER_\" NVARCHAR2(255), \n" +
"\t\"ASSIGNEE_\" NVARCHAR2(255), \n" +
"\t\"START_TIME_\" TIMESTAMP (6) NOT NULL ENABLE, \n" +
"\t\"CLAIM_TIME_\" TIMESTAMP (6), \n" +
"\t\"END_TIME_\" TIMESTAMP (6), \n" +
"\t\"DURATION_\" NUMBER(19,0), \n" +
"\t\"DELETE_REASON_\" NVARCHAR2(2000), \n" +
"\t\"PRIORITY_\" NUMBER(*,0), \n" +
"\t\"DUE_DATE_\" TIMESTAMP (6), \n" +
"\t\"FORM_KEY_\" NVARCHAR2(255), \n" +
"\t PRIMARY KEY (\"ID_\")\n" +
" USING INDEX REVERSE PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" +
" STORAGE(INITIAL 196608 NEXT 8388608 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"RDP_IDX\" ENABLE\n" +
" ) SEGMENT CREATION IMMEDIATE \n" +
" PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" +
" NOCOMPRESS LOGGING\n" +
" STORAGE(INITIAL 2097152 NEXT 8388608 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"RDP_DATA\" ";
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement stmt = statementList.get(0);
print(statementList);
Assert.assertEquals(1, statementList.size());
Assert.assertEquals("CREATE TABLE \"SC_001\".\"TB_001\" (\n" +
"\t\"ID_\" NVARCHAR2(64) NOT NULL ENABLE,\n" +
"\t\"PROC_DEF_ID_\" NVARCHAR2(64),\n" +
"\t\"TASK_DEF_KEY_\" NVARCHAR2(255),\n" +
"\t\"PROC_INST_ID_\" NVARCHAR2(64),\n" +
"\t\"EXECUTION_ID_\" NVARCHAR2(64),\n" +
"\t\"PARENT_TASK_ID_\" NVARCHAR2(64),\n" +
"\t\"NAME_\" NVARCHAR2(255),\n" +
"\t\"DESCRIPTION_\" NVARCHAR2(2000),\n" +
"\t\"OWNER_\" NVARCHAR2(255),\n" +
"\t\"ASSIGNEE_\" NVARCHAR2(255),\n" +
"\t\"START_TIME_\" TIMESTAMP(6) NOT NULL ENABLE,\n" +
"\t\"CLAIM_TIME_\" TIMESTAMP(6),\n" +
"\t\"END_TIME_\" TIMESTAMP(6),\n" +
"\t\"DURATION_\" NUMBER(19, 0),\n" +
"\t\"DELETE_REASON_\" NVARCHAR2(2000),\n" +
"\t\"PRIORITY_\" NUMBER(*, 0),\n" +
"\t\"DUE_DATE_\" TIMESTAMP(6),\n" +
"\t\"FORM_KEY_\" NVARCHAR2(255),\n" +
"\tPRIMARY KEY (\"ID_\")\n" +
"\t\tUSING INDEX\n" +
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tTABLESPACE \"RDP_IDX\"\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 196608\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE\n" +
"\t\tREVERSE\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
"INITRANS 1\n" +
"MAXTRANS 255\n" +
"NOCOMPRESS\n" +
"LOGGING\n" +
"TABLESPACE \"RDP_DATA\"\n" +
"STORAGE (\n" +
"\tINITIAL 2097152\n" +
"\tFREELISTS 1\n" +
"\tFREELIST GROUPS 1\n" +
"\tBUFFER_POOL DEFAULT\n" +
"\tFLASH_CACHE DEFAULT\n" +
"\tCELL_FLASH_CACHE DEFAULT\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(1, visitor.getTables().size());
Assert.assertEquals(18, visitor.getColumns().size());
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "ID_")));
}
}
@@ -0,0 +1,366 @@
/*
* Copyright 1999-2017 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.bvt.sql.oracle.create;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
import com.alibaba.druid.util.JdbcConstants;
import org.junit.Assert;
import java.util.List;
public class OracleCreateTableTest66 extends OracleTest {
public void test_types() throws Exception {
String sql = //
" CREATE TABLE \"SC_001\".\"TB_001\" \n" +
" (\t\"ID\" VARCHAR2(32) DEFAULT Sys_guid() NOT NULL ENABLE, \n" +
"\t\"ISDEL\" NUMBER(1,0) DEFAULT 0, \n" +
"\t\"DATAVERSION\" CHAR(14) DEFAULT to_char(sysdate,'yyyymmddhh24miss'), \n" +
"\t\"LRR_SFZH\" VARCHAR2(50), \n" +
"\t\"LRSJ\" DATE DEFAULT sysdate, \n" +
"\t\"JQZT\" VARCHAR2(10), \n" +
"\t\"JQDD\" VARCHAR2(200), \n" +
"\t\"BJFS\" VARCHAR2(10), \n" +
"\t\"BJSJ\" DATE, \n" +
"\t\"BJR\" VARCHAR2(150), \n" +
"\t\"BJDH\" VARCHAR2(50), \n" +
"\t\"BJNR\" VARCHAR2(4000), \n" +
"\t\"PDDDSJ\" DATE, \n" +
"\t\"PDJSSJ\" DATE, \n" +
"\t\"CJMJ\" VARCHAR2(50), \n" +
"\t\"CJDW\" VARCHAR2(50), \n" +
"\t\"CJSJ\" DATE, \n" +
"\t\"DDXCSJ\" DATE, \n" +
"\t\"CJCS\" VARCHAR2(2000), \n" +
"\t\"CJJG\" VARCHAR2(2000), \n" +
"\t\"GZYQ\" VARCHAR2(2000), \n" +
"\t\"JQBH\" VARCHAR2(30), \n" +
"\t\"XGR_SFZH\" VARCHAR2(50), \n" +
"\t\"XGSJ\" DATE DEFAULT sysdate, \n" +
"\t\"AJLY\" VARCHAR2(10) DEFAULT '03', \n" +
"\t\"JQMC\" VARCHAR2(200), \n" +
"\t\"CJJGSM\" VARCHAR2(2000), \n" +
"\t\"CJMJ_XM\" VARCHAR2(200), \n" +
"\t\"CJDW_MC\" VARCHAR2(200), \n" +
"\t\"JQLB\" VARCHAR2(20), \n" +
"\t\"XXLX\" VARCHAR2(20), \n" +
"\t\"JJDBH\" VARCHAR2(50), \n" +
"\t\"XZQH\" VARCHAR2(50), \n" +
"\t\"CBQY_BH\" VARCHAR2(50), \n" +
"\t\"SJLY\" VARCHAR2(200) DEFAULT '????', \n" +
"\t\"GXDWDM\" VARCHAR2(20), \n" +
"\t\"BJLXDM\" VARCHAR2(20), \n" +
"\t\"BJXLDM\" VARCHAR2(20), \n" +
"\t\"CJDW_OLD\" VARCHAR2(50), \n" +
"\t\"JQLY\" VARCHAR2(20), \n" +
"\t\"IS_AJ_ANALYZE\" VARCHAR2(1) DEFAULT '9', \n" +
"\t\"SJJE\" VARCHAR2(20), \n" +
"\t\"YSDWFL\" VARCHAR2(5), \n" +
"\t\"YSDWMC\" VARCHAR2(50), \n" +
"\t\"YSDWCBR\" VARCHAR2(20), \n" +
"\t\"CBRLXDH\" VARCHAR2(20), \n" +
"\t\"TBDW\" VARCHAR2(50), \n" +
"\t\"TBR\" VARCHAR2(20), \n" +
"\t\"TBRQ\" DATE, \n" +
"\t\"JZ_JQLB\" VARCHAR2(20), \n" +
"\t\"SFZR\" VARCHAR2(10), \n" +
"\t\"SJDWDM\" VARCHAR2(40), \n" +
"\t CONSTRAINT \"PK_CASE_GG_JQXX1\" PRIMARY KEY (\"ID\")\n" +
" USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS \n" +
" STORAGE(INITIAL 150994944 NEXT 8388608 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"RDP_IDX\" ENABLE\n" +
" ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" +
" STORAGE(\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"RDP_DATA\" \n" +
" PARTITION BY RANGE (\"LRSJ\") \n" +
" (PARTITION \"T_RANGE_V1\" VALUES LESS THAN (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE \n" +
" PCTFREE 80 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" +
" COMPRESS FOR OLTP LOGGING \n" +
" STORAGE(INITIAL 553648128 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"RDP_DATA\" , \n" +
" PARTITION \"T_RANGE_V2\" VALUES LESS THAN (TO_DATE(' 2015-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE \n" +
" PCTFREE 80 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" +
" COMPRESS FOR OLTP LOGGING \n" +
" STORAGE(INITIAL 553648128 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"RDP_DATA\" , \n" +
" PARTITION \"T_RANGE_V3\" VALUES LESS THAN (TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE \n" +
" PCTFREE 80 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" +
" COMPRESS FOR OLTP LOGGING \n" +
" STORAGE(INITIAL 553648128 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"RDP_DATA\" , \n" +
" PARTITION \"T_RANGE_V4\" VALUES LESS THAN (TO_DATE(' 2016-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE \n" +
" PCTFREE 80 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" +
" COMPRESS FOR OLTP LOGGING \n" +
" STORAGE(INITIAL 553648128 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"RDP_DATA\" , \n" +
" PARTITION \"T_RANGE_V5\" VALUES LESS THAN (TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE \n" +
" PCTFREE 80 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" +
" COMPRESS FOR OLTP LOGGING \n" +
" STORAGE(INITIAL 553648128 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"RDP_DATA\" , \n" +
" PARTITION \"T_RANGE_V6\" VALUES LESS THAN (TO_DATE(' 2017-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) SEGMENT CREATION IMMEDIATE \n" +
" PCTFREE 80 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" +
" COMPRESS FOR OLTP LOGGING \n" +
" STORAGE(INITIAL 553648128 NEXT 16384 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"RDP_DATA\" , \n" +
" PARTITION \"MAXPART\" VALUES LESS THAN (MAXVALUE) SEGMENT CREATION IMMEDIATE \n" +
" PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" +
" COMPRESS FOR OLTP LOGGING \n" +
" STORAGE(INITIAL 8388608 NEXT 8388608 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"RDP_DATA\" ) ";
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement stmt = statementList.get(0);
print(statementList);
Assert.assertEquals(1, statementList.size());
Assert.assertEquals("CREATE TABLE \"SC_001\".\"TB_001\" (\n" +
"\t\"ID\" VARCHAR2(32) DEFAULT Sys_guid() NOT NULL ENABLE,\n" +
"\t\"ISDEL\" NUMBER(1, 0) DEFAULT 0,\n" +
"\t\"DATAVERSION\" CHAR(14) DEFAULT to_char(SYSDATE, 'yyyymmddhh24miss'),\n" +
"\t\"LRR_SFZH\" VARCHAR2(50),\n" +
"\t\"LRSJ\" DATE DEFAULT SYSDATE,\n" +
"\t\"JQZT\" VARCHAR2(10),\n" +
"\t\"JQDD\" VARCHAR2(200),\n" +
"\t\"BJFS\" VARCHAR2(10),\n" +
"\t\"BJSJ\" DATE,\n" +
"\t\"BJR\" VARCHAR2(150),\n" +
"\t\"BJDH\" VARCHAR2(50),\n" +
"\t\"BJNR\" VARCHAR2(4000),\n" +
"\t\"PDDDSJ\" DATE,\n" +
"\t\"PDJSSJ\" DATE,\n" +
"\t\"CJMJ\" VARCHAR2(50),\n" +
"\t\"CJDW\" VARCHAR2(50),\n" +
"\t\"CJSJ\" DATE,\n" +
"\t\"DDXCSJ\" DATE,\n" +
"\t\"CJCS\" VARCHAR2(2000),\n" +
"\t\"CJJG\" VARCHAR2(2000),\n" +
"\t\"GZYQ\" VARCHAR2(2000),\n" +
"\t\"JQBH\" VARCHAR2(30),\n" +
"\t\"XGR_SFZH\" VARCHAR2(50),\n" +
"\t\"XGSJ\" DATE DEFAULT SYSDATE,\n" +
"\t\"AJLY\" VARCHAR2(10) DEFAULT '03',\n" +
"\t\"JQMC\" VARCHAR2(200),\n" +
"\t\"CJJGSM\" VARCHAR2(2000),\n" +
"\t\"CJMJ_XM\" VARCHAR2(200),\n" +
"\t\"CJDW_MC\" VARCHAR2(200),\n" +
"\t\"JQLB\" VARCHAR2(20),\n" +
"\t\"XXLX\" VARCHAR2(20),\n" +
"\t\"JJDBH\" VARCHAR2(50),\n" +
"\t\"XZQH\" VARCHAR2(50),\n" +
"\t\"CBQY_BH\" VARCHAR2(50),\n" +
"\t\"SJLY\" VARCHAR2(200) DEFAULT '????',\n" +
"\t\"GXDWDM\" VARCHAR2(20),\n" +
"\t\"BJLXDM\" VARCHAR2(20),\n" +
"\t\"BJXLDM\" VARCHAR2(20),\n" +
"\t\"CJDW_OLD\" VARCHAR2(50),\n" +
"\t\"JQLY\" VARCHAR2(20),\n" +
"\t\"IS_AJ_ANALYZE\" VARCHAR2(1) DEFAULT '9',\n" +
"\t\"SJJE\" VARCHAR2(20),\n" +
"\t\"YSDWFL\" VARCHAR2(5),\n" +
"\t\"YSDWMC\" VARCHAR2(50),\n" +
"\t\"YSDWCBR\" VARCHAR2(20),\n" +
"\t\"CBRLXDH\" VARCHAR2(20),\n" +
"\t\"TBDW\" VARCHAR2(50),\n" +
"\t\"TBR\" VARCHAR2(20),\n" +
"\t\"TBRQ\" DATE,\n" +
"\t\"JZ_JQLB\" VARCHAR2(20),\n" +
"\t\"SFZR\" VARCHAR2(10),\n" +
"\t\"SJDWDM\" VARCHAR2(40),\n" +
"\tCONSTRAINT \"PK_CASE_GG_JQXX1\" PRIMARY KEY (\"ID\")\n" +
"\t\tUSING INDEX\n" +
"\t\tPCTFREE 10\n" +
"\t\tINITRANS 2\n" +
"\t\tMAXTRANS 255\n" +
"\t\tTABLESPACE \"RDP_IDX\"\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 150994944\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t)\n" +
"\t\tCOMPUTE STATISTICS\n" +
"\t\tENABLE\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
"INITRANS 1\n" +
"MAXTRANS 255\n" +
"TABLESPACE \"RDP_DATA\"\n" +
"STORAGE (\n" +
"\tBUFFER_POOL DEFAULT\n" +
"\tFLASH_CACHE DEFAULT\n" +
"\tCELL_FLASH_CACHE DEFAULT\n" +
")\n" +
"PARTITION BY RANGE (\"LRSJ\")\n" +
"(\n" +
"\tPARTITION \"T_RANGE_V1\" VALUES LESS THAN (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" +
"\t\tPCTFREE 80\n" +
"\t\tPCTUSED 40\n" +
"\t\tINITRANS 1\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPRESS\n" +
"\t\tLOGGING\n" +
"\t\tTABLESPACE \"RDP_DATA\"\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 553648128\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t),\n" +
"\tPARTITION \"T_RANGE_V2\" VALUES LESS THAN (TO_DATE(' 2015-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" +
"\t\tPCTFREE 80\n" +
"\t\tPCTUSED 40\n" +
"\t\tINITRANS 1\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPRESS\n" +
"\t\tLOGGING\n" +
"\t\tTABLESPACE \"RDP_DATA\"\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 553648128\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t),\n" +
"\tPARTITION \"T_RANGE_V3\" VALUES LESS THAN (TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" +
"\t\tPCTFREE 80\n" +
"\t\tPCTUSED 40\n" +
"\t\tINITRANS 1\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPRESS\n" +
"\t\tLOGGING\n" +
"\t\tTABLESPACE \"RDP_DATA\"\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 553648128\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t),\n" +
"\tPARTITION \"T_RANGE_V4\" VALUES LESS THAN (TO_DATE(' 2016-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" +
"\t\tPCTFREE 80\n" +
"\t\tPCTUSED 40\n" +
"\t\tINITRANS 1\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPRESS\n" +
"\t\tLOGGING\n" +
"\t\tTABLESPACE \"RDP_DATA\"\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 553648128\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t),\n" +
"\tPARTITION \"T_RANGE_V5\" VALUES LESS THAN (TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" +
"\t\tPCTFREE 80\n" +
"\t\tPCTUSED 40\n" +
"\t\tINITRANS 1\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPRESS\n" +
"\t\tLOGGING\n" +
"\t\tTABLESPACE \"RDP_DATA\"\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 553648128\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t),\n" +
"\tPARTITION \"T_RANGE_V6\" VALUES LESS THAN (TO_DATE(' 2017-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))\n" +
"\t\tPCTFREE 80\n" +
"\t\tPCTUSED 40\n" +
"\t\tINITRANS 1\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPRESS\n" +
"\t\tLOGGING\n" +
"\t\tTABLESPACE \"RDP_DATA\"\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 553648128\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t),\n" +
"\tPARTITION \"MAXPART\" VALUES LESS THAN (MAXVALUE)\n" +
"\t\tPCTFREE 10\n" +
"\t\tPCTUSED 40\n" +
"\t\tINITRANS 1\n" +
"\t\tMAXTRANS 255\n" +
"\t\tCOMPRESS\n" +
"\t\tLOGGING\n" +
"\t\tTABLESPACE \"RDP_DATA\"\n" +
"\t\tSTORAGE (\n" +
"\t\t\tINITIAL 8388608\n" +
"\t\t\tFREELISTS 1\n" +
"\t\t\tFREELIST GROUPS 1\n" +
"\t\t\tBUFFER_POOL DEFAULT\n" +
"\t\t\tFLASH_CACHE DEFAULT\n" +
"\t\t\tCELL_FLASH_CACHE DEFAULT\n" +
"\t\t)\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(1, visitor.getTables().size());
Assert.assertEquals(52, visitor.getColumns().size());
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("SC_001.TB_001", "ID")));
}
}
@@ -0,0 +1,103 @@
/*
* Copyright 1999-2017 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.bvt.sql.oracle.create;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
import com.alibaba.druid.util.JdbcConstants;
import org.junit.Assert;
import java.util.List;
public class OracleCreateViewTest4 extends OracleTest {
public void test_types() throws Exception {
String sql = //
" CREATE OR REPLACE FORCE VIEW \"SC_001\".\"V_001\" (\"OBJ_OWNER\", \"OBJ_NAME\", \"OBJ_TYPE\", \"OBJ_ROWID\", \"DB_USER\", \"SID\", \"LOCK_TYPE\", \"ROW_WAIT_FILE#\", \"ROW_WAIT_BLOCK#\", \"ROW_WAIT_ROW#\") AS \n" +
" SELECT owner obj_owner,\n" +
" object_name obj_name,\n" +
" object_type obj_type,\n" +
" dbms_rowid.rowid_create(1, row_wait_obj#, ROW_WAIT_FILE#,\n" +
" ROW_WAIT_BLOCK#,ROW_WAIT_ROW#) obj_rowid,\n" +
" a.username db_user, a.SID SID, a.TYPE lock_type,\n" +
" a.row_wait_file#, a.row_wait_block#, a.row_wait_row#\n" +
" FROM TB_001,\n" +
" (SELECT /*+ no_merge(a) no_merge(b) */\n" +
" a.username, a.SID, a.row_wait_obj#, a.ROW_WAIT_FILE#,\n" +
" a.ROW_WAIT_BLOCK#, a.ROW_WAIT_ROW#, b.TYPE\n" +
" FROM sys.V_$SESSION a, sys.V_$LOCK b\n" +
" WHERE a.username IS NOT NULL\n" +
" AND a.row_wait_obj# <> -1\n" +
" AND a.SID = b.SID\n" +
" AND b.TYPE IN ('TX','TM')\n" +
" ) a\n" +
" WHERE object_id = a.row_wait_obj# ";
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement stmt = statementList.get(0);
print(statementList);
Assert.assertEquals(1, statementList.size());
Assert.assertEquals("CREATE OR REPLACE VIEW \"SC_001\".\"V_001\"\n" +
"(\n" +
"\t\"OBJ_OWNER\", \n" +
"\t\"OBJ_NAME\", \n" +
"\t\"OBJ_TYPE\", \n" +
"\t\"OBJ_ROWID\", \n" +
"\t\"DB_USER\", \n" +
"\t\"SID\", \n" +
"\t\"LOCK_TYPE\", \n" +
"\t\"ROW_WAIT_FILE#\", \n" +
"\t\"ROW_WAIT_BLOCK#\", \n" +
"\t\"ROW_WAIT_ROW#\"\n" +
")\n" +
"AS\n" +
"SELECT owner AS obj_owner, object_name AS obj_name, object_type AS obj_type, dbms_rowid.rowid_create(1, row_wait_obj#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW#) AS obj_rowid, a.username AS db_user\n" +
"\t, a.SID AS SID, a.TYPE AS lock_type, a.row_wait_file#, a.row_wait_block#, a.row_wait_row#\n" +
"FROM TB_001, (\n" +
"\tSELECT /*+ no_merge(a) no_merge(b) */ a.username, a.SID, a.row_wait_obj#, a.ROW_WAIT_FILE#, a.ROW_WAIT_BLOCK#\n" +
"\t\t, a.ROW_WAIT_ROW#, b.TYPE\n" +
"\tFROM sys.V_$SESSION a, sys.V_$LOCK b\n" +
"\tWHERE a.username IS NOT NULL\n" +
"\t\tAND a.row_wait_obj# <> -1\n" +
"\t\tAND a.SID = b.SID\n" +
"\t\tAND b.TYPE IN ('TX', 'TM')\n" +
") a\n" +
"WHERE object_id = a.row_wait_obj#",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(3, visitor.getTables().size());
Assert.assertEquals(9, visitor.getColumns().size());
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("sys.V_$SESSION", "SID")));
}
}
@@ -0,0 +1,86 @@
/*
* Copyright 1999-2017 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.bvt.sql.oracle.create;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
import com.alibaba.druid.util.JdbcConstants;
import org.junit.Assert;
import java.util.List;
public class OracleCreateViewTest5 extends OracleTest {
public void test_types() throws Exception {
String sql = //
" CREATE OR REPLACE FORCE VIEW \"SC_001\".\"TB_001\" (\"OBJECT_NAME\", \"SESSION_ID\", \"ORACLE_USERNAME\", \"OS_USER_NAME\", \"SQL_ACTIONS\", \"LOCK_MODE\") AS \n" +
" SELECT /*+ no_merge(lo) */\n" +
" DO.object_name, lo.SESSION_ID, lo.oracle_username, lo.OS_USER_NAME,\n" +
" DECODE(locked_mode,\n" +
" 1, 'SELECT',\n" +
" 2, 'SELECT FOR UPDATE / LOCK ROW SHARE',\n" +
" 3, 'INSERT/UPDATE/DELETE/LOCK ROW EXCLUSIVE',\n" +
" 4, 'CREATE INDEX/LOCK SHARE',\n" +
" 5, 'LOCK SHARE ROW EXCLUSIVE',\n" +
" 6, 'ALTER TABLE/DROP TABLE/DROP INDEX/TRUNCATE TABLE/LOCK EXCLUSIVE') sql_actions,\n" +
" DECODE(locked_mode, 1, 'NULL', 2, 'SS - SUB SHARE', 3, 'SX - SUB EXCLUSIVE',\n" +
" 4, 'S - SHARE', 5, 'SSX - SHARE/SUB EXCLUSIVE', 6, 'X - EXCLUSIVE') Lock_mode\n" +
" FROM sys.V_$LOCKED_OBJECT lo, TB_002 DO\n" +
" WHERE DO.object_id = lo.object_id ";
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement stmt = statementList.get(0);
print(statementList);
Assert.assertEquals(1, statementList.size());
Assert.assertEquals("CREATE OR REPLACE VIEW \"SC_001\".\"TB_001\"\n" +
"(\n" +
"\t\"OBJECT_NAME\", \n" +
"\t\"SESSION_ID\", \n" +
"\t\"ORACLE_USERNAME\", \n" +
"\t\"OS_USER_NAME\", \n" +
"\t\"SQL_ACTIONS\", \n" +
"\t\"LOCK_MODE\"\n" +
")\n" +
"AS\n" +
"SELECT /*+ no_merge(lo) */ DO.object_name, lo.SESSION_ID, lo.oracle_username, lo.OS_USER_NAME, DECODE(locked_mode, 1, 'SELECT', 2, 'SELECT FOR UPDATE / LOCK ROW SHARE', 3, 'INSERT/UPDATE/DELETE/LOCK ROW EXCLUSIVE', 4, 'CREATE INDEX/LOCK SHARE', 5, 'LOCK SHARE ROW EXCLUSIVE', 6, 'ALTER TABLE/DROP TABLE/DROP INDEX/TRUNCATE TABLE/LOCK EXCLUSIVE') AS sql_actions\n" +
"\t, DECODE(locked_mode, 1, 'NULL', 2, 'SS - SUB SHARE', 3, 'SX - SUB EXCLUSIVE', 4, 'S - SHARE', 5, 'SSX - SHARE/SUB EXCLUSIVE', 6, 'X - EXCLUSIVE') AS Lock_mode\n" +
"FROM sys.V_$LOCKED_OBJECT lo, TB_002 DO\n" +
"WHERE DO.object_id = lo.object_id",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(2, visitor.getTables().size());
Assert.assertEquals(7, visitor.getColumns().size());
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("TB_002", "object_id")));
}
}
@@ -0,0 +1,148 @@
/*
* Copyright 1999-2017 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.bvt.sql.oracle.create;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
import com.alibaba.druid.util.JdbcConstants;
import org.junit.Assert;
import java.util.List;
public class OracleCreateViewTest6 extends OracleTest {
public void test_types() throws Exception {
String sql = //
" CREATE OR REPLACE FORCE VIEW \"SC_001\".\"TV_001\" (\"ID\", \"GMT_CREATE\", \"CREATOR\", \"GMT_MODIFIED\", \"MODIFIER\", \"IS_DELETED\", \"CONTRACT_PARTY\", \"COMPANY_NAME\", \"PRODUCT_TYPE\", \"PERIOD\", \"JOIN\", \"OVER\", \"CONTRACT_TERM\", \"CONTRACT_CASH\", \"EXEC_CASH\", \"CANCELED_CASH\", \"RECEIVERD_CASH\", \"O_S_CASH\", \"REMARK\", \"FENTAN_CHECK\", \"TOTAL_CASH\", \"NOT_CONFIRMED\", \"PRE_RECEIVED\", \"NOT_RECEIVED\", \"CONTRACT_DATE\", \"OWNER_1\", \"AREA_ID_1\", \"FIRST_OWNER\", \"FIRST_AREA_ID\", \"CONTRACT_ID\", \"IS_RENEW_UPGRADE\", \"CATEGORY_ID_1\", \"CATEGORY_ID_2\", \"FIRST_RECEIPT_DATE\", \"RECEIPT_REMARK\", \"CONTRACT_SERIAL\", \"IS_MERGED\") AS \n" +
" SELECT\n" +
"ID,\n" +
"GMT_CREATE,\n" +
"utl_raw.cast_to_raw(CREATOR) AS CREATOR,\n" +
"GMT_MODIFIED,\n" +
"utl_raw.cast_to_raw(MODIFIER) AS MODIFIER,\n" +
"IS_DELETED,\n" +
"utl_raw.cast_to_raw(CONTRACT_PARTY) AS CONTRACT_PARTY,\n" +
"utl_raw.cast_to_raw(COMPANY_NAME) AS COMPANY_NAME,\n" +
"utl_raw.cast_to_raw(PRODUCT_TYPE) AS PRODUCT_TYPE,\n" +
"utl_raw.cast_to_raw(PERIOD) AS PERIOD,\n" +
"JOIN,\n" +
"OVER,\n" +
"CONTRACT_TERM,\n" +
"CONTRACT_CASH,\n" +
"EXEC_CASH,\n" +
"CANCELED_CASH,\n" +
"RECEIVERD_CASH,\n" +
"O_S_CASH,\n" +
"utl_raw.cast_to_raw(REMARK) AS REMARK,\n" +
"FENTAN_CHECK,\n" +
"TOTAL_CASH,\n" +
"NOT_CONFIRMED,\n" +
"PRE_RECEIVED,\n" +
"NOT_RECEIVED,\n" +
"CONTRACT_DATE,\n" +
"utl_raw.cast_to_raw(OWNER_1) AS OWNER_1,\n" +
"AREA_ID_1,\n" +
"utl_raw.cast_to_raw(FIRST_OWNER) AS FIRST_OWNER,\n" +
"FIRST_AREA_ID,\n" +
"utl_raw.cast_to_raw(CONTRACT_ID) AS CONTRACT_ID,\n" +
"utl_raw.cast_to_raw(IS_RENEW_UPGRADE) AS IS_RENEW_UPGRADE,\n" +
"CATEGORY_ID_1,\n" +
"CATEGORY_ID_2,\n" +
"FIRST_RECEIPT_DATE,\n" +
"utl_raw.cast_to_raw(RECEIPT_REMARK) AS RECEIPT_REMARK,\n" +
"utl_raw.cast_to_raw(CONTRACT_SERIAL) AS CONTRACT_SERIAL,\n" +
"IS_MERGED\n" +
"FROM TB_002 ";
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement stmt = statementList.get(0);
print(statementList);
Assert.assertEquals(1, statementList.size());
Assert.assertEquals("CREATE OR REPLACE VIEW \"SC_001\".\"TV_001\"\n" +
"(\n" +
"\t\"ID\", \n" +
"\t\"GMT_CREATE\", \n" +
"\t\"CREATOR\", \n" +
"\t\"GMT_MODIFIED\", \n" +
"\t\"MODIFIER\", \n" +
"\t\"IS_DELETED\", \n" +
"\t\"CONTRACT_PARTY\", \n" +
"\t\"COMPANY_NAME\", \n" +
"\t\"PRODUCT_TYPE\", \n" +
"\t\"PERIOD\", \n" +
"\t\"JOIN\", \n" +
"\t\"OVER\", \n" +
"\t\"CONTRACT_TERM\", \n" +
"\t\"CONTRACT_CASH\", \n" +
"\t\"EXEC_CASH\", \n" +
"\t\"CANCELED_CASH\", \n" +
"\t\"RECEIVERD_CASH\", \n" +
"\t\"O_S_CASH\", \n" +
"\t\"REMARK\", \n" +
"\t\"FENTAN_CHECK\", \n" +
"\t\"TOTAL_CASH\", \n" +
"\t\"NOT_CONFIRMED\", \n" +
"\t\"PRE_RECEIVED\", \n" +
"\t\"NOT_RECEIVED\", \n" +
"\t\"CONTRACT_DATE\", \n" +
"\t\"OWNER_1\", \n" +
"\t\"AREA_ID_1\", \n" +
"\t\"FIRST_OWNER\", \n" +
"\t\"FIRST_AREA_ID\", \n" +
"\t\"CONTRACT_ID\", \n" +
"\t\"IS_RENEW_UPGRADE\", \n" +
"\t\"CATEGORY_ID_1\", \n" +
"\t\"CATEGORY_ID_2\", \n" +
"\t\"FIRST_RECEIPT_DATE\", \n" +
"\t\"RECEIPT_REMARK\", \n" +
"\t\"CONTRACT_SERIAL\", \n" +
"\t\"IS_MERGED\"\n" +
")\n" +
"AS\n" +
"SELECT ID, GMT_CREATE, utl_raw.cast_to_raw(CREATOR) AS CREATOR, GMT_MODIFIED, utl_raw.cast_to_raw(MODIFIER) AS MODIFIER\n" +
"\t, IS_DELETED, utl_raw.cast_to_raw(CONTRACT_PARTY) AS CONTRACT_PARTY, utl_raw.cast_to_raw(COMPANY_NAME) AS COMPANY_NAME, utl_raw.cast_to_raw(PRODUCT_TYPE) AS PRODUCT_TYPE, utl_raw.cast_to_raw(PERIOD) AS PERIOD\n" +
"\t, JOIN, OVER, CONTRACT_TERM, CONTRACT_CASH, EXEC_CASH\n" +
"\t, CANCELED_CASH, RECEIVERD_CASH, O_S_CASH, utl_raw.cast_to_raw(REMARK) AS REMARK, FENTAN_CHECK\n" +
"\t, TOTAL_CASH, NOT_CONFIRMED, PRE_RECEIVED, NOT_RECEIVED, CONTRACT_DATE\n" +
"\t, utl_raw.cast_to_raw(OWNER_1) AS OWNER_1, AREA_ID_1, utl_raw.cast_to_raw(FIRST_OWNER) AS FIRST_OWNER, FIRST_AREA_ID, utl_raw.cast_to_raw(CONTRACT_ID) AS CONTRACT_ID\n" +
"\t, utl_raw.cast_to_raw(IS_RENEW_UPGRADE) AS IS_RENEW_UPGRADE, CATEGORY_ID_1, CATEGORY_ID_2, FIRST_RECEIPT_DATE, utl_raw.cast_to_raw(RECEIPT_REMARK) AS RECEIPT_REMARK\n" +
"\t, utl_raw.cast_to_raw(CONTRACT_SERIAL) AS CONTRACT_SERIAL, IS_MERGED\n" +
"FROM TB_002",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(1, visitor.getTables().size());
Assert.assertEquals(37, visitor.getColumns().size());
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("TB_002", "ID")));
}
}