@Override public Result implement(EnumerableRelImplementor implementor, Prefer pref) { PhysType physType = PhysTypeImpl.of(implementor.getTypeFactory(), getRowType(), pref.preferArray()); return implementor.result(physType, Blocks.toBlock( Expressions.call(table.getExpression(FlowFileTable.class), "project", Expressions.constant(fields)))); }
public Expression fieldReference( Expression expression, int field) { return fieldReference(expression, field, null); }
public static PhysType of( JavaTypeFactory typeFactory, RelDataType rowType, JavaRowFormat format, boolean optimize) { if (optimize) { format = format.optimize(rowType); } final Type javaRowClass = format.javaRowClass(typeFactory, rowType); return new PhysTypeImpl(typeFactory, rowType, javaRowClass, format); }
Expressions.lambda( Function1.class, fieldReference(parameter, collation.getFieldIndex()), parameter); return Pair.of(selector, for (RelFieldCollation collation : collations) { final int index = collation.getFieldIndex(); Expression arg0 = fieldReference(parameterV0, index); Expression arg1 = fieldReference(parameterV1, index); switch (Primitive.flavor(fieldClass(index))) { case OBJECT: arg0 = Types.castIfNecessary(Comparable.class, arg0); collation.getDirection() == RelFieldCollation.Direction.DESCENDING; final Method method = (fieldNullable(index) ? (nullsFirst ^ descending ? BuiltInMethod.COMPARE_NULLS_FIRST
public Expression generateSelector( ParameterExpression parameter, List<Integer> fields, JavaRowFormat targetFormat) { // Optimize target format switch (fields.size()) { case 0: targetFormat = JavaRowFormat.LIST; break; case 1: targetFormat = JavaRowFormat.SCALAR; break; } final PhysType targetPhysType = project(fields, targetFormat); switch (format) { case SCALAR: return Expressions.call(BuiltInMethod.IDENTITY_SELECTOR.method); default: return Expressions.lambda(Function1.class, targetPhysType.record(fieldReferences(parameter, fields)), parameter); } }
public List<Expression> accessors(Expression v1, List<Integer> argList) { final List<Expression> expressions = new ArrayList<>(); for (int field : argList) { expressions.add( Types.castIfNecessary( fieldClass(field), fieldReference(v1, field))); } return expressions; }
public Pair<Type, List<Expression>> selector( ParameterExpression parameter, List<Integer> fields, JavaRowFormat targetFormat) { // Optimize target format switch (fields.size()) { case 0: targetFormat = JavaRowFormat.LIST; break; case 1: targetFormat = JavaRowFormat.SCALAR; break; } final PhysType targetPhysType = project(fields, targetFormat); switch (format) { case SCALAR: return Pair.of(parameter.getType(), ImmutableList.of(parameter)); default: return Pair.of(targetPhysType.getJavaRowType(), fieldReferences(parameter, fields)); } }
public Expression generateSelector(final ParameterExpression parameter, final List<Integer> fields, List<Integer> usedFields, JavaRowFormat targetFormat) { final PhysType targetPhysType = project(fields, true, targetFormat); final List<Expression> expressions = new ArrayList<>(); for (Ord<Integer> ord : Ord.zip(fields)) { final Integer field = ord.e; if (usedFields.contains(field)) { expressions.add(fieldReference(parameter, field)); } else { final Primitive primitive = Primitive.of(targetPhysType.fieldClass(ord.i)); expressions.add( Expressions.constant( primitive != null ? primitive.defaultValue : null)); } } for (Integer field : fields) { expressions.add(Expressions.constant(!usedFields.contains(field))); } return Expressions.lambda(Function1.class, targetPhysType.record(expressions), parameter); }
public PhysType makeNullable(boolean nullable) { if (!nullable) { return this; } return new PhysTypeImpl(typeFactory, typeFactory.createTypeWithNullability(rowType, true), Primitive.box(javaRowClass), format); }
public Expression fieldReference( Expression expression, int field, Type storageType) { Type fieldType; if (storageType == null) { storageType = fieldClass(field); fieldType = null; } else { fieldType = fieldClass(field); if (fieldType != java.sql.Date.class) { fieldType = null; } } return format.field(expression, field, fieldType, storageType); } }
public static PhysType of( JavaTypeFactory typeFactory, RelDataType rowType, JavaRowFormat format, boolean optimize) { if (optimize) { format = format.optimize(rowType); } final Type javaRowClass = format.javaRowClass(typeFactory, rowType); return new PhysTypeImpl(typeFactory, rowType, javaRowClass, format); }
Expressions.lambda( Function1.class, fieldReference(parameter, collation.getFieldIndex()), parameter); return Pair.of(selector, for (RelFieldCollation collation : collations) { final int index = collation.getFieldIndex(); Expression arg0 = fieldReference(parameterV0, index); Expression arg1 = fieldReference(parameterV1, index); switch (Primitive.flavor(fieldClass(index))) { case OBJECT: arg0 = Types.castIfNecessary(Comparable.class, arg0); collation.getDirection() == RelFieldCollation.Direction.DESCENDING; final Method method = (fieldNullable(index) ? (nullsFirst ^ descending ? BuiltInMethod.COMPARE_NULLS_FIRST
public Expression generateSelector( ParameterExpression parameter, List<Integer> fields, JavaRowFormat targetFormat) { // Optimize target format switch (fields.size()) { case 0: targetFormat = JavaRowFormat.LIST; break; case 1: targetFormat = JavaRowFormat.SCALAR; break; } final PhysType targetPhysType = project(fields, targetFormat); switch (format) { case SCALAR: return Expressions.call(BuiltInMethod.IDENTITY_SELECTOR.method); default: return Expressions.lambda(Function1.class, targetPhysType.record(fieldReferences(parameter, fields)), parameter); } }
public List<Expression> accessors(Expression v1, List<Integer> argList) { final List<Expression> expressions = new ArrayList<>(); for (int field : argList) { expressions.add( Types.castIfNecessary( fieldClass(field), fieldReference(v1, field))); } return expressions; }
public Pair<Type, List<Expression>> selector( ParameterExpression parameter, List<Integer> fields, JavaRowFormat targetFormat) { // Optimize target format switch (fields.size()) { case 0: targetFormat = JavaRowFormat.LIST; break; case 1: targetFormat = JavaRowFormat.SCALAR; break; } final PhysType targetPhysType = project(fields, targetFormat); switch (format) { case SCALAR: return Pair.of(parameter.getType(), ImmutableList.of(parameter)); default: return Pair.of(targetPhysType.getJavaRowType(), fieldReferences(parameter, fields)); } }
public Expression generateSelector(final ParameterExpression parameter, final List<Integer> fields, List<Integer> usedFields, JavaRowFormat targetFormat) { final PhysType targetPhysType = project(fields, true, targetFormat); final List<Expression> expressions = new ArrayList<>(); for (Ord<Integer> ord : Ord.zip(fields)) { final Integer field = ord.e; if (usedFields.contains(field)) { expressions.add(fieldReference(parameter, field)); } else { final Primitive primitive = Primitive.of(targetPhysType.fieldClass(ord.i)); expressions.add( Expressions.constant( primitive != null ? primitive.defaultValue : null)); } } for (Integer field : fields) { expressions.add(Expressions.constant(!usedFields.contains(field))); } return Expressions.lambda(Function1.class, targetPhysType.record(expressions), parameter); }
public PhysType makeNullable(boolean nullable) { if (!nullable) { return this; } return new PhysTypeImpl(typeFactory, typeFactory.createTypeWithNullability(rowType, true), Primitive.box(javaRowClass), format); }
public Expression fieldReference( Expression expression, int field, Type storageType) { Type fieldType; if (storageType == null) { storageType = fieldClass(field); fieldType = null; } else { fieldType = fieldClass(field); if (fieldType != java.sql.Date.class) { fieldType = null; } } return format.field(expression, field, fieldType, storageType); } }