@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); }
@Override public ASTNode visitFieldAccess(RexFieldAccess fieldAccess) { return ASTBuilder.construct(HiveParser.DOT, ".").add(super.visitFieldAccess(fieldAccess)) .add(HiveParser.Identifier, fieldAccess.getField().getName()).node(); }
@Override public ASTNode visitFieldAccess(RexFieldAccess fieldAccess) { return ASTBuilder.construct(HiveParser.DOT, ".").add(super.visitFieldAccess(fieldAccess)) .add(HiveParser.Identifier, fieldAccess.getField().getName()).node(); }
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); }
@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) { if (fieldAccess.getReferenceExpr() instanceof RexCorrelVariable) { final RexCorrelVariable v = (RexCorrelVariable) fieldAccess.getReferenceExpr(); variableFields.put(v.id, fieldAccess.getField().getIndex()); } return super.visitFieldAccess(fieldAccess); }
public RexNode visitFieldAccess(RexFieldAccess fieldAccess) { final RexNode referenceExpr = fieldAccess.getReferenceExpr().accept(this); return new RexFieldAccess( referenceExpr, fieldAccess.getField()); } }
public RexNode visitFieldAccess(RexFieldAccess fieldAccess) { RexNode before = fieldAccess.getReferenceExpr(); RexNode after = before.accept(this); if (before == after) { return fieldAccess; } else { return new RexFieldAccess( after, fieldAccess.getField()); } }
public RexNode visitFieldAccess(RexFieldAccess fieldAccess) { RexNode before = fieldAccess.getReferenceExpr(); RexNode after = before.accept(this); 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; } });
@Override public LogicalOperator implement(DrillImplementor implementor) { if(getRef() instanceof RexFieldAccess) { final RexFieldAccess fldAccess = (RexFieldAccess)getRef(); return new Unnest(SchemaPath.getSimplePath(fldAccess.getField().getName())); } return null; }
@Override public ASTNode visitFieldAccess(RexFieldAccess fieldAccess) { return ASTBuilder.construct(HiveParser.DOT, ".").add(super.visitFieldAccess(fieldAccess)) .add(HiveParser.Identifier, fieldAccess.getField().getName()).node(); }