improved sql parser.

This commit is contained in:
wenshao
2017-06-15 09:50:49 +08:00
parent 4be1b561de
commit 0528af3207
20 changed files with 296 additions and 172 deletions
@@ -35,87 +35,87 @@ public class TestDataSourceBasic2 extends TestCase {
dataSource.setUrl("jdbc:mock:xxx");
dataSource.setBreakAfterAcquireFailure(true);
Assert.assertEquals(true, dataSource.isBreakAfterAcquireFailure());
assertEquals(true, dataSource.isBreakAfterAcquireFailure());
dataSource.setConnectionErrorRetryAttempts(234);
Assert.assertEquals(234, dataSource.getConnectionErrorRetryAttempts());
assertEquals(234, dataSource.getConnectionErrorRetryAttempts());
dataSource.setMaxPoolPreparedStatementPerConnectionSize(234);
Assert.assertEquals(234, dataSource.getMaxPoolPreparedStatementPerConnectionSize());
assertEquals(234, dataSource.getMaxPoolPreparedStatementPerConnectionSize());
dataSource.incrementDupCloseCount();
Assert.assertEquals(1, dataSource.getDupCloseCount());
assertEquals(1, dataSource.getDupCloseCount());
dataSource.setValidConnectionChecker(null);
dataSource.setValidConnectionCheckerClassName(null);
Assert.assertEquals(null, dataSource.getValidConnectionChecker());
assertEquals(null, dataSource.getValidConnectionChecker());
dataSource.addConnectionProperty("user", "ljw");
Assert.assertEquals(1, dataSource.getConnectProperties().size());
assertEquals(1, dataSource.getConnectProperties().size());
Assert.assertEquals(0, dataSource.getConnectionInitSqls().size());
assertEquals(0, dataSource.getConnectionInitSqls().size());
dataSource.setConnectionInitSqls(Arrays.<Object> asList("SELECT 1", null, ""));
Assert.assertEquals(1, dataSource.getConnectionInitSqls().size());
assertEquals(1, dataSource.getConnectionInitSqls().size());
Assert.assertEquals(30 * 1000, dataSource.getTimeBetweenConnectErrorMillis());
Assert.assertEquals(234, dataSource.getMaxOpenPreparedStatements());
Assert.assertEquals(300, dataSource.getRemoveAbandonedTimeout());
assertEquals(30 * 1000, dataSource.getTimeBetweenConnectErrorMillis());
assertEquals(234, dataSource.getMaxOpenPreparedStatements());
assertEquals(300, dataSource.getRemoveAbandonedTimeout());
dataSource.setRemoveAbandonedTimeout(400);
Assert.assertEquals(400, dataSource.getRemoveAbandonedTimeout());
Assert.assertEquals(400 * 1000, dataSource.getRemoveAbandonedTimeoutMillis());
Assert.assertEquals(3, dataSource.getNumTestsPerEvictionRun());
assertEquals(400, dataSource.getRemoveAbandonedTimeout());
assertEquals(400 * 1000, dataSource.getRemoveAbandonedTimeoutMillis());
assertEquals(3, dataSource.getNumTestsPerEvictionRun());
dataSource.setNumTestsPerEvictionRun(4);
Assert.assertEquals(4, dataSource.getNumTestsPerEvictionRun());
assertEquals(4, dataSource.getNumTestsPerEvictionRun());
dataSource.setMaxWaitThreadCount(4);
Assert.assertEquals(4, dataSource.getMaxWaitThreadCount());
assertEquals(4, dataSource.getMaxWaitThreadCount());
dataSource.setValidationQueryTimeout(4);
Assert.assertEquals(4, dataSource.getValidationQueryTimeout());
assertEquals(4, dataSource.getValidationQueryTimeout());
dataSource.setAccessToUnderlyingConnectionAllowed(true);
Assert.assertEquals(true, dataSource.isAccessToUnderlyingConnectionAllowed());
assertEquals(true, dataSource.isAccessToUnderlyingConnectionAllowed());
dataSource.setDefaultReadOnly(true);
Assert.assertEquals(Boolean.TRUE, dataSource.getDefaultReadOnly());
assertEquals(Boolean.TRUE, dataSource.getDefaultReadOnly());
dataSource.setDefaultTransactionIsolation(10);
Assert.assertEquals(Integer.valueOf(10), dataSource.getDefaultTransactionIsolation());
assertEquals(Integer.valueOf(10), dataSource.getDefaultTransactionIsolation());
dataSource.setDefaultCatalog("xxx");
Assert.assertEquals("xxx", dataSource.getDefaultCatalog());
assertEquals("xxx", dataSource.getDefaultCatalog());
dataSource.setPasswordCallbackClassName(null);
dataSource.setUserCallback(null);
Assert.assertEquals(0, dataSource.getQueryTimeout());
assertEquals(0, dataSource.getQueryTimeout());
dataSource.setQueryTimeout(10001);
Assert.assertEquals(10001, dataSource.getQueryTimeout());
assertEquals(10001, dataSource.getQueryTimeout());
Assert.assertEquals(-1, dataSource.getMaxWait());
assertEquals(-1, dataSource.getMaxWait());
dataSource.setMaxWait(10001);
Assert.assertEquals(10001, dataSource.getMaxWait());
assertEquals(10001, dataSource.getMaxWait());
Assert.assertEquals(8, dataSource.getMaxIdle());
assertEquals(8, dataSource.getMaxIdle());
dataSource.setMaxIdle(3);
Assert.assertEquals(3, dataSource.getMaxIdle());
assertEquals(3, dataSource.getMaxIdle());
Assert.assertEquals(0, dataSource.getLoginTimeout());
assertEquals(0, dataSource.getLoginTimeout());
dataSource.setLoginTimeout(30);
Assert.assertEquals(30, dataSource.getLoginTimeout());
assertEquals(30, dataSource.getLoginTimeout());
Assert.assertEquals(null, dataSource.getUsername());
assertEquals(null, dataSource.getUsername());
dataSource.setUsername("ljw");
Assert.assertEquals("ljw", dataSource.getUsername());
assertEquals("ljw", dataSource.getUsername());
Assert.assertEquals(null, dataSource.getPassword());
assertEquals(null, dataSource.getPassword());
dataSource.setPassword("xxx");
Assert.assertEquals("xxx", dataSource.getPassword());
assertEquals("xxx", dataSource.getPassword());
dataSource.setConnectProperties(new Properties());
Assert.assertEquals(0, dataSource.getConnectProperties().size());
assertEquals(0, dataSource.getConnectProperties().size());
dataSource.setConnectionProperties("a=1;b=2;c");
Assert.assertEquals(3, dataSource.getConnectProperties().size());
assertEquals(3, dataSource.getConnectProperties().size());
dataSource.setExceptionSorter((ExceptionSorter) null);
@@ -62,17 +62,16 @@ public class MySqlCreateTableTest43 extends MysqlTest {
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("client_firms")));
String output = SQLUtils.toMySqlString(stmt);
Assert.assertEquals("CREATE TABLE client_firms (" + //
"\n\tid INT," + //
"\n\tname VARCHAR(35)" + //
"\n)"
+ "\nPARTITION BY LIST (id)"
+ "\n(" + //
"\n\tPARTITION r0 VALUES IN (1, 5, 9, 13, 17, 21), " + //
"\n\tPARTITION r1 VALUES IN (2, 6, 10, 14, 18, 22), " + //
"\n\tPARTITION r2 VALUES IN (3, 7, 11, 15, 19, 23), " + //
"\n\tPARTITION r3 VALUES IN (4, 8, 12, 16, 20, 24)" + //
"\n);", output);
Assert.assertEquals("CREATE TABLE client_firms (\n" +
"\tid INT,\n" +
"\tname VARCHAR(35)\n" +
")\n" +
"PARTITION BY LIST (id) (\n" +
"\tPARTITION r0 VALUES IN (1, 5, 9, 13, 17, 21), \n" +
"\tPARTITION r1 VALUES IN (2, 6, 10, 14, 18, 22), \n" +
"\tPARTITION r2 VALUES IN (3, 7, 11, 15, 19, 23), \n" +
"\tPARTITION r3 VALUES IN (4, 8, 12, 16, 20, 24)\n" +
");", output);
}
}
@@ -62,17 +62,16 @@ public class MySqlCreateTableTest44 extends MysqlTest {
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("lc")));
String output = SQLUtils.toMySqlString(stmt);
Assert.assertEquals("CREATE TABLE lc (" + //
"\n\ta INT NULL," + //
"\n\tb INT NULL" + //
"\n)" + //
"\nPARTITION BY LIST COLUMNS (a, b)"
+ "\n(" + //
"\n\tPARTITION p0 VALUES IN ((0, 0), (NULL, NULL)), " + //
"\n\tPARTITION p1 VALUES IN ((0, 1), (0, 2), (0, 3), (1, 1), (1, 2)), " + //
"\n\tPARTITION p2 VALUES IN ((1, 0), (2, 0), (2, 1), (3, 0), (3, 1)), " + //
"\n\tPARTITION p3 VALUES IN ((1, 3), (2, 2), (2, 3), (3, 2), (3, 3))" + //
"\n);", output);
Assert.assertEquals("CREATE TABLE lc (\n" +
"\ta INT NULL,\n" +
"\tb INT NULL\n" +
")\n" +
"PARTITION BY LIST COLUMNS (a, b) (\n" +
"\tPARTITION p0 VALUES IN ((0, 0), (NULL, NULL)), \n" +
"\tPARTITION p1 VALUES IN ((0, 1), (0, 2), (0, 3), (1, 1), (1, 2)), \n" +
"\tPARTITION p2 VALUES IN ((1, 0), (2, 0), (2, 1), (3, 0), (3, 1)), \n" +
"\tPARTITION p3 VALUES IN ((1, 3), (2, 2), (2, 3), (3, 2), (3, 3))\n" +
");", output);
}
}
@@ -68,26 +68,25 @@ public class MySqlCreateTableTest45 extends MysqlTest {
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("th")));
String output = SQLUtils.toMySqlString(stmt);
Assert.assertEquals("CREATE TABLE th (" + //
"\n\tid INT," + //
"\n\tname VARCHAR(30)," + //
"\n\tadate DATE" + //
"\n)" + //
"\nPARTITION BY LIST (YEAR(adate))" + //
"\n(" + //
"\n\tPARTITION p1999 VALUES IN (1995, 1999, 2003)" + //
"\n\t\tDATA DIRECTORY '/var/appdata/95/data'" + //
"\n\t\tINDEX DIRECTORY '/var/appdata/95/idx', " + //
"\n\tPARTITION p2000 VALUES IN (1996, 2000, 2004)" + //
"\n\t\tDATA DIRECTORY '/var/appdata/96/data'" + //
"\n\t\tINDEX DIRECTORY '/var/appdata/96/idx', " + //
"\n\tPARTITION p2001 VALUES IN (1997, 2001, 2005)" + //
"\n\t\tDATA DIRECTORY '/var/appdata/97/data'" + //
"\n\t\tINDEX DIRECTORY '/var/appdata/97/idx', " + //
"\n\tPARTITION p2002 VALUES IN (1998, 2002, 2006)" + //
"\n\t\tDATA DIRECTORY '/var/appdata/98/data'" + //
"\n\t\tINDEX DIRECTORY '/var/appdata/98/idx'" + //
"\n);", output);
Assert.assertEquals("CREATE TABLE th (\n" +
"\tid INT,\n" +
"\tname VARCHAR(30),\n" +
"\tadate DATE\n" +
")\n" +
"PARTITION BY LIST (YEAR(adate)) (\n" +
"\tPARTITION p1999 VALUES IN (1995, 1999, 2003)\n" +
"\t\tDATA DIRECTORY '/var/appdata/95/data'\n" +
"\t\tINDEX DIRECTORY '/var/appdata/95/idx', \n" +
"\tPARTITION p2000 VALUES IN (1996, 2000, 2004)\n" +
"\t\tDATA DIRECTORY '/var/appdata/96/data'\n" +
"\t\tINDEX DIRECTORY '/var/appdata/96/idx', \n" +
"\tPARTITION p2001 VALUES IN (1997, 2001, 2005)\n" +
"\t\tDATA DIRECTORY '/var/appdata/97/data'\n" +
"\t\tINDEX DIRECTORY '/var/appdata/97/idx', \n" +
"\tPARTITION p2002 VALUES IN (1998, 2002, 2006)\n" +
"\t\tDATA DIRECTORY '/var/appdata/98/data'\n" +
"\t\tINDEX DIRECTORY '/var/appdata/98/idx'\n" +
");", output);
}
}
@@ -44,26 +44,24 @@ public class MySqlCreateTableTest69 extends MysqlTest {
{
String output = SQLUtils.toMySqlString(stmt);
Assert.assertEquals("CREATE TABLE t1 ("
+ "\n\ts1 INT,"
+ "\n\ts2 INT AS (EXP(s1)) SORTED"
+ "\n)"
+ "\nPARTITION BY LIST (s2)"
+ "\n("
+ "\n\tPARTITION p1 VALUES IN (1)"
+ "\n)", output);
Assert.assertEquals("CREATE TABLE t1 (\n" +
"\ts1 INT,\n" +
"\ts2 INT AS (EXP(s1)) SORTED\n" +
")\n" +
"PARTITION BY LIST (s2) (\n" +
"\tPARTITION p1 VALUES IN (1)\n" +
")", output);
}
{
String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION);
Assert.assertEquals("create table t1 ("
+ "\n\ts1 INT,"
+ "\n\ts2 INT as (EXP(s1)) sorted"
+ "\n)"
+ "\npartition by list (s2)"
+ "\n("
+ "\n\tpartition p1 values in (1)"
+ "\n)", output);
Assert.assertEquals("create table t1 (\n" +
"\ts1 INT,\n" +
"\ts2 INT as (EXP(s1)) sorted\n" +
")\n" +
"partition by list (s2) (\n" +
"\tpartition p1 values in (1)\n" +
")", output);
}
}
}
@@ -0,0 +1,59 @@
/*
* 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.mysql.createTable;
import com.alibaba.druid.sql.MysqlTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat.Column;
public class MySqlCreateTableTest77 extends MysqlTest {
public void test_one() throws Exception {
String sql = "-- table-name-bean-name:some --\n" +
"CREATE TABLE `some_table` (\n" +
" `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键'\n" +
")";
MySqlStatementParser parser = new MySqlStatementParser(sql);
SQLStatement stmt = parser.parseCreateTable();
MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
stmt.accept(visitor);
Column column = visitor.getColumn("some_table", "id");
assertNotNull(column);
assertEquals("bigint", column.getDataType());
{
String output = SQLUtils.toMySqlString(stmt);
assertEquals("-- table-name-bean-name:some --\n" +
"CREATE TABLE `some_table` (\n" +
"\t`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键'\n" +
")", output);
}
{
String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION);
assertEquals("-- table-name-bean-name:some --\n" +
"create table `some_table` (\n" +
"\t`id` bigint(20) unsigned not null auto_increment comment '主键'\n" +
")", output);
}
}
}
@@ -17,8 +17,6 @@ package com.alibaba.druid.bvt.sql.mysql.select;
import java.util.List;
import org.junit.Assert;
import com.alibaba.druid.sql.MysqlTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
@@ -40,7 +38,7 @@ public class MySqlSelectTest_28 extends MysqlTest {
SQLStatement stmt = statementList.get(0);
// print(statementList);
Assert.assertEquals(1, statementList.size());
assertEquals(1, statementList.size());
MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
stmt.accept(visitor);
@@ -50,25 +48,27 @@ public class MySqlSelectTest_28 extends MysqlTest {
// System.out.println("coditions : " + visitor.getConditions());
// System.out.println("orderBy : " + visitor.getOrderByColumns());
Assert.assertEquals(1, visitor.getTables().size());
Assert.assertEquals(3, visitor.getColumns().size());
Assert.assertEquals(1, visitor.getConditions().size());
Assert.assertEquals(0, visitor.getOrderByColumns().size());
assertEquals(1, visitor.getTables().size());
assertEquals(3, visitor.getColumns().size());
assertEquals(1, visitor.getConditions().size());
assertEquals(0, visitor.getOrderByColumns().size());
{
String output = SQLUtils.toMySqlString(stmt);
Assert.assertEquals("SELECT id, name"
+ "\nFROM `t_0248` `i_trash`"
+ "\nWHERE `gmt_create` < DATE_ADD(NOW(), INTERVAL -7 DAY)"
+ "\nLIMIT 0, 1000", //
assertEquals("/* 0a7d0d8614637128401131809d4d9d/9// */\n" +
"SELECT id, name\n" +
"FROM `t_0248` `i_trash`\n" +
"WHERE `gmt_create` < DATE_ADD(NOW(), INTERVAL -7 DAY)\n" +
"LIMIT 0, 1000", //
output);
}
{
String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION);
Assert.assertEquals("select id, name"
+ "\nfrom `t_0248` `i_trash`"
+ "\nwhere `gmt_create` < DATE_ADD(NOW(), interval -7 day)"
+ "\nlimit 0, 1000", //
assertEquals("/* 0a7d0d8614637128401131809d4d9d/9// */\n" +
"select id, name\n" +
"from `t_0248` `i_trash`\n" +
"where `gmt_create` < DATE_ADD(NOW(), interval -7 day)\n" +
"limit 0, 1000", //
output);
}
}
@@ -52,22 +52,21 @@ public class OracleCreateTableTest38 extends OracleTest {
assertEquals(1, statementList.size());
assertEquals("CREATE TABLE list_customers ("
+ "\n\tcustomer_id NUMBER(6),"
+ "\n\tcust_first_name VARCHAR2(20),"
+ "\n\tcust_last_name VARCHAR2(20),"
+ "\n\tcust_address CUST_ADDRESS_TYP,"
+ "\n\tnls_territory VARCHAR2(30),"
+ "\n\tcust_email VARCHAR2(40)"
+ "\n)"
+ "\nPARTITION BY LIST (nls_territory)"
+ "\n("
+ "\n\tPARTITION asia VALUES ('CHINA', 'THAILAND'), "
+ "\n\tPARTITION europe VALUES ('GERMANY', 'ITALY', 'SWITZERLAND'), "
+ "\n\tPARTITION west VALUES ('AMERICA'), "
+ "\n\tPARTITION east VALUES ('INDIA'), "
+ "\n\tPARTITION rest VALUES (DEFAULT)"
+ "\n);",//
assertEquals("CREATE TABLE list_customers (\n" +
"\tcustomer_id NUMBER(6),\n" +
"\tcust_first_name VARCHAR2(20),\n" +
"\tcust_last_name VARCHAR2(20),\n" +
"\tcust_address CUST_ADDRESS_TYP,\n" +
"\tnls_territory VARCHAR2(30),\n" +
"\tcust_email VARCHAR2(40)\n" +
")\n" +
"PARTITION BY LIST (nls_territory) (\n" +
"\tPARTITION asia VALUES ('CHINA', 'THAILAND'), \n" +
"\tPARTITION europe VALUES ('GERMANY', 'ITALY', 'SWITZERLAND'), \n" +
"\tPARTITION west VALUES ('AMERICA'), \n" +
"\tPARTITION east VALUES ('INDIA'), \n" +
"\tPARTITION rest VALUES (DEFAULT)\n" +
");",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
@@ -66,8 +66,7 @@ public class OracleCreateTableTest43 extends OracleTest {
"\tFLASH_CACHE DEFAULT\n" +
"\tCELL_FLASH_CACHE DEFAULT\n" +
")\n" +
"PARTITION BY LIST (\"DNAME\")\n" +
"(\n" +
"PARTITION BY LIST (\"DNAME\") (\n" +
"\tPARTITION \"PART02\" VALUES ('SMT', 'SALE')\n" +
"\t\tPCTFREE 10\n" +
"\t\tPCTUSED 40\n" +
@@ -249,7 +249,40 @@ public class OracleCreateTableTest50 extends OracleTest {
"STORAGE (\n" +
"\tBUFFER_POOL DEFAULT\n" +
")\n" +
"PARTITION BY HASH (\"COMPANY_ID\")",//
"PARTITION BY HASH (\"COMPANY_ID\") (\n" +
"\tPARTITION \"PRODUCT_HASH_P1\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P2\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P3\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P4\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P5\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P6\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P7\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P8\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P9\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P10\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P11\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P12\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P13\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P14\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P15\"\n" +
"\t\tTABLESPACE \"APPDATA1M\", \n" +
"\tPARTITION \"PRODUCT_HASH_P16\"\n" +
"\t\tTABLESPACE \"APPDATA1M\"\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
@@ -46,12 +46,19 @@ public class OracleCreateTableTest69 extends OracleTest {
assertEquals(1, statementList.size());
//
// assertEquals("CREATE TABLE HASH_TABLE (\n" +
// "\tCOL NUMBER(8),\n" +
// "\tINF VARCHAR2(100)\n" +
// ")\n" +
// "PARTITION BY HASH (COL)",//
// SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
assertEquals("CREATE TABLE HASH_TABLE (\n" +
"\tCOL NUMBER(8),\n" +
"\tINF VARCHAR2(100)\n" +
")\n" +
"PARTITION BY HASH (COL) (\n" +
"\tPARTITION PART01\n" +
"\t\tTABLESPACE HASH_TS01, \n" +
"\tPARTITION PART02\n" +
"\t\tTABLESPACE HASH_TS02, \n" +
"\tPARTITION PART03\n" +
"\t\tTABLESPACE HASH_TS03\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
//
// SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.ORACLE);
// stmt.accept(visitor);