Skip to content

Commit 61f6433

Browse files
authored
add support for casei and accenti (#256)
1 parent e5be8a7 commit 61f6433

File tree

11 files changed

+5263
-6
lines changed

11 files changed

+5263
-6
lines changed

src/pgstac/migrations/pgstac.0.8.5-unreleased.sql

Lines changed: 746 additions & 0 deletions
Large diffs are not rendered by default.

src/pgstac/migrations/pgstac.unreleased.sql

Lines changed: 4429 additions & 0 deletions
Large diffs are not rendered by default.

src/pgstac/pgstac.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
migrations/pgstac.0.8.5.sql
1+
migrations/pgstac.unreleased.sql

src/pgstac/sql/000_idempotent_pre.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ BEGIN
88
IF NOT EXISTS (SELECT 1 FROM pg_extension WHERE extname='btree_gist') THEN
99
CREATE EXTENSION IF NOT EXISTS btree_gist;
1010
END IF;
11+
IF NOT EXISTS (SELECT 1 FROM pg_extension WHERE extname='btree_gist') THEN
12+
CREATE EXTENSION IF NOT EXISTS unaccent;
13+
END IF;
1114
END;
1215
$$ LANGUAGE PLPGSQL;
1316

src/pgstac/sql/002b_cql.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,9 @@ INSERT INTO cql2_ops (op, template, types) VALUES
242242
('between', '%s BETWEEN %s AND %s', NULL),
243243
('isnull', '%s IS NULL', NULL),
244244
('upper', 'upper(%s)', NULL),
245-
('lower', 'lower(%s)', NULL)
245+
('lower', 'lower(%s)', NULL),
246+
('casei', 'upper(%s)', NULL),
247+
('accenti', 'unaccent(%s)', NULL)
246248
ON CONFLICT (op) DO UPDATE
247249
SET
248250
template = EXCLUDED.template

src/pgstac/sql/998_idempotent_post.sql

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,43 @@ INSERT INTO pgstac_settings (name, value) VALUES
4444
ON CONFLICT DO NOTHING
4545
;
4646

47+
48+
INSERT INTO cql2_ops (op, template, types) VALUES
49+
('eq', '%s = %s', NULL),
50+
('neq', '%s != %s', NULL),
51+
('ne', '%s != %s', NULL),
52+
('!=', '%s != %s', NULL),
53+
('<>', '%s != %s', NULL),
54+
('lt', '%s < %s', NULL),
55+
('lte', '%s <= %s', NULL),
56+
('gt', '%s > %s', NULL),
57+
('gte', '%s >= %s', NULL),
58+
('le', '%s <= %s', NULL),
59+
('ge', '%s >= %s', NULL),
60+
('=', '%s = %s', NULL),
61+
('<', '%s < %s', NULL),
62+
('<=', '%s <= %s', NULL),
63+
('>', '%s > %s', NULL),
64+
('>=', '%s >= %s', NULL),
65+
('like', '%s LIKE %s', NULL),
66+
('ilike', '%s ILIKE %s', NULL),
67+
('+', '%s + %s', NULL),
68+
('-', '%s - %s', NULL),
69+
('*', '%s * %s', NULL),
70+
('/', '%s / %s', NULL),
71+
('not', 'NOT (%s)', NULL),
72+
('between', '%s BETWEEN %s AND %s', NULL),
73+
('isnull', '%s IS NULL', NULL),
74+
('upper', 'upper(%s)', NULL),
75+
('lower', 'lower(%s)', NULL),
76+
('casei', 'upper(%s)', NULL),
77+
('accenti', 'unaccent(%s)', NULL)
78+
ON CONFLICT (op) DO UPDATE
79+
SET
80+
template = EXCLUDED.template
81+
;
82+
83+
4784
ALTER FUNCTION to_text COST 5000;
4885
ALTER FUNCTION to_float COST 5000;
4986
ALTER FUNCTION to_int COST 5000;

src/pgstac/sql/999_version.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
SELECT set_version('0.8.5');
1+
SELECT set_version('unreleased');

src/pgstac/tests/pgtap.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ CREATE EXTENSION IF NOT EXISTS pgtap;
1717
SET SEARCH_PATH TO pgstac, pgtap, public;
1818

1919
-- Plan the tests.
20-
SELECT plan(218);
20+
SELECT plan(225);
2121
--SELECT * FROM no_plan();
2222

2323
-- Run the tests.

src/pgstac/tests/pgtap/004_search.sql

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,46 @@ SELECT results_eq($$
474474
$$, 'Test lower'
475475
);
476476

477+
SELECT results_eq($$
478+
SELECT BTRIM(stac_search_to_where($q$
479+
{
480+
"filter-lang": "cql2-json",
481+
"filter": {
482+
"op": "eq",
483+
"args": [
484+
{"op": "casei", "args":[{ "property": "mission" }]},
485+
{"op": "casei", "args":["sentinel"]}
486+
]
487+
}
488+
}
489+
$q$),E' \n');
490+
$$, $$
491+
SELECT BTRIM($r$
492+
upper(to_text(content->'properties'->'mission')) = upper(to_text('"sentinel"'))
493+
$r$,E' \n');
494+
$$, 'Test casei'
495+
);
496+
497+
SELECT results_eq($$
498+
SELECT BTRIM(stac_search_to_where($q$
499+
{
500+
"filter-lang": "cql2-json",
501+
"filter": {
502+
"op": "eq",
503+
"args": [
504+
{"op": "accenti", "args":[{ "property": "mission" }]},
505+
{"op": "accenti", "args":["sentinel"]}
506+
]
507+
}
508+
}
509+
$q$),E' \n');
510+
$$, $$
511+
SELECT BTRIM($r$
512+
unaccent(to_text(content->'properties'->'mission')) = unaccent(to_text('"sentinel"'))
513+
$r$,E' \n');
514+
$$, 'Test accenti'
515+
);
516+
477517

478518

479519
/* template

src/pypgstac/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "pypgstac"
3-
version = "0.8.5"
3+
version = "0.8.5-dev"
44
description = "Schema, functions and a python library for storing and accessing STAC collections and items in PostgreSQL"
55
readme = "README.md"
66
requires-python = ">=3.8"

0 commit comments

Comments
 (0)