@Override public FromTerm visit(FromTerm fromTerm, Void arg) throws CompilationException { // Visit the left expression of a from term. Expression fromExpr = (Expression) fromTerm.getLeftExpression().accept(this, arg); VariableExpr fromVar = (VariableExpr) fromTerm.getLeftVariable().accept(this, arg); VariableExpr positionVar = fromTerm.getPositionalVariable() == null ? null : (VariableExpr) fromTerm.getPositionalVariable().accept(this, arg); // Visits join/unnest/nest clauses. List<AbstractBinaryCorrelateClause> correlateClauses = new ArrayList<>(); for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) { correlateClauses.add((AbstractBinaryCorrelateClause) correlateClause.accept(this, arg)); } FromTerm copy = new FromTerm(fromExpr, fromVar, positionVar, correlateClauses); copy.setSourceLocation(fromTerm.getSourceLocation()); return copy; }
@Override public Boolean visit(FromClause fromClause, ILangExpression arg) throws CompilationException { for (FromTerm fromTerm : fromClause.getFromTerms()) { if (fromTerm.accept(this, arg)) { return false; } } return true; }
@Override public Void visit(FromTerm fromTerm, Integer step) throws CompilationException { fromTerm.getLeftExpression().accept(this, step + 2); out.print(" as "); fromTerm.getLeftVariable().accept(this, step + 2); if (fromTerm.hasPositionalVariable()) { out.print(" at "); fromTerm.getPositionalVariable().accept(this, step + 2); } if (fromTerm.hasCorrelateClauses()) { for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) { correlateClause.accept(this, step); } } return null; }
@Override public Expression visit(FromTerm fromTerm, ILangExpression arg) throws CompilationException { // Visit the left expression of a from term. fromTerm.setLeftExpression(visit(fromTerm.getLeftExpression(), arg)); // Visits join/unnest/nest clauses. for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) { correlateClause.accept(this, arg); } return null; }
leftVar = ExpressionToVariableUtil.getGeneratedVariable(leftExpr, true); FromTerm fromTerm = new FromTerm(leftExpr, leftVar, posVar, correlateClauses); fromTerm.setSourceLocation(leftExpr.getSourceLocation()); {if (true) return fromTerm;} throw new Error("Missing return statement in function");
@Override public Boolean visit(FromTerm fromTerm, ILangExpression arg) throws CompilationException { if (visit(fromTerm.getLeftExpression(), arg)) { return true; } for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) { if (correlateClause.accept(this, arg)) { return true; } } return false; }
@Override public Expression visit(FromClause fromClause, ILangExpression arg) throws CompilationException { Scope scopeForFromClause = scopeChecker.extendCurrentScope(); for (FromTerm fromTerm : fromClause.getFromTerms()) { fromTerm.accept(this, fromClause); // Merges the variables defined in the current from term into the scope of the current from clause. Scope scopeForFromTerm = scopeChecker.removeCurrentScope(); mergeScopes(scopeForFromClause, scopeForFromTerm, fromTerm.getSourceLocation()); } return null; }
@Override public Boolean visit(FromTerm fromTerm, ILangExpression expr) throws CompilationException { return expr == fromTerm.getLeftExpression(); }
FeedRuntimeType.INTAKE.toString(), feedConnection.getDatasetName(), feedConnection.getOutputType()); CallExpr datasrouceCallFunction = new CallExpr(new FunctionSignature(BuiltinFunctions.FEED_COLLECT), exprList); FromTerm fromterm = new FromTerm(datasrouceCallFunction, fromTermLeftExpr, null, null); FromClause fromClause = new FromClause(Arrays.asList(fromterm)); WhereClause whereClause = null;
@Override public Boolean visit(FromTerm fromTerm, List<FunctionDecl> func) throws CompilationException { boolean changed = false; Pair<Boolean, Expression> p = inlineUdfsInExpr(fromTerm.getLeftExpression(), func); fromTerm.setLeftExpression(p.second); changed |= p.first; for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) { changed |= correlateClause.accept(this, func); } return changed; }
/** * rewrites {@code expr -> FROM expr AS i SELECT DISTINCT VALUE i} */ private Expression rewriteArgument(Expression argExpr) throws CompilationException { SourceLocation sourceLoc = argExpr.getSourceLocation(); // From clause VariableExpr fromBindingVar = new VariableExpr(context.newVariable()); fromBindingVar.setSourceLocation(sourceLoc); FromTerm fromTerm = new FromTerm(argExpr, fromBindingVar, null, null); fromTerm.setSourceLocation(sourceLoc); FromClause fromClause = new FromClause(Collections.singletonList(fromTerm)); fromClause.setSourceLocation(sourceLoc); // Select clause. SelectElement selectElement = new SelectElement(fromBindingVar); selectElement.setSourceLocation(sourceLoc); SelectClause selectClause = new SelectClause(selectElement, null, true); selectClause.setSourceLocation(sourceLoc); // Construct the select expression. SelectBlock selectBlock = new SelectBlock(selectClause, fromClause, null, null, null); selectBlock.setSourceLocation(sourceLoc); SelectSetOperation selectSetOperation = new SelectSetOperation(new SetOperationInput(selectBlock, null), null); selectSetOperation.setSourceLocation(sourceLoc); SelectExpression selectExpr = new SelectExpression(null, selectSetOperation, null, null, true); selectExpr.setSourceLocation(sourceLoc); return selectExpr; } }
@Override public Void visit(FromTerm fromTerm, Void arg) throws CompilationException { fromTerm.getLeftExpression().accept(this, arg); for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) { correlateClause.accept(this, arg); } return null; }
@Override public Void visit(FromTerm fromTerm, Integer step) throws CompilationException { fromTerm.getLeftExpression().accept(this, step); out.print(skip(step) + "AS "); fromTerm.getLeftVariable().accept(this, 0); if (fromTerm.hasPositionalVariable()) { out.println(" AT "); fromTerm.getPositionalVariable().accept(this, 0); } if (fromTerm.hasCorrelateClauses()) { for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) { correlateClause.accept(this, step); } } return null; }
@Override public Pair<ILangExpression, VariableSubstitutionEnvironment> visit(FromTerm fromTerm, VariableSubstitutionEnvironment env) throws CompilationException { VariableExpr leftVar = fromTerm.getLeftVariable(); VariableExpr newLeftVar = generateNewVariable(context, leftVar); VariableExpr newLeftPosVar = fromTerm.hasPositionalVariable() ? generateNewVariable(context, fromTerm.getPositionalVariable()) : null; Expression newLeftExpr = (Expression) visitUnnestBindingExpression(fromTerm.getLeftExpression(), env).first; List<AbstractBinaryCorrelateClause> newCorrelateClauses = new ArrayList<>(); for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) { if (correlateClause.getClauseType() == ClauseType.UNNEST_CLAUSE) { FromTerm newFromTerm = new FromTerm(newLeftExpr, newLeftVar, newLeftPosVar, newCorrelateClauses); newFromTerm.setSourceLocation(fromTerm.getSourceLocation()); return new Pair<>(newFromTerm, currentEnv);
FromTerm fromTerm = new FromTerm(groupVar, fromBindingVar, null, null); fromTerm.setSourceLocation(sourceLoc); FromClause fromClause = new FromClause(Collections.singletonList(fromTerm)); fromClause.setSourceLocation(sourceLoc);
@Override public Void visit(FromClause fromClause, Void arg) throws CompilationException { for (FromTerm fromTerm : fromClause.getFromTerms()) { fromTerm.accept(this, arg); } return null; }
public static List<VariableExpr> getBindingVariables(FromTerm fromTerm) { List<VariableExpr> bindingVars = new ArrayList<>(); if (fromTerm == null) { return bindingVars; } bindingVars.add(fromTerm.getLeftVariable()); if (fromTerm.hasPositionalVariable()) { bindingVars.add(fromTerm.getPositionalVariable()); } for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) { bindingVars.add(correlateClause.getRightVariable()); if (correlateClause.hasPositionalVariable()) { bindingVars.add(correlateClause.getPositionalVariable()); } } return bindingVars; }
VariableExpr newBindingVar = new VariableExpr(context.newVariable()); // Binding variable for the subquery. newBindingVar.setSourceLocation(sourceLoc); FromTerm newFromTerm = new FromTerm(nestedSelectExpression, newBindingVar, null, null); newFromTerm.setSourceLocation(sourceLoc); FromClause newFromClause = new FromClause(new ArrayList<>(Collections.singletonList(newFromTerm))); newFromClause.setSourceLocation(sourceLoc);
@Override public Boolean visit(FromClause fromClause, List<FunctionDecl> func) throws CompilationException { boolean changed = false; for (FromTerm fromTerm : fromClause.getFromTerms()) { changed |= fromTerm.accept(this, func); } return changed; }
private void getFromBindings(FromClause fromClause, List<FieldBinding> outFieldBindings, Set<String> outFieldNames) throws CompilationException { for (FromTerm fromTerm : fromClause.getFromTerms()) { outFieldBindings.add(getFieldBinding(fromTerm.getLeftVariable(), outFieldNames)); if (fromTerm.hasPositionalVariable()) { outFieldBindings.add(getFieldBinding(fromTerm.getPositionalVariable(), outFieldNames)); } if (!fromTerm.hasCorrelateClauses()) { continue; } for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) { outFieldBindings.add(getFieldBinding(correlateClause.getRightVariable(), outFieldNames)); if (correlateClause.hasPositionalVariable()) { outFieldBindings.add(getFieldBinding(correlateClause.getPositionalVariable(), outFieldNames)); } } } }