diff --git a/druid-handler/pom.xml b/druid-handler/pom.xml
index a7a0f8f..959704c 100644
--- a/druid-handler/pom.xml
+++ b/druid-handler/pom.xml
@@ -198,6 +198,17 @@
org.apache.calcite
calcite-druid
${calcite.version}
+
+
+ org.apache.calcite.avatica
+ avatica-core
+
+
+
+
+ org.apache.calcite.avatica
+ avatica
+ ${avatica.version}
joda-time
diff --git a/druid-handler/src/java/org/apache/hadoop/hive/druid/io/DruidQueryBasedInputFormat.java b/druid-handler/src/java/org/apache/hadoop/hive/druid/io/DruidQueryBasedInputFormat.java
index d1b2a72..266c2e8 100644
--- a/druid-handler/src/java/org/apache/hadoop/hive/druid/io/DruidQueryBasedInputFormat.java
+++ b/druid-handler/src/java/org/apache/hadoop/hive/druid/io/DruidQueryBasedInputFormat.java
@@ -322,11 +322,15 @@ private static String createSelectStarQuery(String dataSource) throws IOExceptio
private static List> createSplitsIntervals(List intervals, int numSplits
) {
- final long totalTime = DruidDateTimeUtils.extractTotalTime(intervals);
+
long startTime = intervals.get(0).getStartMillis();
long endTime = startTime;
long currTime = 0;
List> newIntervals = new ArrayList<>();
+ long totalTime = 0;
+ for (Interval interval: intervals) {
+ totalTime += interval.getEndMillis() - interval.getStartMillis();
+ }
for (int i = 0, posIntervals = 0; i < numSplits; i++) {
final long rangeSize = Math.round((double) (totalTime * (i + 1)) / numSplits) -
Math.round((double) (totalTime * i) / numSplits);
diff --git a/pom.xml b/pom.xml
index b4c0b81..2d7b3fe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -113,10 +113,10 @@
3.5.2
1.5.6
0.1
- 1.8.0
+ 1.9.0
1.7.7
0.8.0.RELEASE
- 1.10.0
+ 1.11.0
4.2.1
4.1.6
4.1.7
diff --git a/ql/pom.xml b/ql/pom.xml
index 489c6f3..4731355 100644
--- a/ql/pom.xml
+++ b/ql/pom.xml
@@ -379,12 +379,22 @@
com.fasterxml.jackson.core
jackson-core
+
+ org.apache.calcite.avatica
+ avatica-core
+
org.apache.calcite
calcite-druid
${calcite.version}
+
+
+ org.apache.calcite.avatica
+ avatica-core
+
+
org.apache.calcite.avatica
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveExtractDate.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveExtractDate.java
index 4edc4df..0b94b8a 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveExtractDate.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveExtractDate.java
@@ -24,6 +24,7 @@
import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.type.OperandTypes;
import org.apache.calcite.sql.type.ReturnTypes;
+import org.apache.calcite.sql.type.SqlTypeTransforms;
import com.google.common.collect.Sets;
@@ -42,9 +43,10 @@
Sets.newHashSet(YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND);
private HiveExtractDate(String name) {
- super(name, SqlKind.EXTRACT, ReturnTypes.INTEGER_NULLABLE, null,
- OperandTypes.INTERVALINTERVAL_INTERVALDATETIME,
- SqlFunctionCategory.SYSTEM);
+ super(name, SqlKind.EXTRACT,
+ ReturnTypes.cascade(ReturnTypes.INTEGER, SqlTypeTransforms.FORCE_NULLABLE), null,
+ OperandTypes.INTERVALINTERVAL_INTERVALDATETIME,
+ SqlFunctionCategory.SYSTEM);
}
}
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdPredicates.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdPredicates.java
index 69e157e..9bcdd0c 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdPredicates.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/stats/HiveRelMdPredicates.java
@@ -165,7 +165,7 @@ public RelOptPredicateList getPredicates(Project project, RelMetadataQuery mq) {
rexBuilder.makeInputRef(project, expr.i), expr.e));
}
}
- return RelOptPredicateList.of(projectPullUpPredicates);
+ return RelOptPredicateList.of(rexBuilder, projectPullUpPredicates);
}
/** Infers predicates for a {@link org.apache.calcite.rel.core.Join}. */
@@ -202,6 +202,7 @@ public RelOptPredicateList getPredicates(Aggregate agg, RelMetadataQuery mq) {
final RelNode input = agg.getInput();
final RelOptPredicateList inputInfo = mq.getPulledUpPredicates(input);
final List aggPullUpPredicates = new ArrayList<>();
+ final RexBuilder rexBuilder = agg.getCluster().getRexBuilder();
ImmutableBitSet groupKeys = agg.getGroupSet();
Mapping m = Mappings.create(MappingType.PARTIAL_FUNCTION,
@@ -219,7 +220,7 @@ public RelOptPredicateList getPredicates(Aggregate agg, RelMetadataQuery mq) {
aggPullUpPredicates.add(r);
}
}
- return RelOptPredicateList.of(aggPullUpPredicates);
+ return RelOptPredicateList.of(rexBuilder, aggPullUpPredicates);
}
/**
@@ -271,7 +272,7 @@ public RelOptPredicateList getPredicates(Union union, RelMetadataQuery mq) {
if (!disjPred.isAlwaysTrue()) {
preds.add(disjPred);
}
- return RelOptPredicateList.of(preds);
+ return RelOptPredicateList.of(rB, preds);
}
/**
@@ -411,6 +412,7 @@ public RelOptPredicateList inferPredicates(
final JoinRelType joinType = joinRel.getJoinType();
final List leftPreds = ImmutableList.copyOf(RelOptUtil.conjunctions(leftChildPredicates));
final List rightPreds = ImmutableList.copyOf(RelOptUtil.conjunctions(rightChildPredicates));
+ final RexBuilder rexBuilder = joinRel.getCluster().getRexBuilder();
switch (joinType) {
case INNER:
case LEFT:
@@ -476,13 +478,13 @@ public RelOptPredicateList inferPredicates(
pulledUpPredicates = Iterables.concat(leftPreds, rightPreds,
RelOptUtil.conjunctions(joinRel.getCondition()), inferredPredicates);
}
- return RelOptPredicateList.of(
+ return RelOptPredicateList.of(rexBuilder,
pulledUpPredicates, leftInferredPredicates, rightInferredPredicates);
case LEFT:
- return RelOptPredicateList.of(
+ return RelOptPredicateList.of(rexBuilder,
leftPreds, EMPTY_LIST, rightInferredPredicates);
case RIGHT:
- return RelOptPredicateList.of(
+ return RelOptPredicateList.of(rexBuilder,
rightPreds, leftInferredPredicates, EMPTY_LIST);
default:
assert inferredPredicates.size() == 0;