public void put(Expression expression, Expression rewritten) { expressionToExpressions.put(translateNamesToSymbols(expression), rewritten); }
public void put(Expression expression, Expression rewritten) { expressionToExpressions.put(translateNamesToSymbols(expression), rewritten); }
public boolean containsSymbol(Expression expression) { if (expression instanceof FieldReference) { int field = ((FieldReference) expression).getFieldIndex(); return fieldSymbols[field] != null; } Expression translated = translateNamesToSymbols(expression); return expressionToSymbols.containsKey(translated); }
public boolean containsSymbol(Expression expression) { if (expression instanceof FieldReference) { int field = ((FieldReference) expression).getFieldIndex(); return fieldSymbols[field] != null; } Expression translated = translateNamesToSymbols(expression); return expressionToSymbols.containsKey(translated); }
public Expression rewrite(Expression expression) { // first, translate names from sql-land references to plan symbols Expression mapped = translateNamesToSymbols(expression); // then rewrite subexpressions in terms of the current mappings return ExpressionTreeRewriter.rewriteWith(new ExpressionRewriter<Void>() { @Override public Expression rewriteExpression(Expression node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { if (expressionToSymbols.containsKey(node)) { return expressionToSymbols.get(node).toSymbolReference(); } Expression translated = expressionToExpressions.getOrDefault(node, node); return treeRewriter.defaultRewrite(translated, context); } }, mapped); }
public Symbol get(Expression expression) { if (expression instanceof FieldReference) { int field = ((FieldReference) expression).getFieldIndex(); checkArgument(fieldSymbols[field] != null, "No mapping for field: %s", field); return fieldSymbols[field]; } Expression translated = translateNamesToSymbols(expression); if (!expressionToSymbols.containsKey(translated)) { checkArgument(expressionToExpressions.containsKey(translated), "No mapping for expression: %s", expression); return get(expressionToExpressions.get(translated)); } return expressionToSymbols.get(translated); }
public Expression rewrite(Expression expression) { // first, translate names from sql-land references to plan symbols Expression mapped = translateNamesToSymbols(expression); // then rewrite subexpressions in terms of the current mappings return ExpressionTreeRewriter.rewriteWith(new ExpressionRewriter<Void>() { @Override public Expression rewriteExpression(Expression node, Void context, ExpressionTreeRewriter<Void> treeRewriter) { if (expressionToSymbols.containsKey(node)) { return expressionToSymbols.get(node).toSymbolReference(); } Expression translated = expressionToExpressions.getOrDefault(node, node); return treeRewriter.defaultRewrite(translated, context); } }, mapped); }
public Symbol get(Expression expression) { if (expression instanceof FieldReference) { int field = ((FieldReference) expression).getFieldIndex(); checkArgument(fieldSymbols[field] != null, "No mapping for field: %s", field); return fieldSymbols[field]; } Expression translated = translateNamesToSymbols(expression); if (!expressionToSymbols.containsKey(translated)) { checkArgument(expressionToExpressions.containsKey(translated), "No mapping for expression: %s", expression); return get(expressionToExpressions.get(translated)); } return expressionToSymbols.get(translated); }
public void put(Expression expression, Symbol symbol) { if (expression instanceof FieldReference) { int fieldIndex = ((FieldReference) expression).getFieldIndex(); fieldSymbols[fieldIndex] = symbol; expressionToSymbols.put(rewriteBase.getSymbol(fieldIndex).toSymbolReference(), symbol); return; } Expression translated = translateNamesToSymbols(expression); expressionToSymbols.put(translated, symbol); // also update the field mappings if this expression is a field reference rewriteBase.getScope().tryResolveField(expression) .filter(ResolvedField::isLocal) .ifPresent(field -> fieldSymbols[field.getHierarchyFieldIndex()] = symbol); }
public void put(Expression expression, Symbol symbol) { if (expression instanceof FieldReference) { int fieldIndex = ((FieldReference) expression).getFieldIndex(); fieldSymbols[fieldIndex] = symbol; expressionToSymbols.put(rewriteBase.getSymbol(fieldIndex).toSymbolReference(), symbol); return; } Expression translated = translateNamesToSymbols(expression); expressionToSymbols.put(translated, symbol); // also update the field mappings if this expression is a field reference rewriteBase.getScope().tryResolveField(expression) .filter(ResolvedField::isLocal) .ifPresent(field -> fieldSymbols[field.getHierarchyFieldIndex()] = symbol); }