diff options
author | dbarclay <dbarclay@maprtech.com> | 2015-02-17 13:50:16 -0800 |
---|---|---|
committer | Parth Chandra <pchandra@maprtech.com> | 2015-02-23 11:51:33 -0800 |
commit | 5efc7e686d04ebff7c651270961ec7f5ca09c93d (patch) | |
tree | b676a069c6b9dac80f995a3a605bf0255032a20b /exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/join/MergeJoinBatch.java | |
parent | 3c85bd8aa412f0a4d361a9a7b3136a03b15c9f37 (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.java | 18 |
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) { |