private JavaFunction readJavaFunction(Schema schema, String functionName) { FunctionAlias functionAlias = null; if (schema != null) { functionAlias = schema.findFunction(functionName); } else { functionAlias = findFunctionAlias(session.getCurrentSchemaName(), functionName); } if (functionAlias == null) { throw DbException.get(ErrorCode.FUNCTION_NOT_FOUND_1, functionName); } Expression[] args; ArrayList<Expression> argList = New.arrayList(); int numArgs = 0; while (!readIf(")")) { if (numArgs++ > 0) { read(","); } argList.add(readExpression()); } args = argList.toArray(new Expression[0]); return new JavaFunction(functionAlias, args); }
@Override public Expression[] getExpressionColumns(Session session) { switch (getType()) { case Value.RESULT_SET: ValueResultSet rs = getValueForColumnList(session, getArgs()); return getExpressionColumns(session, rs.getResultSet()); case Value.ARRAY: return getExpressionColumns(session, (ValueArray) getValue(session)); } return super.getExpressionColumns(session); }
@Override public Expression optimize(Session session) { boolean allConst = isDeterministic(); for (int i = 0, len = args.length; i < len; i++) { Expression e = args[i].optimize(session); args[i] = e; allConst &= e.isConstant(); } if (allConst) { return ValueExpression.get(getValue(session)); } return this; }
@Override public int getScale() { return DataType.getDataType(getType()).defaultScale; }
@Override public boolean isEverything(ExpressionVisitor visitor) { switch (visitor.getType()) { case ExpressionVisitor.DETERMINISTIC: if (!isDeterministic()) { return false; } // only if all parameters are deterministic as well break; case ExpressionVisitor.GET_DEPENDENCIES: visitor.addDependency(functionAlias); break; default: } for (Expression e : args) { if (e != null && !e.isEverything(visitor)) { return false; } } return true; }
@Override public int getScale() { return DataType.getDataType(getType()).defaultScale; }
@Override public boolean isEverything(ExpressionVisitor visitor) { switch (visitor.getType()) { case ExpressionVisitor.DETERMINISTIC: if (!isDeterministic()) { return false; } // only if all parameters are deterministic as well break; case ExpressionVisitor.GET_DEPENDENCIES: visitor.addDependency(functionAlias); break; default: } for (Expression e : args) { if (e != null && !e.isEverything(visitor)) { return false; } } return true; }
@Override public Expression[] getExpressionColumns(Session session) { switch (getType()) { case Value.RESULT_SET: ValueResultSet rs = getValueForColumnList(session, getArgs()); return getExpressionColumns(session, rs.getResultSet()); case Value.ARRAY: return getExpressionColumns(session, (ValueArray) getValue(session)); } return super.getExpressionColumns(session); }
private Expression readFunctionWithoutParameters(String name) { if (readIf("(")) { read(")"); } if (database.isAllowBuiltinAliasOverride()) { FunctionAlias functionAlias = database.getSchema(session.getCurrentSchemaName()).findFunction(name); if (functionAlias != null) { return new JavaFunction(functionAlias, new Expression[0]); } } Function function = Function.getFunction(database, name); function.doneWithParameters(); return function; }
@Override public Expression optimize(Session session) { boolean allConst = isDeterministic(); for (int i = 0, len = args.length; i < len; i++) { Expression e = args[i].optimize(session); args[i] = e; allConst &= e.isConstant(); } if (allConst) { return ValueExpression.get(getValue(session)); } return this; }
@Override public int getScale() { return DataType.getDataType(getType()).defaultScale; }
@Override public boolean isEverything(ExpressionVisitor visitor) { switch (visitor.getType()) { case ExpressionVisitor.DETERMINISTIC: if (!isDeterministic()) { return false; } // only if all parameters are deterministic as well break; case ExpressionVisitor.GET_DEPENDENCIES: visitor.addDependency(functionAlias); break; default: } for (Expression e : args) { if (e != null && !e.isEverything(visitor)) { return false; } } return true; }
@Override public Expression[] getExpressionColumns(Session session) { switch (getType()) { case Value.RESULT_SET: ValueResultSet rs = getValueForColumnList(session, getArgs()); return getExpressionColumns(session, rs.getResultSet()); case Value.ARRAY: return getExpressionColumns(session, (ValueArray) getValue(session)); } return super.getExpressionColumns(session); }
r = new JavaFunction(f, args); } else { Column col = parseColumnWithType(null);
@Override public Expression optimize(Session session) { boolean allConst = isDeterministic(); for (int i = 0, len = args.length; i < len; i++) { Expression e = args[i].optimize(session); args[i] = e; allConst &= e.isConstant(); } if (allConst) { return ValueExpression.get(getValue(session)); } return this; }
private JavaFunction readJavaFunction(Schema schema, String functionName) { FunctionAlias functionAlias = null; if (schema != null) { functionAlias = schema.findFunction(functionName); } else { functionAlias = findFunctionAlias(session.getCurrentSchemaName(), functionName); } if (functionAlias == null) { throw DbException.get(ErrorCode.FUNCTION_NOT_FOUND_1, functionName); } Expression[] args; ArrayList<Expression> argList = New.arrayList(); int numArgs = 0; while (!readIf(")")) { if (numArgs++ > 0) { read(","); } argList.add(readExpression()); } args = new Expression[numArgs]; argList.toArray(args); JavaFunction func = new JavaFunction(functionAlias, args); return func; }
private JavaFunction readJavaFunction(Schema schema, String functionName) { FunctionAlias functionAlias = null; if (schema != null) { functionAlias = schema.findFunction(functionName); } else { functionAlias = findFunctionAlias(session.getCurrentSchemaName(), functionName); } if (functionAlias == null) { throw DbException.get(ErrorCode.FUNCTION_NOT_FOUND_1, functionName); } Expression[] args; ArrayList<Expression> argList = New.arrayList(); int numArgs = 0; while (!readIf(")")) { if (numArgs++ > 0) { read(","); } argList.add(readExpression()); } args = new Expression[numArgs]; argList.toArray(args); JavaFunction func = new JavaFunction(functionAlias, args); return func; }
private JavaFunction readJavaFunction(String name) throws SQLException { FunctionAlias functionAlias = database.findFunctionAlias(name); if (functionAlias == null) { // TODO compatibility: support 'on the fly java functions' as HSQLDB // ( CALL "java.lang.Math.sqrt"(2.0) ) throw Message.getSQLException(ErrorCode.FUNCTION_NOT_FOUND_1, name); } int paramCount = functionAlias.getParameterCount(); Expression[] args = new Expression[paramCount]; for (int i = 0; i < args.length; i++) { if (i > 0) { read(","); } args[i] = readExpression(); } read(")"); JavaFunction func = new JavaFunction(functionAlias, args); return func; }