mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
Revert "bug: 修复多处oracle与mysql解析sql 语法不正确"
This commit is contained in:
@@ -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);
|
||||
|
||||
+23
-23
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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++;
|
||||
|
||||
-10
@@ -26,8 +26,6 @@ import java.util.List;
|
||||
public class OracleExecuteImmediateStatement extends OracleStatementImpl {
|
||||
|
||||
private SQLExpr dynamicSql;
|
||||
|
||||
private boolean bulkCollect;
|
||||
|
||||
private final List<SQLArgument> arguments = new ArrayList<SQLArgument>();
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
|
||||
+6
-45
@@ -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<SQLColumnDefinition> 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);
|
||||
}
|
||||
|
||||
@@ -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<SQLExpr> into = x.getInto();
|
||||
if (into.size() > 0) {
|
||||
print0(ucase ? " INTO " : " into ");
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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<SQLStatement> body = this.parseStatementList(stmt);
|
||||
List<SQLStatement> body = this.parseStatementList();
|
||||
if (body == null || body.isEmpty()) {
|
||||
throw new ParserException("syntax error");
|
||||
}
|
||||
|
||||
@@ -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("@@"),
|
||||
|
||||
@@ -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<SQLName> partitions) {
|
||||
if (partitions.size() == 1 && "ALL".equalsIgnoreCase(partitions.get(0).getSimpleName())) {
|
||||
print0(ucase ? "ALL" : "all");
|
||||
print0(ucase ? "ALL" : "all");
|
||||
} else {
|
||||
printAndAccept(partitions, ", ");
|
||||
}
|
||||
|
||||
@@ -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<SQLStatement> 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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user