private List<RexNode> rewriteFloorDateChildren(SqlOperator op, List<RexNode> childRexNodeLst) throws SemanticException { List<RexNode> newChildRexNodeLst = new ArrayList<RexNode>(); assert childRexNodeLst.size() == 1; newChildRexNodeLst.add(childRexNodeLst.get(0)); if (op == HiveFloorDate.YEAR) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.YEAR)); } else if (op == HiveFloorDate.QUARTER) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.QUARTER)); } else if (op == HiveFloorDate.MONTH) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.MONTH)); } else if (op == HiveFloorDate.WEEK) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.WEEK)); } else if (op == HiveFloorDate.DAY) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.DAY)); } else if (op == HiveFloorDate.HOUR) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.HOUR)); } else if (op == HiveFloorDate.MINUTE) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.MINUTE)); } else if (op == HiveFloorDate.SECOND) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.SECOND)); } return newChildRexNodeLst; }
private List<RexNode> rewriteExtractDateChildren(SqlOperator op, List<RexNode> childRexNodeLst) throws SemanticException { List<RexNode> newChildRexNodeLst = new ArrayList<RexNode>(); if (op == HiveExtractDate.YEAR) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.YEAR)); } else if (op == HiveExtractDate.QUARTER) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.QUARTER)); } else if (op == HiveExtractDate.MONTH) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.MONTH)); } else if (op == HiveExtractDate.WEEK) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.WEEK)); } else if (op == HiveExtractDate.DAY) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.DAY)); } else if (op == HiveExtractDate.HOUR) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.HOUR)); } else if (op == HiveExtractDate.MINUTE) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.MINUTE)); } else if (op == HiveExtractDate.SECOND) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.SECOND)); } assert childRexNodeLst.size() == 1; newChildRexNodeLst.add(childRexNodeLst.get(0)); return newChildRexNodeLst; }
private List<RexNode> rewriteFloorDateChildren(SqlOperator op, List<RexNode> childRexNodeLst) throws SemanticException { List<RexNode> newChildRexNodeLst = new ArrayList<RexNode>(); assert childRexNodeLst.size() == 1; newChildRexNodeLst.add(childRexNodeLst.get(0)); if (op == HiveFloorDate.YEAR) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.YEAR)); } else if (op == HiveFloorDate.QUARTER) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.QUARTER)); } else if (op == HiveFloorDate.MONTH) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.MONTH)); } else if (op == HiveFloorDate.WEEK) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.WEEK)); } else if (op == HiveFloorDate.DAY) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.DAY)); } else if (op == HiveFloorDate.HOUR) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.HOUR)); } else if (op == HiveFloorDate.MINUTE) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.MINUTE)); } else if (op == HiveFloorDate.SECOND) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.SECOND)); } return newChildRexNodeLst; }
final boolean isTimestampLevel; if (op == HiveExtractDate.YEAR) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.YEAR)); isTimestampLevel = false; } else if (op == HiveExtractDate.QUARTER) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.QUARTER)); isTimestampLevel = false; } else if (op == HiveExtractDate.MONTH) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.MONTH)); isTimestampLevel = false; } else if (op == HiveExtractDate.WEEK) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.WEEK)); isTimestampLevel = false; } else if (op == HiveExtractDate.DAY) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.DAY)); isTimestampLevel = false; } else if (op == HiveExtractDate.HOUR) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.HOUR)); isTimestampLevel = true; } else if (op == HiveExtractDate.MINUTE) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.MINUTE)); isTimestampLevel = true; } else if (op == HiveExtractDate.SECOND) { newChildRexNodeLst.add(cluster.getRexBuilder().makeFlag(TimeUnitRange.SECOND)); isTimestampLevel = true; } else {
@Test public void testOtherTimeCeil() { // CEIL(__time TO unit) testExpression( rexBuilder.makeCall( SqlStdOperatorTable.CEIL, inputRef("t"), rexBuilder.makeFlag(TimeUnitRange.YEAR) ), DruidExpression.fromExpression("timestamp_ceil(\"t\",'P1Y',null,'UTC')"), DateTimes.of("2001").getMillis() ); }
@Test public void testOtherTimeFloor() { // FLOOR(__time TO unit) testExpression( rexBuilder.makeCall( SqlStdOperatorTable.FLOOR, inputRef("t"), rexBuilder.makeFlag(TimeUnitRange.YEAR) ), DruidExpression.fromExpression("timestamp_floor(\"t\",'P1Y',null,'UTC')"), DateTimes.of("2000").getMillis() ); }
@Test public void testExtract() { testExpression( rexBuilder.makeCall( SqlStdOperatorTable.EXTRACT, rexBuilder.makeFlag(TimeUnitRange.QUARTER), inputRef("t") ), DruidExpression.fromExpression("timestamp_extract(\"t\",'QUARTER','UTC')"), 1L ); testExpression( rexBuilder.makeCall( SqlStdOperatorTable.EXTRACT, rexBuilder.makeFlag(TimeUnitRange.DAY), inputRef("t") ), DruidExpression.fromExpression("timestamp_extract(\"t\",'DAY','UTC')"), 3L ); }
rexBuilder.makeCall( SqlStdOperatorTable.TRIM, rexBuilder.makeFlag(SqlTrimFunction.Flag.BOTH), rexBuilder.makeLiteral(" "), inputRef("spacey") rexBuilder.makeCall( SqlStdOperatorTable.TRIM, rexBuilder.makeFlag(SqlTrimFunction.Flag.LEADING), rexBuilder.makeLiteral(" h"), inputRef("spacey") rexBuilder.makeCall( SqlStdOperatorTable.TRIM, rexBuilder.makeFlag(SqlTrimFunction.Flag.TRAILING), rexBuilder.makeLiteral(" e"), inputRef("spacey")
/** * Creates a literal representing an interval type, for example * {@code YEAR TO MONTH} or {@code DOW}. */ public RexLiteral makeIntervalLiteral( SqlIntervalQualifier intervalQualifier) { assert intervalQualifier != null; return makeFlag(intervalQualifier.timeUnitRange); }
/** * Creates a literal representing an interval type, for example * {@code YEAR TO MONTH} or {@code DOW}. */ public RexLiteral makeIntervalLiteral( SqlIntervalQualifier intervalQualifier) { assert intervalQualifier != null; return makeFlag(intervalQualifier.timeUnitRange); }
Fixture2() { exYear = rexBuilder.makeCall(SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.YEAR), ts)); exMonth = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.MONTH), ts)); exDay = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.DAY), ts)); } }
@Override public RexNode convertCall(SqlRexContext cx, SqlCall call) { final RexBuilder rexBuilder = cx.getRexBuilder(); final SqlLiteral literal = (SqlLiteral) call.getOperandList().get(0); final String value = ((NlsString)literal.getValue()).getValue(); TimeUnitRange range = VALID_PERIODS.get(value.toLowerCase()); Preconditions.checkNotNull(range, "Unhandle range type: %s.", value); List<RexNode> exprs = new ArrayList<>(); exprs.add(rexBuilder.makeFlag(range)); exprs.add(cx.convertExpression(call.getOperandList().get(1))); RelDataTypeFactory typeFactory = cx.getTypeFactory(); final RelDataType returnType = typeFactory.createTypeWithNullability(typeFactory.createSqlType(SqlTypeName.BIGINT), exprs.get(1).getType().isNullable()); return rexBuilder.makeCall(returnType, SqlStdOperatorTable.EXTRACT, exprs); }
public RexNode convertCall(SqlRexContext cx, SqlCall call) { final RexBuilder rexBuilder = cx.getRexBuilder(); final RexNode operand = cx.convertExpression(call.getOperandList().get(0)); return rexBuilder.makeCall(SqlStdOperatorTable.TRIM, rexBuilder.makeFlag(flag), rexBuilder.makeLiteral(" "), operand); } }
public RexNode convertCall(SqlRexContext cx, SqlCall call) { final RexBuilder rexBuilder = cx.getRexBuilder(); final RexNode operand = cx.convertExpression(call.getOperandList().get(0)); return rexBuilder.makeCall(SqlStdOperatorTable.TRIM, rexBuilder.makeFlag(flag), rexBuilder.makeLiteral(" "), operand); } }
Fixture2() { exYearTs = rexBuilder.makeCall(SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.YEAR), ts)); exMonthTs = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.MONTH), ts)); exDayTs = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.DAY), ts)); exYearD = rexBuilder.makeCall(SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.YEAR), d)); exMonthD = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.MONTH), d)); exDayD = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.DAY), d)); ImmutableList.of(ts, rexBuilder.makeFlag(TimeUnitRange.YEAR))); floorMonth = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.FLOOR, ImmutableList.of(ts, rexBuilder.makeFlag(TimeUnitRange.MONTH))); floorDay = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.FLOOR, ImmutableList.of(ts, rexBuilder.makeFlag(TimeUnitRange.DAY))); floorHour = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.FLOOR, ImmutableList.of(ts, rexBuilder.makeFlag(TimeUnitRange.HOUR))); floorMinute = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.FLOOR, ImmutableList.of(ts, rexBuilder.makeFlag(TimeUnitRange.MINUTE))); ImmutableList.of(ts, rexBuilder.makeFlag(TimeUnitRange.YEAR))); ceilMonth = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.CEIL,
Fixture2() { exYearTs = rexBuilder.makeCall(SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.YEAR), ts)); exMonthTs = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.MONTH), ts)); exDayTs = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.DAY), ts)); exYearD = rexBuilder.makeCall(SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.YEAR), d)); exMonthD = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.MONTH), d)); exDayD = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.EXTRACT, ImmutableList.of(rexBuilder.makeFlag(TimeUnitRange.DAY), d)); ImmutableList.of(ts, rexBuilder.makeFlag(TimeUnitRange.YEAR))); floorMonth = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.FLOOR, ImmutableList.of(ts, rexBuilder.makeFlag(TimeUnitRange.MONTH))); floorDay = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.FLOOR, ImmutableList.of(ts, rexBuilder.makeFlag(TimeUnitRange.DAY))); floorHour = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.FLOOR, ImmutableList.of(ts, rexBuilder.makeFlag(TimeUnitRange.HOUR))); floorMinute = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.FLOOR, ImmutableList.of(ts, rexBuilder.makeFlag(TimeUnitRange.MINUTE))); ImmutableList.of(ts, rexBuilder.makeFlag(TimeUnitRange.YEAR))); ceilMonth = rexBuilder.makeCall(intRelDataType, SqlStdOperatorTable.CEIL,
final RexNode innerFloorCall = f.rexBuilder.makeCall( SqlStdOperatorTable.FLOOR, literalTs, f.rexBuilder.makeFlag(timeUnitRanges.get(i))); final RexNode innerCeilCall = f.rexBuilder.makeCall( SqlStdOperatorTable.CEIL, literalTs, f.rexBuilder.makeFlag(timeUnitRanges.get(i))); for (int j = 0; j <= i; j++) { final RexNode outerFloorCall = f.rexBuilder.makeCall( SqlStdOperatorTable.FLOOR, innerFloorCall, f.rexBuilder.makeFlag(timeUnitRanges.get(j))); final RexNode outerCeilCall = f.rexBuilder.makeCall( SqlStdOperatorTable.CEIL, innerCeilCall, f.rexBuilder.makeFlag(timeUnitRanges.get(j))); final RexCall floorSimplifiedExpr = (RexCall) defaultSimplifier.apply(outerFloorCall); assertThat(floorSimplifiedExpr.getKind(), is(SqlKind.FLOOR)); final RexNode innerFloorCall = f.rexBuilder.makeCall( SqlStdOperatorTable.FLOOR, literalTs, f.rexBuilder.makeFlag(timeUnitRanges.get(i))); final RexNode innerCeilCall = f.rexBuilder.makeCall( SqlStdOperatorTable.CEIL, literalTs, f.rexBuilder.makeFlag(timeUnitRanges.get(i))); for (int j = timeUnitRanges.size() - 1; j > i; j--) { final RexNode outerFloorCall = f.rexBuilder.makeCall( SqlStdOperatorTable.FLOOR, innerFloorCall, f.rexBuilder.makeFlag(timeUnitRanges.get(j))); final RexNode outerCeilCall = f.rexBuilder.makeCall( SqlStdOperatorTable.CEIL, innerCeilCall, f.rexBuilder.makeFlag(timeUnitRanges.get(j)));
final RexNode innerFloorCall = f.rexBuilder.makeCall( SqlStdOperatorTable.FLOOR, literalTs, f.rexBuilder.makeFlag(timeUnitRanges.get(i))); final RexNode innerCeilCall = f.rexBuilder.makeCall( SqlStdOperatorTable.CEIL, literalTs, f.rexBuilder.makeFlag(timeUnitRanges.get(i))); for (int j = 0; j <= i; j++) { final RexNode outerFloorCall = f.rexBuilder.makeCall( SqlStdOperatorTable.FLOOR, innerFloorCall, f.rexBuilder.makeFlag(timeUnitRanges.get(j))); final RexNode outerCeilCall = f.rexBuilder.makeCall( SqlStdOperatorTable.CEIL, innerCeilCall, f.rexBuilder.makeFlag(timeUnitRanges.get(j))); final RexCall floorSimplifiedExpr = (RexCall) f.simplify.simplifyPreservingType(outerFloorCall, final RexNode innerFloorCall = f.rexBuilder.makeCall( SqlStdOperatorTable.FLOOR, literalTs, f.rexBuilder.makeFlag(timeUnitRanges.get(i))); final RexNode innerCeilCall = f.rexBuilder.makeCall( SqlStdOperatorTable.CEIL, literalTs, f.rexBuilder.makeFlag(timeUnitRanges.get(i))); for (int j = timeUnitRanges.size() - 1; j > i; j--) { final RexNode outerFloorCall = f.rexBuilder.makeCall( SqlStdOperatorTable.FLOOR, innerFloorCall, f.rexBuilder.makeFlag(timeUnitRanges.get(j))); final RexNode outerCeilCall = f.rexBuilder.makeCall( SqlStdOperatorTable.CEIL, innerCeilCall, f.rexBuilder.makeFlag(timeUnitRanges.get(j)));
"bottom_nw")); RexNode after = builder.getRexBuilder().makeFlag( SqlMatchRecognize.AfterOption.SKIP_TO_NEXT_ROW);
return rexBuilder.makeBinaryLiteral(byteString); case SYMBOL: return rexBuilder.makeFlag(literal.getValueAs(Enum.class)); case TIMESTAMP: return rexBuilder.makeTimestampLiteral(