|
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 | }
|
@@ -541,6 +547,9 @@ private static int getScore(OperatorMethodHandle operatorMethodHandle)
|
541 | 547 | else if (argument == BLOCK_POSITION) {
|
542 | 548 | score += 1;
|
543 | 549 | }
|
| 550 | + else if (argument == VALUE_BLOCK_POSITION_NOT_NULL) { |
| 551 | + score += 1; |
| 552 | + } |
544 | 553 | }
|
545 | 554 | return score;
|
546 | 555 | }
|
|
0 commit comments