org.apache.calcite.rex.RexBuilder.deriveReturnType()方法的使用及代码示例

x33g5p2x  于2022-01-29 转载在 其他  
字(10.3k)|赞(0)|评价(0)|浏览(86)

本文整理了Java中org.apache.calcite.rex.RexBuilder.deriveReturnType方法的一些代码示例,展示了RexBuilder.deriveReturnType的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。RexBuilder.deriveReturnType方法的具体详情如下:
包路径:org.apache.calcite.rex.RexBuilder
类名称:RexBuilder
方法名:deriveReturnType

RexBuilder.deriveReturnType介绍

[英]Derives the return type of a call to an operator.
[中]派生呼叫操作员的返回类型。

代码示例

代码示例来源:origin: apache/hive

/** Creates a call to a scalar operator. */
public RexNode call(SqlOperator operator, RexNode... operands) {
 final RexBuilder builder = cluster.getRexBuilder();
 final List<RexNode> operandList = ImmutableList.copyOf(operands);
 final RelDataType type = builder.deriveReturnType(operator, operandList);
 if (type == null) {
  throw new IllegalArgumentException("cannot derive type: " + operator
    + "; operands: " + Lists.transform(operandList, FN_TYPE));
 }
 return builder.makeCall(type, operator, operandList);
}

代码示例来源:origin: apache/drill

/** Creates a call to a scalar operator. */
public RexNode call(SqlOperator operator, RexNode... operands) {
 final RexBuilder builder = cluster.getRexBuilder();
 final List<RexNode> operandList = ImmutableList.copyOf(operands);
 final RelDataType type = builder.deriveReturnType(operator, operandList);
 if (type == null) {
  throw new IllegalArgumentException("cannot derive type: " + operator
      + "; operands: " + Lists.transform(operandList, FN_TYPE));
 }
 return builder.makeCall(type, operator, operandList);
}

代码示例来源:origin: apache/hive

call.getType(),
   rexBuilder.makeCall(
     rexBuilder.deriveReturnType(operator, clonedOperands), operator, clonedOperands),
   true);
} else {

代码示例来源:origin: apache/drill

newType = rexBuilder.deriveReturnType(operator, clonedOperands);
} else {

代码示例来源:origin: org.apache.calcite/calcite-core

/**
 * Creates a call with an array of arguments.
 *
 * <p>If you already know the return type of the call, then
 * {@link #makeCall(org.apache.calcite.rel.type.RelDataType, org.apache.calcite.sql.SqlOperator, java.util.List)}
 * is preferred.</p>
 */
public RexNode makeCall(
  SqlOperator op,
  List<? extends RexNode> exprs) {
 final RelDataType type = deriveReturnType(op, exprs);
 return new RexCall(type, op, exprs);
}

代码示例来源:origin: Qihoo360/Quicksql

/**
 * Creates a call with an array of arguments.
 *
 * <p>If you already know the return type of the call, then
 * {@link #makeCall(org.apache.calcite.rel.type.RelDataType, org.apache.calcite.sql.SqlOperator, java.util.List)}
 * is preferred.</p>
 */
public RexNode makeCall(
  SqlOperator op,
  List<? extends RexNode> exprs) {
 final RelDataType type = deriveReturnType(op, exprs);
 return new RexCall(type, op, exprs);
}

代码示例来源:origin: dremio/dremio-oss

static int getReturnTypePrecision(SqlRexContext cx, SqlCall call) {
  return cx.getRexBuilder()
    .deriveReturnType(call.getOperator(),
      call.getOperandList()
        .stream()
        .map(cx::convertExpression)
        .collect(Collectors.toList()))
    .getPrecision();
 }
}

代码示例来源:origin: org.apache.calcite/calcite-core

/** Creates a call to a scalar operator. */
private RexNode call(SqlOperator operator, List<RexNode> operandList) {
 final RexBuilder builder = cluster.getRexBuilder();
 final RelDataType type = builder.deriveReturnType(operator, operandList);
 return builder.makeCall(type, operator, operandList);
}

代码示例来源:origin: Qihoo360/Quicksql

/** Creates a call to a scalar operator. */
private RexNode call(SqlOperator operator, List<RexNode> operandList) {
 final RexBuilder builder = cluster.getRexBuilder();
 final RelDataType type = builder.deriveReturnType(operator, operandList);
 if (type == null) {
  throw new IllegalArgumentException("cannot derive type: " + operator
    + "; operands: "
    + Lists.transform(operandList, e -> e + ": " + e.getType()));
 }
 return builder.makeCall(type, operator, operandList);
}

代码示例来源:origin: dremio/dremio-oss

