bug fixed for db2 sql parser. for issue #2041

This commit is contained in:
wenshao
2017-10-15 13:25:25 +08:00
parent 7da600e088
commit cf228c5b34
3 changed files with 183 additions and 2 deletions
@@ -20,6 +20,7 @@ import java.util.List;
import com.alibaba.druid.sql.ast.*;
import com.alibaba.druid.sql.ast.expr.*;
import com.alibaba.druid.sql.ast.statement.*;
import com.alibaba.druid.sql.dialect.db2.ast.stmt.DB2SelectQueryBlock;
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOrderingExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock;
import com.alibaba.druid.util.FnvHash;
@@ -421,9 +422,27 @@ public class SQLSelectParser extends SQLParser {
if (lexer.identifierEquals(FnvHash.Constants.CUBE)) {
lexer.nextToken();
groupBy.setWithCube(true);
} else {
acceptIdentifier("ROLLUP");
} else if(lexer.identifierEquals(FnvHash.Constants.ROLLUP)) {
lexer.nextToken();
groupBy.setWithRollUp(true);
} else if (lexer.identifierEquals(FnvHash.Constants.RS)
&& JdbcConstants.DB2.equals(dbType)) {
lexer.nextToken();
((DB2SelectQueryBlock) queryBlock).setIsolation(DB2SelectQueryBlock.Isolation.RS);
} else if (lexer.identifierEquals(FnvHash.Constants.RR)
&& JdbcConstants.DB2.equals(dbType)) {
lexer.nextToken();
((DB2SelectQueryBlock) queryBlock).setIsolation(DB2SelectQueryBlock.Isolation.RR);
} else if (lexer.identifierEquals(FnvHash.Constants.CS)
&& JdbcConstants.DB2.equals(dbType)) {
lexer.nextToken();
((DB2SelectQueryBlock) queryBlock).setIsolation(DB2SelectQueryBlock.Isolation.CS);
} else if (lexer.identifierEquals(FnvHash.Constants.UR)
&& JdbcConstants.DB2.equals(dbType)) {
lexer.nextToken();
((DB2SelectQueryBlock) queryBlock).setIsolation(DB2SelectQueryBlock.Isolation.UR);
} else {
throw new ParserException("TODO " + lexer.info());
}
}
@@ -559,5 +559,10 @@ public final class FnvHash {
long ENDS = fnv1a_64_lower("ENDS");
long BINARY = fnv1a_64_lower("BINARY");
long ISOPEN = fnv1a_64_lower("ISOPEN");
long RS = fnv1a_64_lower("RS");
long RR = fnv1a_64_lower("RR");
long CS = fnv1a_64_lower("CS");
long UR = fnv1a_64_lower("UR");
}
}