summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2012-02-02 13:10:56 -0500
committerRobert Haas <rhaas@postgresql.org>2012-02-02 13:10:56 -0500
commit0ed7445d7317318ffed0d8dac9a06611771d315b (patch)
tree56830c3c00148e5ab629fcde2f577ce1e0f9238a /src
parentb4e0741727685443657b55932da0c06f028fbc00 (diff)
downloadpostgresql-0ed7445d7317318ffed0d8dac9a06611771d315b.tar.gz
Allow spgist's text_ops to handle pattern-matching operators.
This was presumably intended to work this way all along, but a few key bits of indxpath.c didn't get the memo. Robert Haas and Tom Lane
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/path/indxpath.c4
-rw-r--r--src/include/catalog/pg_opfamily.h1
2 files changed, 4 insertions, 1 deletions
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index d51e84a80a..82af494296 100644
--- a/src/backend/optimizer/path/indxpath.c
+++ b/src/backend/optimizer/path/indxpath.c
@@ -2847,7 +2847,7 @@ match_special_index_operator(Expr *clause, Oid opfamily, Oid idxcollation,
/*
* Must also check that index's opfamily supports the operators we will
* want to apply. (A hash index, for example, will not support ">=".)
- * Currently, only btree supports the operators we need.
+ * Currently, only btree and spgist support the operators we need.
*
* Note: actually, in the Pattern_Prefix_Exact case, we only need "=" so a
* hash index would work. Currently it doesn't seem worth checking for
@@ -2871,6 +2871,7 @@ match_special_index_operator(Expr *clause, Oid opfamily, Oid idxcollation,
case OID_TEXT_ICREGEXEQ_OP:
isIndexable =
(opfamily == TEXT_PATTERN_BTREE_FAM_OID) ||
+ (opfamily == TEXT_SPGIST_FAM_OID) ||
(opfamily == TEXT_BTREE_FAM_OID &&
(pstatus == Pattern_Prefix_Exact ||
lc_collate_is_c(idxcollation)));
@@ -3454,6 +3455,7 @@ prefix_quals(Node *leftop, Oid opfamily, Oid collation,
{
case TEXT_BTREE_FAM_OID:
case TEXT_PATTERN_BTREE_FAM_OID:
+ case TEXT_SPGIST_FAM_OID:
datatype = TEXTOID;
break;
diff --git a/src/include/catalog/pg_opfamily.h b/src/include/catalog/pg_opfamily.h
index 7b962dfe3f..41ebccccbc 100644
--- a/src/include/catalog/pg_opfamily.h
+++ b/src/include/catalog/pg_opfamily.h
@@ -145,5 +145,6 @@ DATA(insert OID = 3919 ( 783 range_ops PGNSP PGUID ));
DATA(insert OID = 4015 ( 4000 quad_point_ops PGNSP PGUID ));
DATA(insert OID = 4016 ( 4000 kd_point_ops PGNSP PGUID ));
DATA(insert OID = 4017 ( 4000 text_ops PGNSP PGUID ));
+#define TEXT_SPGIST_FAM_OID 4017
#endif /* PG_OPFAMILY_H */