refactor sql parser.

This commit is contained in:
wenshao
2016-09-25 06:48:57 +08:00
parent e98fba644d
commit 9f5d300892
37 changed files with 358 additions and 828 deletions
@@ -0,0 +1,53 @@
package com.alibaba.druid.bvt.sql;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.util.JdbcConstants;
import junit.framework.TestCase;
import java.util.Collections;
import java.util.Map;
/**
* Created by wenshao on 16/9/25.
*/
public class MappingTest_alterTable extends TestCase {
String sql = "ALTER TABLE user DROP INDEX pk_user;";
Map<String, String> mapping = Collections.singletonMap("user", "user_01");
public void test_mapping_createTable() throws Exception {
String result = SQLUtils.refactor(sql, null, mapping);
assertEquals("ALTER TABLE user_01\n" +
"\tDROP INDEX pk_user", result);
}
public void test_mapping_createTable_mysql() throws Exception {
String result = SQLUtils.refactor(sql, JdbcConstants.MYSQL, mapping);
assertEquals("ALTER TABLE user_01\n" +
"\tDROP INDEX pk_user", result);
}
public void test_mapping_createTable_oracle() throws Exception {
String result = SQLUtils.refactor(sql, JdbcConstants.ORACLE, mapping);
assertEquals("ALTER TABLE user_01\n" +
"\tDROP INDEX pk_user", result);
}
public void test_mapping_createTable_pg() throws Exception {
String result = SQLUtils.refactor(sql, JdbcConstants.POSTGRESQL, mapping);
assertEquals("ALTER TABLE user_01\n" +
"\tDROP INDEX pk_user", result);
}
public void test_mapping_createTable_sqlserver() throws Exception {
String result = SQLUtils.refactor(sql, JdbcConstants.SQL_SERVER, mapping);
assertEquals("ALTER TABLE user_01\n" +
"\tDROP INDEX pk_user", result);
}
public void test_mapping_createTable_db2() throws Exception {
String result = SQLUtils.refactor(sql, JdbcConstants.DB2, mapping);
assertEquals("ALTER TABLE user_01\n" +
"\tDROP INDEX pk_user", result);
}
}
@@ -0,0 +1,46 @@
package com.alibaba.druid.bvt.sql;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.util.JdbcConstants;
import junit.framework.TestCase;
import java.util.Collections;
import java.util.Map;
/**
* Created by wenshao on 16/9/25.
*/
public class MappingTest_truncate extends TestCase {
private String sql = "truncate table user";
Map<String, String> mapping = Collections.singletonMap("user", "user_01");
public void test_mapping() throws Exception {
String result = SQLUtils.refactor(sql, null, mapping);
assertEquals("TRUNCATE TABLE user_01", result);
}
public void test_mapping_mysql() throws Exception {
String result = SQLUtils.refactor(sql, JdbcConstants.MYSQL, mapping);
assertEquals("TRUNCATE TABLE user_01", result);
}
public void test_mapping_pg() throws Exception {
String result = SQLUtils.refactor(sql, JdbcConstants.POSTGRESQL, mapping);
assertEquals("TRUNCATE TABLE user_01", result);
}
public void test_mapping_oracle() throws Exception {
String result = SQLUtils.refactor(sql, JdbcConstants.ORACLE, mapping);
assertEquals("TRUNCATE TABLE user_01", result);
}
public void test_mapping_sqlserver() throws Exception {
String result = SQLUtils.refactor(sql, JdbcConstants.SQL_SERVER, mapping);
assertEquals("TRUNCATE TABLE user_01", result);
}
public void test_mapping_db2() throws Exception {
String result = SQLUtils.refactor(sql, JdbcConstants.DB2, mapping);
assertEquals("TRUNCATE TABLE user_01", result);
}
}
@@ -17,22 +17,30 @@ package com.alibaba.druid.bvt.sql.mysql;
import java.util.List;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import junit.framework.TestCase;
import org.junit.Assert;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleParameterizedOutputVisitor;
public class MySqlParameterizedOutputVisitorTest extends TestCase {
public void test_0() throws Exception {
validate("SELECT * FROM T WHERE ID IN (?, ?, ?)", "SELECT *\nFROM T\nWHERE ID IN (?)");
}
public void test_1() throws Exception {
validate("SELECT * FROM T WHERE ID = 5", "SELECT *\nFROM T\nWHERE ID = ?");
}
public void test_2() throws Exception {
validate("SELECT * FROM T WHERE 1 = 0 AND ID = 5", "SELECT *\nFROM T\nWHERE 1 = 0\n\tAND ID = ?");
}
public void test_3() throws Exception {
validate("SELECT * FROM T WHERE ID = ? OR ID = ?", "SELECT *\nFROM T\nWHERE ID = ?");
validate("SELECT * FROM T WHERE A.ID = ? OR A.ID = ?", "SELECT *\nFROM T\nWHERE A.ID = ?");
validate("SELECT * FROM T WHERE 1 = 0 OR a.id = ? OR a.id = ? OR a.id = ? OR a.id = ?",
@@ -56,7 +64,7 @@ public class MySqlParameterizedOutputVisitorTest extends TestCase {
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out);
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
stmt.accept(visitor);
Assert.assertTrue(visitor.getReplaceCount() > 0);
@@ -17,12 +17,12 @@ package com.alibaba.druid.bvt.sql.mysql;
import java.util.List;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import org.junit.Assert;
import junit.framework.TestCase;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleParameterizedOutputVisitor;
@@ -47,7 +47,7 @@ public class MySqlParameterizedOutputVisitorTest2 extends TestCase {
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out);
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
stmt.accept(visitor);
Assert.assertEquals(expect, out.toString());
@@ -26,7 +26,6 @@ import junit.framework.TestCase;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcUtils;
@@ -92,7 +91,7 @@ public class MySqlParserResourceTest extends TestCase {
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out);
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
statemen.accept(visitor);
out.toString();
@@ -26,7 +26,6 @@ import junit.framework.TestCase;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor;
import com.alibaba.druid.util.Utils;
import com.alibaba.druid.util.JdbcUtils;
@@ -89,7 +88,7 @@ public class MySqlResourceTest extends TestCase {
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out);
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
statemen.accept(visitor);
System.out.println(out.toString());
@@ -20,14 +20,13 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import junit.framework.TestCase;
import org.junit.Assert;
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.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser;
import com.alibaba.druid.sql.dialect.odps.visitor.OdpsSchemaStatVisitor;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
@@ -79,7 +78,7 @@ public class OdpsInsertTest extends TestCase {
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out);
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
statemen.accept(visitor);
System.out.println(out.toString());
@@ -20,14 +20,13 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import junit.framework.TestCase;
import org.junit.Assert;
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.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser;
import com.alibaba.druid.sql.dialect.odps.visitor.OdpsSchemaStatVisitor;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
@@ -79,7 +78,7 @@ public class OdpsListResourcesTest extends TestCase {
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out);
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
statemen.accept(visitor);
System.out.println(out.toString());
@@ -20,14 +20,13 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import junit.framework.TestCase;
import org.junit.Assert;
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.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser;
import com.alibaba.druid.sql.dialect.odps.visitor.OdpsSchemaStatVisitor;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
@@ -79,7 +78,7 @@ public class OdpsMultiInsertTest extends TestCase {
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out);
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
statemen.accept(visitor);
// System.out.println(out.toString());
@@ -20,14 +20,13 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import junit.framework.TestCase;
import org.junit.Assert;
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.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser;
import com.alibaba.druid.sql.dialect.odps.visitor.OdpsSchemaStatVisitor;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
@@ -83,7 +82,7 @@ public class OdpsResourceTest extends TestCase {
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out);
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
statemen.accept(visitor);
System.out.println(out.toString());
@@ -20,14 +20,13 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import junit.framework.TestCase;
import org.junit.Assert;
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.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser;
import com.alibaba.druid.sql.dialect.odps.visitor.OdpsSchemaStatVisitor;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
@@ -81,7 +80,7 @@ public class OdpsSelect_distribute_by_Test extends TestCase {
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out);
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
statemen.accept(visitor);
System.out.println(out.toString());
@@ -20,12 +20,12 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import org.junit.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.util.Utils;
@@ -85,7 +85,7 @@ public class OracleResourceTest extends OracleTest {
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out);
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
statemen.accept(visitor);
System.out.println(out.toString());
@@ -24,7 +24,6 @@ import org.junit.Assert;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.sqlserver.parser.SQLServerStatementParser;
import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerOutputVisitor;
import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerParameterizedOutputVisitor;
public class SQLServerParameterizedOutputVisitorTest extends TestCase {
@@ -49,7 +48,7 @@ public class SQLServerParameterizedOutputVisitorTest extends TestCase {
public static String outputSqlServer(List<SQLStatement> stmtList) {
StringBuilder out = new StringBuilder();
SQLServerOutputVisitor visitor = new SQLServerParameterizedOutputVisitor(out);
SQLServerOutputVisitor visitor = new SQLServerOutputVisitor(out, true);
for (SQLStatement stmt : stmtList) {
stmt.accept(visitor);
@@ -23,12 +23,12 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import org.junit.Assert;
import junit.framework.TestCase;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleParameterizedOutputVisitor;
@@ -141,7 +141,7 @@ public class OnlineSQLTest extends TestCase {
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out);
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
statemen.accept(visitor);
update(id, out.toString(), 1);
@@ -20,14 +20,13 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import junit.framework.TestCase;
import org.junit.Assert;
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.MySqlParameterizedOutputVisitor;
import com.alibaba.druid.sql.dialect.odps.parser.OdpsStatementParser;
import com.alibaba.druid.sql.dialect.odps.visitor.OdpsSchemaStatVisitor;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
@@ -79,7 +78,7 @@ public class OdpsFileTest extends TestCase {
Assert.assertEquals(1, statementList.size());
StringBuilder out = new StringBuilder();
MySqlParameterizedOutputVisitor visitor = new MySqlParameterizedOutputVisitor(out);
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out, true);
statemen.accept(visitor);
System.out.println(out.toString());