diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableStatement.java index c14d9103ac..3f5013ce3e 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableStatement.java @@ -40,6 +40,9 @@ public class SQLAlterTableStatement extends SQLStatementImpl implements SQLDDLSt private boolean upgradePatiting = false; private Map tableOptions = new LinkedHashMap(); + // odps + private boolean mergeSmallFiles = false; + public SQLAlterTableStatement(){ } @@ -88,6 +91,14 @@ public class SQLAlterTableStatement extends SQLStatementImpl implements SQLDDLSt this.invalidateGlobalIndexes = invalidateGlobalIndexes; } + public boolean isMergeSmallFiles() { + return mergeSmallFiles; + } + + public void setMergeSmallFiles(boolean mergeSmallFiles) { + this.mergeSmallFiles = mergeSmallFiles; + } + public List getItems() { return items; } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelectQueryBlock.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelectQueryBlock.java index 67caa9f7bc..e584b39b89 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelectQueryBlock.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLSelectQueryBlock.java @@ -65,6 +65,9 @@ public class SQLSelectQueryBlock extends SQLObjectImpl implements SQLSelectQuery } public void setGroupBy(SQLSelectGroupByClause groupBy) { + if (groupBy != null) { + groupBy.setParent(this); + } this.groupBy = groupBy; } @@ -113,6 +116,9 @@ public class SQLSelectQueryBlock extends SQLObjectImpl implements SQLSelectQuery } public void setFrom(SQLTableSource from) { + if (from != null) { + from.setParent(this); + } this.from = from; } diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index 53b9d9581e..59191bcb05 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -991,6 +991,10 @@ public class SQLStatementParser extends SQLParser { } stmt.addItem(item); + } else if (JdbcConstants.ODPS.equals(dbType) && identifierEquals("MERGE")) { + lexer.nextToken(); + acceptIdentifier("SMALLFILES"); + stmt.setMergeSmallFiles(true); } else { break; } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 0c0035adfc..c9fd08787a 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -846,9 +846,9 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet public boolean visit(SQLPropertyExpr x) { SQLExpr owner = x.getOwner(); - String mapTableName = null; + String mapTableName = null, ownerName = null; if (owner instanceof SQLIdentifierExpr) { - String ownerName = ((SQLIdentifierExpr) owner).getName(); + ownerName = ((SQLIdentifierExpr) owner).getName(); if (tableMapping != null) { mapTableName = tableMapping.get(ownerName); @@ -856,7 +856,20 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet && ownerName.length() > 2 && ownerName.charAt(0) == '`' && ownerName.charAt(ownerName.length() - 1) == '`') { - mapTableName = tableMapping.get(ownerName.substring(1, ownerName.length() - 1)); + ownerName = ownerName.substring(1, ownerName.length() - 1); + mapTableName = tableMapping.get(ownerName); + } + } + } + + if (mapTableName != null) { + for (SQLObject parent = x.getParent();parent != null; parent = parent.getParent()) { + if (parent instanceof SQLSelectQueryBlock) { + SQLTableSource from = ((SQLSelectQueryBlock) parent).getFrom(); + if (containsAlias(from, mapTableName, ownerName)) { + mapTableName = null; + } + break; } } } @@ -874,6 +887,32 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet return false; } + protected boolean containsAlias(SQLTableSource from, String... tableNames) { + String alias = from.getAlias(); + if (alias != null) { + for (String tableName : tableNames) { + if (alias.equalsIgnoreCase(tableName)) { + return true; + } + } + + if (alias.length() > 2 && alias.charAt(0) == '`' && alias.charAt(alias.length() -1) == '`') { + alias = alias.substring(1, alias.length() -1); + for (String tableName : tableNames) { + if (alias.equalsIgnoreCase(tableName)) { + return true; + } + } + } + } + if (from instanceof SQLJoinTableSource) { + SQLJoinTableSource join = (SQLJoinTableSource) from; + return containsAlias(join.getLeft(), tableNames) + || containsAlias(join.getRight(), tableNames); + } + return false; + } + public boolean visit(SQLQueryExpr x) { SQLObject parent = x.getParent(); if (parent instanceof SQLSelect) { @@ -2344,6 +2383,10 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet item.accept(this); } decrementIndent(); + + if (x.isMergeSmallFiles()) { + print0(ucase ? " MERGE SMALLFILES" : " merge smallfiles"); + } return false; } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_23.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_23.java new file mode 100644 index 0000000000..69eb82c2a7 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_23.java @@ -0,0 +1,57 @@ +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.ParameterizedOutputVisitorUtils; +import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by wenshao on 16/8/23. + */ +public class MySqlParameterizedOutputVisitorTest_23 extends TestCase { + public void test_for_parameterize() throws Exception { + final String dbType = JdbcConstants.MYSQL; + + String sql = "select `wmc_xxx_s`.fid from `wmc_xxx_s_0479` as `wmc_xxx_s` where `wmc_xxx_s`.fid = 3"; + + String psql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType); + assertEquals("SELECT `wmc_xxx_s`.fid\n" + + "FROM wmc_xxx_s `wmc_xxx_s`\n" + + "WHERE `wmc_xxx_s`.fid = ?", psql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(psql, dbType); + List stmtList = parser.parseStatementList(); + + StringBuilder out = new StringBuilder(); + SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(out, JdbcConstants.MYSQL); + List parameters = new ArrayList(); + visitor.setParameterized(true); + visitor.setParameterizedMergeInList(true); + visitor.setParameters(parameters); + visitor.setExportTables(true); + /*visitor.setPrettyFormat(false);*/ + + SQLStatement stmt = stmtList.get(0); + stmt.accept(visitor); + + // System.out.println(parameters); + assertEquals(0, parameters.size()); + + StringBuilder buf = new StringBuilder(); + SQLASTOutputVisitor visitor1 = SQLUtils.createOutputVisitor(buf, dbType); + visitor1.addTableMapping("wmc_xxx_s", "wmc_xxx_s_0479"); + visitor1.setParameters(visitor.getParameters()); + stmt.accept(visitor1); + + assertEquals("SELECT wmc_xxx_s_0479.fid\n" + + "FROM wmc_xxx_s_0479 `wmc_xxx_s`\n" + + "WHERE wmc_xxx_s_0479.fid = ?", buf.toString()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_24.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_24.java new file mode 100644 index 0000000000..4f101f230c --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_24.java @@ -0,0 +1,57 @@ +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.ParameterizedOutputVisitorUtils; +import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by wenshao on 16/8/23. + */ +public class MySqlParameterizedOutputVisitorTest_24 extends TestCase { + public void test_for_parameterize() throws Exception { + final String dbType = JdbcConstants.MYSQL; + + String sql = "SELECT `xxx_reverse_order`.`id` from xxx_reverse_order_0446 xxx_reverse_order limit 1;"; + + String psql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType); + assertEquals("SELECT `xxx_reverse_order`.`id`\n" + + "FROM xxx_reverse_order xxx_reverse_order\n" + + "LIMIT ?", psql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(psql, dbType); + List stmtList = parser.parseStatementList(); + + StringBuilder out = new StringBuilder(); + SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(out, JdbcConstants.MYSQL); + List parameters = new ArrayList(); + visitor.setParameterized(true); + visitor.setParameterizedMergeInList(true); + visitor.setParameters(parameters); + visitor.setExportTables(true); + /*visitor.setPrettyFormat(false);*/ + + SQLStatement stmt = stmtList.get(0); + stmt.accept(visitor); + + // System.out.println(parameters); + assertEquals(0, parameters.size()); + + StringBuilder buf = new StringBuilder(); + SQLASTOutputVisitor visitor1 = SQLUtils.createOutputVisitor(buf, dbType); + visitor1.addTableMapping("xxx_reverse_order", "xxx_reverse_order_0446"); + visitor1.setParameters(visitor.getParameters()); + stmt.accept(visitor1); + + assertEquals("SELECT `xxx_reverse_order`.`id`\n" + + "FROM xxx_reverse_order_0446 xxx_reverse_order\n" + + "LIMIT ?", buf.toString()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_25.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_25.java new file mode 100644 index 0000000000..6f8380f12a --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_25.java @@ -0,0 +1,57 @@ +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.ParameterizedOutputVisitorUtils; +import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by wenshao on 16/8/23. + */ +public class MySqlParameterizedOutputVisitorTest_25 extends TestCase { + public void test_for_parameterize() throws Exception { + final String dbType = JdbcConstants.MYSQL; + + String sql = "SELECT `xxx_reverse_order`.`id` from xxx_reverse_order_0446 XXX_REVERSE_ORDER limit 1;"; + + String psql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType); + assertEquals("SELECT `xxx_reverse_order`.`id`\n" + + "FROM xxx_reverse_order XXX_REVERSE_ORDER\n" + + "LIMIT ?", psql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(psql, dbType); + List stmtList = parser.parseStatementList(); + + StringBuilder out = new StringBuilder(); + SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(out, JdbcConstants.MYSQL); + List parameters = new ArrayList(); + visitor.setParameterized(true); + visitor.setParameterizedMergeInList(true); + visitor.setParameters(parameters); + visitor.setExportTables(true); + /*visitor.setPrettyFormat(false);*/ + + SQLStatement stmt = stmtList.get(0); + stmt.accept(visitor); + + // System.out.println(parameters); + assertEquals(0, parameters.size()); + + StringBuilder buf = new StringBuilder(); + SQLASTOutputVisitor visitor1 = SQLUtils.createOutputVisitor(buf, dbType); + visitor1.addTableMapping("xxx_reverse_order", "xxx_reverse_order_0446"); + visitor1.setParameters(visitor.getParameters()); + stmt.accept(visitor1); + + assertEquals("SELECT `xxx_reverse_order`.`id`\n" + + "FROM xxx_reverse_order_0446 XXX_REVERSE_ORDER\n" + + "LIMIT ?", buf.toString()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_26.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_26.java new file mode 100644 index 0000000000..e7d9b9c7c9 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_26.java @@ -0,0 +1,59 @@ +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.ParameterizedOutputVisitorUtils; +import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by wenshao on 16/8/23. + */ +public class MySqlParameterizedOutputVisitorTest_26 extends TestCase { + public void test_for_parameterize() throws Exception { + final String dbType = JdbcConstants.MYSQL; + + String sql = "SELECT `xxx_reverse_od`.`id` from xxx_reverse_od_0446 `xxx_reverse_od` where `xxx_reverse_od`.name=1 limit 1;"; + + String psql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType); + assertEquals("SELECT `xxx_reverse_od`.`id`\n" + + "FROM xxx_reverse_od `xxx_reverse_od`\n" + + "WHERE `xxx_reverse_od`.name = ?\n" + + "LIMIT ?", psql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(psql, dbType); + List stmtList = parser.parseStatementList(); + + StringBuilder out = new StringBuilder(); + SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(out, JdbcConstants.MYSQL); + List parameters = new ArrayList(); + visitor.setParameterized(true); + visitor.setParameterizedMergeInList(true); + visitor.setParameters(parameters); + visitor.setExportTables(true); + /*visitor.setPrettyFormat(false);*/ + + SQLStatement stmt = stmtList.get(0); + stmt.accept(visitor); + + // System.out.println(parameters); + assertEquals(0, parameters.size()); + + StringBuilder buf = new StringBuilder(); + SQLASTOutputVisitor visitor1 = SQLUtils.createOutputVisitor(buf, dbType); + visitor1.addTableMapping("xxx_reverse_od", "xxx_reverse_od_0446"); + visitor1.setParameters(visitor.getParameters()); + stmt.accept(visitor1); + + assertEquals("SELECT `xxx_reverse_od`.`id`\n" + + "FROM xxx_reverse_od_0446 `xxx_reverse_od`\n" + + "WHERE `xxx_reverse_od`.name = ?\n" + + "LIMIT ?", buf.toString()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_27.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_27.java new file mode 100644 index 0000000000..d7e4f6dfa6 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_27.java @@ -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.ParameterizedOutputVisitorUtils; +import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by wenshao on 16/8/23. + */ +public class MySqlParameterizedOutputVisitorTest_27 extends TestCase { + public void test_for_parameterize() throws Exception { + final String dbType = JdbcConstants.MYSQL; + + String sql = "SELECT `xxx_reverse_od`.dept, count(*) from xxx_reverse_od_0446 `xxx_reverse_od` where `xxx_reverse_od`.name=1 group by `xxx_reverse_od`.dept order by `xxx_reverse_od`.dept"; + + String psql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType); + assertEquals("SELECT `xxx_reverse_od`.dept, COUNT(*)\n" + + "FROM xxx_reverse_od `xxx_reverse_od`\n" + + "WHERE `xxx_reverse_od`.name = ?\n" + + "GROUP BY `xxx_reverse_od`.dept\n" + + "ORDER BY `xxx_reverse_od`.dept", psql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(psql, dbType); + List stmtList = parser.parseStatementList(); + + StringBuilder out = new StringBuilder(); + SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(out, JdbcConstants.MYSQL); + List parameters = new ArrayList(); + visitor.setParameterized(true); + visitor.setParameterizedMergeInList(true); + visitor.setParameters(parameters); + visitor.setExportTables(true); + /*visitor.setPrettyFormat(false);*/ + + SQLStatement stmt = stmtList.get(0); + stmt.accept(visitor); + + // System.out.println(parameters); + assertEquals(0, parameters.size()); + + StringBuilder buf = new StringBuilder(); + SQLASTOutputVisitor visitor1 = SQLUtils.createOutputVisitor(buf, dbType); + visitor1.addTableMapping("xxx_reverse_od", "xxx_reverse_od_0446"); + visitor1.setParameters(visitor.getParameters()); + stmt.accept(visitor1); + + assertEquals("SELECT `xxx_reverse_od`.dept, COUNT(*)\n" + + "FROM xxx_reverse_od_0446 `xxx_reverse_od`\n" + + "WHERE `xxx_reverse_od`.name = ?\n" + + "GROUP BY `xxx_reverse_od`.dept\n" + + "ORDER BY `xxx_reverse_od`.dept", buf.toString()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_28.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_28.java new file mode 100644 index 0000000000..914b159ccd --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/param/MySqlParameterizedOutputVisitorTest_28.java @@ -0,0 +1,57 @@ +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.ParameterizedOutputVisitorUtils; +import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by wenshao on 16/8/23. + */ +public class MySqlParameterizedOutputVisitorTest_28 extends TestCase { + public void test_for_parameterize() throws Exception { + final String dbType = JdbcConstants.MYSQL; + + String sql = "SELECT `xxx_reverse_od`.dept, count(*) from xxx_reverse_od_0446 `xxx_reverse_od` join abc_xx_abc `aa` on `xxx_reverse_od`.id = `aa`.id"; + + String psql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType); + assertEquals("SELECT `xxx_reverse_od`.dept, COUNT(*)\n" + + "FROM xxx_reverse_od `xxx_reverse_od`\n" + + "\tJOIN abc_xx_abc `aa` ON `xxx_reverse_od`.id = `aa`.id", psql); + + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(psql, dbType); + List stmtList = parser.parseStatementList(); + + StringBuilder out = new StringBuilder(); + SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(out, JdbcConstants.MYSQL); + List parameters = new ArrayList(); + visitor.setParameterized(true); + visitor.setParameterizedMergeInList(true); + visitor.setParameters(parameters); + visitor.setExportTables(true); + /*visitor.setPrettyFormat(false);*/ + + SQLStatement stmt = stmtList.get(0); + stmt.accept(visitor); + + // System.out.println(parameters); + assertEquals(0, parameters.size()); + + StringBuilder buf = new StringBuilder(); + SQLASTOutputVisitor visitor1 = SQLUtils.createOutputVisitor(buf, dbType); + visitor1.addTableMapping("xxx_reverse_od", "xxx_reverse_od_0446"); + visitor1.setParameters(visitor.getParameters()); + stmt.accept(visitor1); + + assertEquals("SELECT `xxx_reverse_od`.dept, COUNT(*)\n" + + "FROM xxx_reverse_od_0446 `xxx_reverse_od`\n" + + "\tJOIN abc_xx_abc `aa` ON `xxx_reverse_od`.id = `aa`.id", buf.toString()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsAlterTableMergeSmallFilesTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsAlterTableMergeSmallFilesTest.java new file mode 100644 index 0000000000..10b79cfc8e --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsAlterTableMergeSmallFilesTest.java @@ -0,0 +1,13 @@ +package com.alibaba.druid.bvt.sql.odps; + +import com.alibaba.druid.sql.SQLUtils; +import junit.framework.TestCase; +import org.junit.Assert; + +public class OdpsAlterTableMergeSmallFilesTest extends TestCase { + + public void test_touch() throws Exception { + String sql = "ALTER TABLE abc_dev.tdl_mytable_xx MERGE SMALLFILES;"; + Assert.assertEquals("ALTER TABLE abc_dev.tdl_mytable_xx MERGE SMALLFILES;", SQLUtils.formatOdps(sql)); + } +}