@Override
 public RexNode convertCall(SqlRexContext cx, SqlCall call) {
  final List<SqlNode> operands = call.getOperandList();
  final List<RexNode> exprs = new LinkedList<>();
  for (SqlNode node: operands) {
   exprs.add(cx.convertExpression(node));
  }
  final RelDataType returnType = cx.getRexBuilder().deriveReturnType(call.getOperator(), exprs);
  return cx.getRexBuilder().makeCall(returnType, call.getOperator(), exprs);
 }
};

代码示例来源:origin: org.apache.calcite/calcite-core

private static RexNode makeConstructorCall(
  SqlRexContext cx,
  SqlFunction constructor,
  List<RexNode> exprs) {
 final RexBuilder rexBuilder = cx.getRexBuilder();
 RelDataType type = rexBuilder.deriveReturnType(constructor, exprs);
 int n = type.getFieldCount();
 ImmutableList.Builder<RexNode> initializationExprs =
   ImmutableList.builder();
 final InitializerContext initializerContext = new InitializerContext() {
  public RexBuilder getRexBuilder() {
   return rexBuilder;
  }
  public RexNode convertExpression(SqlNode e) {
   throw new UnsupportedOperationException();
  }
 };
 for (int i = 0; i < n; ++i) {
  initializationExprs.add(
    cx.getInitializerExpressionFactory().newAttributeInitializer(
      type, constructor, i, exprs, initializerContext));
 }
 List<RexNode> defaultCasts =
   RexUtil.generateCastExpressions(
     rexBuilder,
     type,
     initializationExprs.build());
 return rexBuilder.makeNewInvocation(type, defaultCasts);
}

代码示例来源:origin: Qihoo360/Quicksql

private static RexNode makeConstructorCall(
  SqlRexContext cx,
  SqlFunction constructor,
  List<RexNode> exprs) {
 final RexBuilder rexBuilder = cx.getRexBuilder();
 RelDataType type = rexBuilder.deriveReturnType(constructor, exprs);
 int n = type.getFieldCount();
 ImmutableList.Builder<RexNode> initializationExprs =
   ImmutableList.builder();
 final InitializerContext initializerContext = new InitializerContext() {
  public RexBuilder getRexBuilder() {
   return rexBuilder;
  }
  public RexNode convertExpression(SqlNode e) {
   throw new UnsupportedOperationException();
  }
 };
 for (int i = 0; i < n; ++i) {
  initializationExprs.add(
    cx.getInitializerExpressionFactory().newAttributeInitializer(
      type, constructor, i, exprs, initializerContext));
 }
 List<RexNode> defaultCasts =
   RexUtil.generateCastExpressions(
     rexBuilder,
     type,
     initializationExprs.build());
 return rexBuilder.makeNewInvocation(type, defaultCasts);
}

代码示例来源:origin: org.apache.calcite/calcite-core

/**
 * Converts a ROW.
 *
 * <p>Called automatically via reflection.
 */
public RexNode convertRow(
  SqlRexContext cx,
  SqlRowOperator op,
  SqlCall call) {
 if (cx.getValidator().getValidatedNodeType(call).getSqlTypeName()
   != SqlTypeName.COLUMN_LIST) {
  return convertCall(cx, call);
 }
 final RexBuilder rexBuilder = cx.getRexBuilder();
 final List<RexNode> columns = new ArrayList<>();
 for (SqlNode operand : call.getOperandList()) {
  columns.add(
    rexBuilder.makeLiteral(
      ((SqlIdentifier) operand).getSimple()));
 }
 final RelDataType type =
   rexBuilder.deriveReturnType(SqlStdOperatorTable.COLUMN_LIST, columns);
 return rexBuilder.makeCall(type, SqlStdOperatorTable.COLUMN_LIST, columns);
}

代码示例来源:origin: Qihoo360/Quicksql

/**
 * Converts a ROW.
 *
 * <p>Called automatically via reflection.
 */
public RexNode convertRow(
  SqlRexContext cx,
  SqlRowOperator op,
  SqlCall call) {
 if (cx.getValidator().getValidatedNodeType(call).getSqlTypeName()
   != SqlTypeName.COLUMN_LIST) {
  return convertCall(cx, call);
 }
 final RexBuilder rexBuilder = cx.getRexBuilder();
 final List<RexNode> columns = new ArrayList<>();
 for (SqlNode operand : call.getOperandList()) {
  columns.add(
    rexBuilder.makeLiteral(
      ((SqlIdentifier) operand).getSimple()));
 }
 final RelDataType type =
   rexBuilder.deriveReturnType(SqlStdOperatorTable.COLUMN_LIST, columns);
 return rexBuilder.makeCall(type, SqlStdOperatorTable.COLUMN_LIST, columns);
}

