diff --git a/src/backend/access/gin/ginarrayproc.c b/src/backend/access/gin/ginarrayproc.c
index 99156791420307cea725e3ee98c4eac488e0bd8b..97b3feefdaa80d1f71be491a99b2ea0d0c2e627e 100644
--- a/src/backend/access/gin/ginarrayproc.c
+++ b/src/backend/access/gin/ginarrayproc.c
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *          $PostgreSQL: pgsql/src/backend/access/gin/ginarrayproc.c,v 1.2 2006/07/11 17:04:12 momjian Exp $
+ *          $PostgreSQL: pgsql/src/backend/access/gin/ginarrayproc.c,v 1.3 2006/07/11 19:49:13 teodor Exp $
  *-------------------------------------------------------------------------
  */
 
@@ -28,6 +28,7 @@
 #define GinOverlapStrategy		1
 #define GinContainsStrategy		2
 #define GinContainedStrategy	3
+#define GinEqualStrategy		4
 
 #define	ARRAYCHECK(x) do { 									\
 	if ( ARR_HASNULL(x) )									\
@@ -86,6 +87,7 @@ ginarrayconsistent(PG_FUNCTION_ARGS) {
 			res = TRUE;
 			break;
 		case GinContainsStrategy:
+		case GinEqualStrategy:
 			res = TRUE;
 			for(i=0;i<nentries;i++)
 				if ( !check[i] ) {
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index 0d62211f28a8dc5896b347c9b59ba028bd76a3b8..6edcacc0f546b9fdb20d945a01502850ddf053cd 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -37,7 +37,7 @@
  * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.337 2006/07/10 16:20:51 alvherre Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.338 2006/07/11 19:49:13 teodor Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,6 +53,6 @@
  */
 
 /*							yyyymmddN */
-#define CATALOG_VERSION_NO	200607101
+#define CATALOG_VERSION_NO	200607111
 
 #endif
diff --git a/src/include/catalog/pg_amop.h b/src/include/catalog/pg_amop.h
index 89ce00ae648fc90183c721d10fcd31505da82d45..27aed661ea6bb87a9f235432208e3fb1d5e1c0de 100644
--- a/src/include/catalog/pg_amop.h
+++ b/src/include/catalog/pg_amop.h
@@ -23,7 +23,7 @@
  * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/pg_amop.h,v 1.71 2006/05/02 15:23:16 teodor Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/pg_amop.h,v 1.72 2006/07/11 19:49:13 teodor Exp $
  *
  * NOTES
  *	 the genbki.sh script reads this file and generates .bki
@@ -642,6 +642,7 @@ DATA(insert (	2595	0 12 t	2590 ));
 DATA(insert (	2745	0 1  f	2750 ));
 DATA(insert (	2745	0 2  f	2751 ));
 DATA(insert (	2745	0 3  t	2752 ));
+DATA(insert (	2745	0 4  t	1070 ));
 
 /*
  * gin _text_ops
@@ -649,6 +650,7 @@ DATA(insert (	2745	0 3  t	2752 ));
 DATA(insert (	2746	0 1  f	2750 ));
 DATA(insert (	2746	0 2  f	2751 ));
 DATA(insert (	2746	0 3  t	2752 ));
+DATA(insert (	2746	0 4  t	1070 ));
 
 /*
  * gin _abstime_ops
@@ -656,6 +658,7 @@ DATA(insert (	2746	0 3  t	2752 ));
 DATA(insert (	2753	0 1  f  2750 ));
 DATA(insert (	2753	0 2  f  2751 ));
 DATA(insert (	2753	0 3  t  2752 ));
+DATA(insert (	2753	0 4  t	1070 ));
 
 /*
  * gin _bit_ops
@@ -663,6 +666,7 @@ DATA(insert (	2753	0 3  t  2752 ));
 DATA(insert (	2754	0 1  f  2750 ));
 DATA(insert (	2754	0 2  f  2751 ));
 DATA(insert (	2754	0 3  t  2752 ));
+DATA(insert (	2754	0 4  t	1070 ));
 
 /*
  * gin _bool_ops
@@ -670,6 +674,7 @@ DATA(insert (	2754	0 3  t  2752 ));
 DATA(insert (	2755	0 1  f  2750 ));
 DATA(insert (	2755	0 2  f  2751 ));
 DATA(insert (	2755	0 3  t  2752 ));
+DATA(insert (	2755	0 4  t	1070 ));
 
 /*
  * gin _bpchar_ops
@@ -677,6 +682,7 @@ DATA(insert (	2755	0 3  t  2752 ));
 DATA(insert (	2756	0 1  f  2750 ));
 DATA(insert (	2756	0 2  f  2751 ));
 DATA(insert (	2756	0 3  t  2752 ));
+DATA(insert (	2756	0 4  t	1070 ));
 
 /*
  * gin _bytea_ops
@@ -684,6 +690,7 @@ DATA(insert (	2756	0 3  t  2752 ));
 DATA(insert (	2757	0 1  f  2750 ));
 DATA(insert (	2757	0 2  f  2751 ));
 DATA(insert (	2757	0 3  t  2752 ));
+DATA(insert (	2757	0 4  t	1070 ));
 
 /*
  * gin _char_ops
@@ -691,6 +698,7 @@ DATA(insert (	2757	0 3  t  2752 ));
 DATA(insert (	2758	0 1  f  2750 ));
 DATA(insert (	2758	0 2  f  2751 ));
 DATA(insert (	2758	0 3  t  2752 ));
+DATA(insert (	2758	0 4  t	1070 ));
 
 /*
  * gin _cidr_ops
@@ -698,6 +706,7 @@ DATA(insert (	2758	0 3  t  2752 ));
 DATA(insert (	2759	0 1  f  2750 ));
 DATA(insert (	2759	0 2  f  2751 ));
 DATA(insert (	2759	0 3  t  2752 ));
+DATA(insert (	2759	0 4  t	1070 ));
 
 /*
  * gin _date_ops
@@ -705,6 +714,7 @@ DATA(insert (	2759	0 3  t  2752 ));
 DATA(insert (	2760	0 1  f  2750 ));
 DATA(insert (	2760	0 2  f  2751 ));
 DATA(insert (	2760	0 3  t  2752 ));
+DATA(insert (	2760	0 4  t	1070 ));
 
 /*
  * gin _float4_ops
@@ -712,6 +722,7 @@ DATA(insert (	2760	0 3  t  2752 ));
 DATA(insert (	2761	0 1  f  2750 ));
 DATA(insert (	2761	0 2  f  2751 ));
 DATA(insert (	2761	0 3  t  2752 ));
+DATA(insert (	2761	0 4  t	1070 ));
 
 /*
  * gin _float8_ops
@@ -719,6 +730,7 @@ DATA(insert (	2761	0 3  t  2752 ));
 DATA(insert (	2762	0 1  f  2750 ));
 DATA(insert (	2762	0 2  f  2751 ));
 DATA(insert (	2762	0 3  t  2752 ));
+DATA(insert (	2762	0 4  t	1070 ));
 
 /*
  * gin _inet_ops
@@ -726,6 +738,7 @@ DATA(insert (	2762	0 3  t  2752 ));
 DATA(insert (	2763	0 1  f  2750 ));
 DATA(insert (	2763	0 2  f  2751 ));
 DATA(insert (	2763	0 3  t  2752 ));
+DATA(insert (	2763	0 4  t	1070 ));
 
 /*
  * gin _int2_ops
@@ -733,6 +746,7 @@ DATA(insert (	2763	0 3  t  2752 ));
 DATA(insert (	2764	0 1  f  2750 ));
 DATA(insert (	2764	0 2  f  2751 ));
 DATA(insert (	2764	0 3  t  2752 ));
+DATA(insert (	2764	0 4  t	1070 ));
 
 /*
  * gin _int8_ops
@@ -740,6 +754,7 @@ DATA(insert (	2764	0 3  t  2752 ));
 DATA(insert (	2765	0 1  f  2750 ));
 DATA(insert (	2765	0 2  f  2751 ));
 DATA(insert (	2765	0 3  t  2752 ));
+DATA(insert (	2765	0 4  t	1070 ));
 
 /*
  * gin _interval_ops
@@ -747,6 +762,7 @@ DATA(insert (	2765	0 3  t  2752 ));
 DATA(insert (	2766	0 1  f  2750 ));
 DATA(insert (	2766	0 2  f  2751 ));
 DATA(insert (	2766	0 3  t  2752 ));
+DATA(insert (	2766	0 4  t	1070 ));
 
 /*
  * gin _macaddr_ops
@@ -754,6 +770,7 @@ DATA(insert (	2766	0 3  t  2752 ));
 DATA(insert (	2767	0 1  f  2750 ));
 DATA(insert (	2767	0 2  f  2751 ));
 DATA(insert (	2767	0 3  t  2752 ));
+DATA(insert (	2767	0 4  t	1070 ));
 
 /*
  * gin _name_ops
@@ -761,6 +778,7 @@ DATA(insert (	2767	0 3  t  2752 ));
 DATA(insert (	2768	0 1  f  2750 ));
 DATA(insert (	2768	0 2  f  2751 ));
 DATA(insert (	2768	0 3  t  2752 ));
+DATA(insert (	2768	0 4  t	1070 ));
 
 /*
  * gin _numeric_ops
@@ -768,6 +786,7 @@ DATA(insert (	2768	0 3  t  2752 ));
 DATA(insert (	2769	0 1  f  2750 ));
 DATA(insert (	2769	0 2  f  2751 ));
 DATA(insert (	2769	0 3  t  2752 ));
+DATA(insert (	2769	0 4  t	1070 ));
 
 /*
  * gin _oid_ops
@@ -775,6 +794,7 @@ DATA(insert (	2769	0 3  t  2752 ));
 DATA(insert (	2770	0 1  f  2750 ));
 DATA(insert (	2770	0 2  f  2751 ));
 DATA(insert (	2770	0 3  t  2752 ));
+DATA(insert (	2770	0 4  t	1070 ));
 
 /*
  * gin _oidvector_ops
@@ -782,6 +802,7 @@ DATA(insert (	2770	0 3  t  2752 ));
 DATA(insert (	2771	0 1  f  2750 ));
 DATA(insert (	2771	0 2  f  2751 ));
 DATA(insert (	2771	0 3  t  2752 ));
+DATA(insert (	2771	0 4  t	1070 ));
 
 /*
  * gin _time_ops
@@ -789,6 +810,7 @@ DATA(insert (	2771	0 3  t  2752 ));
 DATA(insert (	2772	0 1  f  2750 ));
 DATA(insert (	2772	0 2  f  2751 ));
 DATA(insert (	2772	0 3  t  2752 ));
+DATA(insert (	2772	0 4  t	1070 ));
 
 /*
  * gin _timestamptz_ops
@@ -796,6 +818,7 @@ DATA(insert (	2772	0 3  t  2752 ));
 DATA(insert (	2773	0 1  f  2750 ));
 DATA(insert (	2773	0 2  f  2751 ));
 DATA(insert (	2773	0 3  t  2752 ));
+DATA(insert (	2773	0 4  t	1070 ));
 
 /*
  * gin _timetz_ops
@@ -803,6 +826,7 @@ DATA(insert (	2773	0 3  t  2752 ));
 DATA(insert (	2774	0 1  f  2750 ));
 DATA(insert (	2774	0 2  f  2751 ));
 DATA(insert (	2774	0 3  t  2752 ));
+DATA(insert (	2774	0 4  t	1070 ));
 
 /*
  * gin _varbit_ops
@@ -810,6 +834,7 @@ DATA(insert (	2774	0 3  t  2752 ));
 DATA(insert (	2775	0 1  f  2750 ));
 DATA(insert (	2775	0 2  f  2751 ));
 DATA(insert (	2775	0 3  t  2752 ));
+DATA(insert (	2775	0 4  t	1070 ));
 
 /*
  * gin _varchar_ops
@@ -817,6 +842,7 @@ DATA(insert (	2775	0 3  t  2752 ));
 DATA(insert (	2776	0 1  f  2750 ));
 DATA(insert (	2776	0 2  f  2751 ));
 DATA(insert (	2776	0 3  t  2752 ));
+DATA(insert (	2776	0 4  t	1070 ));
 
 /*
  * gin _timestamp_ops
@@ -824,6 +850,7 @@ DATA(insert (	2776	0 3  t  2752 ));
 DATA(insert (	2777	0 1  f  2750 ));
 DATA(insert (	2777	0 2  f  2751 ));
 DATA(insert (	2777	0 3  t  2752 ));
+DATA(insert (	2777	0 4  t	1070 ));
 
 /*
  * gin _money_ops
@@ -831,6 +858,7 @@ DATA(insert (	2777	0 3  t  2752 ));
 DATA(insert (	2778	0 1  f  2750 ));
 DATA(insert (	2778	0 2  f  2751 ));
 DATA(insert (	2778	0 3  t  2752 ));
+DATA(insert (	2778	0 4  t	1070 ));
 
 /*
  * gin _reltime_ops
@@ -838,6 +866,7 @@ DATA(insert (	2778	0 3  t  2752 ));
 DATA(insert (	2779	0 1  f  2750 ));
 DATA(insert (	2779	0 2  f  2751 ));
 DATA(insert (	2779	0 3  t  2752 ));
+DATA(insert (	2779	0 4  t	1070 ));
 
 /*
  * gin _tinterval_ops
@@ -845,5 +874,6 @@ DATA(insert (	2779	0 3  t  2752 ));
 DATA(insert (	2780	0 1  f  2750 ));
 DATA(insert (	2780	0 2  f  2751 ));
 DATA(insert (	2780	0 3  t  2752 ));
+DATA(insert (	2780	0 4  t	1070 ));
 
 #endif   /* PG_AMOP_H */
diff --git a/src/test/regress/expected/create_index.out b/src/test/regress/expected/create_index.out
index a07dc64a65e627228bf23c376780b75d449c85af..715462e3d5707f16ac14a3a32ddcf84b5d5e2e16 100644
--- a/src/test/regress/expected/create_index.out
+++ b/src/test/regress/expected/create_index.out
@@ -244,6 +244,12 @@ SELECT * FROM array_index_op_test WHERE i ~ '{38,34,32,89}' ORDER BY seqno;
     98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
 (3 rows)
 
+SELECT * FROM array_index_op_test WHERE i = '{47,77}' ORDER BY seqno;
+ seqno |    i    |                                                        t                                                        
+-------+---------+-----------------------------------------------------------------------------------------------------------------
+    95 | {47,77} | {AAAAAAAAAAAAAAAAA764,AAAAAAAAAAA74076,AAAAAAAAAA18107,AAAAA40681,AAAAAAAAAAAAAAA35875,AAAAA60038,AAAAAAA56483}
+(1 row)
+
 CREATE INDEX textarrayidx ON array_index_op_test USING gin (t);
 SELECT * FROM array_index_op_test WHERE t @ '{AAAAAAAA72908}' ORDER BY seqno;
  seqno |           i           |                                                                     t                                                                      
@@ -303,6 +309,12 @@ SELECT * FROM array_index_op_test WHERE t ~ '{AAAAAAAA72908,AAAAAAAAAAAAAAAAAAA1
     45 | {99,45}            | {AAAAAAAA72908,AAAAAAAAAAAAAAAAAAA17075,AA88409,AAAAAAAAAAAAAAAAAA36842,AAAAAAA48038,AAAAAAAAAAAAAA10611}
 (2 rows)
 
+SELECT * FROM array_index_op_test WHERE t = '{AAAAAAAAAA646,A87088}' ORDER BY seqno;
+ seqno |     i      |           t            
+-------+------------+------------------------
+    96 | {23,97,43} | {AAAAAAAAAA646,A87088}
+(1 row)
+
 RESET enable_seqscan;
 RESET enable_indexscan;
 RESET enable_bitmapscan;
diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out
index 329905fb4d751c8455c8043f537401660292de4b..1161d0474c46d4372de53ff0bea4bf7b8fb5fb60 100644
--- a/src/test/regress/expected/opr_sanity.out
+++ b/src/test/regress/expected/opr_sanity.out
@@ -833,7 +833,8 @@ ORDER BY 1, 2, 3;
     2742 |            1 | &&
     2742 |            2 | @
     2742 |            3 | ~
-(27 rows)
+    2742 |            4 | =
+(28 rows)
 
 -- Check that all operators linked to by opclass entries have selectivity
 -- estimators.  This is not absolutely required, but it seems a reasonable
diff --git a/src/test/regress/sql/create_index.sql b/src/test/regress/sql/create_index.sql
index ef7f1cca27e2195c8212e3448f22c7ccf3e064f4..37df3ee2cac3b117c7d8c866f9c64fe59a21db4c 100644
--- a/src/test/regress/sql/create_index.sql
+++ b/src/test/regress/sql/create_index.sql
@@ -150,6 +150,7 @@ SELECT * FROM array_index_op_test WHERE i && '{17}' ORDER BY seqno;
 SELECT * FROM array_index_op_test WHERE i @ '{32,17}' ORDER BY seqno;
 SELECT * FROM array_index_op_test WHERE i && '{32,17}' ORDER BY seqno;
 SELECT * FROM array_index_op_test WHERE i ~ '{38,34,32,89}' ORDER BY seqno;
+SELECT * FROM array_index_op_test WHERE i = '{47,77}' ORDER BY seqno;
 
 CREATE INDEX textarrayidx ON array_index_op_test USING gin (t);
 
@@ -160,6 +161,7 @@ SELECT * FROM array_index_op_test WHERE t && '{AAAAAAAAAA646}' ORDER BY seqno;
 SELECT * FROM array_index_op_test WHERE t @ '{AAAAAAAA72908,AAAAAAAAAA646}' ORDER BY seqno;
 SELECT * FROM array_index_op_test WHERE t && '{AAAAAAAA72908,AAAAAAAAAA646}' ORDER BY seqno;
 SELECT * FROM array_index_op_test WHERE t ~ '{AAAAAAAA72908,AAAAAAAAAAAAAAAAAAA17075,AA88409,AAAAAAAAAAAAAAAAAA36842,AAAAAAA48038,AAAAAAAAAAAAAA10611}' ORDER BY seqno;
+SELECT * FROM array_index_op_test WHERE t = '{AAAAAAAAAA646,A87088}' ORDER BY seqno;
 
 
 RESET enable_seqscan;