diff options
Diffstat (limited to 'src/backend/executor/nodeMergeAppend.c')
-rw-r--r-- | src/backend/executor/nodeMergeAppend.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/src/backend/executor/nodeMergeAppend.c b/src/backend/executor/nodeMergeAppend.c index e46af8cff93..73920f21c8c 100644 --- a/src/backend/executor/nodeMergeAppend.c +++ b/src/backend/executor/nodeMergeAppend.c @@ -134,30 +134,32 @@ ExecInitMergeAppend(MergeAppend *node, EState *estate, int eflags) { Oid sortFunction; bool reverse; + int flags; if (!get_compare_function_for_ordering_op(node->sortOperators[i], &sortFunction, &reverse)) elog(ERROR, "operator %u is not a valid ordering operator", node->sortOperators[i]); + /* We use btree's conventions for encoding directionality */ + flags = 0; + if (reverse) + flags |= SK_BT_DESC; + if (node->nullsFirst[i]) + flags |= SK_BT_NULLS_FIRST; + /* * We needn't fill in sk_strategy or sk_subtype since these scankeys * will never be passed to an index. */ - ScanKeyInit(&mergestate->ms_scankeys[i], - node->sortColIdx[i], - InvalidStrategy, - sortFunction, - (Datum) 0); - - ScanKeyEntryInitializeCollation(&mergestate->ms_scankeys[i], - node->collations[i]); - - /* However, we use btree's conventions for encoding directionality */ - if (reverse) - mergestate->ms_scankeys[i].sk_flags |= SK_BT_DESC; - if (node->nullsFirst[i]) - mergestate->ms_scankeys[i].sk_flags |= SK_BT_NULLS_FIRST; + ScanKeyEntryInitialize(&mergestate->ms_scankeys[i], + flags, + node->sortColIdx[i], + InvalidStrategy, + InvalidOid, + node->collations[i], + sortFunction, + (Datum) 0); } /* |