|
43 | 43 | import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.FLAT;
|
44 | 44 | import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.NEVER_NULL;
|
45 | 45 | import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.NULL_FLAG;
|
| 46 | +import static io.trino.spi.function.InvocationConvention.InvocationArgumentConvention.VALUE_BLOCK_POSITION_NOT_NULL; |
46 | 47 | import static io.trino.spi.function.InvocationConvention.InvocationReturnConvention.BLOCK_BUILDER;
|
47 | 48 | import static io.trino.spi.function.InvocationConvention.InvocationReturnConvention.FAIL_ON_NULL;
|
48 | 49 | import static io.trino.spi.function.InvocationConvention.simpleConvention;
|
@@ -496,7 +497,12 @@ private OperatorMethodHandle generateOrderingOperator(OperatorConvention operato
|
496 | 497 | SortOrder sortOrder = operatorConvention.sortOrder().orElseThrow(() -> new IllegalArgumentException("Operator convention does not contain a sort order"));
|
497 | 498 | OperatorType comparisonType = operatorConvention.operatorType();
|
498 | 499 | if (operatorConvention.callingConvention().getArgumentConventions().equals(List.of(BLOCK_POSITION, BLOCK_POSITION))) {
|
499 |
| - OperatorConvention comparisonOperator = new OperatorConvention(operatorConvention.type(), comparisonType, Optional.empty(), simpleConvention(FAIL_ON_NULL, BLOCK_POSITION, BLOCK_POSITION)); |
| 500 | + OperatorConvention comparisonOperator = new OperatorConvention( |
| 501 | + operatorConvention.type(), |
| 502 | + comparisonType, |
| 503 | + Optional.empty(), |
| 504 | + // null positions are handled separately in adaptBlockPositionComparisonToOrdering and not used in the comparison |
| 505 | + simpleConvention(FAIL_ON_NULL, BLOCK_POSITION_NOT_NULL, BLOCK_POSITION_NOT_NULL)); |
500 | 506 | MethodHandle comparisonInvoker = adaptOperator(comparisonOperator);
|
501 | 507 | return adaptBlockPositionComparisonToOrdering(sortOrder, comparisonInvoker);
|
502 | 508 | }
|
@@ -538,7 +544,7 @@ private static int getScore(OperatorMethodHandle operatorMethodHandle)
|
538 | 544 | if (argument == NULL_FLAG || argument == FLAT) {
|
539 | 545 | score += 100;
|
540 | 546 | }
|
541 |
| - else if (argument == BLOCK_POSITION) { |
| 547 | + else if (argument == BLOCK_POSITION || argument == VALUE_BLOCK_POSITION_NOT_NULL) { |
542 | 548 | score += 1;
|
543 | 549 | }
|
544 | 550 | }
|
|
0 commit comments