summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/optimizer/plan/createplan.c1
-rw-r--r--src/backend/pgxc/pool/execRemote.c1
-rw-r--r--src/backend/utils/sort/tuplesort.c22
-rw-r--r--src/include/pgxc/planner.h1
-rw-r--r--src/include/utils/tuplesort.h2
5 files changed, 18 insertions, 9 deletions
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index 757360af85..f7e19fb402 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -6086,6 +6086,7 @@ create_remotegrouping_plan(PlannerInfo *root, Plan *local_plan)
remote_sort->numCols = sort_plan->numCols;
remote_sort->sortColIdx = sort_plan->sortColIdx;
remote_sort->sortOperators = sort_plan->sortOperators;
+ remote_sort->sortCollations = sort_plan->collations;
remote_sort->nullsFirst = sort_plan->nullsFirst;
appendStringInfoString(orderby_clause, "ORDER BY ");
sep = "";
diff --git a/src/backend/pgxc/pool/execRemote.c b/src/backend/pgxc/pool/execRemote.c
index c3bbf6b9a9..2869a232d1 100644
--- a/src/backend/pgxc/pool/execRemote.c
+++ b/src/backend/pgxc/pool/execRemote.c
@@ -3047,6 +3047,7 @@ do_query(RemoteQueryState *node)
sort->numCols,
sort->sortColIdx,
sort->sortOperators,
+ sort->sortCollations,
sort->nullsFirst,
node,
work_mem);
diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c
index bdc8342f8c..646f0d05d1 100644
--- a/src/backend/utils/sort/tuplesort.c
+++ b/src/backend/utils/sort/tuplesort.c
@@ -912,7 +912,7 @@ tuplesort_begin_datum(Oid datumType, Oid sortOperator, Oid sortCollation,
Tuplesortstate *
tuplesort_begin_merge(TupleDesc tupDesc,
int nkeys, AttrNumber *attNums,
- Oid *sortOperators, bool *nullsFirstFlags,
+ Oid *sortOperators, Oid *sortCollations, bool *nullsFirstFlags,
RemoteQueryState *combiner,
int workMem)
{
@@ -954,6 +954,7 @@ tuplesort_begin_merge(TupleDesc tupDesc,
{
Oid sortFunction;
bool reverse;
+ int flags;
AssertArg(attNums[i] != 0);
AssertArg(sortOperators[i] != 0);
@@ -963,21 +964,26 @@ tuplesort_begin_merge(TupleDesc tupDesc,
elog(ERROR, "operator %u is not a valid ordering operator",
sortOperators[i]);
+
+ /* We use btree's conventions for encoding directionality */
+ flags = 0;
+ if (reverse)
+ flags |= SK_BT_DESC;
+ if (nullsFirstFlags[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(&state->scanKeys[i],
+ ScanKeyEntryInitialize(&state->scanKeys[i],
+ flags,
attNums[i],
InvalidStrategy,
+ InvalidOid,
+ sortCollations[i],
sortFunction,
(Datum) 0);
-
- /* However, we use btree's conventions for encoding directionality */
- if (reverse)
- state->scanKeys[i].sk_flags |= SK_BT_DESC;
- if (nullsFirstFlags[i])
- state->scanKeys[i].sk_flags |= SK_BT_NULLS_FIRST;
}
/*
diff --git a/src/include/pgxc/planner.h b/src/include/pgxc/planner.h
index ffbf0b9eda..f41adb56b2 100644
--- a/src/include/pgxc/planner.h
+++ b/src/include/pgxc/planner.h
@@ -43,6 +43,7 @@ typedef struct
int numCols; /* number of sort-key columns */
AttrNumber *sortColIdx; /* their indexes in the target list */
Oid *sortOperators; /* OIDs of operators to sort them by */
+ Oid *sortCollations;
bool *nullsFirst; /* NULLS FIRST/LAST directions */
} SimpleSort;
diff --git a/src/include/utils/tuplesort.h b/src/include/utils/tuplesort.h
index 7689e6e121..f7ef3e5d4a 100644
--- a/src/include/utils/tuplesort.h
+++ b/src/include/utils/tuplesort.h
@@ -82,7 +82,7 @@ extern Tuplesortstate *tuplesort_begin_datum(Oid datumType,
#ifdef PGXC
extern Tuplesortstate *tuplesort_begin_merge(TupleDesc tupDesc,
int nkeys, AttrNumber *attNums,
- Oid *sortOperators, bool *nullsFirstFlags,
+ Oid *sortOperators, Oid *sortCollations, bool *nullsFirstFlags,
RemoteQueryState *combiner,
int workMem);
#endif