当前位置: 首页>>代码示例>>Java>>正文


Java ConstantExpression类代码示例

本文整理汇总了Java中org.apache.calcite.linq4j.tree.ConstantExpression的典型用法代码示例。如果您正苦于以下问题:Java ConstantExpression类的具体用法?Java ConstantExpression怎么用?Java ConstantExpression使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


ConstantExpression类属于org.apache.calcite.linq4j.tree包,在下文中一共展示了ConstantExpression类的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: implement

import org.apache.calcite.linq4j.tree.ConstantExpression; //导入依赖的package包/类
public Expression implement(RexToLixTranslator translator, RexCall call,
    List<Expression> translatedOperands) {
  final Object value =
      ((ConstantExpression) translatedOperands.get(0)).value;
  SqlTrimFunction.Flag flag = (SqlTrimFunction.Flag) value;
  return Expressions.call(
      BuiltInMethod.TRIM.method,
      Expressions.constant(
          flag == SqlTrimFunction.Flag.BOTH
          || flag == SqlTrimFunction.Flag.LEADING),
      Expressions.constant(
          flag == SqlTrimFunction.Flag.BOTH
          || flag == SqlTrimFunction.Flag.TRAILING),
      translatedOperands.get(1),
      translatedOperands.get(2));
}
 
开发者ID:apache,项目名称:calcite,代码行数:17,代码来源:RexImpTable.java

示例2: testAssign2

import org.apache.calcite.linq4j.tree.ConstantExpression; //导入依赖的package包/类
@Test public void testAssign2() {
  // long x = 0;
  // final long y = System.currentTimeMillis();
  // if (System.currentTimeMillis() > 0) {
  //   x = y;
  // }
  //
  // Make sure we don't fold two calls to System.currentTimeMillis into one.
  final ParameterExpression x_ = Expressions.parameter(long.class, "x");
  final ParameterExpression y_ = Expressions.parameter(long.class, "y");
  final Method mT = Linq4j.getMethod("java.lang.System", "currentTimeMillis");
  final ConstantExpression zero = Expressions.constant(0L);
  assertThat(
      optimize(
          Expressions.block(
              Expressions.declare(0, x_, zero),
              Expressions.declare(Modifier.FINAL, y_, Expressions.call(mT)),
              Expressions.ifThen(
                  Expressions.greaterThan(Expressions.call(mT), zero),
                  Expressions.statement(Expressions.assign(x_, y_))))),
      equalTo("{\n"
          + "  long x = 0L;\n"
          + "  if (System.currentTimeMillis() > 0L) {\n"
          + "    x = System.currentTimeMillis();\n"
          + "  }\n"
          + "}\n"));
}
 
开发者ID:apache,项目名称:calcite,代码行数:28,代码来源:OptimizerTest.java

示例3: testApproxConstant

import org.apache.calcite.linq4j.tree.ConstantExpression; //导入依赖的package包/类
/** We use BigDecimal to represent literals of float and double using
 * BigDecimal, because we want an exact representation. */
@Test public void testApproxConstant() {
  ConstantExpression c;
  c = Expressions.constant(new BigDecimal("3.1"), float.class);
  assertThat(Expressions.toString(c), equalTo("3.1F"));
  c = Expressions.constant(new BigDecimal("-5.156"), float.class);
  assertThat(Expressions.toString(c), equalTo("-5.156F"));
  c = Expressions.constant(new BigDecimal("-51.6"), Float.class);
  assertThat(Expressions.toString(c), equalTo("Float.valueOf(-51.6F)"));
  c = Expressions.constant(new BigDecimal(Float.MAX_VALUE), Float.class);
  assertThat(Expressions.toString(c),
      equalTo("Float.valueOf(Float.intBitsToFloat(2139095039))"));
  c = Expressions.constant(new BigDecimal(Float.MIN_VALUE), Float.class);
  assertThat(Expressions.toString(c),
      equalTo("Float.valueOf(Float.intBitsToFloat(1))"));

  c = Expressions.constant(new BigDecimal("3.1"), double.class);
  assertThat(Expressions.toString(c), equalTo("3.1D"));
  c = Expressions.constant(new BigDecimal("-5.156"), double.class);
  assertThat(Expressions.toString(c), equalTo("-5.156D"));
  c = Expressions.constant(new BigDecimal("-51.6"), Double.class);
  assertThat(Expressions.toString(c), equalTo("Double.valueOf(-51.6D)"));
  c = Expressions.constant(new BigDecimal(Double.MAX_VALUE), Double.class);
  assertThat(Expressions.toString(c),
      equalTo("Double.valueOf(Double.longBitsToDouble(9218868437227405311L))"));
  c = Expressions.constant(new BigDecimal(Double.MIN_VALUE), Double.class);
  assertThat(Expressions.toString(c),
      equalTo("Double.valueOf(Double.longBitsToDouble(1L))"));
}
 
