improve sql wall, support rand

This commit is contained in:
wenshao
2013-09-02 18:53:55 +08:00
parent 3afd71a41d
commit 5fab9eab1e
11 changed files with 100 additions and 4 deletions
@@ -30,6 +30,8 @@ public interface SQLEvalVisitor extends SQLASTVisitor {
Function getFunction(String funcName);
void registerFunction(String funcName, Function function);
void unregisterFunction(String funcName);
List<Object> getParameters();
@@ -138,4 +138,9 @@ public class SQLEvalVisitorImpl extends SQLASTVisitorAdapter implements SQLEvalV
public boolean visit(SQLIdentifierExpr x) {
return SQLEvalVisitorUtils.visit(this, x);
}
@Override
public void unregisterFunction(String funcName) {
functions.remove(funcName);
}
}
@@ -228,7 +228,11 @@ public class SQLEvalVisitorUtils {
public static boolean visit(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) {
String methodName = x.getMethodName().toLowerCase();
Function function = functions.get(methodName);
Function function = visitor.getFunction(methodName);
if (function == null) {
function = functions.get(methodName);
}
if (function != null) {
Object result = function.eval(visitor, x);
@@ -0,0 +1,15 @@
package com.alibaba.druid.sql.visitor.functions;
import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
import com.alibaba.druid.sql.visitor.SQLEvalVisitor;
public class Nil implements Function {
public final static Nil instance = new Nil();
@Override
public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) {
return null;
}
}