@Override public Boolean visitFieldAccess(RexFieldAccess fieldAccess) { // "<expr>.FIELD" is constant iff "<expr>" is constant. return fieldAccess.getReferenceExpr().accept(this); }
@Override public Boolean visitFieldAccess(RexFieldAccess fieldAccess) { // "<expr>.FIELD" is constant iff "<expr>" is constant. return fieldAccess.getReferenceExpr().accept(this); }
@Override public Boolean visitFieldAccess(RexFieldAccess paramRexFieldAccess) { return paramRexFieldAccess.getReferenceExpr().accept(this); }
private static void findCorrelatedVar(RexNode node, Set<CorrelationId> allVars) { if(node instanceof RexCall) { RexCall nd = (RexCall)node; for (RexNode rn : nd.getOperands()) { if (rn instanceof RexFieldAccess) { final RexNode ref = ((RexFieldAccess) rn).getReferenceExpr(); if (ref instanceof RexCorrelVariable) { allVars.add(((RexCorrelVariable) ref).id); } } else { findCorrelatedVar(rn, allVars); } } } }
private static void findCorrelatedVar(RexNode node, Set<CorrelationId> allVars) { if(node instanceof RexCall) { RexCall nd = (RexCall)node; for (RexNode rn : nd.getOperands()) { if (rn instanceof RexFieldAccess) { final RexNode ref = ((RexFieldAccess) rn).getReferenceExpr(); if (ref instanceof RexCorrelVariable) { allVars.add(((RexCorrelVariable) ref).id); } } else { findCorrelatedVar(rn, allVars); } } } }
@Override public Void visitFieldAccess(RexFieldAccess fieldAccess) { final RexNode ref = fieldAccess.getReferenceExpr(); if (ref instanceof RexCorrelVariable) { final RexCorrelVariable var = (RexCorrelVariable) ref; if (mapFieldAccessToCorVar.containsKey(fieldAccess)) { //for cases where different Rel nodes are referring to // same correlation var (e.g. in case of NOT IN) // avoid generating another correlation var // and record the 'rel' is using the same correlation mapRefRelToCorRef.put(rel, mapFieldAccessToCorVar.get(fieldAccess)); } else { final CorRef correlation = new CorRef(var.id, fieldAccess.getField().getIndex(), corrIdGenerator++); mapFieldAccessToCorVar.put(fieldAccess, correlation); mapRefRelToCorRef.put(rel, correlation); } } return super.visitFieldAccess(fieldAccess); }
protected RexNode handle(RexFieldAccess fieldAccess) { final RexCorrelVariable v = (RexCorrelVariable) fieldAccess.getReferenceExpr(); if (v.id.equals(correlation)) { fieldsUsedBuilder.set(fieldAccess.getField().getIndex()); } return fieldAccess; } });
@Override public Void visitFieldAccess(RexFieldAccess fieldAccess) { final RexNode ref = fieldAccess.getReferenceExpr(); if (ref instanceof RexCorrelVariable) { final RexCorrelVariable var = (RexCorrelVariable) ref; if (mapFieldAccessToCorVar.containsKey(fieldAccess)) { //for cases where different Rel nodes are referring to // same correlation var (e.g. in case of NOT IN) // avoid generating another correlation var // and record the 'rel' is using the same correlation mapRefRelToCorRef.put(rel, mapFieldAccessToCorVar.get(fieldAccess)); } else { final CorRef correlation = new CorRef(var.id, fieldAccess.getField().getIndex(), corrIdGenerator++); mapFieldAccessToCorVar.put(fieldAccess, correlation); mapRefRelToCorRef.put(rel, correlation); } } return super.visitFieldAccess(fieldAccess); }
private boolean references(RexNode e, CorRef correlation) { switch (e.getKind()) { case CAST: final RexNode operand = ((RexCall) e).getOperands().get(0); if (isWidening(e.getType(), operand.getType())) { return references(operand, correlation); } return false; case FIELD_ACCESS: final RexFieldAccess f = (RexFieldAccess) e; if (f.getField().getIndex() == correlation.field && f.getReferenceExpr() instanceof RexCorrelVariable) { if (((RexCorrelVariable) f.getReferenceExpr()).id == correlation.corr) { return true; } } // fall through default: return false; } }
private boolean references(RexNode e, CorRef correlation) { switch (e.getKind()) { case CAST: final RexNode operand = ((RexCall) e).getOperands().get(0); if (isWidening(e.getType(), operand.getType())) { return references(operand, correlation); } return false; case FIELD_ACCESS: final RexFieldAccess f = (RexFieldAccess) e; if (f.getField().getIndex() == correlation.field && f.getReferenceExpr() instanceof RexCorrelVariable) { if (((RexCorrelVariable) f.getReferenceExpr()).id == correlation.corr) { return true; } } // fall through default: return false; } }
/** * TODO: Handle 1) cast 2), Windowing Agg Call */ @Override /* * Handles expr like struct(key,value).key * Follows same rules as TypeCheckProcFactory::getXpathOrFuncExprNodeDesc() * which is equivalent version of parsing such an expression from AST */ public ExprNodeDesc visitFieldAccess(RexFieldAccess fieldAccess) { ExprNodeDesc parent = fieldAccess.getReferenceExpr().accept(this); String child = fieldAccess.getField().getName(); TypeInfo parentType = parent.getTypeInfo(); // Allow accessing a field of list element structs directly from a list boolean isList = (parentType.getCategory() == ObjectInspector.Category.LIST); if (isList) { parentType = ((ListTypeInfo) parentType).getListElementTypeInfo(); } TypeInfo t = ((StructTypeInfo) parentType).getStructFieldTypeInfo(child); return new ExprNodeFieldDesc(t, parent, child, isList); }
/** * TODO: Handle 1) cast 2), Windowing Agg Call */ @Override /* * Handles expr like struct(key,value).key * Follows same rules as TypeCheckProcFactory::getXpathOrFuncExprNodeDesc() * which is equivalent version of parsing such an expression from AST */ public ExprNodeDesc visitFieldAccess(RexFieldAccess fieldAccess) { ExprNodeDesc parent = fieldAccess.getReferenceExpr().accept(this); String child = fieldAccess.getField().getName(); TypeInfo parentType = parent.getTypeInfo(); // Allow accessing a field of list element structs directly from a list boolean isList = (parentType.getCategory() == ObjectInspector.Category.LIST); if (isList) { parentType = ((ListTypeInfo) parentType).getListElementTypeInfo(); } TypeInfo t = ((StructTypeInfo) parentType).getStructFieldTypeInfo(child); return new ExprNodeFieldDesc(t, parent, child, isList); }
public R visitFieldAccess(RexFieldAccess fieldAccess) { if (!deep) { return null; } final RexNode expr = fieldAccess.getReferenceExpr(); return expr.accept(this); }
@Override public Void visitFieldAccess(RexFieldAccess fieldAccess) { if (fieldAccess.getReferenceExpr() instanceof RexDynamicParam) { builder.add(fieldAccess); return null; } else { return super.visitFieldAccess(fieldAccess); } }
@Override public Boolean visitFieldAccess(RexFieldAccess fieldAccess) { final RexNode ref = fieldAccess.getReferenceExpr(); if (ref instanceof RexCorrelVariable) { return visitCorrelVariable((RexCorrelVariable) ref); } else { return super.visitFieldAccess(fieldAccess); } }
@Override public RexNode visitFieldAccess(RexFieldAccess fieldAccess, P arg) { RexNode before = fieldAccess.getReferenceExpr(); RexNode after = before.accept(this, arg); if (before == after) { return fieldAccess; } else { return new RexFieldAccess( after, fieldAccess.getField()); } }
@Override public RexNode visitFieldAccess(RexFieldAccess fieldAccess) { RexNode refExpr = fieldAccess.getReferenceExpr().accept(this); // creates new RexFieldAccess instance for the case when referenceExpr was replaced. // Otherwise calls super method. if (refExpr == rexCorrelVariable) { return builder.makeFieldAccess( refExpr, requiredColsMap.get(fieldAccess.getField().getIndex())); } return super.visitFieldAccess(fieldAccess); } }
@Override public RexNode visitFieldAccess(RexFieldAccess fieldAccess) { final RexNode ref = fieldAccess.getReferenceExpr(); if (ref instanceof RexCorrelVariable) { final RexCorrelVariable var = (RexCorrelVariable) ref; assert variableSet.contains(var.id); final RelDataTypeField field = fieldAccess.getField(); return new RexInputRef(field.getIndex(), field.getType()); } else { return super.visitFieldAccess(fieldAccess); } }
@Override public RexNode visitFieldAccess(RexFieldAccess fieldAccess) { RexNode refExpr = fieldAccess.getReferenceExpr().accept(this); // creates new RexFieldAccess instance for the case when referenceExpr was replaced. // Otherwise calls super method. if (refExpr == rexCorrelVariable) { return builder.makeFieldAccess( refExpr, requiredColsMap.get(fieldAccess.getField().getIndex())); } return super.visitFieldAccess(fieldAccess); } }
protected RexNode handle(RexFieldAccess fieldAccess) { final RexCorrelVariable v = (RexCorrelVariable) fieldAccess.getReferenceExpr(); if (v.id.equals(correlation)) { fieldsUsedBuilder.set(fieldAccess.getField().getIndex()); } return fieldAccess; } });