开发者ID:apache,项目名称:calcite,代码行数:31,代码来源:Linq4jTest.java

示例4: handleNull

import org.apache.calcite.linq4j.tree.ConstantExpression; //导入依赖的package包/类
/** Adapts an expression with "normal" result to one that adheres to
 * this particular policy. Wraps the result expression into a new
 * parameter if need be.
 *
 * @param input Expression
 * @param nullAs If false, if expression is definitely not null at
 *   runtime. Therefore we can optimize. For example, we can cast to int
 *   using x.intValue().
 * @return Translated expression
 */
public Expression handleNull(Expression input, RexImpTable.NullAs nullAs) {
  final Expression nullHandled = nullAs.handle(input);

  // If we get ConstantExpression, just return it (i.e. primitive false)
  if (nullHandled instanceof ConstantExpression) {
    return nullHandled;
  }

  // if nullHandled expression is the same as "input",
  // then we can just reuse it
  if (nullHandled == input) {
    return input;
  }

  // If nullHandled is different, then it might be unsafe to compute
  // early (i.e. unbox of null value should not happen _before_ ternary).
  // Thus we wrap it into brand-new ParameterExpression,
  // and we are guaranteed that ParameterExpression will not be shared
  String unboxVarName = "v_unboxed";
  if (input instanceof ParameterExpression) {
    unboxVarName = ((ParameterExpression) input).name + "_unboxed";
  }
  ParameterExpression unboxed = Expressions.parameter(nullHandled.getType(),
      list.newName(unboxVarName));
  list.add(Expressions.declare(Modifier.FINAL, unboxed, nullHandled));

  return unboxed;
}
 
开发者ID:apache,项目名称:calcite,代码行数:39,代码来源:RexToLixTranslator.java

示例5: toRex

import org.apache.calcite.linq4j.tree.ConstantExpression; //导入依赖的package包/类
public RexNode toRex(Expression expression) {
  switch (expression.getNodeType()) {
  case MemberAccess:
    // Case-sensitive name match because name was previously resolved.
    return rexBuilder.makeFieldAccess(
        toRex(
            ((MemberExpression) expression).expression),
        ((MemberExpression) expression).field.getName(),
        true);
  case GreaterThan:
    return binary(expression, SqlStdOperatorTable.GREATER_THAN);
  case LessThan:
    return binary(expression, SqlStdOperatorTable.LESS_THAN);
  case Parameter:
    return parameter((ParameterExpression) expression);
  case Call:
    MethodCallExpression call = (MethodCallExpression) expression;
    SqlOperator operator =
        RexToLixTranslator.JAVA_TO_SQL_METHOD_MAP.get(call.method);
    if (operator != null) {
      return rexBuilder.makeCall(
          type(call),
          operator,
          toRex(
              Expressions.<Expression>list()
                  .appendIfNotNull(call.targetExpression)
                  .appendAll(call.expressions)));
    }
    throw new RuntimeException(
        "Could translate call to method " + call.method);
  case Constant:
    final ConstantExpression constant =
        (ConstantExpression) expression;
    Object value = constant.value;
    if (value instanceof Number) {
      Number number = (Number) value;
      if (value instanceof Double || value instanceof Float) {
        return rexBuilder.makeApproxLiteral(
            BigDecimal.valueOf(number.doubleValue()));
      } else if (value instanceof BigDecimal) {
        return rexBuilder.makeExactLiteral((BigDecimal) value);
      } else {
        return rexBuilder.makeExactLiteral(
            BigDecimal.valueOf(number.longValue()));
      }
    } else if (value instanceof Boolean) {
      return rexBuilder.makeLiteral((Boolean) value);
    } else {
      return rexBuilder.makeLiteral(constant.toString());
    }
  default:
    throw new UnsupportedOperationException(
        "unknown expression type " + expression.getNodeType() + " "
        + expression);
  }
}
 
