Re: [PATCH] Add support function for containment operators
От | jian he |
---|---|
Тема | Re: [PATCH] Add support function for containment operators |
Дата | |
Msg-id | CACJufxGmodA7Uc+Y4wE-A95BHLamJ3YxDtRYbXjNF=b8xExz+w@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [PATCH] Add support function for containment operators (Laurenz Albe <laurenz.albe@cybertec.at>) |
Ответы |
Re: [PATCH] Add support function for containment operators
|
Список | pgsql-hackers |
On Tue, Aug 1, 2023 at 10:07 AM Laurenz Albe <laurenz.albe@cybertec.at> wrote: > > > > > > > I had an idea about this: > > > So far, you only consider constant ranges. But if we have a STABLE range > > > expression, you could use an index scan for "expr <@ range", for example > > > Index Cond (expr >= lower(range) AND expr < upper(range)). > > > The above part, not sure how to implement it, not sure it is doable. Refactor: drop SupportRequestIndexCondition and related code, since mentioned in upthread, it's dead code. refactor the regression test. (since data types with infinity cover more cases than int4range, so I deleted some tests). now there are 3 helper functions (build_bound_expr, find_simplified_clause, match_support_request), 2 entry functions (elem_contained_by_range_support, range_contains_elem_support) Collation problem seems solved. Putting the following test on the src/test/regress/sql/rangetypes.sql will not work. Maybe because of the order of the regression test, in SQL-ASCII encoding, I cannot create collation="cs-CZ-x-icu". drop type if EXISTS textrange1, textrange2; drop table if EXISTS collate_test1, collate_test2; CREATE TYPE textrange1 AS RANGE (SUBTYPE = text, collation="C"); create type textrange2 as range(subtype=text, collation="cs-CZ-x-icu"); CREATE TABLE collate_test1 (b text COLLATE "en-x-icu" NOT NULL); INSERT INTO collate_test1(b) VALUES ('a'), ('c'), ('d'), ('ch'); CREATE TABLE collate_test2 (b text NOT NULL); INSERT INTO collate_test2(b) VALUES ('a'), ('c'), ('d'), ('ch'); --should include 'ch' SELECT * FROM collate_test1 WHERE b <@ textrange1('a', 'd'); --should not include 'ch' SELECT * FROM collate_test1 WHERE b <@ textrange2('a', 'd'); --should include 'ch' SELECT * FROM collate_test2 WHERE b <@ textrange1('a', 'd'); --should not include 'ch' SELECT * FROM collate_test2 WHERE b <@ textrange2('a', 'd'); -----------------
Вложения
В списке pgsql-hackers по дате отправления: