Search in sources :

Example 86 with SQLExpr

use of com.alibaba.druid.sql.ast.SQLExpr in project druid by alibaba.

the class Concat method eval.

public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) {
    StringBuilder buf = new StringBuilder();
    for (SQLExpr item : x.getParameters()) {
        item.accept(visitor);
        Object itemValue = item.getAttributes().get(EVAL_VALUE);
        if (itemValue == null) {
            return null;
        }
        buf.append(itemValue.toString());
    }
    return buf.toString();
}
Also used : SQLExpr(com.alibaba.druid.sql.ast.SQLExpr)

Example 87 with SQLExpr

use of com.alibaba.druid.sql.ast.SQLExpr in project druid by alibaba.

the class Greatest method eval.

public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) {
    Object result = null;
    for (SQLExpr item : x.getParameters()) {
        item.accept(visitor);
        Object itemValue = item.getAttributes().get(EVAL_VALUE);
        if (result == null) {
            result = itemValue;
        } else {
            if (SQLEvalVisitorUtils.gt(itemValue, result)) {
                result = itemValue;
            }
        }
    }
    return result;
}
Also used : SQLExpr(com.alibaba.druid.sql.ast.SQLExpr)

Example 88 with SQLExpr

use of com.alibaba.druid.sql.ast.SQLExpr in project druid by alibaba.

the class Hex method eval.

public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) {
    if (x.getParameters().size() != 1) {
        throw new ParserException("argument's != 1, " + x.getParameters().size());
    }
    SQLExpr param0 = x.getParameters().get(0);
    param0.accept(visitor);
    Object param0Value = param0.getAttributes().get(EVAL_VALUE);
    if (param0Value == null) {
        return SQLEvalVisitor.EVAL_ERROR;
    }
    if (param0Value instanceof String) {
        byte[] bytes = ((String) param0Value).getBytes();
        String result = HexBin.encode(bytes);
        return result;
    }
    if (param0Value instanceof Number) {
        long value = ((Number) param0Value).longValue();
        String result = Long.toHexString(value).toUpperCase();
        return result;
    }
    return SQLEvalVisitor.EVAL_ERROR;
}
Also used : ParserException(com.alibaba.druid.sql.parser.ParserException) SQLExpr(com.alibaba.druid.sql.ast.SQLExpr)

Example 89 with SQLExpr

use of com.alibaba.druid.sql.ast.SQLExpr in project druid by alibaba.

the class Insert method eval.

public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) {
    if (x.getParameters().size() != 4) {
        return SQLEvalVisitor.EVAL_ERROR;
    }
    SQLExpr param0 = x.getParameters().get(0);
    SQLExpr param1 = x.getParameters().get(1);
    SQLExpr param2 = x.getParameters().get(2);
    SQLExpr param3 = x.getParameters().get(3);
    param0.accept(visitor);
    param1.accept(visitor);
    param2.accept(visitor);
    param3.accept(visitor);
    Object param0Value = param0.getAttributes().get(EVAL_VALUE);
    Object param1Value = param1.getAttributes().get(EVAL_VALUE);
    Object param2Value = param2.getAttributes().get(EVAL_VALUE);
    Object param3Value = param3.getAttributes().get(EVAL_VALUE);
    if (!(param0Value instanceof String)) {
        return SQLEvalVisitor.EVAL_ERROR;
    }
    if (!(param1Value instanceof Number)) {
        return SQLEvalVisitor.EVAL_ERROR;
    }
    if (!(param2Value instanceof Number)) {
        return SQLEvalVisitor.EVAL_ERROR;
    }
    if (!(param3Value instanceof String)) {
        return SQLEvalVisitor.EVAL_ERROR;
    }
    String str = (String) param0Value;
    int pos = ((Number) param1Value).intValue();
    int len = ((Number) param2Value).intValue();
    String newstr = (String) param3Value;
    if (pos <= 0) {
        return str;
    }
    if (pos == 1) {
        if (len > str.length()) {
            return newstr;
        }
        return newstr + str.substring(len);
    }
    String first = str.substring(0, pos - 1);
    if (pos + len - 1 > str.length()) {
        return first + newstr;
    }
    return first + newstr + str.substring(pos + len - 1);
}
Also used : SQLExpr(com.alibaba.druid.sql.ast.SQLExpr)

Example 90 with SQLExpr

use of com.alibaba.druid.sql.ast.SQLExpr in project druid by alibaba.

the class Isnull method eval.

public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) {
    final List<SQLExpr> parameters = x.getParameters();
    if (parameters.size() == 0) {
        return EVAL_ERROR;
    }
    SQLExpr condition = parameters.get(0);
    condition.accept(visitor);
    Object itemValue = condition.getAttributes().get(EVAL_VALUE);
    if (itemValue == EVAL_VALUE_NULL) {
        return Boolean.TRUE;
    } else if (itemValue == null) {
        return null;
    } else {
        return Boolean.FALSE;
    }
}
Also used : SQLExpr(com.alibaba.druid.sql.ast.SQLExpr)

Aggregations

SQLExpr (com.alibaba.druid.sql.ast.SQLExpr)225 SQLIdentifierExpr (com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr)42 SQLName (com.alibaba.druid.sql.ast.SQLName)33 SQLBinaryOpExpr (com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr)30 ParserException (com.alibaba.druid.sql.parser.ParserException)23 SQLObject (com.alibaba.druid.sql.ast.SQLObject)22 SQLPropertyExpr (com.alibaba.druid.sql.ast.expr.SQLPropertyExpr)17 SQLIntegerExpr (com.alibaba.druid.sql.ast.expr.SQLIntegerExpr)16 SQLCharExpr (com.alibaba.druid.sql.ast.expr.SQLCharExpr)13 SQLSelectQueryBlock (com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock)13 SQLStatement (com.alibaba.druid.sql.ast.SQLStatement)12 ArrayList (java.util.ArrayList)12 SQLVariantRefExpr (com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr)11 SQLMethodInvokeExpr (com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr)10 SQLSelectItem (com.alibaba.druid.sql.ast.statement.SQLSelectItem)10 SQLSelectQuery (com.alibaba.druid.sql.ast.statement.SQLSelectQuery)10 SQLOrderBy (com.alibaba.druid.sql.ast.SQLOrderBy)8 MySqlSelectQueryBlock (com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock)8 SQLNumberExpr (com.alibaba.druid.sql.ast.expr.SQLNumberExpr)7 SQLExprTableSource (com.alibaba.druid.sql.ast.statement.SQLExprTableSource)7