From 4277284a6977c9e28f0aa784ec25b81c7f1d653d Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Fri, 22 May 2015 12:15:14 -0400 Subject: [PATCH 1/2] Adds table tsearch to test for @@ operator against a tsvector field. Fixes StructureSpec accordingly. --- test/Feature/StructureSpec.hs | 1 + test/fixtures/schema.sql | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/test/Feature/StructureSpec.hs b/test/Feature/StructureSpec.hs index d2994450a..ebd7cdd22 100644 --- a/test/Feature/StructureSpec.hs +++ b/test/Feature/StructureSpec.hs @@ -22,6 +22,7 @@ spec = around withApp $ do , {"schema":"1","name":"menagerie","insertable":true} , {"schema":"1","name":"no_pk","insertable":true} , {"schema":"1","name":"simple_pk","insertable":true} + , {"schema":"1","name":"tsearch","insertable":true} ] |] {matchStatus = 200} diff --git a/test/fixtures/schema.sql b/test/fixtures/schema.sql index 7e4089f55..6168133bf 100755 --- a/test/fixtures/schema.sql +++ b/test/fixtures/schema.sql @@ -212,6 +212,12 @@ CREATE TABLE json ALTER TABLE "1".json OWNER TO postgrest_test; +CREATE TABLE tsearch ( + text_search_vector tsvector +); + +ALTER TABLE "1".tsearch OWNER TO postgrest_test; + SET search_path = postgrest, pg_catalog; @@ -299,14 +305,8 @@ INSERT INTO items (id) VALUES (1); SELECT pg_catalog.setval('items_id_seq', 1, true); - - - - - - - - +INSERT INTO tsearch (text_search_vector) VALUES ('''bar'':2 ''foo'':1'); +INSERT INTO tsearch (text_search_vector) VALUES ('''baz'':1 ''qux'':2'); SET search_path = postgrest, pg_catalog; @@ -491,6 +491,13 @@ GRANT ALL ON TABLE json TO postgrest_test; GRANT ALL ON TABLE json TO postgrest_anonymous; + +REVOKE ALL ON TABLE tsearch FROM PUBLIC; +REVOKE ALL ON TABLE tsearch FROM postgrest_test; +GRANT ALL ON TABLE tsearch TO postgrest_test; +GRANT ALL ON TABLE tsearch TO postgrest_anonymous; + + SET search_path = postgrest, pg_catalog; From a980db6d2d3de48dae9e103aa464fb19bc89a1d9 Mon Sep 17 00:00:00 2001 From: Diogo Biazus Date: Fri, 22 May 2015 12:20:10 -0400 Subject: [PATCH 2/2] Adds spec for @@ operator and implements it in PgQuery --- src/PostgREST/PgQuery.hs | 2 ++ test/Feature/QuerySpec.hs | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/PostgREST/PgQuery.hs b/src/PostgREST/PgQuery.hs index d1adffa1d..d14e827ff 100644 --- a/src/PostgREST/PgQuery.hs +++ b/src/PostgREST/PgQuery.hs @@ -175,6 +175,7 @@ wherePred (col, predicate) = "like" -> unknownLiteral $ T.map star value "ilike" -> unknownLiteral $ T.map star value "in" -> "(" <> T.intercalate ", " (map unknownLiteral $ T.split (==',') value) <> ") " + "@@" -> "to_tsquery(" <> unknownLiteral value <> ") " _ -> unknownLiteral value op = case opCode of @@ -189,6 +190,7 @@ wherePred (col, predicate) = "in" -> "in" "is" -> "is" "isnot" -> "is not" + "@@" -> "@@" _ -> "=" orderParse :: Net.Query -> [OrderTerm] diff --git a/test/Feature/QuerySpec.hs b/test/Feature/QuerySpec.hs index f70e0ff3e..6b48e518c 100644 --- a/test/Feature/QuerySpec.hs +++ b/test/Feature/QuerySpec.hs @@ -56,6 +56,10 @@ spec = get "/simple_pk?k=ilike.*YY*&order=extra.asc" `shouldRespondWith` "[{\"k\":\"xyyx\",\"extra\":\"u\"},{\"k\":\"xYYx\",\"extra\":\"v\"}]" + it "matches with tsearch @@" $ + get "/tsearch?text_search_vector=@@.foo" `shouldRespondWith` + "[{\"text_search_vector\":\"'bar':2 'foo':1\"}]" + describe "ordering response" $ do it "by a column asc" $ get "/items?id=lte.2&order=id.asc"