mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved sql parser.
This commit is contained in:
@@ -39,6 +39,6 @@ public class MySqlError_test_3 extends MysqlTest {
|
||||
|
||||
Assert.assertNotNull(error);
|
||||
// error.printStackTrace();
|
||||
Assert.assertEquals("syntax error, error in :'us = LIMIT ?, ?',expect QUES, actual QUES LIMIT", error.getMessage());
|
||||
Assert.assertEquals("syntax error, error in :'us = LIMIT ?, ?',expect QUES, actual QUES pos 248, line 1, column 247, token QUES", error.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
package com.alibaba.druid.bvt.sql.mysql.param;
|
||||
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.parser.SQLParserUtils;
|
||||
import com.alibaba.druid.sql.parser.SQLStatementParser;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by wenshao on 16/8/23.
|
||||
*/
|
||||
public class MySqlParameterizedOutputVisitorTest_44 extends TestCase {
|
||||
public void test_for_parameterize() throws Exception {
|
||||
final String dbType = JdbcConstants.MYSQL;
|
||||
String sql = "select 1 from a where c1 in (date_format(date_add(curdate(), INTERVAL -7 DAY), '%Y%m%d'))";
|
||||
|
||||
SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType);
|
||||
List<SQLStatement> stmtList = parser.parseStatementList();
|
||||
SQLStatement statement = stmtList.get(0);
|
||||
|
||||
StringBuilder out = new StringBuilder();
|
||||
SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(out, JdbcConstants.MYSQL);
|
||||
List<Object> parameters = new ArrayList<Object>();
|
||||
visitor.setParameterized(true);
|
||||
visitor.setParameterizedMergeInList(true);
|
||||
visitor.setParameters(parameters);
|
||||
/*visitor.setPrettyFormat(false);*/
|
||||
statement.accept(visitor);
|
||||
/* JSONArray array = new JSONArray();
|
||||
for(String table : visitor.getTables()){
|
||||
array.add(table.replaceAll("`",""));
|
||||
}*/
|
||||
|
||||
String psql = out.toString();
|
||||
|
||||
System.out.println(psql);
|
||||
|
||||
|
||||
assertEquals("SELECT ?\n" +
|
||||
"FROM a\n" +
|
||||
"WHERE c1 IN (date_format(date_add(curdate(), INTERVAL ? DAY), '%Y%m%d'))", psql);
|
||||
String params_json = JSONArray.toJSONString(parameters, SerializerFeature.WriteClassName);
|
||||
System.out.println(params_json);
|
||||
JSONArray jsonArray = JSON.parseArray(params_json);
|
||||
String json = JSONArray.toJSONString(jsonArray, SerializerFeature.WriteClassName);
|
||||
assertEquals("[1,-7]", json);
|
||||
|
||||
String rsql = SQLUtils.toSQLString(SQLUtils.parseStatements(psql, dbType), dbType, jsonArray);
|
||||
assertEquals("SELECT 1\n" +
|
||||
"FROM a\n" +
|
||||
"WHERE c1 IN (date_format(date_add(curdate(), INTERVAL -7 DAY), '%Y%m%d'))", rsql);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
package com.alibaba.druid.bvt.sql.mysql.transform;
|
||||
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement;
|
||||
import com.alibaba.druid.sql.dialect.mysql.visitor.transform.FromSubqueryResolver;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by wenshao on 16/07/2017.
|
||||
*/
|
||||
public class Trans_CreateView_2 extends TestCase {
|
||||
public void test_createView() throws Exception {
|
||||
String sql = "CREATE OR REPLACE VIEW \"AUTH\".\"HR_DEPTEMP_VIEW\" (\n" +
|
||||
"\t\"MY_PK\", \n" +
|
||||
"\t\"FK_EMP\", \n" +
|
||||
"\t\"FK_DEPT\", \n" +
|
||||
"\t\"FK_DUTY\", \n" +
|
||||
"\t\"DUTYLEVEL\", \n" +
|
||||
"\t\"LEADER\", \n" +
|
||||
"\t\"DEPT\", \n" +
|
||||
"\t\"STORENO\", \n" +
|
||||
"\t\"AREA\", \n" +
|
||||
"\t\"TYPE\"\n" +
|
||||
")\n" +
|
||||
"AS\n" +
|
||||
"WITH struct AS (\n" +
|
||||
"\t\tSELECT d.code AS dept, s.code AS storeno, a.code AS area, 'S' AS type\n" +
|
||||
"\t\tFROM (\n" +
|
||||
"\t\t\tSELECT code, name, sjcode\n" +
|
||||
"\t\t\tFROM hr_structure\n" +
|
||||
"\t\t\tWHERE type = 'A'\n" +
|
||||
"\t\t) a, (\n" +
|
||||
"\t\t\tSELECT code, name, sjcode\n" +
|
||||
"\t\t\tFROM hr_structure\n" +
|
||||
"\t\t\tWHERE type = 'S'\n" +
|
||||
"\t\t) s, (\n" +
|
||||
"\t\t\tSELECT code, name, sjcode\n" +
|
||||
"\t\t\tFROM hr_structure\n" +
|
||||
"\t\t\tWHERE type = 'D'\n" +
|
||||
"\t\t) d\n" +
|
||||
"\t\tWHERE d.sjcode = s.code\n" +
|
||||
"\t\t\tAND s.sjcode = a.code\n" +
|
||||
"\t\tUNION\n" +
|
||||
"\t\tSELECT d.code AS dept, NULL AS storeno, a.code AS area, 'A' AS type\n" +
|
||||
"\t\tFROM (\n" +
|
||||
"\t\t\tSELECT code, name, sjcode\n" +
|
||||
"\t\t\tFROM hr_structure\n" +
|
||||
"\t\t\tWHERE type = 'A'\n" +
|
||||
"\t\t) a, (\n" +
|
||||
"\t\t\tSELECT code, name, sjcode\n" +
|
||||
"\t\t\tFROM hr_structure\n" +
|
||||
"\t\t\tWHERE type = 'D'\n" +
|
||||
"\t\t) d\n" +
|
||||
"\t\tWHERE d.sjcode = a.code\n" +
|
||||
"\t\tUNION\n" +
|
||||
"\t\tSELECT d.code AS dept, NULL AS storeno, g.code AS area, 'G' AS type\n" +
|
||||
"\t\tFROM (\n" +
|
||||
"\t\t\tSELECT code, name, sjcode\n" +
|
||||
"\t\t\tFROM hr_structure\n" +
|
||||
"\t\t\tWHERE type = 'G'\n" +
|
||||
"\t\t) g, (\n" +
|
||||
"\t\t\tSELECT code, name, sjcode\n" +
|
||||
"\t\t\tFROM hr_structure\n" +
|
||||
"\t\t\tWHERE type = 'D'\n" +
|
||||
"\t\t) d\n" +
|
||||
"\t\tWHERE d.sjcode = g.code\n" +
|
||||
"\t)\n" +
|
||||
"SELECT \"MY_PK\", \"FK_EMP\", \"FK_DEPT\", \"FK_DUTY\", \"DUTYLEVEL\"\n" +
|
||||
"\t, \"LEADER\", \"DEPT\", \"STORENO\", \"AREA\", \"TYPE\"\n" +
|
||||
"FROM hr_deptemp t1, struct t2\n" +
|
||||
"WHERE t1.FK_DEPT = t2.dept";
|
||||
|
||||
List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, JdbcConstants.ORACLE);
|
||||
assertEquals(1, stmtList.size());
|
||||
|
||||
SQLStatement stmt = stmtList.get(0);
|
||||
List<SQLStatement> targetList = FromSubqueryResolver.resolve((SQLCreateViewStatement) stmt);
|
||||
String targetSql = SQLUtils.toSQLString(targetList, JdbcConstants.ORACLE);
|
||||
assertEquals(9, targetList.size());
|
||||
System.out.println(targetSql);
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ public class OdpsFormatCommentTest12 extends TestCase {
|
||||
public void test_column_comment() throws Exception {
|
||||
String sql = "select * from t --abc";
|
||||
Assert.assertEquals("SELECT *" //
|
||||
+ "\nFROM t --abc", SQLUtils.formatOdps(sql));
|
||||
+ "\nFROM t -- abc", SQLUtils.formatOdps(sql));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -22,13 +22,13 @@ public class OdpsFormatCommentTest14 extends TestCase {
|
||||
Assert.assertEquals("SELECT *"
|
||||
+ "\nFROM ("
|
||||
+ "\n\tSELECT 1"
|
||||
+ "\n\tFROM t1 --c_0"
|
||||
+ "\n\tFROM t1 -- c_0"
|
||||
+ "\n\tUNION ALL"
|
||||
+ "\n\t--c_1"
|
||||
+ "\n\t-- c_1"
|
||||
+ "\n\tSELECT 2"
|
||||
+ "\n\tFROM t2 --c_2"
|
||||
+ "\n\tFROM t2 -- c_2"
|
||||
+ "\n\tUNION ALL"
|
||||
+ "\n\t--c_3"
|
||||
+ "\n\t-- c_3"
|
||||
+ "\n\tSELECT 3"
|
||||
+ "\n\tFROM t3"
|
||||
+ "\n) xx", SQLUtils.formatOdps(sql));
|
||||
|
||||
@@ -9,7 +9,7 @@ import junit.framework.TestCase;
|
||||
public class OdpsFormatCommentTest17 extends TestCase {
|
||||
public void test_column_comment() throws Exception {
|
||||
String sql = "set xxx=aaa;--ssss";
|
||||
Assert.assertEquals("SET xxx = aaa;--ssss", SQLUtils.formatOdps(sql));
|
||||
Assert.assertEquals("SET xxx = aaa;-- ssss", SQLUtils.formatOdps(sql));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ public class OdpsFormatCommentTest19 extends TestCase {
|
||||
public void test_column_comment() throws Exception {
|
||||
String sql = "set xxx=aaa;--ssss"
|
||||
+ "\nset yyy=123;";
|
||||
Assert.assertEquals("SET xxx = aaa;--ssss"
|
||||
Assert.assertEquals("SET xxx = aaa;-- ssss"
|
||||
+ "\nSET yyy = 123;", SQLUtils.formatOdps(sql));
|
||||
}
|
||||
|
||||
|
||||
@@ -14,10 +14,10 @@ public class OdpsFormatCommentTest2 extends TestCase {
|
||||
+ "\n--[Update ]"//
|
||||
+ "\nset odps.sql.mapper.split.size=2048;"//
|
||||
+ "\nselect * from dual;";
|
||||
Assert.assertEquals("--[Subject -]"
|
||||
+ "\n--[Author -高铁/035139]"
|
||||
+ "\n--[Created -2015-06-10 13:19:18]"
|
||||
+ "\n--[Update ]"
|
||||
Assert.assertEquals("-- [Subject -]"
|
||||
+ "\n-- [Author -高铁/035139]"
|
||||
+ "\n-- [Created -2015-06-10 13:19:18]"
|
||||
+ "\n-- [Update ]"
|
||||
+ "\nSET odps.sql.mapper.split.size = 2048;"
|
||||
+ "\n" //
|
||||
+ "\nSELECT *"
|
||||
|
||||
@@ -12,9 +12,9 @@ public class OdpsFormatCommentTest29 extends TestCase {
|
||||
+ "\ncol string, --测试2"
|
||||
+ "\ncol2 string --测试3"
|
||||
+ "\n)";
|
||||
Assert.assertEquals("CREATE TABLE xxxx001 ( --测试"
|
||||
+ "\n\tcol STRING, --测试2"
|
||||
+ "\n\tcol2 STRING --测试3"
|
||||
Assert.assertEquals("CREATE TABLE xxxx001 ( -- 测试"
|
||||
+ "\n\tcol STRING, -- 测试2"
|
||||
+ "\n\tcol2 STRING -- 测试3"
|
||||
+ "\n)", SQLUtils.formatOdps(sql));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ public class OdpsFormatCommentTest30 extends TestCase {
|
||||
+ "\n asdasd STRING,"
|
||||
+ "\n asasd STRING"
|
||||
+ "\n);";
|
||||
Assert.assertEquals("--啊实打实大啊实打实大"
|
||||
Assert.assertEquals("-- 啊实打实大啊实打实大"
|
||||
+ "\nCREATE TABLE xxx ("
|
||||
+ "\n\taa STRING,"
|
||||
+ "\n\tasdasd STRING,"
|
||||
|
||||
@@ -12,7 +12,7 @@ public class OdpsFormatCommentTest7 extends TestCase {
|
||||
+ "\nselect * from table1;" //
|
||||
+ "\nselect * from table2;;"
|
||||
;//
|
||||
Assert.assertEquals("--这里是注释"
|
||||
Assert.assertEquals("-- 这里是注释"
|
||||
+ "\nSELECT *"
|
||||
+ "\nFROM table1;"
|
||||
+ "\n"
|
||||
|
||||
@@ -16,22 +16,22 @@ public class OdpsFormatCommentTest8 extends TestCase {
|
||||
Assert.assertEquals("SELECT *"
|
||||
+ "\nFROM table1;"
|
||||
+ "\n"
|
||||
+ "\n--comment1 goes here"
|
||||
+ "\n-- comment1 goes here"
|
||||
+ "\nSELECT *"
|
||||
+ "\nFROM table2;"
|
||||
+ "\n"
|
||||
+ "\nSELECT *"
|
||||
+ "\nFROM table3;--comment2 goes here", SQLUtils.formatOdps(sql));
|
||||
+ "\nFROM table3;-- comment2 goes here", SQLUtils.formatOdps(sql));
|
||||
|
||||
Assert.assertEquals("select *"
|
||||
+ "\nfrom table1;"
|
||||
+ "\n"
|
||||
+ "\n--comment1 goes here"
|
||||
+ "\n-- comment1 goes here"
|
||||
+ "\nselect *"
|
||||
+ "\nfrom table2;"
|
||||
+ "\n"
|
||||
+ "\nselect *"
|
||||
+ "\nfrom table3;--comment2 goes here", SQLUtils.formatOdps(sql, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION));
|
||||
+ "\nfrom table3;-- comment2 goes here", SQLUtils.formatOdps(sql, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -32,13 +32,13 @@ public class OdpsSelectTest29 extends TestCase {
|
||||
"--hhhhh\n" +
|
||||
"FROM emp e\n" +
|
||||
"LEFT OUTER JOIN emp_datahub";//
|
||||
assertEquals("--aaaaa\n" +
|
||||
"SELECT * --hhhhh\n" +
|
||||
assertEquals("-- aaaaa\n" +
|
||||
"SELECT * -- hhhhh\n" +
|
||||
"FROM emp e\n" +
|
||||
"LEFT OUTER JOIN emp_datahub", SQLUtils.formatOdps(sql));
|
||||
|
||||
assertEquals("--aaaaa\n" +
|
||||
"select * --hhhhh\n" +
|
||||
assertEquals("-- aaaaa\n" +
|
||||
"select * -- hhhhh\n" +
|
||||
"from emp e\n" +
|
||||
"left outer join emp_datahub", SQLUtils.formatOdps(sql, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION));
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ public class OracleAlterTableTest20 extends OracleTest {
|
||||
System.out.println("orderBy : " + visitor.getOrderByColumns());
|
||||
|
||||
Assert.assertEquals("ALTER TABLE sales" //
|
||||
+ "\n\tADD CONSTRAINT sales_pk PRIMARY KEY (prod_id, cust_id) DIABLE;", //
|
||||
+ "\n\tADD CONSTRAINT sales_pk PRIMARY KEY (prod_id, cust_id) DISABLE;", //
|
||||
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
|
||||
|
||||
Assert.assertEquals(1, visitor.getTables().size());
|
||||
|
||||
@@ -52,7 +52,7 @@ public class OracleAlterTableTest22 extends OracleTest {
|
||||
System.out.println("orderBy : " + visitor.getOrderByColumns());
|
||||
|
||||
Assert.assertEquals("ALTER TABLE employees" //
|
||||
+ "\n\tADD CONSTRAINT check_comp CHECK (salary + commission_pct * salary <= 5000) DIABLE;", //
|
||||
+ "\n\tADD CONSTRAINT check_comp CHECK (salary + commission_pct * salary <= 5000) DISABLE;", //
|
||||
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
|
||||
|
||||
Assert.assertEquals(1, visitor.getTables().size());
|
||||
|
||||
@@ -1,131 +0,0 @@
|
||||
/*
|
||||
* 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.util.JdbcConstants;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class OracleCreateTableTest73 extends OracleTest {
|
||||
|
||||
public void test_types() throws Exception {
|
||||
String sql = //
|
||||
"CREATE TABLE \"RDB\".\"RDB_DATA_HIST\" \n" +
|
||||
" (\t\"TABLE_ID\" NUMBER, \n" +
|
||||
"\t\"EVENT_TYPE\" VARCHAR2(1), \n" +
|
||||
"\t\"PK_DATA\" VARCHAR2(64), \n" +
|
||||
"\t\"TRANSACTION_ID\" NUMBER, \n" +
|
||||
"\t\"IGNORE_NODE_CLUSTER_ID\" VARCHAR2(32), \n" +
|
||||
"\t\"GMT_CREATE\" DATE, \n" +
|
||||
"\t\"ID\" NUMBER\n" +
|
||||
" ) PCTFREE 0 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING \n" +
|
||||
" STORAGE(\n" +
|
||||
" BUFFER_POOL DEFAULT)\n" +
|
||||
" TABLESPACE \"BISYNC1M\" \n" +
|
||||
" PARTITION BY RANGE (\"GMT_CREATE\") \n" +
|
||||
" (PARTITION \"AUTO_P_2012_06_01\" VALUES LESS THAN (TO_DATE(' 2012-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" +
|
||||
" PCTFREE 0 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 \"BISYNC1M\" NOCOMPRESS , \n" +
|
||||
" PARTITION \"AUTO_P_2012_07_01\" VALUES LESS THAN (TO_DATE(' 2012-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" +
|
||||
" PCTFREE 0 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 \"BISYNC1M\" NOCOMPRESS , \n" +
|
||||
" PARTITION \"AUTO_P_2012_08_01\" VALUES LESS THAN (TO_DATE(' 2012-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" +
|
||||
" PCTFREE 0 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 \"BISYNC1M\" NOCOMPRESS , \n" +
|
||||
" PARTITION \"AUTO_P_2012_09_01\" VALUES LESS THAN (TO_DATE(' 2012-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" +
|
||||
" PCTFREE 0 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 \"BISYNC1M\" NOCOMPRESS , \n" +
|
||||
" PARTITION \"AUTO_P_2012_10_01\" VALUES LESS THAN (TO_DATE(' 2012-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" +
|
||||
" PCTFREE 0 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 \"BISYNC1M\" NOCOMPRESS , \n" +
|
||||
" PARTITION \"AUTO_P_2012_11_01\" VALUES LESS THAN (TO_DATE(' 2012-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" +
|
||||
" PCTFREE 0 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 \"BISYNC1M\" NOCOMPRESS , \n" +
|
||||
" PARTITION \"AUTO_P_2012_12_01\" VALUES LESS THAN (TO_DATE(' 2012-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" +
|
||||
" PCTFREE 0 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 \"BISYNC1M\" NOCOMPRESS , \n" +
|
||||
" PARTITION \"AUTO_P_2013_01_01\" VALUES LESS THAN (TO_DATE(' 2013-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" +
|
||||
" PCTFREE 0 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 \"BISYNC1M\" NOCOMPRESS , \n" +
|
||||
" PARTITION \"AUTO_P_2013_02_01\" VALUES LESS THAN (TO_DATE(' 2013-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" +
|
||||
" PCTFREE 0 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 \"BISYNC1M\" NOCOMPRESS , \n" +
|
||||
" PARTITION \"AUTO_P_2013_03_01\" VALUES LESS THAN (TO_DATE(' 2013-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) \n" +
|
||||
" PCTFREE 0 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 \"BISYNC1M\" NOCOM";
|
||||
|
||||
List<SQLStatement> statementList = SQLUtils.parseStatements(sql, JdbcConstants.ORACLE);
|
||||
SQLStatement stmt = statementList.get(0);
|
||||
print(statementList);
|
||||
|
||||
assertEquals(1, statementList.size());
|
||||
//
|
||||
assertEquals("CREATE GLOBAL TEMPORARY TABLE \"RETL\".\"REFFERAL_MEMBER\" (\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\"FROM_NAME\" VARCHAR2(128) NOT NULL ENABLE,\n" +
|
||||
"\t\"FROM_EMAIL\" VARCHAR2(128) NOT NULL ENABLE,\n" +
|
||||
"\t\"TO_NAME\" VARCHAR2(128),\n" +
|
||||
"\t\"TO_EMAIL\" VARCHAR2(128) NOT NULL ENABLE,\n" +
|
||||
"\t\"MESSAGE\" VARCHAR2(512),\n" +
|
||||
"\t\"GMT_JOIN_MEMBER\" DATE,\n" +
|
||||
"\t\"SOURCE_CODE\" VARCHAR2(32) NOT NULL ENABLE,\n" +
|
||||
"\t\"IS_FROM_MEMBER\" CHAR(1) NOT NULL ENABLE,\n" +
|
||||
"\t\"IS_JOIN\" CHAR(1) NOT NULL ENABLE\n" +
|
||||
")\n" +
|
||||
"ON COMMIT DELETE ROWS",//
|
||||
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
|
||||
//
|
||||
// SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.ORACLE);
|
||||
// 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());
|
||||
//
|
||||
// assertEquals(1, visitor.getTables().size());
|
||||
//
|
||||
// assertEquals(3, visitor.getColumns().size());
|
||||
//
|
||||
// assertTrue(visitor.getColumns().contains(new TableStat.Column("JWGZPT.A", "XM")));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
/*
|
||||
* 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.util.JdbcConstants;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class OracleCreateTableTest75 extends OracleTest {
|
||||
|
||||
public void test_types() throws Exception {
|
||||
String sql = //
|
||||
"CREATE TABLE \"CMIS\".\"DR$IDX_FULL_BIZ_TABLE_NAME$R\" \n" +
|
||||
" (\t\"ROW_NO\" NUMBER(3,0), \n" +
|
||||
"\t\"DATA\" BLOB, \n" +
|
||||
"\t CONSTRAINT \"DRC$IDX_FULL_BIZ_TABLE_NAME$R\" PRIMARY KEY (\"ROW_NO\")\n" +
|
||||
" USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 \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 \"CMISTBS\" ENABLE\n" +
|
||||
" ) SEGMENT CREATION IMMEDIATE \n" +
|
||||
" PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" +
|
||||
" NOCOMPRESS LOGGING\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 \"CMISTBS\" \n" +
|
||||
" LOB (\"DATA\") STORE AS BASICFILE (\n" +
|
||||
" TABLESPACE \"CMISTBS\" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION \n" +
|
||||
" CACHE \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" +
|
||||
" MONITORING ";
|
||||
|
||||
List<SQLStatement> statementList = SQLUtils.parseStatements(sql, JdbcConstants.ORACLE);
|
||||
SQLStatement stmt = statementList.get(0);
|
||||
print(statementList);
|
||||
|
||||
assertEquals(1, statementList.size());
|
||||
//
|
||||
assertEquals("CREATE TABLE \"CMIS\".\"DR$IDX_FULL_BIZ_TABLE_NAME$R\" (\n" +
|
||||
"\t\"ROW_NO\" NUMBER(3, 0),\n" +
|
||||
"\t\"DATA\" BLOB,\n" +
|
||||
"\tCONSTRAINT \"DRC$IDX_FULL_BIZ_TABLE_NAME$R\" PRIMARY KEY (\"ROW_NO\")\n" +
|
||||
"\t\tUSING INDEX\n" +
|
||||
"\t\tPCTFREE 10\n" +
|
||||
"\t\tINITRANS 2\n" +
|
||||
"\t\tMAXTRANS 255\n" +
|
||||
"\t\tTABLESPACE \"CMISTBS\"\n" +
|
||||
"\t\tSTORAGE (\n" +
|
||||
"\t\t\tINITIAL 65536\n" +
|
||||
"\t\t\tNEXT 1048576\n" +
|
||||
"\t\t\tMINEXTENTS 1\n" +
|
||||
"\t\t\tMAXEXTENTS 2147483645\n" +
|
||||
"\t\t\tPCTINCREASE 0\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\tENABLE\n" +
|
||||
")\n" +
|
||||
"PCTFREE 10\n" +
|
||||
"PCTUSED 40\n" +
|
||||
"INITRANS 1\n" +
|
||||
"MAXTRANS 255\n" +
|
||||
"NOCOMPRESS\n" +
|
||||
"LOGGING\n" +
|
||||
"TABLESPACE \"CMISTBS\"\n" +
|
||||
"STORAGE (\n" +
|
||||
"\tINITIAL 65536\n" +
|
||||
"\tNEXT 1048576\n" +
|
||||
"\tMINEXTENTS 1\n" +
|
||||
"\tMAXEXTENTS 2147483645\n" +
|
||||
"\tPCTINCREASE 0\n" +
|
||||
"\tFREELISTS 1\n" +
|
||||
"\tFREELIST GROUPS 1\n" +
|
||||
"\tBUFFER_POOL DEFAULT\n" +
|
||||
"\tFLASH_CACHE DEFAULT\n" +
|
||||
"\tCELL_FLASH_CACHE DEFAULT\n" +
|
||||
")\n" +
|
||||
"LOB (\"DATA\") STORE AS BASICFILE (\n" +
|
||||
"\tTABLESPACE \"CMISTBS\"\n" +
|
||||
"\tSTORAGE (\n" +
|
||||
"\t\tINITIAL 65536\n" +
|
||||
"\t\tNEXT 1048576\n" +
|
||||
"\t\tMINEXTENTS 1\n" +
|
||||
"\t\tMAXEXTENTS 2147483645\n" +
|
||||
"\t\tPCTINCREASE 0\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" +
|
||||
"\tCACHE\n" +
|
||||
"\tRETENTION\n" +
|
||||
")\n" +
|
||||
"MONITORING",//
|
||||
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
|
||||
//
|
||||
// SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.ORACLE);
|
||||
// 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());
|
||||
//
|
||||
// assertEquals(1, visitor.getTables().size());
|
||||
//
|
||||
// assertEquals(3, visitor.getColumns().size());
|
||||
//
|
||||
// assertTrue(visitor.getColumns().contains(new TableStat.Column("JWGZPT.A", "XM")));
|
||||
}
|
||||
}
|
||||
@@ -46,7 +46,7 @@ public class OracleCreateViewTest8 extends OracleTest {
|
||||
"\temp_id, \n" +
|
||||
"\tlast_name, \n" +
|
||||
"\temail UNIQUE, \n" +
|
||||
"\tCONSTRAINT id_pk PRIMARY KEY (emp_id) RELY DIABLE NOVALIDATE\n" +
|
||||
"\tCONSTRAINT id_pk PRIMARY KEY (emp_id) RELY DISABLE NOVALIDATE\n" +
|
||||
")\n" +
|
||||
"AS\n" +
|
||||
"SELECT employee_id, last_name, email\n" +
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* 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 OracleSelectTest70 extends OracleTest {
|
||||
|
||||
public void test_0() throws Exception {
|
||||
String sql = //
|
||||
"SELECT CAST(a.nsrdzdah AS char)\n" +
|
||||
"FROM DJ_NSRXX_DZB a\n" +
|
||||
"\tINNER JOIN DJ_NSRXX b ON a.nsrdzdah = b.nsrdzdah\n" +
|
||||
"\tINNER JOIN DM_SWJG c ON b.nsr_swjg_dm = c.swjg_dm\n" +
|
||||
"WHERE (a.nsrsbh_old = ?\n" +
|
||||
"\t\tOR a.nsrsbh_new = ?)\n" +
|
||||
"\tAND b.nsrzt_dm <= ?\n" +
|
||||
"\tAND c.JBDM LIKE ?\n" +
|
||||
"\tAND rownum = 1"; //
|
||||
|
||||
OracleStatementParser parser = new OracleStatementParser(sql);
|
||||
List<SQLStatement> 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());
|
||||
|
||||
assertEquals(3, visitor.getTables().size());
|
||||
|
||||
assertEquals(8, visitor.getColumns().size());
|
||||
|
||||
{
|
||||
String text = SQLUtils.toOracleString(stmt);
|
||||
|
||||
assertEquals("SELECT CAST(a.nsrdzdah AS char)\n" +
|
||||
"FROM DJ_NSRXX_DZB a\n" +
|
||||
"INNER JOIN DJ_NSRXX b ON a.nsrdzdah = b.nsrdzdah \n" +
|
||||
"\tINNER JOIN DM_SWJG c ON b.nsr_swjg_dm = c.swjg_dm \n" +
|
||||
"WHERE (a.nsrsbh_old = ?\n" +
|
||||
"\t\tOR a.nsrsbh_new = ?)\n" +
|
||||
"\tAND b.nsrzt_dm <= ?\n" +
|
||||
"\tAND c.JBDM LIKE ?\n" +
|
||||
"\tAND rownum = 1", 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")));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user