开发者ID:apache,项目名称:kylin,代码行数:57,代码来源:CalcitePrepareImpl.java

示例6: testAssign

import org.apache.calcite.linq4j.tree.ConstantExpression; //导入依赖的package包/类
@Test public void testAssign() {
  // long x = 0;
  // final long y = System.currentTimeMillis();
  // if (System.nanoTime() > 0) {
  //   x = y;
  // }
  // System.out.println(x);
  //
  // In bug https://github.com/julianhyde/linq4j/issues/27, this was
  // incorrectly optimized to
  //
  // if (System.nanoTime() > 0L) {
  //    System.currentTimeMillis();
  // }
  // System.out.println(0L);
  final ParameterExpression x_ = Expressions.parameter(long.class, "x");
  final ParameterExpression y_ = Expressions.parameter(long.class, "y");
  final Method mT = Linq4j.getMethod("java.lang.System", "currentTimeMillis");
  final Method mNano = Linq4j.getMethod("java.lang.System", "nanoTime");
  final ConstantExpression zero = Expressions.constant(0L);
  assertThat(
      optimize(
          Expressions.block(
              Expressions.declare(0, x_, zero),
              Expressions.declare(Modifier.FINAL, y_, Expressions.call(mT)),
              Expressions.ifThen(
                  Expressions.greaterThan(Expressions.call(mNano), zero),
                  Expressions.statement(Expressions.assign(x_, y_))),
              Expressions.statement(
                  Expressions.call(
                      Expressions.field(null, System.class, "out"),
                      "println",
                      x_)))),
      equalTo("{\n"
          + "  long x = 0L;\n"
          + "  if (System.nanoTime() > 0L) {\n"
          + "    x = System.currentTimeMillis();\n"
          + "  }\n"
          + "  System.out.println(x);\n"
          + "}\n"));
}
 
开发者ID:apache,项目名称:calcite,代码行数:42,代码来源:OptimizerTest.java

示例7: translate

import org.apache.calcite.linq4j.tree.ConstantExpression; //导入依赖的package包/类
public RelNode translate(Expression expression) {
  if (expression instanceof MethodCallExpression) {
    final MethodCallExpression call = (MethodCallExpression) expression;
    BuiltInMethod method = BuiltInMethod.MAP.get(call.method);
    if (method == null) {
      throw new UnsupportedOperationException(
          "unknown method " + call.method);
    }
    RelNode input;
    switch (method) {
    case SELECT:
      input = translate(call.targetExpression);
      return LogicalProject.create(input,
          toRex(input, (FunctionExpression) call.expressions.get(0)),
          (List<String>) null);

    case WHERE:
      input = translate(call.targetExpression);
      return LogicalFilter.create(input,
          toRex((FunctionExpression) call.expressions.get(0), input));

    case AS_QUERYABLE:
      return LogicalTableScan.create(cluster,
          RelOptTableImpl.create(null,
              typeFactory.createJavaType(
                  Types.toClass(
                      Types.getElementType(call.targetExpression.getType()))),
              ImmutableList.<String>of(),
              call.targetExpression));

    case SCHEMA_GET_TABLE:
      return LogicalTableScan.create(cluster,
          RelOptTableImpl.create(null,
              typeFactory.createJavaType((Class)
                  ((ConstantExpression) call.expressions.get(1)).value),
              ImmutableList.<String>of(),
              call.targetExpression));

    default:
      throw new UnsupportedOperationException(
          "unknown method " + call.method);
    }
  }
  throw new UnsupportedOperationException(
      "unknown expression type " + expression.getNodeType());
}
 
开发者ID:apache,项目名称:calcite,代码行数:47,代码来源:LixToRelTranslator.java

示例8: visit

import org.apache.calcite.linq4j.tree.ConstantExpression; //导入依赖的package包/类
@Override public Void visit(ConstantExpression constantExpression) {
  if (constantExpression.value instanceof Type) {
    types.add((Type) constantExpression.value);
  }
  return super.visit(constantExpression);
}
 
开发者ID:apache,项目名称:calcite,代码行数:7,代码来源:EnumerableRelImplementor.java


注:本文中的org.apache.calcite.linq4j.tree.ConstantExpression类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。