From 72e017d9d62050a4db2ae3ddc712202b03f65d18 Mon Sep 17 00:00:00 2001
From: Peter Geoghegan <peter.geoghegan86@gmail.com>
Date: Sat, 31 Oct 2015 12:30:31 -0700
Subject: [PATCH 1/2] Clarify point on aborting abbreviation

Backpatch to 9.5, where abbreviated keys were introduced.
---
 src/backend/utils/sort/tuplesort.c | 30 ++++++++++++++++++++----------
 1 file changed, 20 insertions(+), 10 deletions(-)

diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c
index d532e87..6572af8 100644
--- a/src/backend/utils/sort/tuplesort.c
+++ b/src/backend/utils/sort/tuplesort.c
@@ -1294,8 +1294,10 @@ tuplesort_putindextuplevalues(Tuplesortstate *state, Relation rel,
 		 *
 		 * Alter datum1 representation in already-copied tuples, so as to
 		 * ensure a consistent representation (current tuple was just
-		 * handled). Note that we rely on all tuples copied so far actually
-		 * being contained within memtuples array.
+		 * handled).  It does not matter if some dumped tuples are already
+		 * sorted on tape, since serialized tuples lack abbreviated keys
+		 * (TSS_BUILDRUNS state prevents control reaching here in any
+		 * case).
 		 */
 		for (i = 0; i < state->memtupcount; i++)
 		{
@@ -1373,8 +1375,10 @@ tuplesort_putdatum(Tuplesortstate *state, Datum val, bool isNull)
 			 *
 			 * Alter datum1 representation in already-copied tuples, so as to
 			 * ensure a consistent representation (current tuple was just
-			 * handled). Note that we rely on all tuples copied so far
-			 * actually being contained within memtuples array.
+			 * handled).  It does not matter if some dumped tuples are
+			 * already sorted on tape, since serialized tuples lack
+			 * abbreviated keys (TSS_BUILDRUNS state prevents control
+			 * reaching here in any case).
 			 */
 			for (i = 0; i < state->memtupcount; i++)
 			{
@@ -3174,8 +3178,10 @@ copytup_heap(Tuplesortstate *state, SortTuple *stup, void *tup)
 		 *
 		 * Alter datum1 representation in already-copied tuples, so as to
 		 * ensure a consistent representation (current tuple was just
-		 * handled). Note that we rely on all tuples copied so far actually
-		 * being contained within memtuples array.
+		 * handled).  It does not matter if some dumped tuples are already
+		 * sorted on tape, since serialized tuples lack abbreviated keys
+		 * (TSS_BUILDRUNS state prevents control reaching here in any
+		 * case).
 		 */
 		for (i = 0; i < state->memtupcount; i++)
 		{
@@ -3414,8 +3420,10 @@ copytup_cluster(Tuplesortstate *state, SortTuple *stup, void *tup)
 		 *
 		 * Alter datum1 representation in already-copied tuples, so as to
 		 * ensure a consistent representation (current tuple was just
-		 * handled). Note that we rely on all tuples copied so far actually
-		 * being contained within memtuples array.
+		 * handled).  It does not matter if some dumped tuples are already
+		 * sorted on tape, since serialized tuples lack abbreviated keys
+		 * (TSS_BUILDRUNS state prevents control reaching here in any
+		 * case).
 		 */
 		for (i = 0; i < state->memtupcount; i++)
 		{
@@ -3716,8 +3724,10 @@ copytup_index(Tuplesortstate *state, SortTuple *stup, void *tup)
 		 *
 		 * Alter datum1 representation in already-copied tuples, so as to
 		 * ensure a consistent representation (current tuple was just
-		 * handled). Note that we rely on all tuples copied so far actually
-		 * being contained within memtuples array.
+		 * handled).  It does not matter if some dumped tuples are already
+		 * sorted on tape, since serialized tuples lack abbreviated keys
+		 * (TSS_BUILDRUNS state prevents control reaching here in any
+		 * case).
 		 */
 		for (i = 0; i < state->memtupcount; i++)
 		{
-- 
1.9.1

