private boolean isEquiJoin(Mutable<ILogicalExpression> conditionExpr) { AbstractLogicalExpression expr = (AbstractLogicalExpression) conditionExpr.getValue(); if (expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) { AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr; FunctionIdentifier funcIdent = funcExpr.getFunctionIdentifier(); if (funcIdent != AlgebricksBuiltinFunctions.AND && funcIdent != AlgebricksBuiltinFunctions.EQ) { return false; } } return true; } }
private void gatherFunctionCalls(Mutable<ILogicalExpression> exprRef, List<Mutable<ILogicalExpression>> funcExprs) { AbstractLogicalExpression expr = (AbstractLogicalExpression) exprRef.getValue(); if (expr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) { return; } // Check whether the function is a function we want to push. AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr; if (toPushFuncIdents.contains(funcExpr.getFunctionIdentifier())) { funcExprs.add(exprRef); } // Traverse arguments. for (Mutable<ILogicalExpression> funcArg : funcExpr.getArguments()) { gatherFunctionCalls(funcArg, funcExprs); } }
@Override public boolean transform(Mutable<ILogicalExpression> exprRef) { ILogicalExpression e = exprRef.getValue(); switch (((AbstractLogicalExpression) e).getExpressionTag()) { case VARIABLE: {
private static ILogicalExpression resolveFieldExpression(AbstractLogicalExpression constr, Object accessKey, IVariableTypeEnvironment typeEnvironment, FieldResolver resolver) throws AlgebricksException { if (constr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) { return null; } AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) constr; if (!fce.getFunctionIdentifier().equals(BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR) && !fce.getFunctionIdentifier().equals(BuiltinFunctions.CLOSED_RECORD_CONSTRUCTOR)) { return null; } return resolver.resolve(accessKey, fce, typeEnvironment); }
if (expr.getExpressionTag() != LogicalExpressionTag.VARIABLE && expr.getExpressionTag() != LogicalExpressionTag.CONSTANT) { exprEqClass = new ExprEquivalenceClass(op, exprRef); exprEqClassMap.put(expr, exprEqClass); if (expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) { AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr; for (Mutable<ILogicalExpression> arg : funcExpr.getArguments()) {
expr = (AbstractLogicalExpression) assignOp.getExpressions().get(varIndex).getValue(); if (expr == null || expr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) { return null;
expr = (AbstractLogicalExpression) assignOp.getExpressions().get(assignVarIndex).getValue(); if (expr.getExpressionTag() == LogicalExpressionTag.CONSTANT) { return Collections.emptyList(); UnnestOperator unnestOp = (UnnestOperator) op; expr = (AbstractLogicalExpression) unnestOp.getExpressionRef().getValue(); if (expr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) { return Collections.emptyList(); if (expr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) { return Collections.emptyList();
if (expr1.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) { AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expr1;