mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improve sql parser
This commit is contained in:
@@ -20,11 +20,11 @@ import java.util.List;
|
||||
import com.alibaba.druid.sql.ast.SQLExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr;
|
||||
|
||||
public class ExportParameterVisitorUtils {
|
||||
|
||||
@@ -48,8 +48,8 @@ public class ExportParameterVisitorUtils {
|
||||
return new SQLVariantRefExpr("?");
|
||||
}
|
||||
|
||||
if (param instanceof MySqlBooleanExpr) {
|
||||
Object value = ((MySqlBooleanExpr) param).getValue();
|
||||
if (param instanceof SQLBooleanExpr) {
|
||||
Object value = ((SQLBooleanExpr) param).getValue();
|
||||
parameters.add(value);
|
||||
return new SQLVariantRefExpr("?");
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ import com.alibaba.druid.sql.ast.expr.SQLAnyExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCaseExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCastExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
|
||||
@@ -536,6 +537,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
|
||||
visitAggreateRest(x);
|
||||
|
||||
print(")");
|
||||
|
||||
if (x.getWithinGroup() != null) {
|
||||
print(" WITHIN GROUP (");
|
||||
x.getWithinGroup().accept(this);
|
||||
print(")");
|
||||
}
|
||||
|
||||
if (x.getOver() != null) {
|
||||
print(" ");
|
||||
@@ -1935,4 +1942,13 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
|
||||
x.getBody().accept(this);
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean visit(SQLBooleanExpr x) {
|
||||
print(x.getValue() ? "true" : "false");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void endVisit(SQLBooleanExpr x) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.alibaba.druid.sql.ast.expr.SQLAllExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLAnyExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCaseExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCastExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
|
||||
@@ -534,4 +535,9 @@ public interface SQLASTVisitor {
|
||||
void endVisit(SQLDropProcedureStatement x);
|
||||
|
||||
boolean visit(SQLDropProcedureStatement x);
|
||||
|
||||
void endVisit(SQLBooleanExpr x);
|
||||
|
||||
boolean visit(SQLBooleanExpr x);
|
||||
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.alibaba.druid.sql.ast.expr.SQLAllExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLAnyExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCaseExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCastExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
|
||||
@@ -1041,4 +1042,15 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor {
|
||||
public boolean visit(SQLDropProcedureStatement x) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(SQLBooleanExpr x) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(SQLBooleanExpr x) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCaseExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLHexExpr;
|
||||
@@ -143,4 +144,11 @@ public class SQLEvalVisitorImpl extends SQLASTVisitorAdapter implements SQLEvalV
|
||||
public void unregisterFunction(String funcName) {
|
||||
functions.remove(funcName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(SQLBooleanExpr x) {
|
||||
x.getAttributes().put(EVAL_VALUE, x.getValue());
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1117,11 +1117,15 @@ public class SQLEvalVisitorUtils {
|
||||
if (val == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (val == EVAL_VALUE_NULL) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (val instanceof Boolean) {
|
||||
return (Boolean) val;
|
||||
}
|
||||
|
||||
|
||||
if (val instanceof Number) {
|
||||
return ((Number) val).intValue() > 0;
|
||||
}
|
||||
|
||||
@@ -980,6 +980,8 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter {
|
||||
|
||||
public boolean visit(SQLAggregateExpr x) {
|
||||
accept(x.getArguments());
|
||||
accept(x.getWithinGroup());
|
||||
accept(x.getOver());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user