From 91490f2e7cd119c9dde0261d7e32ecc761cc7f15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E7=BB=8D=E9=94=A6?= Date: Sat, 7 Nov 2020 20:00:56 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"bug:=20=E4=BF=AE=E5=A4=8D=E5=A4=9A?= =?UTF-8?q?=E5=A4=84oracle=E4=B8=8Emysql=E8=A7=A3=E6=9E=90sql=20=E8=AF=AD?= =?UTF-8?q?=E6=B3=95=E4=B8=8D=E6=AD=A3=E7=A1=AE"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sql/dialect/mysql/parser/MySqlLexer.java | 1 - .../mysql/parser/MySqlStatementParser.java | 46 ++-- .../mysql/visitor/MySqlOutputVisitor.java | 2 +- .../stmt/OracleExecuteImmediateStatement.java | 10 - .../dialect/oracle/parser/OracleLexer.java | 3 +- .../oracle/parser/OracleStatementParser.java | 51 +---- .../oracle/visitor/OracleOutputVisitor.java | 8 +- .../druid/sql/parser/SQLExprParser.java | 7 +- .../druid/sql/parser/SQLStatementParser.java | 12 +- .../com/alibaba/druid/sql/parser/Token.java | 201 +++++++++--------- .../sql/visitor/SQLASTOutputVisitor.java | 19 +- .../sql/parser/MySQL_IF_ELSEIF_Test.java | 32 --- 12 files changed, 144 insertions(+), 248 deletions(-) delete mode 100644 src/test/java/com/alibaba/druid/sql/parser/MySQL_IF_ELSEIF_Test.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java index f9fc40f61b..f1b8b0fb83 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlLexer.java @@ -39,7 +39,6 @@ public class MySqlLexer extends Lexer { map.put("DUAL", Token.DUAL); map.put("FALSE", Token.FALSE); map.put("IF", Token.IF); - map.put("ELSEIF", Token.ELSEIF); map.put("KILL", Token.KILL); map.put("LIMIT", Token.LIMIT); 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 bd1eaa38f5..7c8f9ee353 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 @@ -8818,24 +8818,28 @@ public class MySqlStatementParser extends SQLStatementParser { this.parseStatementList(stmt.getStatements(), -1, stmt); - while (lexer.token() == Token.ELSEIF) { + while (lexer.token() == Token.ELSE) { lexer.nextToken(); - SQLIfStatement.ElseIf elseIf = new SQLIfStatement.ElseIf(); - - elseIf.setCondition(this.exprParser.expr()); - elseIf.setParent(stmt); - - accept(Token.THEN); - this.parseStatementList(elseIf.getStatements(), -1, stmt); - - stmt.getElseIfList().add(elseIf); - } - - if(lexer.token() == Token.ELSE) { - lexer.nextToken(); - SQLIfStatement.Else elseItem = new SQLIfStatement.Else(); - this.parseStatementList(elseItem.getStatements(), -1, elseItem); - stmt.setElseItem(elseItem); + + if (lexer.token() == Token.IF) { + lexer.nextToken(); + + SQLIfStatement.ElseIf elseIf = new SQLIfStatement.ElseIf(); + + elseIf.setCondition(this.exprParser.expr()); + elseIf.setParent(stmt); + + accept(Token.THEN); + this.parseStatementList(elseIf.getStatements(), -1, elseIf); + + + stmt.getElseIfList().add(elseIf); + } else { + SQLIfStatement.Else elseItem = new SQLIfStatement.Else(); + this.parseStatementList(elseItem.getStatements(), -1, elseItem); + stmt.setElseItem(elseItem); + break; + } } accept(Token.END); @@ -9099,8 +9103,6 @@ public class MySqlStatementParser extends SQLStatementParser { MySqlLeaveStatement leaveStmt = new MySqlLeaveStatement(); leaveStmt.setLabelName(exprParser.name().getSimpleName()); accept(Token.SEMI); - leaveStmt.setAfterSemi(true); - return leaveStmt; } @@ -9170,8 +9172,7 @@ public class MySqlStatementParser extends SQLStatementParser { stmt.setSelect(select); accept(Token.SEMI); - stmt.setAfterSemi(true); - + return stmt; } @@ -9307,8 +9308,7 @@ public class MySqlStatementParser extends SQLStatementParser { if (!(stmt.getSpStatement() instanceof SQLBlockStatement)) { accept(Token.SEMI); } - - stmt.setAfterSemi(true); + return stmt; } 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 b95d4ba101..fba5a274f6 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 @@ -4261,7 +4261,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV @Override public boolean visit(SQLIfStatement.ElseIf x) { - print0(ucase ? "ELSEIF " : "elseif "); + print0(ucase ? "ELSE IF " : "else if "); x.getCondition().accept(this); print0(ucase ? " THEN" : " then"); this.indentCount++; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExecuteImmediateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExecuteImmediateStatement.java index 3706ac730f..dafb4e0459 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExecuteImmediateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleExecuteImmediateStatement.java @@ -26,8 +26,6 @@ import java.util.List; public class OracleExecuteImmediateStatement extends OracleStatementImpl { private SQLExpr dynamicSql; - - private boolean bulkCollect; private final List arguments = new ArrayList(); @@ -88,14 +86,6 @@ public class OracleExecuteImmediateStatement extends OracleStatementImpl { } this.dynamicSql = dynamicSql; } - - public boolean isBulkCollect() { - return bulkCollect; - } - - public void setBulkCollect(boolean bulkCollect) { - this.bulkCollect = bulkCollect; - } public void setDynamicSql(String dynamicSql) { this.setDynamicSql(new SQLCharExpr(dynamicSql)); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleLexer.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleLexer.java index 39a91143b3..5650b2d68d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleLexer.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleLexer.java @@ -49,8 +49,7 @@ public class OracleLexer extends Lexer { map.put("GOTO", Token.GOTO); map.put("IF", Token.IF); map.put("ELSIF", Token.ELSIF); - map.put("RECORD", Token.RECORD); - + map.put("LIMIT", Token.LIMIT); map.put("LOOP", Token.LOOP); map.put("MATCHED", Token.MATCHED); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java index b43b3191d8..c55565a992 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java @@ -168,9 +168,6 @@ public class OracleStatementParser extends SQLStatementParser { SQLStatement stmt = parseBlock(); stmt.setParent(parent); statementList.add(stmt); - if(parent instanceof SQLCreateTriggerStatement) { - return; - } continue; } @@ -791,11 +788,7 @@ public class OracleStatementParser extends SQLStatementParser { SQLExpr dyanmiacSql = this.exprParser.primary(); stmt.setDynamicSql(dyanmiacSql); - if (lexer.identifierEquals("BULK")) { - lexer.nextToken(); - acceptIdentifier("COLLECT"); - stmt.setBulkCollect(true); - } + if (lexer.token() == Token.INTO) { lexer.nextToken(); @@ -905,7 +898,7 @@ public class OracleStatementParser extends SQLStatementParser { accept(Token.END); accept(Token.LOOP); accept(Token.SEMI); - stmt.setAfterSemi(true); + return stmt; } @@ -1907,7 +1900,6 @@ public class OracleStatementParser extends SQLStatementParser { || lexer.token() == Token.TABLE) { break; } else if (lexer.identifierEquals(FnvHash.Constants.TYPE)) { - lexer.nextToken(); name = this.exprParser.name(); accept(Token.IS); @@ -1922,7 +1914,7 @@ public class OracleStatementParser extends SQLStatementParser { lexer.nextToken(); accept(Token.OF); - SQLName tname = this.exprParser.name(); + name = this.exprParser.name(); if (lexer.token() == Token.PERCENT) { lexer.nextToken(); @@ -1930,15 +1922,10 @@ public class OracleStatementParser extends SQLStatementParser { String typeName; if (lexer.identifierEquals(FnvHash.Constants.ROWTYPE)) { lexer.nextToken(); - typeName = "TABLE OF " + tname.toString() + "%ROWTYPE"; - } else if (lexer.token() == Token.LPAREN && lexer.stringVal().equalsIgnoreCase("Varchar2")) { - accept(Token.LPAREN); - int len = this.exprParser.acceptInteger(); - accept(Token.RPAREN); - typeName = "TABLE OF " + tname.toString() + "(" + len + ")"; + typeName = "TABLE OF " + name.toString() + "%ROWTYPE"; } else { acceptIdentifier("TYPE"); - typeName = "TABLE OF " + tname.toString() + "%TYPE"; + typeName = "TABLE OF " + name.toString() + "%TYPE"; } dataType = new SQLDataTypeImpl(typeName); @@ -1957,8 +1944,6 @@ public class OracleStatementParser extends SQLStatementParser { SQLExpr indexBy = this.exprParser.primary(); ((SQLDataTypeImpl) dataType).setIndexBy(indexBy); } - }else if (lexer.token() == Token.SEMI) { - dataType = new SQLDataTypeImpl("TABLE OF " + tname.toString()); } dataType.setDbType(dbType); } else if (lexer.identifierEquals("VARRAY")) { @@ -1994,18 +1979,6 @@ public class OracleStatementParser extends SQLStatementParser { } else { throw new ParserException("TODO : " + lexer.info()); } - } else if (lexer.token() == Token.RECORD) { - lexer.nextToken(); - String typeName = "RECORD"; - SQLRecordDataType sqlRecordDataType = new SQLRecordDataType(); - sqlRecordDataType.setDbType(dbType); - sqlRecordDataType.setName(typeName); - if (lexer.token() == Token.LPAREN) { - lexer.nextToken(); - this.parseColumnsList(sqlRecordDataType.getColumns(), sqlRecordDataType); - accept(Token.RPAREN); - } - dataType = sqlRecordDataType; } else { throw new ParserException("TODO : " + lexer.info()); } @@ -2131,19 +2104,7 @@ public class OracleStatementParser extends SQLStatementParser { break; } } - - private void parseColumnsList(List columns, SQLObject parent) { - for ( ; ; ) { - SQLColumnDefinition columnDefinition = this.exprParser.parseColumn(); - columns.add(columnDefinition); - if (lexer.token() == Token.COMMA) { - lexer.nextToken(); - continue; - } - break; - } - } - + public OracleSelectParser createSQLSelectParser() { return new OracleSelectParser(this.exprParser, selectListCache); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index bf4b6cc459..9b8669bce4 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -1523,7 +1523,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS @Override public boolean visit(SQLIfStatement.ElseIf x) { - print0(ucase ? "ELSIF " : "elsif "); + print0(ucase ? "ELSE IF " : "else if "); x.getCondition().accept(this); print0(ucase ? " THEN" : " then"); this.indentCount++; @@ -2612,11 +2612,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS public boolean visit(OracleExecuteImmediateStatement x) { print0(ucase ? "EXECUTE IMMEDIATE " : "execute immediate "); x.getDynamicSql().accept(this); - - if (x.isBulkCollect()) { - print0(ucase ? " BULK COLLECT " : " bulk collect "); - } - + List into = x.getInto(); if (into.size() > 0) { print0(ucase ? " INTO " : " into "); diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index e53d5b55eb..4a5430a375 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -531,11 +531,6 @@ public class SQLExprParser extends SQLParser { break; } } - } else if (DbType.oracle == dbType) { - lexer.nextTokenValue(); - if (lexer.token == Token.BARBAR) { - sqlExpr = additiveRest(sqlExpr); - } } else { lexer.nextToken(); } @@ -1312,7 +1307,7 @@ public class SQLExprParser extends SQLParser { expr = dotRest(expr); return primaryRest(expr); } else if (lexer.identifierEquals(FnvHash.Constants.SETS) // - && expr.getClass() == SQLIdentifierExpr.class // + && expr.getClass() == SQLIdentifierExpr.class // && "GROUPING".equalsIgnoreCase(((SQLIdentifierExpr) expr).getName())) { SQLGroupingSetExpr groupingSets = new SQLGroupingSetExpr(); lexer.nextToken(); 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 f7f871c18c..7907eff5c1 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -582,12 +582,7 @@ public class SQLStatementParser extends SQLParser { stmt.setParent(parent); continue; } - - if (lexer.token() == Token.ELSEIF - && parent instanceof SQLIfStatement) { - break; - } - + int size = statementList.size(); if (parseStatementListDialect(statementList)) { if (parent != null) { @@ -595,9 +590,6 @@ public class SQLStatementParser extends SQLParser { SQLStatement dialectStmt = statementList.get(j); dialectStmt.setParent(parent); } - if (parent instanceof SQLCreateTriggerStatement) { - return; - } } continue; @@ -3851,7 +3843,7 @@ public class SQLStatementParser extends SQLParser { stmt.setWhen(condition); } - List body = this.parseStatementList(stmt); + List body = this.parseStatementList(); if (body == null || body.isEmpty()) { throw new ParserException("syntax error"); } diff --git a/src/main/java/com/alibaba/druid/sql/parser/Token.java b/src/main/java/com/alibaba/druid/sql/parser/Token.java index e44914e303..a03b208b0b 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/Token.java +++ b/src/main/java/com/alibaba/druid/sql/parser/Token.java @@ -16,56 +16,56 @@ package com.alibaba.druid.sql.parser; /** - * - * SQL Token + * + * SQL Token * @author wenshao [szujobs@hotmail.com] */ public enum Token { - SELECT("SELECT"), - DELETE("DELETE"), - INSERT("INSERT"), - UPDATE("UPDATE"), + SELECT("SELECT"), + DELETE("DELETE"), + INSERT("INSERT"), + UPDATE("UPDATE"), - FROM("FROM"), - HAVING("HAVING"), - WHERE("WHERE"), - ORDER("ORDER"), + FROM("FROM"), + HAVING("HAVING"), + WHERE("WHERE"), + ORDER("ORDER"), BY("BY"), - GROUP("GROUP"), - INTO("INTO"), - AS("AS"), + GROUP("GROUP"), + INTO("INTO"), + AS("AS"), CREATE("CREATE"), - ALTER("ALTER"), - DROP("DROP"), - SET("SET"), + ALTER("ALTER"), + DROP("DROP"), + SET("SET"), - NULL("NULL"), - NOT("NOT"), + NULL("NULL"), + NOT("NOT"), DISTINCT("DISTINCT"), - TABLE("TABLE"), - TABLESPACE("TABLESPACE"), - VIEW("VIEW"), - SEQUENCE("SEQUENCE"), - TRIGGER("TRIGGER"), - USER("USER"), - INDEX("INDEX"), + TABLE("TABLE"), + TABLESPACE("TABLESPACE"), + VIEW("VIEW"), + SEQUENCE("SEQUENCE"), + TRIGGER("TRIGGER"), + USER("USER"), + INDEX("INDEX"), SESSION("SESSION"), PROCEDURE("PROCEDURE"), FUNCTION("FUNCTION"), - PRIMARY("PRIMARY"), - KEY("KEY"), - DEFAULT("DEFAULT"), - CONSTRAINT("CONSTRAINT"), - CHECK("CHECK"), - UNIQUE("UNIQUE"), - FOREIGN("FOREIGN"), - REFERENCES("REFERENCES"), + PRIMARY("PRIMARY"), + KEY("KEY"), + DEFAULT("DEFAULT"), + CONSTRAINT("CONSTRAINT"), + CHECK("CHECK"), + UNIQUE("UNIQUE"), + FOREIGN("FOREIGN"), + REFERENCES("REFERENCES"), - EXPLAIN("EXPLAIN"), - FOR("FOR"), + EXPLAIN("EXPLAIN"), + FOR("FOR"), IF("IF"), @@ -73,55 +73,55 @@ public enum Token { GLOBAL("GLOBAL"), ALL("ALL"), UNION("UNION"), - EXCEPT("EXCEPT"), - INTERSECT("INTERSECT"), + EXCEPT("EXCEPT"), + INTERSECT("INTERSECT"), MINUS("MINUS"), - INNER("INNER"), - LEFT("LEFT"), - RIGHT("RIGHT"), - FULL("FULL"), - OUTER("OUTER"), + INNER("INNER"), + LEFT("LEFT"), + RIGHT("RIGHT"), + FULL("FULL"), + OUTER("OUTER"), JOIN("JOIN"), STRAIGHT_JOIN("STRAIGHT_JOIN"), ON("ON"), - SCHEMA("SCHEMA"), + SCHEMA("SCHEMA"), CAST("CAST"), COLUMN("COLUMN"), USE("USE"), DATABASE("DATABASE"), TO("TO"), - AND("AND"), - OR("OR"), - XOR("XOR"), - CASE("CASE"), - WHEN("WHEN"), - THEN("THEN"), + AND("AND"), + OR("OR"), + XOR("XOR"), + CASE("CASE"), + WHEN("WHEN"), + THEN("THEN"), ELSE("ELSE"), ELSIF("ELSIF"), - END("END"), - EXISTS("EXISTS"), + END("END"), + EXISTS("EXISTS"), IN("IN"), - NEW("NEW"), - ASC("ASC"), - DESC("DESC"), - IS("IS"), - LIKE("LIKE"), - ESCAPE("ESCAPE"), - BETWEEN("BETWEEN"), - VALUES("VALUES"), + NEW("NEW"), + ASC("ASC"), + DESC("DESC"), + IS("IS"), + LIKE("LIKE"), + ESCAPE("ESCAPE"), + BETWEEN("BETWEEN"), + VALUES("VALUES"), INTERVAL("INTERVAL"), - LOCK("LOCK"), - SOME("SOME"), + LOCK("LOCK"), + SOME("SOME"), ANY("ANY"), TRUNCATE("TRUNCATE"), RETURN("RETURN"), // mysql - TRUE("TRUE"), + TRUE("TRUE"), FALSE("FALSE"), LIMIT("LIMIT"), KILL("KILL"), @@ -132,7 +132,7 @@ public enum Token { SHOW("SHOW"), REPLACE("REPLACE"), PERIOD("PERIOD"), - ELSEIF("ELSEIF"), + BITS, // MySql procedure add by zz @@ -211,7 +211,6 @@ public enum Token { COMMIT("COMMIT"), SAVEPOINT("SAVEPOINT"), CROSS("CROSS"), - RECORD("RECORD"), PCTFREE("PCTFREE"), INITRANS("INITRANS"), @@ -254,7 +253,7 @@ public enum Token { // hive - EOF, + EOF, ERROR, IDENTIFIER, HINT, @@ -299,19 +298,19 @@ public enum Token { UPSERT("UPSERT"), // Phoenix - LPAREN("("), - RPAREN(")"), - LBRACE("{"), - RBRACE("}"), - LBRACKET("["), - RBRACKET("]"), - SEMI(";"), - COMMA(","), - DOT("."), - DOTDOT(".."), - DOTDOTDOT("..,"), - EQ("="), - GT(">"), + LPAREN("("), + RPAREN(")"), + LBRACE("{"), + RBRACE("}"), + LBRACKET("["), + RBRACKET("]"), + SEMI(";"), + COMMA(","), + DOT("."), + DOTDOT(".."), + DOTDOTDOT("..,"), + EQ("="), + GT(">"), LT("<"), LT_SUB_GT("<->"), BANG("!"), @@ -325,34 +324,34 @@ public enum Token { QUESQUES("??"), QUESBAR("?|"), QUESAMP("?&"), - COLON(":"), - COLONCOLON("::"), - COLONEQ(":="), + COLON(":"), + COLONCOLON("::"), + COLONEQ(":="), EQEQ("=="), EQGT("=>"), - LTEQ("<="), - LTEQGT("<=>"), - LTGT("<>"), - GTEQ(">="), - BANGEQ("!="), - BANGGT("!>"), + LTEQ("<="), + LTEQGT("<=>"), + LTGT("<>"), + GTEQ(">="), + BANGEQ("!="), + BANGGT("!>"), BANGLT("!<"), - AMPAMP("&&"), - BARBAR("||"), - BARBARSLASH("||/"), - BARSLASH("|/"), - PLUS("+"), - SUB("-"), - SUBGT("->"), - SUBGTGT("->>"), - STAR("*"), - SLASH("/"), - AMP("&"), - BAR("|"), + AMPAMP("&&"), + BARBAR("||"), + BARBARSLASH("||/"), + BARSLASH("|/"), + PLUS("+"), + SUB("-"), + SUBGT("->"), + SUBGTGT("->>"), + STAR("*"), + SLASH("/"), + AMP("&"), + BAR("|"), CARET("^"), CARETEQ("^="), - PERCENT("%"), - LTLT("<<"), + PERCENT("%"), + LTLT("<<"), GTGT(">>"), MONKEYS_AT("@"), MONKEYS_AT_AT("@@"), 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 42c0a3dbb0..25be7f23d6 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -2890,8 +2890,6 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet } } else if (expr instanceof SQLMethodInvokeExpr) { visit((SQLMethodInvokeExpr) expr); - } else if (expr instanceof SQLListExpr) { - printAndAccept(((SQLListExpr) expr).getItems(), ","); } else { expr.accept(this); } @@ -4387,19 +4385,19 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet } if (x.isDropStorage()) { - print0(ucase ? " DROP STORAGE" : " drop storage"); + print0(ucase ? " DROP STORAGE" : " drop storage"); } if (x.isReuseStorage()) { - print0(ucase ? " REUSE STORAGE" : " reuse storage"); + print0(ucase ? " REUSE STORAGE" : " reuse storage"); } if (x.isIgnoreDeleteTriggers()) { - print0(ucase ? " IGNORE DELETE TRIGGERS" : " ignore delete triggers"); + print0(ucase ? " IGNORE DELETE TRIGGERS" : " ignore delete triggers"); } if (x.isRestrictWhenDeleteTriggers()) { - print0(ucase ? " RESTRICT WHEN DELETE TRIGGERS" : " restrict when delete triggers"); + print0(ucase ? " RESTRICT WHEN DELETE TRIGGERS" : " restrict when delete triggers"); } if (x.isContinueIdentity()) { @@ -4407,7 +4405,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet } if (x.isImmediate()) { - print0(ucase ? " IMMEDIATE" : " immediate"); + print0(ucase ? " IMMEDIATE" : " immediate"); } return false; @@ -5100,7 +5098,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet @Override public boolean visit(SQLKeep x) { if (x.getDenseRank() == SQLKeep.DenseRank.FIRST) { - print0(ucase ? "KEEP (DENSE_RANK FIRST " : "keep (dense_rank first "); + print0(ucase ? "KEEP (DENSE_RANK FIRST " : "keep (dense_rank first "); } else { print0(ucase ? "KEEP (DENSE_RANK LAST " : "keep (dense_rank last "); } @@ -6827,8 +6825,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet String dataTypeName = dataType.getName(); boolean printType = (dataTypeName.startsWith("TABLE OF") && x.getDefaultValue() == null) || dataTypeName.equalsIgnoreCase("REF CURSOR") - || dataTypeName.startsWith("VARRAY(") - || dataTypeName.startsWith("RECORD"); + || dataTypeName.startsWith("VARRAY("); if (printType) { print0(ucase ? "TYPE " : "type "); } @@ -7473,7 +7470,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet protected void printPartitions(List partitions) { if (partitions.size() == 1 && "ALL".equalsIgnoreCase(partitions.get(0).getSimpleName())) { - print0(ucase ? "ALL" : "all"); + print0(ucase ? "ALL" : "all"); } else { printAndAccept(partitions, ", "); } diff --git a/src/test/java/com/alibaba/druid/sql/parser/MySQL_IF_ELSEIF_Test.java b/src/test/java/com/alibaba/druid/sql/parser/MySQL_IF_ELSEIF_Test.java deleted file mode 100644 index 66998f2874..0000000000 --- a/src/test/java/com/alibaba/druid/sql/parser/MySQL_IF_ELSEIF_Test.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.alibaba.druid.sql.parser; - -import com.alibaba.druid.sql.SQLUtils; -import com.alibaba.druid.sql.ast.SQLStatement; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; -import com.alibaba.druid.util.JdbcConstants; -import junit.framework.TestCase; - -import java.util.List; - -public class MySQL_IF_ELSEIF_Test extends TestCase { - - public void test_IF_ELSEIF(){ - String sql = "CREATE TRIGGER trg_test1 BEFORE INSERT ON test_table_name FOR EACH ROW\n" + - "begin\n" + - "\tIF new.BSRQ IS NOT NULL THEN\n" + - "\t\tset new.SJRQ1 = new.BSRQ;\n" + - "\tELSEIF new.SJRQ1 IS NOT NULL THEN\n" + - "\t\tset new.BSRQ = new.SJRQ1;\n" + - "\t\tset new.SJRQ2 =new.SJRQ1;\n" + - " ELSEIF new.SJRQ2 IS NOT NULL THEN\n" + - "\t\tset new.SJRQ1 =new.SJRQ2;\n" + - "\tEND IF;\n" + - "end;"; - List stmtList = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL); - StringBuilder out = new StringBuilder(); - MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); - stmtList.get(0).accept(visitor); - System.out.println(stmtList.get(0).toString()); - } -}