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

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

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

RexBuilder.makeIntervalLiteral介绍

[英]Creates a literal representing an interval value, for example INTERVAL '3-7' YEAR TO MONTH.
[中]创建表示间隔值的文字,例如“3-7”年到月的间隔。

代码示例

代码示例来源:origin: apache/incubator-druid

@Test
public void testTimePlusDayTimeInterval()
{
 final Period period = new Period("P1DT1H1M");
 testExpression(
   rexBuilder.makeCall(
     SqlStdOperatorTable.DATETIME_PLUS,
     inputRef("t"),
     rexBuilder.makeIntervalLiteral(
       new BigDecimal(period.toStandardDuration().getMillis()), // DAY-TIME literals value is millis
       new SqlIntervalQualifier(TimeUnit.DAY, TimeUnit.MINUTE, SqlParserPos.ZERO)
     )
   ),
   DruidExpression.of(
     null,
     "(\"t\" + 90060000)"
   ),
   DateTimes.of("2000-02-03T04:05:06").plus(period).getMillis()
 );
}

代码示例来源:origin: apache/incubator-druid

@Test
public void testTimePlusYearMonthInterval()
{
 final Period period = new Period("P1Y1M");
 testExpression(
   rexBuilder.makeCall(
     SqlStdOperatorTable.DATETIME_PLUS,
     inputRef("t"),
     rexBuilder.makeIntervalLiteral(
       new BigDecimal(13), // YEAR-MONTH literals value is months
       new SqlIntervalQualifier(TimeUnit.YEAR, TimeUnit.MONTH, SqlParserPos.ZERO)
     )
   ),
   DruidExpression.of(
     null,
     "timestamp_shift(\"t\",concat('P', 13, 'M'),1)"
   ),
   DateTimes.of("2000-02-03T04:05:06").plus(period).getMillis()
 );
}

代码示例来源:origin: apache/incubator-druid

@Test
public void testTimeMinusYearMonthInterval()
{
 final Period period = new Period("P1Y1M");
 testExpression(
   rexBuilder.makeCall(
     typeFactory.createSqlType(SqlTypeName.TIMESTAMP),
     SqlStdOperatorTable.MINUS_DATE,
     ImmutableList.of(
       inputRef("t"),
       rexBuilder.makeIntervalLiteral(
         new BigDecimal(13), // YEAR-MONTH literals value is months
         new SqlIntervalQualifier(TimeUnit.YEAR, TimeUnit.MONTH, SqlParserPos.ZERO)
       )
     )
   ),
   DruidExpression.of(
     null,
     "timestamp_shift(\"t\",concat('P', 13, 'M'),-1)"
   ),
   DateTimes.of("2000-02-03T04:05:06").minus(period).getMillis()
 );
}

代码示例来源:origin: apache/incubator-druid

@Test
public void testTimeMinusDayTimeInterval()
{
 final Period period = new Period("P1DT1H1M");
 testExpression(
   rexBuilder.makeCall(
     typeFactory.createSqlType(SqlTypeName.TIMESTAMP),
     SqlStdOperatorTable.MINUS_DATE,
     ImmutableList.of(
       inputRef("t"),
       rexBuilder.makeIntervalLiteral(
         new BigDecimal(period.toStandardDuration().getMillis()), // DAY-TIME literals value is millis
         new SqlIntervalQualifier(TimeUnit.DAY, TimeUnit.MINUTE, SqlParserPos.ZERO)
       )
     )
   ),
   DruidExpression.of(
     null,
     "(\"t\" - 90060000)"
   ),
   DateTimes.of("2000-02-03T04:05:06").minus(period).getMillis()
 );
}

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

calciteLiteral = rexBuilder.makeIntervalLiteral(totalMonths,
  new SqlIntervalQualifier(TimeUnit.YEAR, TimeUnit.MONTH, new SqlParserPos(1,1)));
break;
 value).getNanos(), 6);
 calciteLiteral =
 rexBuilder.makeIntervalLiteral(secsValueBd.add(nanosValueBd),
 new SqlIntervalQualifier(TimeUnit.MILLISECOND, null, new
 SqlParserPos(1, 1)));

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

calciteLiteral = rexBuilder.makeIntervalLiteral(totalMonths,
  new SqlIntervalQualifier(TimeUnit.YEAR, TimeUnit.MONTH, new SqlParserPos(1,1)));
break;
 value).getNanos(), 6);
 calciteLiteral =
 rexBuilder.makeIntervalLiteral(secsValueBd.add(nanosValueBd),
 new SqlIntervalQualifier(TimeUnit.MILLISECOND, null, new
 SqlParserPos(1, 1)));

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

public RexLiteral convertInterval(
  SqlRexContext cx,
  SqlIntervalQualifier intervalQualifier) {
 RexBuilder rexBuilder = cx.getRexBuilder();
 return rexBuilder.makeIntervalLiteral(intervalQualifier);
}

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

public RexLiteral convertInterval(
  SqlRexContext cx,
  SqlIntervalQualifier intervalQualifier) {
 RexBuilder rexBuilder = cx.getRexBuilder();
 return rexBuilder.makeIntervalLiteral(intervalQualifier);
}

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

