diff --git a/contrib/hstore/hstore--1.3.sql b/contrib/hstore/hstore--1.3.sql index 07d6082c9e..b9b478d039 100644 --- a/contrib/hstore/hstore--1.3.sql +++ b/contrib/hstore/hstore--1.3.sql @@ -521,17 +521,17 @@ AS -- GIN support -CREATE FUNCTION gin_extract_hstore(internal, internal) +CREATE FUNCTION gin_extract_hstore(hstore, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; -CREATE FUNCTION gin_extract_hstore_query(internal, internal, int2, internal, internal) +CREATE FUNCTION gin_extract_hstore_query(hstore, internal, int2, internal, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; -CREATE FUNCTION gin_consistent_hstore(internal, int2, internal, int4, internal, internal) +CREATE FUNCTION gin_consistent_hstore(internal, int2, hstore, int4, internal, internal) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; @@ -544,7 +544,7 @@ AS OPERATOR 10 ?|(hstore,text[]), OPERATOR 11 ?&(hstore,text[]), FUNCTION 1 bttextcmp(text,text), - FUNCTION 2 gin_extract_hstore(internal, internal), - FUNCTION 3 gin_extract_hstore_query(internal, internal, int2, internal, internal), - FUNCTION 4 gin_consistent_hstore(internal, int2, internal, int4, internal, internal), + FUNCTION 2 gin_extract_hstore(hstore, internal), + FUNCTION 3 gin_extract_hstore_query(hstore, internal, int2, internal, internal), + FUNCTION 4 gin_consistent_hstore(internal, int2, hstore, int4, internal, internal), STORAGE text; diff --git a/contrib/intarray/intarray--1.1.sql b/contrib/intarray/intarray--1.1.sql index 3c45eacaee..6ee0d5a625 100644 --- a/contrib/intarray/intarray--1.1.sql +++ b/contrib/intarray/intarray--1.1.sql @@ -493,12 +493,12 @@ AS --GIN -CREATE FUNCTION ginint4_queryextract(internal, internal, int2, internal, internal, internal, internal) +CREATE FUNCTION ginint4_queryextract(_int4, internal, int2, internal, internal, internal, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; -CREATE FUNCTION ginint4_consistent(internal, int2, internal, int4, internal, internal, internal, internal) +CREATE FUNCTION ginint4_consistent(internal, int2, _int4, int4, internal, internal, internal, internal) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE C IMMUTABLE STRICT; @@ -515,6 +515,6 @@ AS OPERATOR 20 @@ (_int4, query_int), FUNCTION 1 btint4cmp (int4, int4), FUNCTION 2 ginarrayextract (anyarray, internal, internal), - FUNCTION 3 ginint4_queryextract (internal, internal, int2, internal, internal, internal, internal), - FUNCTION 4 ginint4_consistent (internal, int2, internal, int4, internal, internal, internal, internal), + FUNCTION 3 ginint4_queryextract (_int4, internal, int2, internal, internal, internal, internal), + FUNCTION 4 ginint4_consistent (internal, int2, _int4, int4, internal, internal, internal, internal), STORAGE int4; diff --git a/contrib/tsearch2/tsearch2--1.0.sql b/contrib/tsearch2/tsearch2--1.0.sql index 6f473871cd..a32c5fe85b 100644 --- a/contrib/tsearch2/tsearch2--1.0.sql +++ b/contrib/tsearch2/tsearch2--1.0.sql @@ -552,8 +552,8 @@ AS OPERATOR 2 @@@ (tsvector, tsquery), FUNCTION 1 bttextcmp(text, text), FUNCTION 2 gin_extract_tsvector(tsvector,internal,internal), - FUNCTION 3 gin_extract_tsquery(tsquery,internal,smallint,internal,internal,internal,internal), - FUNCTION 4 gin_tsquery_consistent(internal,smallint,tsquery,int,internal,internal,internal,internal), + FUNCTION 3 gin_extract_tsquery(tsvector,internal,smallint,internal,internal,internal,internal), + FUNCTION 4 gin_tsquery_consistent(internal,smallint,tsvector,int,internal,internal,internal,internal), FUNCTION 5 gin_cmp_prefix(text,text,smallint,internal), STORAGE text; diff --git a/doc/src/sgml/gin.sgml b/doc/src/sgml/gin.sgml index 262f1e452e..9eb0b5a957 100644 --- a/doc/src/sgml/gin.sgml +++ b/doc/src/sgml/gin.sgml @@ -556,10 +556,11 @@ matches the query. It comes in two flavors, a boolean consistent function, and a ternary triConsistent function. triConsistent covers the functionality of both, so providing - triConsistent alone is sufficient. However, if the boolean variant is - significantly cheaper to calculate, it can be advantageous to provide both. - If only the boolean variant is provided, some optimizations that depend on - refuting index items before fetching all the keys are disabled. + triConsistent alone is sufficient. However, if the boolean + variant is significantly cheaper to calculate, it can be advantageous to + provide both. If only the boolean variant is provided, some optimizations + that depend on refuting index items before fetching all the keys are + disabled. @@ -620,23 +621,26 @@ triConsistent is similar to consistent, - but instead of a boolean check[], there are three possible - values for each key: GIN_TRUE, GIN_FALSE and + but instead of booleans in the check vector, there are + three possible values for each + key: GIN_TRUE, GIN_FALSE and GIN_MAYBE. GIN_FALSE and GIN_TRUE - have the same meaning as regular boolean values. + have the same meaning as regular boolean values, while GIN_MAYBE means that the presence of that key is not known. When GIN_MAYBE values are present, the function should only - return GIN_TRUE if the item matches whether or not the index item - contains the corresponding query keys. Likewise, the function must - return GIN_FALSE only if the item does not match, whether or not it - contains the GIN_MAYBE keys. If the result depends on the GIN_MAYBE - entries, i.e. the match cannot be confirmed or refuted based on the - known query keys, the function must return GIN_MAYBE. + return GIN_TRUE if the item certainly matches whether or + not the index item contains the corresponding query keys. Likewise, the + function must return GIN_FALSE only if the item certainly + does not match, whether or not it contains the GIN_MAYBE + keys. If the result depends on the GIN_MAYBE entries, i.e., + the match cannot be confirmed or refuted based on the known query keys, + the function must return GIN_MAYBE. - When there are no GIN_MAYBE values in the check vector, - GIN_MAYBE return value is equivalent of setting - recheck flag in the boolean consistent function. + When there are no GIN_MAYBE values in the check + vector, a GIN_MAYBE return value is the equivalent of + setting the recheck flag in the + boolean consistent function. @@ -682,11 +686,13 @@ extractValue are always of the operator class's input type, and all key values must be of the class's STORAGE type. The type of the query argument passed to extractQuery, - consistent and triConsistent is whatever is - specified as the right-hand input - type of the class member operator identified by the strategy number. - This need not be the same as the item type, so long as key values of the - correct type can be extracted from it. + consistent and triConsistent is whatever is the + right-hand input type of the class member operator identified by the + strategy number. This need not be the same as the indexed type, so long as + key values of the correct type can be extracted from it. However, it is + recommended that the SQL declarations of these three support functions use + the opclass's indexed data type for the query argument, even + though the actual type might be something else depending on the operator. diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 58e866658e..548d49440a 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 201601191 +#define CATALOG_VERSION_NO 201601192 #endif diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 6beefa2ccf..244aa4d016 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -4483,11 +4483,11 @@ DESCR("GiST tsvector support"); DATA(insert OID = 3656 ( gin_extract_tsvector PGNSP PGUID 12 1 0 0 0 f f f f t f i s 3 0 2281 "3614 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_tsvector _null_ _null_ _null_ )); DESCR("GIN tsvector support"); -DATA(insert OID = 3657 ( gin_extract_tsquery PGNSP PGUID 12 1 0 0 0 f f f f t f i s 7 0 2281 "3615 2281 21 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_tsquery _null_ _null_ _null_ )); +DATA(insert OID = 3657 ( gin_extract_tsquery PGNSP PGUID 12 1 0 0 0 f f f f t f i s 7 0 2281 "3614 2281 21 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_tsquery _null_ _null_ _null_ )); DESCR("GIN tsvector support"); -DATA(insert OID = 3658 ( gin_tsquery_consistent PGNSP PGUID 12 1 0 0 0 f f f f t f i s 8 0 16 "2281 21 3615 23 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_tsquery_consistent _null_ _null_ _null_ )); +DATA(insert OID = 3658 ( gin_tsquery_consistent PGNSP PGUID 12 1 0 0 0 f f f f t f i s 8 0 16 "2281 21 3614 23 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_tsquery_consistent _null_ _null_ _null_ )); DESCR("GIN tsvector support"); -DATA(insert OID = 3921 ( gin_tsquery_triconsistent PGNSP PGUID 12 1 0 0 0 f f f f t f i s 7 0 18 "2281 21 3615 23 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_tsquery_triconsistent _null_ _null_ _null_ )); +DATA(insert OID = 3921 ( gin_tsquery_triconsistent PGNSP PGUID 12 1 0 0 0 f f f f t f i s 7 0 18 "2281 21 3614 23 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_tsquery_triconsistent _null_ _null_ _null_ )); DESCR("GIN tsvector support"); DATA(insert OID = 3724 ( gin_cmp_tslexeme PGNSP PGUID 12 1 0 0 0 f f f f t f i s 2 0 23 "25 25" _null_ _null_ _null_ _null_ _null_ gin_cmp_tslexeme _null_ _null_ _null_ )); DESCR("GIN tsvector support"); @@ -4752,21 +4752,21 @@ DATA(insert OID = 4050 ( jsonb_contained PGNSP PGUID 12 1 0 0 0 f f f f t f i s DESCR("implementation of <@ operator"); DATA(insert OID = 3480 ( gin_compare_jsonb PGNSP PGUID 12 1 0 0 0 f f f f t f i s 2 0 23 "25 25" _null_ _null_ _null_ _null_ _null_ gin_compare_jsonb _null_ _null_ _null_ )); DESCR("GIN support"); -DATA(insert OID = 3482 ( gin_extract_jsonb PGNSP PGUID 12 1 0 0 0 f f f f t f i s 3 0 2281 "2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_jsonb _null_ _null_ _null_ )); +DATA(insert OID = 3482 ( gin_extract_jsonb PGNSP PGUID 12 1 0 0 0 f f f f t f i s 3 0 2281 "3802 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_jsonb _null_ _null_ _null_ )); DESCR("GIN support"); -DATA(insert OID = 3483 ( gin_extract_jsonb_query PGNSP PGUID 12 1 0 0 0 f f f f t f i s 7 0 2281 "2277 2281 21 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_jsonb_query _null_ _null_ _null_ )); +DATA(insert OID = 3483 ( gin_extract_jsonb_query PGNSP PGUID 12 1 0 0 0 f f f f t f i s 7 0 2281 "3802 2281 21 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_jsonb_query _null_ _null_ _null_ )); DESCR("GIN support"); -DATA(insert OID = 3484 ( gin_consistent_jsonb PGNSP PGUID 12 1 0 0 0 f f f f t f i s 8 0 16 "2281 21 2277 23 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_consistent_jsonb _null_ _null_ _null_ )); +DATA(insert OID = 3484 ( gin_consistent_jsonb PGNSP PGUID 12 1 0 0 0 f f f f t f i s 8 0 16 "2281 21 3802 23 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_consistent_jsonb _null_ _null_ _null_ )); DESCR("GIN support"); -DATA(insert OID = 3488 ( gin_triconsistent_jsonb PGNSP PGUID 12 1 0 0 0 f f f f t f i s 7 0 18 "2281 21 2277 23 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_triconsistent_jsonb _null_ _null_ _null_ )); +DATA(insert OID = 3488 ( gin_triconsistent_jsonb PGNSP PGUID 12 1 0 0 0 f f f f t f i s 7 0 18 "2281 21 3802 23 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_triconsistent_jsonb _null_ _null_ _null_ )); DESCR("GIN support"); -DATA(insert OID = 3485 ( gin_extract_jsonb_path PGNSP PGUID 12 1 0 0 0 f f f f t f i s 3 0 2281 "2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_jsonb_path _null_ _null_ _null_ )); +DATA(insert OID = 3485 ( gin_extract_jsonb_path PGNSP PGUID 12 1 0 0 0 f f f f t f i s 3 0 2281 "3802 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_jsonb_path _null_ _null_ _null_ )); DESCR("GIN support"); -DATA(insert OID = 3486 ( gin_extract_jsonb_query_path PGNSP PGUID 12 1 0 0 0 f f f f t f i s 7 0 2281 "2277 2281 21 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_jsonb_query_path _null_ _null_ _null_ )); +DATA(insert OID = 3486 ( gin_extract_jsonb_query_path PGNSP PGUID 12 1 0 0 0 f f f f t f i s 7 0 2281 "3802 2281 21 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_extract_jsonb_query_path _null_ _null_ _null_ )); DESCR("GIN support"); -DATA(insert OID = 3487 ( gin_consistent_jsonb_path PGNSP PGUID 12 1 0 0 0 f f f f t f i s 8 0 16 "2281 21 2277 23 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_consistent_jsonb_path _null_ _null_ _null_ )); +DATA(insert OID = 3487 ( gin_consistent_jsonb_path PGNSP PGUID 12 1 0 0 0 f f f f t f i s 8 0 16 "2281 21 3802 23 2281 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_consistent_jsonb_path _null_ _null_ _null_ )); DESCR("GIN support"); -DATA(insert OID = 3489 ( gin_triconsistent_jsonb_path PGNSP PGUID 12 1 0 0 0 f f f f t f i s 7 0 18 "2281 21 2277 23 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_triconsistent_jsonb_path _null_ _null_ _null_ )); +DATA(insert OID = 3489 ( gin_triconsistent_jsonb_path PGNSP PGUID 12 1 0 0 0 f f f f t f i s 7 0 18 "2281 21 3802 23 2281 2281 2281" _null_ _null_ _null_ _null_ _null_ gin_triconsistent_jsonb_path _null_ _null_ _null_ )); DESCR("GIN support"); DATA(insert OID = 3301 ( jsonb_concat PGNSP PGUID 12 1 0 0 0 f f f f t f i s 2 0 3802 "3802 3802" _null_ _null_ _null_ _null_ _null_ jsonb_concat _null_ _null_ _null_ )); DATA(insert OID = 3302 ( jsonb_delete PGNSP PGUID 12 1 0 0 0 f f f f t f i s 2 0 3802 "3802 25" _null_ _null_ _null_ _null_ _null_ jsonb_delete _null_ _null_ _null_ ));