Add support to GIN for =(anyarray,anyarray) operation
This commit is contained in:
parent
6d57ed7797
commit
001d30ee6b
@ -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] ) {
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user