aboutsummaryrefslogtreecommitdiff
path: root/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java
diff options
context:
space:
mode:
authordbarclay <dbarclay@maprtech.com>2015-02-17 13:50:16 -0800
committerParth Chandra <pchandra@maprtech.com>2015-02-23 11:51:33 -0800
commit5efc7e686d04ebff7c651270961ec7f5ca09c93d (patch)
treeb676a069c6b9dac80f995a3a605bf0255032a20b /exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java
parent3c85bd8aa412f0a4d361a9a7b3136a03b15c9f37 (diff)
DRILL-1062: Implemented null ordering (NULLS FIRST/NULLS LAST).
Primary: - Split "compare_to" function templates (for sorting) into "compare_to_nulls_high" and "compare_to_nulls_low" versions. - Added tests to verify ORDER BY ordering. - Added tests to verify merge join order correctness. - Implemented java.sql.DatabaseMetaData.nullsAreSortedHigh(), etc. Secondary: - Eliminated DateInterfaceFunctions.java template (merged into other). - Renamed comparison-related template data objects and file names. - Eliminated unused template macros, function template classes. - Overhauled Order.Ordering; added unit test. - Regularized some generated-class names. Miscellaneous: - Added toString() to ExpressionPosition, Order.Ordering, JoinStatus. - Fixed some typos. - Fixed some comment syntax.
Diffstat (limited to 'exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java')
-rw-r--r--exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java18
1 files changed, 10 insertions, 8 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java
index 257b93e9e..8fce52ec7 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java
@@ -313,12 +313,13 @@ public class MergeJoinBatch extends AbstractRecordBatch<MergeJoinPOP> {
// check value equality
- LogicalExpression gh = FunctionGenerationHelper.getComparator(compareThisLeftExprHolder,
- compareNextLeftExprHolder,
- context.getFunctionRegistry());
+ LogicalExpression gh =
+ FunctionGenerationHelper.getOrderingComparatorNullsHigh(compareThisLeftExprHolder,
+ compareNextLeftExprHolder,
+ context.getFunctionRegistry());
HoldingContainer out = cg.addExpr(gh, false);
- //If not 0, it means not equal. We return this out value.
+ // If not 0, it means not equal. We return this out value.
JConditional jc = cg.getEvalBlock()._if(out.getValue().ne(JExpr.lit(0)));
jc._then()._return(out.getValue());
}
@@ -523,12 +524,13 @@ public class MergeJoinBatch extends AbstractRecordBatch<MergeJoinPOP> {
cg.getSetupBlock().assign(JExpr._this().ref(incomingRecordBatch), JExpr._this().ref(incomingRightRecordBatch));
ClassGenerator.HoldingContainer compareRightExprHolder = cg.addExpr(materializedRightExpr, false);
- LogicalExpression fh = FunctionGenerationHelper.getComparator(compareLeftExprHolder,
- compareRightExprHolder,
- context.getFunctionRegistry());
+ LogicalExpression fh =
+ FunctionGenerationHelper.getOrderingComparatorNullsHigh(compareLeftExprHolder,
+ compareRightExprHolder,
+ context.getFunctionRegistry());
HoldingContainer out = cg.addExpr(fh, false);
- // If not 0, it means not equal. We return this out value.
+ // If not 0, it means not equal.
// Null compares to Null should returns null (unknown). In such case, we return 1 to indicate they are not equal.
if (compareLeftExprHolder.isOptional() && compareRightExprHolder.isOptional()
&& ! areNullsEqual) {