private Expression toEnumerable(Expression expression) { final Type type = expression.getType(); if (Types.isArray(type)) { if (Types.toClass(type).getComponentType().isPrimitive()) { expression = Expressions.call(BuiltInMethod.AS_LIST.method, expression); } return Expressions.call(BuiltInMethod.AS_ENUMERABLE.method, expression); } else if (Types.isAssignableFrom(Iterable.class, type) && !Types.isAssignableFrom(Enumerable.class, type)) { return Expressions.call(BuiltInMethod.AS_ENUMERABLE2.method, expression); } else if (Types.isAssignableFrom(Queryable.class, type)) { // Queryable extends Enumerable, but it's too "clever", so we call // Queryable.asEnumerable so that operations such as take(int) will be // evaluated directly. return Expressions.call(expression, BuiltInMethod.QUERYABLE_AS_ENUMERABLE.method); } return expression; }
private Expression toEnumerable(Expression expression) { final Type type = expression.getType(); if (Types.isArray(type)) { if (Types.toClass(type).getComponentType().isPrimitive()) { expression = Expressions.call(BuiltInMethod.AS_LIST.method, expression); } return Expressions.call(BuiltInMethod.AS_ENUMERABLE.method, expression); } else if (Types.isAssignableFrom(Iterable.class, type) && !Types.isAssignableFrom(Enumerable.class, type)) { return Expressions.call(BuiltInMethod.AS_ENUMERABLE2.method, expression); } else if (Types.isAssignableFrom(Queryable.class, type)) { // Queryable extends Enumerable, but it's too "clever", so we call // Queryable.asEnumerable so that operations such as take(int) will be // evaluated directly. return Expressions.call(expression, BuiltInMethod.QUERYABLE_AS_ENUMERABLE.method); } return expression; }
private Expression getExpression(PhysType physType) { final Expression expression = table.getExpression(Queryable.class); final Expression expression2 = toEnumerable(expression); assert Types.isAssignableFrom(Enumerable.class, expression2.getType()); return toRows(physType, expression2); }
private Expression getExpression(PhysType physType) { final Expression expression = table.getExpression(Queryable.class); final Expression expression2 = toEnumerable(expression); assert Types.isAssignableFrom(Enumerable.class, expression2.getType()); return toRows(physType, expression2); }
if (Types.isAssignableFrom(returnType, type)) { return expression;