From 2a0a78e8d3ef551585046785ab0f829c54cbceb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Tue, 15 May 2012 20:33:39 +0800 Subject: [PATCH] mysql parser --- .../statement/MySqlShowColumnsStatement.java | 8 ++ .../MySqlShowContributorsStatement.java | 14 +++ .../mysql/parser/MySqlStatementParser.java | 60 ++++++------ .../mysql/visitor/MySqlASTVisitor.java | 61 ++++++------ .../mysql/visitor/MySqlASTVisitorAdapter.java | 11 +++ .../mysql/visitor/MySqlOutputVisitor.java | 21 +++- .../mysql/visitor/MySqlSchemaStatVisitor.java | 11 +++ .../druid/bvt/sql/cobar/DALParserTest.java | 95 +++++++++---------- 8 files changed, 173 insertions(+), 108 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowContributorsStatement.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowColumnsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowColumnsStatement.java index e3fc00cedb..d765617ec1 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowColumnsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowColumnsStatement.java @@ -17,6 +17,8 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; +import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; public class MySqlShowColumnsStatement extends MySqlStatementImpl { @@ -43,6 +45,12 @@ public class MySqlShowColumnsStatement extends MySqlStatementImpl { } public void setTable(SQLName table) { + if (table instanceof SQLPropertyExpr) { + SQLPropertyExpr propExpr = (SQLPropertyExpr) table; + this.setDatabase((SQLName) propExpr.getOwner()); + this.table = new SQLIdentifierExpr(propExpr.getName()); + return; + } this.table = table; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowContributorsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowContributorsStatement.java new file mode 100644 index 0000000000..312242abfd --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowContributorsStatement.java @@ -0,0 +1,14 @@ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; + + +public class MySqlShowContributorsStatement extends MySqlStatementImpl { + + private static final long serialVersionUID = 1L; + + public void accept0(MySqlASTVisitor visitor) { + visitor.visit(this); + visitor.endVisit(this); + } +} 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 57a5337494..61f15d5136 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 @@ -61,6 +61,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowBinaryLogsStat import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCharacterSetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCollationStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowColumnsStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; @@ -411,7 +412,7 @@ public class MySqlStatementParser extends SQLStatementParser { public SQLStatement parseShow() throws ParserException { acceptIdentifier("SHOW"); - if (identifierEquals("FULL")) { + if (lexer.token() == Token.FULL) { lexer.nextToken(); acceptIdentifier("COLUMNS"); @@ -500,77 +501,77 @@ public class MySqlStatementParser extends SQLStatementParser { lexer.nextToken(); return new CobarShowStatus(); } - + if (identifierEquals("AUTHORS")) { lexer.nextToken(); return new MySqlShowAuthorsStatement(); } - + if (identifierEquals("BINARY")) { lexer.nextToken(); acceptIdentifier("LOGS"); return new MySqlShowBinaryLogsStatement(); } - + if (identifierEquals("MASTER")) { lexer.nextToken(); acceptIdentifier("LOGS"); return new MySqlShowMasterLogsStatement(); } - + if (identifierEquals("CHARACTER")) { lexer.nextToken(); accept(Token.SET); MySqlShowCharacterSetStatement stmt = new MySqlShowCharacterSetStatement(); - + if (lexer.token() == Token.LIKE) { lexer.nextToken(); stmt.setPattern(this.exprParser.expr()); } - + if (lexer.token() == Token.WHERE) { lexer.nextToken(); stmt.setWhere(this.exprParser.expr()); } - + return stmt; } - + if (identifierEquals("COLLATION")) { lexer.nextToken(); MySqlShowCollationStatement stmt = new MySqlShowCollationStatement(); - + if (lexer.token() == Token.LIKE) { lexer.nextToken(); stmt.setPattern(this.exprParser.expr()); } - + if (lexer.token() == Token.WHERE) { lexer.nextToken(); stmt.setWhere(this.exprParser.expr()); } - + return stmt; } - + if (identifierEquals("BINLOG")) { lexer.nextToken(); acceptIdentifier("EVENTS"); MySqlShowBinLogEventsStatement stmt = new MySqlShowBinLogEventsStatement(); - + if (lexer.token() == Token.IN) { lexer.nextToken(); stmt.setIn(this.exprParser.expr()); } - + if (lexer.token() == Token.FROM) { lexer.nextToken(); stmt.setFrom(this.exprParser.expr()); } - + if (lexer.token() == Token.LIMIT) { lexer.nextToken(); - + MySqlSelectQueryBlock.Limit limit = new MySqlSelectQueryBlock.Limit(); SQLExpr temp = this.exprParser.expr(); @@ -587,10 +588,15 @@ public class MySqlStatementParser extends SQLStatementParser { } stmt.setLimit(limit); } - + return stmt; } + if (identifierEquals("CONTRIBUTORS")) { + lexer.nextToken(); + return new MySqlShowContributorsStatement(); + } + throw new ParserException("TODO " + lexer.stringVal()); } @@ -1189,13 +1195,13 @@ public class MySqlStatementParser extends SQLStatementParser { lexer.nextToken(); acceptIdentifier("ISOLATION"); acceptIdentifier("LEVEL"); - + MySqlSetTransactionIsolationLevelStatement stmt = new MySqlSetTransactionIsolationLevelStatement(); stmt.setGlobal(global); - + if (identifierEquals("READ")) { lexer.nextToken(); - + if (identifierEquals("UNCOMMITTED")) { stmt.setLevel("READ UNCOMMITTED"); lexer.nextToken(); @@ -1225,11 +1231,11 @@ public class MySqlStatementParser extends SQLStatementParser { } else { throw new ParserException("UNKOWN TRANSACTION LEVEL : " + lexer.stringVal()); } - + return stmt; } else if (identifierEquals("NAMES")) { lexer.nextToken(); - + MySqlSetNamesStatement stmt = new MySqlSetNamesStatement(); if (lexer.token() == Token.DEFAULT) { lexer.nextToken(); @@ -1249,9 +1255,9 @@ public class MySqlStatementParser extends SQLStatementParser { return stmt; } else if (identifierEquals("CHARACTER")) { lexer.nextToken(); - + accept(Token.SET); - + MySqlSetCharSetStatement stmt = new MySqlSetCharSetStatement(); if (lexer.token() == Token.DEFAULT) { lexer.nextToken(); @@ -1262,7 +1268,7 @@ public class MySqlStatementParser extends SQLStatementParser { lexer.nextToken(); if (identifierEquals("COLLATE")) { lexer.nextToken(); - + String collate = lexer.stringVal(); stmt.setCollate(collate); lexer.nextToken(); @@ -1273,7 +1279,7 @@ public class MySqlStatementParser extends SQLStatementParser { SQLSetStatement stmt = new SQLSetStatement(); parseAssignItems(stmt.getItems()); - + if (global != null && global.booleanValue()) { SQLVariantRefExpr varRef = (SQLVariantRefExpr) stmt.getItems().get(0).getTarget(); varRef.setGlobal(true); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java index 5116a783be..7585e8f102 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java @@ -52,6 +52,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowBinaryLogsStat import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCharacterSetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCollationStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowColumnsStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; @@ -163,9 +164,9 @@ public interface MySqlASTVisitor extends SQLASTVisitor { void endVisit(MySqlShowStatusStatement x); boolean visit(MySqlShowStatusStatement x); - + void endVisit(MySqlShowAuthorsStatement x); - + boolean visit(MySqlShowAuthorsStatement x); void endVisit(CobarShowStatus x); @@ -199,56 +200,60 @@ public interface MySqlASTVisitor extends SQLASTVisitor { void endVisit(MySqlDropTableStatement x); boolean visit(MySqlDropTableStatement x); - + void endVisit(MySqlPartitionByKey x); - + boolean visit(MySqlPartitionByKey x); - + boolean visit(MySqlSelectQueryBlock x); - + void endVisit(MySqlSelectQueryBlock x); - + boolean visit(MySqlOutFileExpr x); - + void endVisit(MySqlOutFileExpr x); - + boolean visit(MySqlDescribeStatement x); - + void endVisit(MySqlDescribeStatement x); - + boolean visit(MySqlUpdateStatement x); - + void endVisit(MySqlUpdateStatement x); - + boolean visit(MySqlSetTransactionIsolationLevelStatement x); - + void endVisit(MySqlSetTransactionIsolationLevelStatement x); - + boolean visit(MySqlSetNamesStatement x); - + void endVisit(MySqlSetNamesStatement x); - + boolean visit(MySqlSetCharSetStatement x); - + void endVisit(MySqlSetCharSetStatement x); - + boolean visit(MySqlShowBinaryLogsStatement x); - + void endVisit(MySqlShowBinaryLogsStatement x); - + boolean visit(MySqlShowMasterLogsStatement x); - + void endVisit(MySqlShowMasterLogsStatement x); - + boolean visit(MySqlShowCharacterSetStatement x); - + void endVisit(MySqlShowCharacterSetStatement x); - + boolean visit(MySqlShowCollationStatement x); - + void endVisit(MySqlShowCollationStatement x); - + boolean visit(MySqlShowBinLogEventsStatement x); - + void endVisit(MySqlShowBinLogEventsStatement x); + + boolean visit(MySqlShowContributorsStatement x); + + void endVisit(MySqlShowContributorsStatement x); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java index 07b41ec7e2..87d05b0a11 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java @@ -39,6 +39,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowBinaryLogsStat import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCharacterSetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCollationStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowColumnsStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; @@ -542,4 +543,14 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements public void endVisit(MySqlShowCharacterSetStatement x) { } + + @Override + public boolean visit(MySqlShowContributorsStatement x) { + return true; + } + + @Override + public void endVisit(MySqlShowContributorsStatement x) { + + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java index e63c2adfdc..16a99ad9e0 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java @@ -71,6 +71,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowBinaryLogsStat import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCharacterSetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCollationStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowColumnsStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; @@ -1022,14 +1023,13 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV if (x.getTable() != null) { print(" FROM "); + if (x.getDatabase() != null) { + x.getDatabase().accept(this); + print('.'); + } x.getTable().accept(this); } - if (x.getDatabase() != null) { - print(" FROM "); - x.getDatabase().accept(this); - } - if (x.getLike() != null) { print(" LIKE "); x.getLike().accept(this); @@ -1575,4 +1575,15 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV public void endVisit(MySqlShowCharacterSetStatement x) { } + + @Override + public boolean visit(MySqlShowContributorsStatement x) { + print("SHOW CONTRIBUTORS"); + return false; + } + + @Override + public void endVisit(MySqlShowContributorsStatement x) { + + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java index 953f943ca2..1b2732bbd1 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java @@ -48,6 +48,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowBinaryLogsStat import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCharacterSetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCollationStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowColumnsStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; @@ -604,4 +605,14 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS public void endVisit(MySqlShowCharacterSetStatement x) { } + + @Override + public boolean visit(MySqlShowContributorsStatement x) { + return false; + } + + @Override + public void endVisit(MySqlShowContributorsStatement x) { + + } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/cobar/DALParserTest.java b/src/test/java/com/alibaba/druid/bvt/sql/cobar/DALParserTest.java index 221938be51..740d6b8fbd 100755 --- a/src/test/java/com/alibaba/druid/bvt/sql/cobar/DALParserTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/cobar/DALParserTest.java @@ -17,6 +17,8 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowBinLogEventsSt import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowBinaryLogsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCharacterSetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCollationStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowColumnsStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.sql.parser.Token; @@ -290,57 +292,54 @@ public class DALParserTest extends TestCase { Assert.assertEquals("SHOW CHARACTER SET", output); } + public void test_show_columns() throws Exception { + String sql = "SHOW full columns from tb1 from db1 like 'var' "; + MySqlStatementParser parser = new MySqlStatementParser(sql); + MySqlShowColumnsStatement show = (MySqlShowColumnsStatement) parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(show); + Assert.assertEquals("SHOW FULL COLUMNS FROM db1.tb1 LIKE 'var'", output); + } + + public void test_show_columns_1() throws Exception { + String sql = "show columns from events where Field = 'name'"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + MySqlShowColumnsStatement show = (MySqlShowColumnsStatement) parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(show); + Assert.assertEquals("SHOW COLUMNS FROM events WHERE Field = 'name'", output); + } + + public void test_show_columns_2() throws Exception { + String sql = "SHOW COLUMNS FROM City"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + MySqlShowColumnsStatement show = (MySqlShowColumnsStatement) parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(show); + Assert.assertEquals("SHOW COLUMNS FROM City", output); + } + + public void test_show_columns_3() throws Exception { + String sql = "SHOW full columns from db1.tb1 like 'var' "; + MySqlStatementParser parser = new MySqlStatementParser(sql); + MySqlShowColumnsStatement show = (MySqlShowColumnsStatement) parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(show); + Assert.assertEquals("SHOW FULL COLUMNS FROM db1.tb1 LIKE 'var'", output); + } + + public void test_show_contributors() throws Exception { + String sql = "SHOW contributors"; + MySqlStatementParser parser = new MySqlStatementParser(sql); + MySqlShowContributorsStatement show = (MySqlShowContributorsStatement) parser.parseStatementList().get(0); + parser.match(Token.EOF); + String output = SQLUtils.toMySqlString(show); + Assert.assertEquals("SHOW CONTRIBUTORS", output); + } + // // public void testShow() throws Exception { // -// sql = "SHOW full columns from tb1 from db1 like 'var' "; -// lexer = new SQLLexer(sql); -// parser = new DALParser(lexer, new SQLExprParser(lexer)); -// show = (DALShowStatement) parser.show(); -// parser.match(Token.EOF); -// output = output2MySQL(show, sql); -// Assert.assertEquals("SHOW FULL COLUMNS FROM db1.tb1 LIKE 'var'", output); -// -// sql = "SHOW full columns from tb1 from db1 where count(col)>10 "; -// lexer = new SQLLexer(sql); -// parser = new DALParser(lexer, new SQLExprParser(lexer)); -// show = (DALShowStatement) parser.show(); -// parser.match(Token.EOF); -// output = output2MySQL(show, sql); -// Assert.assertEquals("SHOW FULL COLUMNS FROM db1.tb1 WHERE COUNT(col) > 10", output); -// -// sql = "SHOW columns from tb1 from db1 like 'var' "; -// lexer = new SQLLexer(sql); -// parser = new DALParser(lexer, new SQLExprParser(lexer)); -// show = (DALShowStatement) parser.show(); -// parser.match(Token.EOF); -// output = output2MySQL(show, sql); -// Assert.assertEquals("SHOW COLUMNS FROM db1.tb1 LIKE 'var'", output); -// -// sql = "SHOW columns from tb1 like 'var' "; -// lexer = new SQLLexer(sql); -// parser = new DALParser(lexer, new SQLExprParser(lexer)); -// show = (DALShowStatement) parser.show(); -// parser.match(Token.EOF); -// output = output2MySQL(show, sql); -// Assert.assertEquals("SHOW COLUMNS FROM tb1 LIKE 'var'", output); -// -// sql = "SHOW full columns from tb1 from db1 "; -// lexer = new SQLLexer(sql); -// parser = new DALParser(lexer, new SQLExprParser(lexer)); -// show = (DALShowStatement) parser.show(); -// parser.match(Token.EOF); -// output = output2MySQL(show, sql); -// Assert.assertEquals("SHOW FULL COLUMNS FROM db1.tb1", output); -// -// sql = "SHOW contributors "; -// lexer = new SQLLexer(sql); -// parser = new DALParser(lexer, new SQLExprParser(lexer)); -// show = (DALShowStatement) parser.show(); -// parser.match(Token.EOF); -// output = output2MySQL(show, sql); -// Assert.assertEquals("SHOW CONTRIBUTORS", output); -// // sql = "SHOW CREATE DATABASE db_name "; // lexer = new SQLLexer(sql); // parser = new DALParser(lexer, new SQLExprParser(lexer));