public Expression implement( RexToLixTranslator translator, RexCall call, List<Expression> translatedOperands) { final Expression operand = translatedOperands.get(0); final UnaryExpression e = Expressions.makeUnary(expressionType, operand); if (e.type.equals(operand.type)) { return e; } // Certain unary operators do not preserve type. For example, the "-" // operator applied to a "byte" expression returns an "int". return Expressions.convert_(e, operand.type); } }
public Expression implement( RexToLixTranslator translator, RexCall call, List<Expression> translatedOperands) { final Expression operand = translatedOperands.get(0); final UnaryExpression e = Expressions.makeUnary(expressionType, operand); if (e.type.equals(operand.type)) { return e; } // Certain unary operators do not preserve type. For example, the "-" // operator applied to a "byte" expression returns an "int". return Expressions.convert_(e, operand.type); } }
@Override public CallImplementor getImplementor() { return RexImpTable.createImplementor((translator, call, translatedOperands) -> { final Expression context = Expressions.parameter(SamzaSqlExecutionContext.class, "context"); final Expression getUdfInstance = Expressions.call(ScalarUdf.class, context, getUdfMethod, Expressions.constant(udfMethod.getDeclaringClass().getName()), Expressions.constant(udfName)); final Expression callExpression = Expressions.convert_(Expressions.call(Expressions.convert_(getUdfInstance, udfMethod.getDeclaringClass()), udfMethod, translatedOperands), Object.class); // The Janino compiler which is used to compile the expressions doesn't seem to understand the Type of the ScalarUdf.execute // because it is a generic. To work around that we are explicitly casting it to the return type. return Expressions.convert_(callExpression, udfMethod.getReturnType()); }, NullPolicy.NONE, false); }
@Override public CallImplementor getImplementor() { return RexImpTable.createImplementor((translator, call, translatedOperands) -> { final Expression context = Expressions.parameter(SamzaSqlExecutionContext.class, "context"); final Expression getUdfInstance = Expressions.call(ScalarUdf.class, context, getUdfMethod, Expressions.constant(udfMethod.getDeclaringClass().getName()), Expressions.constant(udfName)); final Expression callExpression = Expressions.convert_(Expressions.call(Expressions.convert_(getUdfInstance, udfMethod.getDeclaringClass()), udfMethod, translatedOperands), Object.class); // The Janino compiler which is used to compile the expressions doesn't seem to understand the Type of the ScalarUdf.execute // because it is a generic. To work around that we are explicitly casting it to the return type. return Expressions.convert_(callExpression, udfMethod.getReturnType()); }, NullPolicy.NONE, false); }
/** Converts a schema expression to a given type by calling the * {@link SchemaPlus#unwrap(Class)} method. */ public static Expression unwrap(Expression call, Class type) { return Expressions.convert_( Expressions.call(call, BuiltInMethod.SCHEMA_PLUS_UNWRAP.method, Expressions.constant(type)), type); }
/** Converts a schema expression to a given type by calling the * {@link SchemaPlus#unwrap(Class)} method. */ public static Expression unwrap(Expression call, Class type) { return Expressions.convert_( Expressions.call(call, BuiltInMethod.SCHEMA_PLUS_UNWRAP.method, Expressions.constant(type)), type); }
private UnaryExpression getTimeZoneExpression( EnumerableRelImplementor implementor) { return Expressions.convert_( Expressions.call( implementor.getRootExpression(), "get", Expressions.constant("timeZone")), TimeZone.class); }
private UnaryExpression getTimeZoneExpression( EnumerableRelImplementor implementor) { return Expressions.convert_( Expressions.call( implementor.getRootExpression(), "get", Expressions.constant("timeZone")), TimeZone.class); }
/** * Prepares declaration for inlining: adds cast * @param decl inlining candidate * @return normalized expression */ private Expression normalizeDeclaration(DeclarationStatement decl) { Expression expr = decl.initializer; Type declType = decl.parameter.getType(); if (expr == null) { expr = Expressions.constant(null, declType); } else if (expr.getType() != declType) { expr = Expressions.convert_(expr, declType); } return expr; }
return Expressions.call( BuiltInMethod.SCHEMAS_ENUMERABLE_SCANNABLE.method, Expressions.convert_(expression, ScannableTable.class), DataContext.ROOT); return Expressions.call( BuiltInMethod.SCHEMAS_ENUMERABLE_FILTERABLE.method, Expressions.convert_(expression, FilterableTable.class), DataContext.ROOT); return Expressions.call( BuiltInMethod.SCHEMAS_ENUMERABLE_PROJECTABLE_FILTERABLE.method, Expressions.convert_(expression, ProjectableFilterableTable.class), DataContext.ROOT);
return Expressions.call( BuiltInMethod.SCHEMAS_ENUMERABLE_SCANNABLE.method, Expressions.convert_(expression, ScannableTable.class), DataContext.ROOT); return Expressions.call( BuiltInMethod.SCHEMAS_ENUMERABLE_FILTERABLE.method, Expressions.convert_(expression, FilterableTable.class), DataContext.ROOT); return Expressions.call( BuiltInMethod.SCHEMAS_ENUMERABLE_PROJECTABLE_FILTERABLE.method, Expressions.convert_(expression, ProjectableFilterableTable.class), DataContext.ROOT);
private static Expression getExpression(RexNode offset) { if (offset instanceof RexDynamicParam) { final RexDynamicParam param = (RexDynamicParam) offset; return Expressions.convert_( Expressions.call(DataContext.ROOT, BuiltInMethod.DATA_CONTEXT_GET.method, Expressions.constant("?" + param.getIndex())), Integer.class); } else { return Expressions.constant(RexLiteral.intValue(offset)); } } }
private static Expression getExpression(RexNode offset) { if (offset instanceof RexDynamicParam) { final RexDynamicParam param = (RexDynamicParam) offset; return Expressions.convert_( Expressions.call(DataContext.ROOT, BuiltInMethod.DATA_CONTEXT_GET.method, Expressions.constant("?" + param.getIndex())), Integer.class); } else { return Expressions.constant(RexLiteral.intValue(offset)); } } }
public Expression implement(RexToLixTranslator translator, RexCall call, List<Expression> translatedOperands) { Expression expr = super.implement(translator, call, translatedOperands); final Class<?> returnType = method.getReturnType(); if (QueryableTable.class.isAssignableFrom(returnType)) { Expression queryable = Expressions.call( Expressions.convert_(expr, QueryableTable.class), BuiltInMethod.QUERYABLE_TABLE_AS_QUERYABLE.method, Expressions.call(DataContext.ROOT, BuiltInMethod.DATA_CONTEXT_GET_QUERY_PROVIDER.method), Expressions.constant(null, SchemaPlus.class), Expressions.constant(call.getOperator().getName(), String.class)); expr = Expressions.call(queryable, BuiltInMethod.QUERYABLE_AS_ENUMERABLE.method); } else { expr = Expressions.call(expr, BuiltInMethod.SCANNABLE_TABLE_SCAN.method, DataContext.ROOT); } return expr; } }, NullPolicy.ANY, false);
public Expression implement(RexToLixTranslator translator, RexCall call, List<Expression> translatedOperands) { Expression expr = super.implement(translator, call, translatedOperands); final Class<?> returnType = method.getReturnType(); if (QueryableTable.class.isAssignableFrom(returnType)) { Expression queryable = Expressions.call( Expressions.convert_(expr, QueryableTable.class), BuiltInMethod.QUERYABLE_TABLE_AS_QUERYABLE.method, Expressions.call(DataContext.ROOT, BuiltInMethod.DATA_CONTEXT_GET_QUERY_PROVIDER.method), Expressions.constant(null, SchemaPlus.class), Expressions.constant(call.getOperator().getName(), String.class)); expr = Expressions.call(queryable, BuiltInMethod.QUERYABLE_AS_ENUMERABLE.method); } else { expr = Expressions.call(expr, BuiltInMethod.SCANNABLE_TABLE_SCAN.method, DataContext.ROOT); } return expr; } }, NullPolicy.ANY, false);
/** Converts from internal representation to JDBC representation used by * arguments of user-defined functions. For example, converts date values from * {@code int} to {@link java.sql.Date}. */ static Expression fromInternal(Expression e, Class<?> targetType) { if (e == ConstantUntypedNull.INSTANCE) { return e; } if (!(e.getType() instanceof Class)) { return e; } if (targetType.isAssignableFrom((Class) e.getType())) { return e; } if (targetType == java.sql.Date.class) { return Expressions.call(BuiltInMethod.INTERNAL_TO_DATE.method, e); } if (targetType == java.sql.Time.class) { return Expressions.call(BuiltInMethod.INTERNAL_TO_TIME.method, e); } if (targetType == java.sql.Timestamp.class) { return Expressions.call(BuiltInMethod.INTERNAL_TO_TIMESTAMP.method, e); } if (Primitive.is(e.type) && Primitive.isBox(targetType)) { // E.g. e is "int", target is "Long", generate "(long) e". return Expressions.convert_(e, Primitive.ofBox(targetType).primitiveClass); } return e; }
/** Converts from internal representation to JDBC representation used by * arguments of user-defined functions. For example, converts date values from * {@code int} to {@link java.sql.Date}. */ static Expression fromInternal(Expression e, Class<?> targetType) { if (e == ConstantUntypedNull.INSTANCE) { return e; } if (!(e.getType() instanceof Class)) { return e; } if (targetType.isAssignableFrom((Class) e.getType())) { return e; } if (targetType == java.sql.Date.class) { return Expressions.call(BuiltInMethod.INTERNAL_TO_DATE.method, e); } if (targetType == java.sql.Time.class) { return Expressions.call(BuiltInMethod.INTERNAL_TO_TIME.method, e); } if (targetType == java.sql.Timestamp.class) { return Expressions.call(BuiltInMethod.INTERNAL_TO_TIMESTAMP.method, e); } if (Primitive.is(e.type) && Primitive.isBox(targetType)) { // E.g. e is "int", target is "Long", generate "(long) e". return Expressions.convert_(e, Primitive.ofBox(targetType).primitiveClass); } return e; }
Expressions.declare( Modifier.FINAL, root_, Expressions.convert_(root0_, DataContext.class))); final SqlConformance conformance = SqlConformanceEnum.DEFAULT; final RexProgram program = programBuilder.getProgram();
Expressions.declare( Modifier.FINAL, root_, Expressions.convert_(root0_, DataContext.class))); final SqlConformance conformance = SqlConformanceEnum.DEFAULT; final RexProgram program = programBuilder.getProgram();