improve SQL Eval support

This commit is contained in:
wenshao
2013-03-30 23:05:08 +08:00
parent 54e3ec9323
commit 275e4b68b7
50 changed files with 1163 additions and 51 deletions
@@ -323,12 +323,12 @@ public class MySqlExprParser extends SQLExprParser {
} else if (lexer.token() == Token.FROM) {
lexer.nextToken();
SQLExpr from = expr();
methodInvokeExpr.putAttribute("FROM", from);
methodInvokeExpr.getParameters().add(from);
if (lexer.token() == Token.FOR) {
lexer.nextToken();
SQLExpr forExpr = expr();
methodInvokeExpr.putAttribute("FOR", forExpr);
methodInvokeExpr.getParameters().add(forExpr);
}
break;
} else if (lexer.token() == Token.RPAREN) {
@@ -15,6 +15,9 @@
*/
package com.alibaba.druid.sql.dialect.postgresql.parser;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGOrderBy;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.SQLExprParser;
@@ -68,4 +71,16 @@ public class PGExprParser extends SQLExprParser {
return null;
}
public SQLExpr primaryRest(SQLExpr expr) {
if (lexer.token() == Token.COLONCOLON) {
lexer.nextToken();
SQLExpr typeExpr = this.expr();
SQLBinaryOpExpr castExpr = new SQLBinaryOpExpr(expr, SQLBinaryOperator.PostgresStyleTypeCast, typeExpr);
return primaryRest(castExpr);
}
return super.primaryRest(expr);
}
}