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 RexNode visitFieldAccess(RexFieldAccess fieldAccess) { if (cm.mapFieldAccessToCorRef.containsKey(fieldAccess)) { // if it is a corVar, change it to be input ref. CorRef corVar = cm.mapFieldAccessToCorRef.get(fieldAccess); // corVar offset should point to the leftInput of currentRel, // which is the Correlator. RexNode newRexNode = new RexInputRef(corVar.field, fieldAccess.getType()); if (projectPulledAboveLeftCorrelator && (nullIndicator != null)) { // need to enforce nullability by applying an additional // cast operator over the transformed expression. newRexNode = createCaseExpression( nullIndicator, rexBuilder.constantNull(), newRexNode); } return newRexNode; } return 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 Boolean visitFieldAccess(RexFieldAccess fieldAccess) { super.visitFieldAccess(fieldAccess); final RelDataType refType = fieldAccess.getReferenceExpr().getType(); assert refType.isStruct(); final RelDataTypeField field = fieldAccess.getField(); final int index = field.getIndex(); if ((index < 0) || (index > refType.getFieldList().size())) { ++failCount; return litmus.fail(null); } final RelDataTypeField typeField = refType.getFieldList().get(index); if (!RelOptUtil.eq( "type1", typeField.getType(), "type2", fieldAccess.getType(), litmus)) { ++failCount; return litmus.fail(null); } return litmus.succeed(); }
@Override public Boolean visitFieldAccess(RexFieldAccess fieldAccess) { // "<expr>.FIELD" is constant iff "<expr>" is constant. return fieldAccess.getReferenceExpr().accept(this); }
@Override public ASTNode visitFieldAccess(RexFieldAccess fieldAccess) { return ASTBuilder.construct(HiveParser.DOT, ".").add(super.visitFieldAccess(fieldAccess)) .add(HiveParser.Identifier, fieldAccess.getField().getName()).node(); }
@Override public String visitFieldAccess(RexFieldAccess fieldAccess) { StringBuilder sb = new StringBuilder(); sb.append("v"); RelDataType type = fieldAccess.getType(); switch (type.getSqlTypeName()) { case BOOLEAN: sb.append("Bool"); break; case INTEGER: sb.append("Int"); break; case VARCHAR: sb.append("Varchar"); break; } if (!type.isNullable()) { sb.append("NotNull"); } sb.append("("); sb.append(fieldAccess.getField().getIndex() % 10); sb.append(")"); return sb.toString(); } }
/** * Creates an expression accessing a given field from a record. * * @param expr Expression yielding a record * @param field Field * @return Expression accessing given field */ private RexNode makeFieldAccessInternal( RexNode expr, final RelDataTypeField field) { if (expr instanceof RexRangeRef) { RexRangeRef range = (RexRangeRef) expr; if (field.getIndex() < 0) { return makeCall( field.getType(), GET_OPERATOR, ImmutableList.of( expr, makeLiteral(field.getName()))); } return new RexInputRef( range.getOffset() + field.getIndex(), field.getType()); } return new RexFieldAccess(expr, field); }
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 Boolean visitFieldAccess(RexFieldAccess fieldAccess) { super.visitFieldAccess(fieldAccess); final RelDataType refType = fieldAccess.getReferenceExpr().getType(); assert refType.isStruct(); final RelDataTypeField field = fieldAccess.getField(); final int index = field.getIndex(); if ((index < 0) || (index > refType.getFieldList().size())) { ++failCount; return litmus.fail(null); } final RelDataTypeField typeField = refType.getFieldList().get(index); if (!RelOptUtil.eq( "type1", typeField.getType(), "type2", fieldAccess.getType(), litmus)) { ++failCount; return litmus.fail(null); } return litmus.succeed(); }
@Override public Boolean visitFieldAccess(RexFieldAccess fieldAccess) { // "<expr>.FIELD" is constant iff "<expr>" is constant. return fieldAccess.getReferenceExpr().accept(this); }
@Override public ASTNode visitFieldAccess(RexFieldAccess fieldAccess) { return ASTBuilder.construct(HiveParser.DOT, ".").add(super.visitFieldAccess(fieldAccess)) .add(HiveParser.Identifier, fieldAccess.getField().getName()).node(); }
@Override public String visitFieldAccess(RexFieldAccess fieldAccess) { StringBuilder sb = new StringBuilder(); sb.append("v"); RelDataType type = fieldAccess.getType(); switch (type.getSqlTypeName()) { case BOOLEAN: sb.append("Bool"); break; case INTEGER: sb.append("Int"); break; case VARCHAR: sb.append("Varchar"); break; } if (!type.isNullable()) { sb.append("NotNull"); } sb.append("("); sb.append(fieldAccess.getField().getIndex() % 10); sb.append(")"); return sb.toString(); } }
/** * Creates an expression accessing a given field from a record. * * @param expr Expression yielding a record * @param field Field * @return Expression accessing given field */ private RexNode makeFieldAccessInternal( RexNode expr, final RelDataTypeField field) { if (expr instanceof RexRangeRef) { RexRangeRef range = (RexRangeRef) expr; if (field.getIndex() < 0) { return makeCall( field.getType(), GET_OPERATOR, ImmutableList.of( expr, makeLiteral(field.getName()))); } return new RexInputRef( range.getOffset() + field.getIndex(), field.getType()); } return new RexFieldAccess(expr, field); }
@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); }
public RexNode visitFieldAccess(RexFieldAccess fieldAccess) { final RexNode referenceExpr = fieldAccess.getReferenceExpr().accept(this); return new RexFieldAccess( referenceExpr, fieldAccess.getField()); } }
case FIELD_ACCESS: { RexFieldAccess fieldAccess = (RexFieldAccess) expr; RexNode target = deref(fieldAccess.getReferenceExpr()); int fieldIndex = fieldAccess.getField().getIndex(); String fieldName = fieldAccess.getField().getName(); switch (target.getKind()) { case CORREL_VARIABLE: RexNode rxName = builder.makeLiteral(fieldName, typeFactory.createType(String.class), true); RexCall accessCall = (RexCall) builder.makeCall( fieldAccess.getType(), SqlStdOperatorTable.STRUCT_ACCESS, ImmutableList.of(target, rxIndex, rxName));
@Override public Boolean visitFieldAccess(RexFieldAccess paramRexFieldAccess) { return paramRexFieldAccess.getReferenceExpr().accept(this); }
@Override public RexNode visitFieldAccess(RexFieldAccess fieldAccess) { return builder.field(fieldAccess.getField().getName()); } }
@Override public RexNode visitFieldAccess(RexFieldAccess fieldAccess) { if (cm.mapFieldAccessToCorRef.containsKey(fieldAccess)) { // if it is a corVar, change it to be input ref. CorRef corVar = cm.mapFieldAccessToCorRef.get(fieldAccess); // corVar offset should point to the leftInput of currentRel, // which is the Correlator. RexNode newRexNode = new RexInputRef(corVar.field, fieldAccess.getType()); if (projectPulledAboveLeftCorrelator && (nullIndicator != null)) { // need to enforce nullability by applying an additional // cast operator over the transformed expression. newRexNode = createCaseExpression( nullIndicator, rexBuilder.constantNull(), newRexNode); } return newRexNode; } return fieldAccess; }