public RexNode convertCall(SqlRexContext cx, SqlCall call) {
  // TIMESTAMPADD(unit, count, timestamp)
  //  => timestamp + count * INTERVAL '1' UNIT
  final RexBuilder rexBuilder = cx.getRexBuilder();
  final SqlLiteral unitLiteral = call.operand(0);
  final TimeUnit unit = unitLiteral.symbolValue(TimeUnit.class);
  RexNode interval2Add;
  SqlIntervalQualifier qualifier =
    new SqlIntervalQualifier(unit, null, unitLiteral.getParserPosition());
  RexNode op1 = cx.convertExpression(call.operand(1));
  switch (unit) {
  case MICROSECOND:
  case NANOSECOND:
   interval2Add =
     divide(rexBuilder,
       multiply(rexBuilder,
         rexBuilder.makeIntervalLiteral(BigDecimal.ONE, qualifier), op1),
       BigDecimal.ONE.divide(unit.multiplier,
         RoundingMode.UNNECESSARY));
   break;
  default:
   interval2Add = multiply(rexBuilder,
     rexBuilder.makeIntervalLiteral(unit.multiplier, qualifier), op1);
  }
  return rexBuilder.makeCall(SqlStdOperatorTable.DATETIME_PLUS,
    cx.convertExpression(call.operand(2)), interval2Add);
 }
}

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

public RexNode convertCall(SqlRexContext cx, SqlCall call) {
  // TIMESTAMPADD(unit, count, timestamp)
  //  => timestamp + count * INTERVAL '1' UNIT
  final RexBuilder rexBuilder = cx.getRexBuilder();
  final SqlLiteral unitLiteral = call.operand(0);
  final TimeUnit unit = unitLiteral.symbolValue(TimeUnit.class);
  RexNode interval2Add;
  SqlIntervalQualifier qualifier =
    new SqlIntervalQualifier(unit, null, unitLiteral.getParserPosition());
  RexNode op1 = cx.convertExpression(call.operand(1));
  switch (unit) {
  case MICROSECOND:
  case NANOSECOND:
   interval2Add =
     divide(rexBuilder,
       multiply(rexBuilder,
         rexBuilder.makeIntervalLiteral(BigDecimal.ONE, qualifier), op1),
       BigDecimal.ONE.divide(unit.multiplier,
         RoundingMode.UNNECESSARY));
   break;
  default:
   interval2Add = multiply(rexBuilder,
     rexBuilder.makeIntervalLiteral(unit.multiplier, qualifier), op1);
  }
  return rexBuilder.makeCall(SqlStdOperatorTable.DATETIME_PLUS,
    cx.convertExpression(call.operand(2)), interval2Add);
 }
}

代码示例来源:origin: com.facebook.presto.hive/hive-apache

calciteLiteral = rexBuilder.makeIntervalLiteral(totalMonths,
  new SqlIntervalQualifier(TimeUnit.YEAR, TimeUnit.MONTH, new SqlParserPos(1,1)));
break;
calciteLiteral = rexBuilder.makeIntervalLiteral(secsValueBd.add(nanosValueBd),
  new SqlIntervalQualifier(TimeUnit.DAY, TimeUnit.SECOND, new SqlParserPos(1,1)));
break;

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

@Override
  public RexNode convertCall(SqlRexContext cx, SqlCall call) {
   // TIMESTAMPADD(unit, count, timestamp)
   //  => timestamp + count * INTERVAL '1' UNIT
   final RexBuilder rexBuilder = cx.getRexBuilder();
   final SqlLiteral unitLiteral = call.operand(0);
   final TimeUnit unit = unitLiteral.symbolValue(TimeUnit.class);
   switch (unit) {
    // TODO(DX-11268): Support sub-second intervals with TIMESTAMPADD.
    case MILLISECOND:
    case MICROSECOND:
     throw UserException.unsupportedError()
      .message("TIMESTAMPADD function supports the following time units: YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND")
      .build();
   }
   final RexNode timestampNode = cx.convertExpression(call.operand(2));
   final RexNode multiplyNode = rexBuilder.makeCall(SqlStdOperatorTable.MULTIPLY,
    rexBuilder.makeIntervalLiteral(unit.multiplier,
     new SqlIntervalQualifier(unit, null, unitLiteral.getParserPosition())),
    cx.convertExpression(call.operand(1)));
   return rexBuilder.makeCall(SqlStdOperatorTable.DATETIME_PLUS,
    timestampNode,
    multiplyNode);
  }
});

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

case INTERVAL_MINUTE_SECOND:
case INTERVAL_SECOND:
 return makeIntervalLiteral((BigDecimal) value,
   type.getIntervalQualifier());
case MAP:

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

case INTERVAL_MINUTE_SECOND:
case INTERVAL_SECOND:
 return makeIntervalLiteral((BigDecimal) value,
   type.getIntervalQualifier());
case MAP:

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

(BigDecimal) sourceInterval.getValue();
RexLiteral castedInterval =
  cx.getRexBuilder().makeIntervalLiteral(sourceValue,
    intervalQualifier);
return castToValidatedType(cx, call, castedInterval);
sourceValue = sourceValue.multiply(multiplier);
RexLiteral castedInterval =
  cx.getRexBuilder().makeIntervalLiteral(
    sourceValue,
    intervalQualifier);

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

(BigDecimal) sourceInterval.getValue();
RexLiteral castedInterval =
  cx.getRexBuilder().makeIntervalLiteral(sourceValue,
    intervalQualifier);
return castToValidatedType(cx, call, castedInterval);
sourceValue = sourceValue.multiply(multiplier);
RexLiteral castedInterval =
  cx.getRexBuilder().makeIntervalLiteral(
    sourceValue,
    intervalQualifier);

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

literal.getValueAs(SqlIntervalLiteral.IntervalValue.class)
    .getIntervalQualifier();
return rexBuilder.makeIntervalLiteral(
  literal.getValueAs(BigDecimal.class),
  sqlIntervalQualifier);

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

literal.getValueAs(SqlIntervalLiteral.IntervalValue.class)
    .getIntervalQualifier();
return rexBuilder.makeIntervalLiteral(
  literal.getValueAs(BigDecimal.class),
  sqlIntervalQualifier);

相关文章

微信公众号

最新文章

更多