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
@@ -19,6 +19,7 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLExprImpl;
import com.alibaba.druid.sql.ast.SQLKeep;
@@ -115,6 +116,10 @@ public class SQLAggregateExpr extends SQLExprImpl implements Serializable {
this.ignoreNulls = ignoreNulls;
}
public String toString() {
return SQLUtils.toSQLString(this);
}
@Override
protected void accept0(SQLASTVisitor visitor) {
@@ -1,3 +1,18 @@
/*
* 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.sql.ast.expr;
import com.alibaba.druid.sql.ast.SQLExpr;
@@ -17,6 +17,7 @@ package com.alibaba.druid.sql.ast.statement;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLHint;
import com.alibaba.druid.sql.ast.SQLObject;
@@ -31,4 +32,7 @@ public interface SQLTableSource extends SQLObject {
SQLTableSource clone();
String computeAlias();
SQLExpr getFlashback();
void setFlashback(SQLExpr flashback);
}
@@ -72,10 +72,13 @@ public class MySqlCreateTableParser extends SQLCreateTableParser {
}
public MySqlCreateTableStatement parseCrateTable(boolean acceptCreate) {
MySqlCreateTableStatement stmt = new MySqlCreateTableStatement();
if (acceptCreate) {
if (lexer.hasComment() && lexer.isKeepComments()) {
stmt.addBeforeComment(lexer.readAndResetComments());
}
accept(Token.CREATE);
}
MySqlCreateTableStatement stmt = new MySqlCreateTableStatement();
if (identifierEquals("TEMPORARY")) {
lexer.nextToken();
@@ -71,8 +71,7 @@ public class MySqlLexer extends Lexer {
}
public MySqlLexer(String input){
super(input);
super.keywods = DEFAULT_MYSQL_KEYWORDS;
this(input, true, true);
}
public MySqlLexer(String input, boolean skipComment, boolean keepComments){
@@ -407,7 +406,7 @@ public class MySqlLexer extends Lexer {
bufPos++;
}
stringVal = subString(mark, bufPos + 1);
stringVal = subString(mark, bufPos);
token = Token.LINE_COMMENT;
commentCount++;
if (keepComments) {
@@ -471,6 +471,9 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
}
public boolean visit(MySqlCreateTableStatement x) {
if (isPrettyFormat() && x.hasBeforeComment()) {
printlnComments(x.getBeforeCommentsDirect());
}
print0(ucase ? "CREATE " : "create ");
@@ -23,8 +23,4 @@ public interface OracleSelectTableSource extends SQLTableSource {
OracleSelectPivotBase getPivot();
void setPivot(OracleSelectPivotBase pivot);
SQLExpr getFlashback();
void setFlashback(SQLExpr flashback);
}
@@ -27,11 +27,11 @@ import com.alibaba.druid.util.JdbcConstants;
public class SQLCreateTableParser extends SQLDDLParser {
public SQLCreateTableParser(String sql){
public SQLCreateTableParser(String sql) {
super(sql);
}
public SQLCreateTableParser(SQLExprParser exprParser){
public SQLCreateTableParser(SQLExprParser exprParser) {
super(exprParser);
}
@@ -40,22 +40,26 @@ public class SQLCreateTableParser extends SQLDDLParser {
if (lexer.isKeepComments() && lexer.hasComment()) {
comments = lexer.readAndResetComments();
}
SQLCreateTableStatement stmt = parseCrateTable(true);
if (comments != null) {
stmt.addBeforeComment(comments);
}
return stmt;
}
public SQLCreateTableStatement parseCrateTable(boolean acceptCreate) {
SQLCreateTableStatement createTable = newCreateStatement();
if (acceptCreate) {
if (lexer.hasComment() && lexer.isKeepComments()) {
createTable.addBeforeComment(lexer.readAndResetComments());
}
accept(Token.CREATE);
}
SQLCreateTableStatement createTable = newCreateStatement();
if (identifierEquals("GLOBAL")) {
lexer.nextToken();
@@ -82,21 +86,21 @@ public class SQLCreateTableParser extends SQLDDLParser {
if (lexer.token() == Token.LPAREN) {
lexer.nextToken();
for (;;) {
for (; ; ) {
Token token = lexer.token();
if (token == Token.IDENTIFIER
&& lexer.stringVal().equalsIgnoreCase("SUPPLEMENTAL")
&& JdbcConstants.ORACLE.equals(dbType)) {
this.parseCreateTableSupplementalLogingProps(createTable);
} else if (token == Token.IDENTIFIER //
|| token == Token.LITERAL_ALIAS) {
|| token == Token.LITERAL_ALIAS) {
SQLColumnDefinition column = this.exprParser.parseColumn();
createTable.getTableElementList().add(column);
} else if (token == Token.PRIMARY //
|| token == Token.UNIQUE //
|| token == Token.CHECK //
|| token == Token.CONSTRAINT
|| token == Token.FOREIGN) {
|| token == Token.UNIQUE //
|| token == Token.CHECK //
|| token == Token.CONSTRAINT
|| token == Token.FOREIGN) {
SQLConstraint constraint = this.exprParser.parseConstaint();
constraint.setParent(createTable);
createTable.getTableElementList().add((SQLTableElement) constraint);
@@ -149,5 +153,4 @@ public class SQLCreateTableParser extends SQLDDLParser {
protected SQLCreateTableStatement newCreateStatement() {
return new SQLCreateTableStatement(getDbType());
}
}
}
@@ -3856,23 +3856,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
printPartitionsCountAndSubPartitions(x);
List<SQLPartition> partitions = x.getPartitions();
int partitionsSize = partitions.size();
if (partitionsSize > 0) {
println();
incrementIndent();
print('(');
for (int i = 0; i < partitionsSize; ++i) {
println();
partitions.get(i).accept(this);
if (i != partitionsSize - 1) {
print0(", ");
}
}
decrementIndent();
println();
print(')');
}
printSQLPartitions(x.getPartitions());
return false;
}
@@ -3894,9 +3878,29 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
printPartitionsCountAndSubPartitions(x);
printSQLPartitions(x.getPartitions());
return false;
}
private void printSQLPartitions(List<SQLPartition> partitions) {
int partitionsSize = partitions.size();
if (partitionsSize > 0) {
print0(" (");
incrementIndent();
for (int i = 0; i < partitionsSize; ++i) {
println();
partitions.get(i).accept(this);
if (i != partitionsSize - 1) {
print0(", ");
}
}
decrementIndent();
println();
print(')');
}
}
protected void printPartitionsCountAndSubPartitions(SQLPartitionBy x) {
if (x.getPartitionsCount() != null) {
@@ -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);