From 69a59150c20be17632ca7adbed91fcc0cc44612e Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 11 Nov 2001 22:00:25 +0000
Subject: [PATCH] Defend against brain-dead QNX implementation of qsort(). Per
 report from Bernd Tegge, 10-Nov-01.

---
 src/backend/utils/sort/tuplesort.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c
index 796be9d6c7f..ad937c95aa3 100644
--- a/src/backend/utils/sort/tuplesort.c
+++ b/src/backend/utils/sort/tuplesort.c
@@ -78,7 +78,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/sort/tuplesort.c,v 1.20 2001/10/28 06:25:57 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/sort/tuplesort.c,v 1.21 2001/11/11 22:00:25 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1881,8 +1881,13 @@ comparetup_index(Tuplesortstate *state, const void *a, const void *b)
 	 * equal they *must* get compared at some stage of the sort ---
 	 * otherwise the sort algorithm wouldn't have checked whether one must
 	 * appear before the other.
+	 *
+	 * Some rather brain-dead implementations of qsort will sometimes
+	 * call the comparison routine to compare a value to itself.  (At this
+	 * writing only QNX 4 is known to do such silly things.)  Don't raise
+	 * a bogus error in that case.
 	 */
-	if (state->enforceUnique && !equal_hasnull)
+	if (state->enforceUnique && !equal_hasnull && tuple1 != tuple2)
 		elog(ERROR, "Cannot create unique index. Table contains non-unique values");
 
 	return 0;
-- 
GitLab