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:
+30
-1
@@ -459,7 +459,7 @@ public class MySqlCreateTable_showColumns_repository_test extends MysqlTest {
|
||||
")", repository.console("show create table test5"));
|
||||
|
||||
repository.console("CREATE TABLE sc01.test6 as select a.id, c_tinyint, 'a' f3, 3 f4 from test2 a");
|
||||
assertEquals("CREATE TABLE test6 (\n" +
|
||||
assertEquals("CREATE TABLE sc01.test6 (\n" +
|
||||
"\tid bigint(20),\n" +
|
||||
"\tc_tinyint tinyint(4),\n" +
|
||||
"\tf3 varchar,\n" +
|
||||
@@ -939,5 +939,34 @@ public class MySqlCreateTable_showColumns_repository_test extends MysqlTest {
|
||||
|
||||
, repository.console("show create table test1_xx"));
|
||||
|
||||
|
||||
assertEquals("CREATE TABLE test5 (\n" +
|
||||
"\tc_decimal_1 INT(11),\n" +
|
||||
"\tid bigint(20),\n" +
|
||||
"\tc_tinyint tinyint(4),\n" +
|
||||
"\tc_smallint smallint(6),\n" +
|
||||
"\tc_mediumint mediumint(9),\n" +
|
||||
"\tc_int int(11),\n" +
|
||||
"\tc_bigint bigint(20),\n" +
|
||||
"\tc_date date,\n" +
|
||||
"\tc_datetime datetime,\n" +
|
||||
"\tc_timestamp timestamp,\n" +
|
||||
"\tc_time time,\n" +
|
||||
"\tc_char char(10),\n" +
|
||||
"\tc_varchar varchar(10),\n" +
|
||||
"\tc_blob blob,\n" +
|
||||
"\tc_text text,\n" +
|
||||
"\tc_mediumtext mediumtext,\n" +
|
||||
"\tc_longblob longblob\n" +
|
||||
")"
|
||||
|
||||
, repository.console("show create table test5"));
|
||||
|
||||
repository.console("create table test5(fid bigint)");
|
||||
assertEquals("CREATE TABLE test5 (\n" +
|
||||
"\tfid bigint\n" +
|
||||
")"
|
||||
|
||||
, repository.console("show create table test5"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* 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.odps;
|
||||
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class OdpsSelectTest34 extends TestCase {
|
||||
|
||||
public void test_select() throws Exception {
|
||||
// 1095288847322
|
||||
String sql = "select a.city, a.car_id, a.rrc_id, a.brand, a.car_series, a.title\n" +
|
||||
"from dw_x001_cp_used_car_detail a\n" +
|
||||
"where status = 'PUBLISHED'\n" +
|
||||
"and model_id = 4419\n" +
|
||||
"and abs(datediff(licensed_date, '2013-07-01 00:00:00', 'mm')) <= 5\n" +
|
||||
"and abs(mileage - 7.01) < 3;";//
|
||||
assertEquals("SELECT a.city, a.car_id, a.rrc_id, a.brand, a.car_series\n" +
|
||||
"\t, a.title\n" +
|
||||
"FROM dw_x001_cp_used_car_detail a\n" +
|
||||
"WHERE status = 'PUBLISHED'\n" +
|
||||
"\tAND model_id = 4419\n" +
|
||||
"\tAND abs(datediff(licensed_date, '2013-07-01 00:00:00', 'mm')) <= 5\n" +
|
||||
"\tAND abs(mileage - 7.01) < 3;", SQLUtils.formatOdps(sql));
|
||||
|
||||
assertEquals("select a.city, a.car_id, a.rrc_id, a.brand, a.car_series\n" +
|
||||
"\t, a.title\n" +
|
||||
"from dw_x001_cp_used_car_detail a\n" +
|
||||
"where status = 'PUBLISHED'\n" +
|
||||
"\tand model_id = 4419\n" +
|
||||
"\tand abs(datediff(licensed_date, '2013-07-01 00:00:00', 'mm')) <= 5\n" +
|
||||
"\tand abs(mileage - 7.01) < 3;", SQLUtils.formatOdps(sql, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION));
|
||||
|
||||
List<SQLStatement> statementList = SQLUtils.parseStatements(sql, JdbcConstants.ODPS);
|
||||
SQLStatement stmt = statementList.get(0);
|
||||
|
||||
assertEquals(1, statementList.size());
|
||||
|
||||
SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.ODPS);
|
||||
stmt.accept(visitor);
|
||||
|
||||
System.out.println("Tables : " + visitor.getTables());
|
||||
System.out.println("fields : " + visitor.getColumns());
|
||||
// System.out.println("coditions : " + visitor.getConditions());
|
||||
// System.out.println("orderBy : " + visitor.getOrderByColumns());
|
||||
|
||||
assertEquals(1, visitor.getTables().size());
|
||||
assertEquals(10, visitor.getColumns().size());
|
||||
assertEquals(2, visitor.getConditions().size());
|
||||
|
||||
// System.out.println(SQLUtils.formatOdps(sql));
|
||||
|
||||
// assertTrue(visitor.getColumns().contains(new Column("abc", "name")));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* 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.odps;
|
||||
|
||||
import com.alibaba.druid.sql.SQLUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class OdpsSelectTest35 extends TestCase {
|
||||
|
||||
public void test_select() throws Exception {
|
||||
// 1095288847322
|
||||
String sql = "SELECT a.city, a.car_id, a.rrc_id, a.brand, a.car_series\n" +
|
||||
" , a.title\n" +
|
||||
"FROM dw_x001_cp_used_car_detail a\n" +
|
||||
"WHERE status = 'PUBLISHED'\n" +
|
||||
" AND model_id = 4419\n" +
|
||||
" AND abs(datediff(licensed_date, '2013-07-01 00:00:00', 'mm')) <= 5;";//
|
||||
assertEquals("SELECT a.city, a.car_id, a.rrc_id, a.brand, a.car_series\n" +
|
||||
"\t, a.title\n" +
|
||||
"FROM dw_x001_cp_used_car_detail a\n" +
|
||||
"WHERE status = 'PUBLISHED'\n" +
|
||||
"\tAND model_id = 4419\n" +
|
||||
"\tAND abs(datediff(licensed_date, '2013-07-01 00:00:00', 'mm')) <= 5;", SQLUtils.formatOdps(sql));
|
||||
|
||||
assertEquals("select a.city, a.car_id, a.rrc_id, a.brand, a.car_series\n" +
|
||||
"\t, a.title\n" +
|
||||
"from dw_x001_cp_used_car_detail a\n" +
|
||||
"where status = 'PUBLISHED'\n" +
|
||||
"\tand model_id = 4419\n" +
|
||||
"\tand abs(datediff(licensed_date, '2013-07-01 00:00:00', 'mm')) <= 5;", SQLUtils.formatOdps(sql, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION));
|
||||
|
||||
List<SQLStatement> statementList = SQLUtils.parseStatements(sql, JdbcConstants.ODPS);
|
||||
SQLStatement stmt = statementList.get(0);
|
||||
|
||||
assertEquals(1, statementList.size());
|
||||
|
||||
SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.ODPS);
|
||||
stmt.accept(visitor);
|
||||
|
||||
System.out.println("Tables : " + visitor.getTables());
|
||||
System.out.println("fields : " + visitor.getColumns());
|
||||
// System.out.println("coditions : " + visitor.getConditions());
|
||||
// System.out.println("orderBy : " + visitor.getOrderByColumns());
|
||||
|
||||
assertEquals(1, visitor.getTables().size());
|
||||
assertEquals(9, visitor.getColumns().size());
|
||||
assertEquals(2, visitor.getConditions().size());
|
||||
|
||||
// System.out.println(SQLUtils.formatOdps(sql));
|
||||
|
||||
// assertTrue(visitor.getColumns().contains(new Column("abc", "name")));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.alibaba.druid.mysql;
|
||||
|
||||
import com.alibaba.druid.DbTestCase;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
import com.alibaba.druid.util.JdbcUtils;
|
||||
|
||||
import java.sql.Connection;
|
||||
|
||||
/**
|
||||
* Created by wenshao on 23/07/2017.
|
||||
*/
|
||||
public class MySql_Failover_test extends DbTestCase {
|
||||
public MySql_Failover_test() {
|
||||
super("pool_config/mysql_db_failover.properties");
|
||||
}
|
||||
|
||||
public void test_oracle() throws Exception {
|
||||
Connection conn = getConnection();
|
||||
|
||||
String createTableScript = JdbcUtils.getCreateTableScript(conn, JdbcConstants.MYSQL);
|
||||
System.out.println(createTableScript);
|
||||
|
||||
|
||||
conn.close();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user