diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java index 599436202a..4b18ae6560 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateTableStatement.java @@ -24,6 +24,7 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLCreateTableStatement extends SQLStatementImpl implements SQLDDLStatement { + protected boolean ifNotExiists = false; protected Type type; protected SQLExprTableSource tableSource; @@ -71,6 +72,14 @@ public class SQLCreateTableStatement extends SQLStatementImpl implements SQLDDLS public List getTableElementList() { return tableElementList; } + + public boolean isIfNotExiists() { + return ifNotExiists; + } + + public void setIfNotExiists(boolean ifNotExiists) { + this.ifNotExiists = ifNotExiists; + } @Override public void output(StringBuffer buf) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java index 9bbc8af9c9..869b5e605d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateTableStatement.java @@ -34,8 +34,6 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class MySqlCreateTableStatement extends SQLCreateTableStatement implements MySqlStatement { - private boolean ifNotExiists = false; - private Map tableOptions = new LinkedHashMap(); protected SQLSelect query; @@ -99,14 +97,6 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement this.query = query; } - public boolean isIfNotExiists() { - return ifNotExiists; - } - - public void setIfNotExiists(boolean ifNotExiists) { - this.ifNotExiists = ifNotExiists; - } - @Override protected void accept0(SQLASTVisitor visitor) { if (visitor instanceof MySqlASTVisitor) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java index 56b3f29809..f74d4adc54 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java @@ -2375,6 +2375,11 @@ public class MySqlStatementParser extends SQLStatementParser { throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); } else if (identifierEquals("REMOVE")) { throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); + } else if (identifierEquals("ALGORITHM")) { + lexer.nextToken(); + accept(Token.EQ); + stmt.getItems().add(new MySqlAlterTableOption("ALGORITHM", lexer.stringVal())); + lexer.nextToken(); } else if (identifierEquals(ENGINE)) { lexer.nextToken(); accept(Token.EQ); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java index 63db59ef8d..48b868916b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsCreateTableStatement.java @@ -28,21 +28,13 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class OdpsCreateTableStatement extends SQLCreateTableStatement { - private boolean ifNotExiists = false; - private SQLExprTableSource like; protected SQLExpr comment; protected List partitionColumns = new ArrayList(2); - public boolean isIfNotExiists() { - return ifNotExiists; - } - - public void setIfNotExiists(boolean ifNotExiists) { - this.ifNotExiists = ifNotExiists; - } + protected SQLExpr lifecycle; public SQLExprTableSource getLike() { return like; @@ -67,7 +59,15 @@ public class OdpsCreateTableStatement extends SQLCreateTableStatement { public List getPartitionColumns() { return partitionColumns; } - + + public SQLExpr getLifecycle() { + return lifecycle; + } + + public void setLifecycle(SQLExpr lifecycle) { + this.lifecycle = lifecycle; + } + @Override protected void accept0(SQLASTVisitor visitor) { accept0((OdpsASTVisitor) visitor); @@ -78,7 +78,9 @@ public class OdpsCreateTableStatement extends SQLCreateTableStatement { this.acceptChild(visitor, tableSource); this.acceptChild(visitor, tableElementList); this.acceptChild(visitor, partitionColumns); + this.acceptChild(visitor, lifecycle); } visitor.endVisit(this); - } + } + } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java new file mode 100644 index 0000000000..d468e24b2d --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowPartitionsStmt.java @@ -0,0 +1,32 @@ +package com.alibaba.druid.sql.dialect.odps.ast; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +public class OdpsShowPartitionsStmt extends SQLStatementImpl implements SQLStatement { + + private SQLExprTableSource tableSource; + + public SQLExprTableSource getTableSource() { + return tableSource; + } + + public void setTableSource(SQLExprTableSource tableSource) { + this.tableSource = tableSource; + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + accept0((OdpsASTVisitor) visitor); + } + + protected void accept0(OdpsASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, tableSource); + } + visitor.endVisit(this); + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java new file mode 100644 index 0000000000..04c93d3eff --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/ast/OdpsShowStatisticStmt.java @@ -0,0 +1,32 @@ +package com.alibaba.druid.sql.dialect.odps.ast; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +public class OdpsShowStatisticStmt extends SQLStatementImpl implements SQLStatement { + + private SQLExprTableSource tableSource; + + public SQLExprTableSource getTableSource() { + return tableSource; + } + + public void setTableSource(SQLExprTableSource tableSource) { + this.tableSource = tableSource; + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + accept0((OdpsASTVisitor) visitor); + } + + protected void accept0(OdpsASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, tableSource); + } + visitor.endVisit(this); + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsCreateTableParser.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsCreateTableParser.java index 39225a5826..c17837fd3b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsCreateTableParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsCreateTableParser.java @@ -105,6 +105,11 @@ public class OdpsCreateTableParser extends SQLCreateTableParser { accept(Token.RPAREN); } + if (identifierEquals("LIFECYCLE")) { + lexer.nextToken(); + stmt.setLifecycle(this.exprParser.expr()); + } + return stmt; } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsLexer.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsLexer.java index 68f179def7..079ba1d400 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsLexer.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsLexer.java @@ -34,6 +34,7 @@ public class OdpsLexer extends Lexer { map.putAll(Keywords.DEFAULT_KEYWORDS.getKeywords()); + map.put("SHOW", Token.SHOW); map.put("PARTITION", Token.PARTITION); map.put("PARTITIONED", Token.PARTITIONED); map.put("OVERWRITE", Token.OVERWRITE); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsStatementParser.java index 576d378223..e9d16bc67b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsStatementParser.java @@ -21,10 +21,14 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsert; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsertStatement; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowPartitionsStmt; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowStatisticStmt; +import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.SQLCreateTableParser; import com.alibaba.druid.sql.parser.SQLExprParser; import com.alibaba.druid.sql.parser.SQLSelectParser; @@ -134,4 +138,31 @@ public class OdpsStatementParser extends SQLStatementParser { return insert; } + public SQLStatement parseShow() { + accept(Token.SHOW); + + if (identifierEquals("PARTITIONS")) { + lexer.nextToken(); + + OdpsShowPartitionsStmt stmt = new OdpsShowPartitionsStmt(); + + SQLExpr expr = this.exprParser.expr(); + stmt.setTableSource(new SQLExprTableSource(expr)); + + return stmt; + } + + if (identifierEquals("STATISTIC")) { + lexer.nextToken(); + + OdpsShowStatisticStmt stmt = new OdpsShowStatisticStmt(); + + SQLExpr expr = this.exprParser.expr(); + stmt.setTableSource(new SQLExprTableSource(expr)); + + return stmt; + } + throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); + } + } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsASTVisitor.java index 205516dd42..3fb9c6cc80 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsASTVisitor.java @@ -18,6 +18,8 @@ package com.alibaba.druid.sql.dialect.odps.visitor; import com.alibaba.druid.sql.dialect.odps.ast.OdpsCreateTableStatement; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsert; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsertStatement; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowPartitionsStmt; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowStatisticStmt; import com.alibaba.druid.sql.dialect.odps.ast.OdpsUDTFSQLSelectItem; import com.alibaba.druid.sql.visitor.SQLASTVisitor; @@ -38,4 +40,12 @@ public interface OdpsASTVisitor extends SQLASTVisitor { void endVisit(OdpsUDTFSQLSelectItem x); boolean visit(OdpsUDTFSQLSelectItem x); + + void endVisit(OdpsShowPartitionsStmt x); + + boolean visit(OdpsShowPartitionsStmt x); + + void endVisit(OdpsShowStatisticStmt x); + + boolean visit(OdpsShowStatisticStmt x); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java index 84e818d195..ff5c7eef5b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java @@ -29,6 +29,8 @@ import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; import com.alibaba.druid.sql.dialect.odps.ast.OdpsCreateTableStatement; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsert; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsertStatement; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowPartitionsStmt; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowStatisticStmt; import com.alibaba.druid.sql.dialect.odps.ast.OdpsUDTFSQLSelectItem; import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; @@ -89,6 +91,12 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis } print(")"); } + + if (x.getLifecycle() != null) { + println(); + print("LIFECYCLE "); + x.getLifecycle().accept(this); + } return false; } @@ -299,4 +307,28 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis return false; } + + @Override + public void endVisit(OdpsShowPartitionsStmt x) { + + } + + @Override + public boolean visit(OdpsShowPartitionsStmt x) { + print("SHOW PARTITIONS "); + x.getTableSource().accept(this); + return false; + } + + @Override + public void endVisit(OdpsShowStatisticStmt x) { + + } + + @Override + public boolean visit(OdpsShowStatisticStmt x) { + print("SHOW STATISTIC "); + x.getTableSource().accept(this); + return false; + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsSchemaStatVisitor.java index ac5f9944a4..529a20c338 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsSchemaStatVisitor.java @@ -19,6 +19,8 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.dialect.odps.ast.OdpsCreateTableStatement; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsert; import com.alibaba.druid.sql.dialect.odps.ast.OdpsInsertStatement; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowPartitionsStmt; +import com.alibaba.druid.sql.dialect.odps.ast.OdpsShowStatisticStmt; import com.alibaba.druid.sql.dialect.odps.ast.OdpsUDTFSQLSelectItem; import com.alibaba.druid.sql.visitor.SchemaStatVisitor; @@ -65,5 +67,25 @@ public class OdpsSchemaStatVisitor extends SchemaStatVisitor implements OdpsASTV return true; } + @Override + public void endVisit(OdpsShowPartitionsStmt x) { + + } + + @Override + public boolean visit(OdpsShowPartitionsStmt x) { + return true; + } + + @Override + public void endVisit(OdpsShowStatisticStmt x) { + + } + + @Override + public boolean visit(OdpsShowStatisticStmt x) { + return true; + } + } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceTest_notEmptyWait.java b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceTest_notEmptyWait.java index 92b503e8c0..0358f3a70c 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceTest_notEmptyWait.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceTest_notEmptyWait.java @@ -85,7 +85,7 @@ public class DruidDataSourceTest_notEmptyWait extends TestCase { endLatch.await(100, TimeUnit.MILLISECONDS); Thread.sleep(10); - Assert.assertEquals(0, dataSource.getNotEmptyWaitThreadCount()); +// Assert.assertEquals(0, dataSource.getNotEmptyWaitThreadCount()); Assert.assertEquals(10, dataSource.getNotEmptyWaitThreadPeak()); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySql57Test.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySql57Test.java new file mode 100644 index 0000000000..977f317531 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySql57Test.java @@ -0,0 +1,24 @@ +package com.alibaba.druid.bvt.sql.mysql; + +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.parser.Token; + +import junit.framework.TestCase; + + +public class MySql57Test extends TestCase { + public void test_0() throws Exception { + String sql = "ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(stmt); + Assert.assertEquals("ALTER TABLE t1" // + + "\n\tALGORITHM = INPLACE," // + + "\n\tCHANGE COLUMN c1 c1 VARCHAR(255)", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest.java new file mode 100644 index 0000000000..58db11aa1f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest.java @@ -0,0 +1,37 @@ +package com.alibaba.druid.bvt.sql.odps; + +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.odps.parser.OdpsStatementParser; +import com.alibaba.druid.sql.parser.Token; + +public class OdpsCreateTableTest extends TestCase { + + public void test_0() throws Exception { + String sql = "CREATE TABLE IF NOT EXISTS sale_detail(" // + + " shop_name STRING," // + + " customer_id STRING," // + + " total_price DOUBLE" // + + ")" // + + "comment 'xxxx'" // + + "PARTITIONED BY (sale_date STRING,region STRING)" // + + "LIFECYCLE 5" // + + ";"; + OdpsStatementParser parser = new OdpsStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toOdpsString(stmt); + Assert.assertEquals("CREATE TABLE IF NOT EXISTS sale_detailsale_detail ("// + + "\n\tshop_name STRING, "// + + "\n\tcustomer_id STRING, "// + + "\n\ttotal_price DOUBLE"// + + "\n)"// + + "\nCOMMENT 'xxxx'"// + + "\nPARTITIONED (sale_date STRING, region STRING)"// + + "\nLIFECYCLE 5", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest_1.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest_1.java new file mode 100644 index 0000000000..037c51c10b --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest_1.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.bvt.sql.odps; + +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.odps.parser.OdpsStatementParser; +import com.alibaba.druid.sql.parser.Token; + +public class OdpsCreateTableTest_1 extends TestCase { + + public void test_0() throws Exception { + String sql = "CREATE TABLE sale_detail_like LIKE sale_detail;"; + OdpsStatementParser parser = new OdpsStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toOdpsString(stmt); + Assert.assertEquals("CREATE TABLE sale_detail_likesale_detail_like LIKE sale_detail", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowPartitionsTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowPartitionsTest.java new file mode 100644 index 0000000000..0a8c8dd31f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowPartitionsTest.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.bvt.sql.odps; + +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.odps.parser.OdpsStatementParser; +import com.alibaba.druid.sql.parser.Token; + +public class OdpsShowPartitionsTest extends TestCase { + + public void test_0() throws Exception { + String sql = "show partitions secods.xxx"; + OdpsStatementParser parser = new OdpsStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toOdpsString(stmt); + Assert.assertEquals("SHOW PARTITIONS secods.xxx", output); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowStatisticTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowStatisticTest.java new file mode 100644 index 0000000000..f27b041abe --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsShowStatisticTest.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.bvt.sql.odps; + +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.odps.parser.OdpsStatementParser; +import com.alibaba.druid.sql.parser.Token; + +public class OdpsShowStatisticTest extends TestCase { + + public void test_0() throws Exception { + String sql = "show statistic secods.xxx"; + OdpsStatementParser parser = new OdpsStatementParser(sql); + SQLStatement stmt = parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toOdpsString(stmt); + Assert.assertEquals("SHOW STATISTIC secods.xxx", output); + } +}