vvysotskyi commented on a change in pull request #1397: DRILL-6633: Replace
usage of Guava classes by JDK ones
URL: https://github.com/apache/drill/pull/1397#discussion_r210886866
##########
File path:
exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillConstExecutor.java
##########
@@ -163,199 +163,196 @@ public void reduce(final RexBuilder rexBuilder,
List<RexNode> constExps, final L
continue;
}
- Function<ValueHolder, RexNode> literator = new Function<ValueHolder,
RexNode>() {
- @Override
- public RexNode apply(ValueHolder output) {
- switch(materializedExpr.getMajorType().getMinorType()) {
- case INT: {
- int value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
- ((NullableIntHolder) output).value : ((IntHolder)
output).value;
- return rexBuilder.makeLiteral(new BigDecimal(value),
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.INTEGER, newCall.getType().isNullable()), false);
- }
- case BIGINT: {
- long value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
- ((NullableBigIntHolder) output).value : ((BigIntHolder)
output).value;
- return rexBuilder.makeLiteral(new BigDecimal(value),
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.BIGINT, newCall.getType().isNullable()), false);
- }
- case FLOAT4: {
- float value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
- ((NullableFloat4Holder) output).value : ((Float4Holder)
output).value;
- return rexBuilder.makeLiteral(new BigDecimal(value),
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.FLOAT, newCall.getType().isNullable()), false);
- }
- case FLOAT8: {
- double value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
- ((NullableFloat8Holder) output).value : ((Float8Holder)
output).value;
- return rexBuilder.makeLiteral(new BigDecimal(value),
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.DOUBLE, newCall.getType().isNullable()), false);
- }
- case VARCHAR: {
- String value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
-
StringFunctionHelpers.getStringFromVarCharHolder((NullableVarCharHolder)output)
:
-
StringFunctionHelpers.getStringFromVarCharHolder((VarCharHolder)output);
- return rexBuilder.makeLiteral(value,
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.VARCHAR, newCall.getType().isNullable()), false);
- }
- case BIT: {
- boolean value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
- ((NullableBitHolder) output).value == 1 : ((BitHolder)
output).value == 1;
- return rexBuilder.makeLiteral(value,
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.BOOLEAN, newCall.getType().isNullable()), false);
- }
- case DATE: {
- Calendar value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
- new DateTime(((NullableDateHolder) output).value,
DateTimeZone.UTC).toCalendar(null) :
- new DateTime(((DateHolder) output).value,
DateTimeZone.UTC).toCalendar(null);
- return
rexBuilder.makeLiteral(DateString.fromCalendarFields(value),
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.DATE, newCall.getType().isNullable()), false);
- }
- case DECIMAL9: {
- long value;
- int scale;
- if (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) {
- NullableDecimal9Holder decimal9Out =
(NullableDecimal9Holder)output;
- value = decimal9Out.value;
- scale = decimal9Out.scale;
- } else {
- Decimal9Holder decimal9Out = (Decimal9Holder)output;
- value = decimal9Out.value;
- scale = decimal9Out.scale;
- }
- return rexBuilder.makeLiteral(
- new BigDecimal(BigInteger.valueOf(value), scale),
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.DECIMAL, newCall.getType().isNullable()),
- false);
- }
- case DECIMAL18: {
- long value;
- int scale;
- if (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) {
- NullableDecimal18Holder decimal18Out =
(NullableDecimal18Holder)output;
- value = decimal18Out.value;
- scale = decimal18Out.scale;
- } else {
- Decimal18Holder decimal18Out = (Decimal18Holder)output;
- value = decimal18Out.value;
- scale = decimal18Out.scale;
- }
- return rexBuilder.makeLiteral(
- new BigDecimal(BigInteger.valueOf(value), scale),
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.DECIMAL, newCall.getType().isNullable()),
- false);
+ Function<ValueHolder, RexNode> literator = valueHolder -> {
+ switch(materializedExpr.getMajorType().getMinorType()) {
+ case INT: {
+ int value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
+ ((NullableIntHolder) valueHolder).value : ((IntHolder)
valueHolder).value;
+ return rexBuilder.makeLiteral(new BigDecimal(value),
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.INTEGER, newCall.getType().isNullable()), false);
+ }
+ case BIGINT: {
+ long value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
+ ((NullableBigIntHolder) valueHolder).value : ((BigIntHolder)
valueHolder).value;
+ return rexBuilder.makeLiteral(new BigDecimal(value),
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.BIGINT, newCall.getType().isNullable()), false);
+ }
+ case FLOAT4: {
+ float value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
+ ((NullableFloat4Holder) valueHolder).value : ((Float4Holder)
valueHolder).value;
+ return rexBuilder.makeLiteral(new BigDecimal(value),
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.FLOAT, newCall.getType().isNullable()), false);
+ }
+ case FLOAT8: {
+ double value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
+ ((NullableFloat8Holder) valueHolder).value : ((Float8Holder)
valueHolder).value;
+ return rexBuilder.makeLiteral(new BigDecimal(value),
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.DOUBLE, newCall.getType().isNullable()), false);
+ }
+ case VARCHAR: {
+ String value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
+
StringFunctionHelpers.getStringFromVarCharHolder((NullableVarCharHolder)
valueHolder) :
+ StringFunctionHelpers.getStringFromVarCharHolder((VarCharHolder)
valueHolder);
+ return rexBuilder.makeLiteral(value,
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.VARCHAR, newCall.getType().isNullable()), false);
+ }
+ case BIT: {
+ boolean value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
+ ((NullableBitHolder) valueHolder).value == 1 : ((BitHolder)
valueHolder).value == 1;
+ return rexBuilder.makeLiteral(value,
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.BOOLEAN, newCall.getType().isNullable()), false);
+ }
+ case DATE: {
+ Calendar value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
+ new DateTime(((NullableDateHolder) valueHolder).value,
DateTimeZone.UTC).toCalendar(null) :
+ new DateTime(((DateHolder) valueHolder).value,
DateTimeZone.UTC).toCalendar(null);
+ return rexBuilder.makeLiteral(DateString.fromCalendarFields(value),
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.DATE, newCall.getType().isNullable()), false);
+ }
+ case DECIMAL9: {
+ long value;
+ int scale;
+ if (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) {
+ NullableDecimal9Holder decimal9Out = (NullableDecimal9Holder)
valueHolder;
+ value = decimal9Out.value;
+ scale = decimal9Out.scale;
+ } else {
+ Decimal9Holder decimal9Out = (Decimal9Holder) valueHolder;
+ value = decimal9Out.value;
+ scale = decimal9Out.scale;
}
- case VARDECIMAL: {
- DrillBuf buffer;
- int start;
- int end;
- int scale;
- int precision;
- if (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) {
- NullableVarDecimalHolder varDecimalHolder =
(NullableVarDecimalHolder) output;
- buffer = varDecimalHolder.buffer;
- start = varDecimalHolder.start;
- end = varDecimalHolder.end;
- scale = varDecimalHolder.scale;
- precision = varDecimalHolder.precision;
- } else {
- VarDecimalHolder varDecimalHolder = (VarDecimalHolder) output;
- buffer = varDecimalHolder.buffer;
- start = varDecimalHolder.start;
- end = varDecimalHolder.end;
- scale = varDecimalHolder.scale;
- precision = varDecimalHolder.precision;
- }
- return rexBuilder.makeLiteral(
-
org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromDrillBuf(buffer,
start, end - start, scale),
- typeFactory.createSqlType(SqlTypeName.DECIMAL, precision,
scale),
- false);
+ return rexBuilder.makeLiteral(
+ new BigDecimal(BigInteger.valueOf(value), scale),
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.DECIMAL, newCall.getType().isNullable()),
+ false);
+ }
+ case DECIMAL18: {
+ long value;
+ int scale;
+ if (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) {
+ NullableDecimal18Holder decimal18Out = (NullableDecimal18Holder)
valueHolder;
+ value = decimal18Out.value;
+ scale = decimal18Out.scale;
+ } else {
+ Decimal18Holder decimal18Out = (Decimal18Holder) valueHolder;
+ value = decimal18Out.value;
+ scale = decimal18Out.scale;
}
- case DECIMAL28SPARSE: {
- DrillBuf buffer;
- int start;
- int scale;
- if (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) {
- NullableDecimal28SparseHolder decimal28Out =
(NullableDecimal28SparseHolder)output;
- buffer = decimal28Out.buffer;
- start = decimal28Out.start;
- scale = decimal28Out.scale;
- } else {
- Decimal28SparseHolder decimal28Out =
(Decimal28SparseHolder)output;
- buffer = decimal28Out.buffer;
- start = decimal28Out.start;
- scale = decimal28Out.scale;
- }
- return rexBuilder.makeLiteral(
-
org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromSparse(buffer, start
* 20, 5, scale),
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.DECIMAL, newCall.getType().isNullable()), false);
+ return rexBuilder.makeLiteral(
+ new BigDecimal(BigInteger.valueOf(value), scale),
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.DECIMAL, newCall.getType().isNullable()),
+ false);
+ }
+ case VARDECIMAL: {
+ DrillBuf buffer;
+ int start;
+ int end;
+ int scale;
+ int precision;
+ if (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) {
+ NullableVarDecimalHolder varDecimalHolder =
(NullableVarDecimalHolder) output;
+ buffer = varDecimalHolder.buffer;
+ start = varDecimalHolder.start;
+ end = varDecimalHolder.end;
+ scale = varDecimalHolder.scale;
+ precision = varDecimalHolder.precision;
+ } else {
+ VarDecimalHolder varDecimalHolder = (VarDecimalHolder) output;
+ buffer = varDecimalHolder.buffer;
+ start = varDecimalHolder.start;
+ end = varDecimalHolder.end;
+ scale = varDecimalHolder.scale;
+ precision = varDecimalHolder.precision;
}
- case DECIMAL38SPARSE: {
- DrillBuf buffer;
- int start;
- int scale;
- if (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) {
- NullableDecimal38SparseHolder decimal38Out =
(NullableDecimal38SparseHolder)output;
- buffer = decimal38Out.buffer;
- start = decimal38Out.start;
- scale = decimal38Out.scale;
- } else {
- Decimal38SparseHolder decimal38Out =
(Decimal38SparseHolder)output;
- buffer = decimal38Out.buffer;
- start = decimal38Out.start;
- scale = decimal38Out.scale;
- }
- return
rexBuilder.makeLiteral(org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromSparse(buffer,
start * 24, 6, scale),
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.DECIMAL, newCall.getType().isNullable()),
+ return rexBuilder.makeLiteral(
+
org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromDrillBuf(buffer,
start, end - start, scale),
+ typeFactory.createSqlType(SqlTypeName.DECIMAL, precision,
scale),
false);
+ }
+ case DECIMAL28SPARSE: {
+ DrillBuf buffer;
+ int start;
+ int scale;
+ if (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) {
+ NullableDecimal28SparseHolder decimal28Out =
(NullableDecimal28SparseHolder) valueHolder;
+ buffer = decimal28Out.buffer;
+ start = decimal28Out.start;
+ scale = decimal28Out.scale;
+ } else {
+ Decimal28SparseHolder decimal28Out = (Decimal28SparseHolder)
valueHolder;
+ buffer = decimal28Out.buffer;
+ start = decimal28Out.start;
+ scale = decimal28Out.scale;
}
- case TIME: {
- Calendar value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
- new DateTime(((NullableTimeHolder) output).value,
DateTimeZone.UTC).toCalendar(null) :
- new DateTime(((TimeHolder) output).value,
DateTimeZone.UTC).toCalendar(null);
- return
rexBuilder.makeLiteral(TimeString.fromCalendarFields(value),
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.TIME, newCall.getType().isNullable()), false);
- }
- case TIMESTAMP: {
- Calendar value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
- new DateTime(((NullableTimeStampHolder) output).value,
DateTimeZone.UTC).toCalendar(null) :
- new DateTime(((TimeStampHolder) output).value,
DateTimeZone.UTC).toCalendar(null);
- return
rexBuilder.makeLiteral(TimestampString.fromCalendarFields(value),
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.TIMESTAMP, newCall.getType().isNullable()), false);
- }
- case INTERVALYEAR: {
- BigDecimal value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
- new BigDecimal(((NullableIntervalYearHolder) output).value) :
- new BigDecimal(((IntervalYearHolder) output).value);
- return rexBuilder.makeLiteral(value,
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.INTERVAL_YEAR_MONTH, newCall.getType().isNullable()), false);
+ return rexBuilder.makeLiteral(
+
org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromSparse(buffer, start
* 20, 5, scale),
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.DECIMAL, newCall.getType().isNullable()), false);
+ }
+ case DECIMAL38SPARSE: {
+ DrillBuf buffer;
+ int start;
+ int scale;
+ if (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) {
+ NullableDecimal38SparseHolder decimal38Out =
(NullableDecimal38SparseHolder) valueHolder;
+ buffer = decimal38Out.buffer;
+ start = decimal38Out.start;
+ scale = decimal38Out.scale;
+ } else {
+ Decimal38SparseHolder decimal38Out = (Decimal38SparseHolder)
valueHolder;
+ buffer = decimal38Out.buffer;
+ start = decimal38Out.start;
+ scale = decimal38Out.scale;
}
- case INTERVALDAY: {
- int days;
- int milliseconds;
- if (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) {
- NullableIntervalDayHolder intervalDayOut =
(NullableIntervalDayHolder) output;
- days = intervalDayOut.days;
- milliseconds = intervalDayOut.milliseconds;
- } else {
- IntervalDayHolder intervalDayOut = (IntervalDayHolder) output;
- days = intervalDayOut.days;
- milliseconds = intervalDayOut.milliseconds;
- }
- return rexBuilder.makeLiteral(
- new BigDecimal(days * (long)
DateUtilities.daysToStandardMillis + milliseconds),
-
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.INTERVAL_DAY,
- newCall.getType().isNullable()), false);
+ return
rexBuilder.makeLiteral(org.apache.drill.exec.util.DecimalUtility.getBigDecimalFromSparse(buffer,
start * 24, 6, scale),
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.DECIMAL, newCall.getType().isNullable()),
+ false);
+ }
+ case TIME: {
+ Calendar value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
+ new DateTime(((NullableTimeHolder) valueHolder).value,
DateTimeZone.UTC).toCalendar(null) :
+ new DateTime(((TimeHolder) valueHolder).value,
DateTimeZone.UTC).toCalendar(null);
+ return rexBuilder.makeLiteral(TimeString.fromCalendarFields(value),
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.TIME, newCall.getType().isNullable()), false);
+ }
+ case TIMESTAMP: {
+ Calendar value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
+ new DateTime(((NullableTimeStampHolder) valueHolder).value,
DateTimeZone.UTC).toCalendar(null) :
+ new DateTime(((TimeStampHolder) valueHolder).value,
DateTimeZone.UTC).toCalendar(null);
+ return
rexBuilder.makeLiteral(TimestampString.fromCalendarFields(value),
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.TIMESTAMP, newCall.getType().isNullable()), false);
+ }
+ case INTERVALYEAR: {
+ BigDecimal value = (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) ?
+ new BigDecimal(((NullableIntervalYearHolder) valueHolder).value)
:
+ new BigDecimal(((IntervalYearHolder) valueHolder).value);
+ return rexBuilder.makeLiteral(value,
+ TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.INTERVAL_YEAR_MONTH, newCall.getType().isNullable()), false);
+ }
+ case INTERVALDAY: {
+ int days;
+ int milliseconds;
+ if (materializedExpr.getMajorType().getMode() ==
TypeProtos.DataMode.OPTIONAL) {
+ NullableIntervalDayHolder intervalDayOut =
(NullableIntervalDayHolder) valueHolder;
+ days = intervalDayOut.days;
+ milliseconds = intervalDayOut.milliseconds;
+ } else {
+ IntervalDayHolder intervalDayOut = (IntervalDayHolder)
valueHolder;
+ days = intervalDayOut.days;
+ milliseconds = intervalDayOut.milliseconds;
}
- // The list of known unsupported types is used to trigger this
behavior of re-using the input expression
- // before the expression is even attempted to be evaluated, this
is just here as a last precaution a
- // as new types may be added in the future.
- default:
- logger.debug("Constant expression not folded due to return type
{}, complete expression: {}",
- materializedExpr.getMajorType(),
- ExpressionStringBuilder.toString(materializedExpr));
- return newCall;
+ return rexBuilder.makeLiteral(
+ new BigDecimal(days * (long)
DateUtilities.daysToStandardMillis + milliseconds),
+
TypeInferenceUtils.createCalciteTypeWithNullability(typeFactory,
SqlTypeName.INTERVAL_DAY,
+ newCall.getType().isNullable()), false);
}
+ // The list of known unsupported types is used to trigger this
behavior of re-using the input expression
+ // before the expression is even attempted to be evaluated, this is
just here as a last precaution a
+ // as new types may be added in the future.
+ default:
+ logger.debug("Constant expression not folded due to return type
{}, complete expression: {}",
+ materializedExpr.getMajorType(),
+ ExpressionStringBuilder.toString(materializedExpr));
+ return newCall;
Review comment:
Just replaced `Function.apply()` with lambda and renamed argument from
`output` to `valueHolder`. GitHub highlights all these lines because spaces
were removed.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services