代码示例来源:origin: Qihoo360/Quicksql

rexBuilder.deriveReturnType(call.getOperator(), exprList);
for (int i : elseArgs(exprList.size())) {
 exprList.set(i,

代码示例来源:origin: dremio/dremio-oss

/** Converts a {@link SqlCall} to a {@link RexCall} with a perhaps different
 * operator. */
private RexNode convertCall(
  SqlRexContext cx,
  SqlCall call,
  SqlOperator op) {
 final List<SqlNode> operands = call.getOperandList();
 final RexBuilder rexBuilder = cx.getRexBuilder();
 final SqlOperandTypeChecker.Consistency consistency =
   op.getOperandTypeChecker() == null
     ? SqlOperandTypeChecker.Consistency.NONE
     : op.getOperandTypeChecker().getConsistency();
 final List<RexNode> exprs =
   convertExpressionList(cx, operands, consistency);
 RelDataType type = rexBuilder.deriveReturnType(op, exprs);
 return rexBuilder.makeCall(type, op, RexUtil.flatten(exprs, op));
}

代码示例来源:origin: Qihoo360/Quicksql

/** Converts a {@link SqlCall} to a {@link RexCall} with a perhaps different
 * operator. */
private RexNode convertCall(
  SqlRexContext cx,
  SqlCall call,
  SqlOperator op) {
 final List<SqlNode> operands = call.getOperandList();
 final RexBuilder rexBuilder = cx.getRexBuilder();
 final SqlOperandTypeChecker.Consistency consistency =
   op.getOperandTypeChecker() == null
     ? SqlOperandTypeChecker.Consistency.NONE
     : op.getOperandTypeChecker().getConsistency();
 final List<RexNode> exprs =
   convertExpressionList(cx, operands, consistency);
 RelDataType type = rexBuilder.deriveReturnType(op, exprs);
 return rexBuilder.makeCall(type, op, RexUtil.flatten(exprs, op));
}

代码示例来源:origin: org.apache.calcite/calcite-core

/** Converts a {@link SqlCall} to a {@link RexCall} with a perhaps different
 * operator. */
private RexNode convertCall(
  SqlRexContext cx,
  SqlCall call,
  SqlOperator op) {
 final List<SqlNode> operands = call.getOperandList();
 final RexBuilder rexBuilder = cx.getRexBuilder();
 final SqlOperandTypeChecker.Consistency consistency =
   op.getOperandTypeChecker() == null
     ? SqlOperandTypeChecker.Consistency.NONE
     : op.getOperandTypeChecker().getConsistency();
 final List<RexNode> exprs =
   convertExpressionList(cx, operands, consistency);
 RelDataType type = rexBuilder.deriveReturnType(op, exprs);
 return rexBuilder.makeCall(type, op, RexUtil.flatten(exprs, op));
}

代码示例来源:origin: org.apache.calcite/calcite-core

public RexNode convertFunction(
  SqlRexContext cx,
  SqlFunction fun,
  SqlCall call) {
 final List<SqlNode> operands = call.getOperandList();
 final List<RexNode> exprs = convertExpressionList(cx, operands,
   SqlOperandTypeChecker.Consistency.NONE);
 if (fun.getFunctionType() == SqlFunctionCategory.USER_DEFINED_CONSTRUCTOR) {
  return makeConstructorCall(cx, fun, exprs);
 }
 RelDataType returnType =
   cx.getValidator().getValidatedNodeTypeIfKnown(call);
 if (returnType == null) {
  returnType = cx.getRexBuilder().deriveReturnType(fun, exprs);
 }
 return cx.getRexBuilder().makeCall(returnType, fun, exprs);
}

代码示例来源:origin: Qihoo360/Quicksql

public RexNode convertFunction(
  SqlRexContext cx,
  SqlFunction fun,
  SqlCall call) {
 final List<SqlNode> operands = call.getOperandList();
 final List<RexNode> exprs = convertExpressionList(cx, operands,
   SqlOperandTypeChecker.Consistency.NONE);
 if (fun.getFunctionType() == SqlFunctionCategory.USER_DEFINED_CONSTRUCTOR) {
  return makeConstructorCall(cx, fun, exprs);
 }
 RelDataType returnType =
   cx.getValidator().getValidatedNodeTypeIfKnown(call);
 if (returnType == null) {
  returnType = cx.getRexBuilder().deriveReturnType(fun, exprs);
 }
 return cx.getRexBuilder().makeCall(returnType, fun, exprs);
}

相关文章

微信公众号

最新文章

更多