Skip to content

Commit 91cd682

Browse files
committed
Enhanced release, many drops
1 parent f248461 commit 91cd682

File tree

8 files changed

+286
-44
lines changed

8 files changed

+286
-44
lines changed

.github/workflows/test-eql.yml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: "Test EQL"
2+
on:
3+
push:
4+
branches:
5+
- main
6+
paths:
7+
- ".github/workflows/test-eql.yml"
8+
- "sql/*.sql"
9+
10+
pull_request:
11+
branches:
12+
- main
13+
paths:
14+
- ".github/workflows/test-eql.yml"
15+
- "sql/*.sql"
16+
17+
workflow_dispatch:
18+
19+
defaults:
20+
run:
21+
shell: bash -l {0}
22+
23+
jobs:
24+
test:
25+
name: "Test EQL SQL components"
26+
runs-on: ubuntu-24.04
27+
28+
strategy:
29+
fail-fast: false
30+
matrix:
31+
postgres-version: [17, 16, 15, 14]
32+
33+
env:
34+
CS_DATABASE__USERNAME: ${USER}
35+
CS_DATABASE__PASSWORD:
36+
CS_DATABASE__PORT: 5432
37+
CS_DATABASE__NAME: test
38+
39+
steps:
40+
- uses: actions/checkout@v4
41+
42+
- uses: extractions/setup-just@v1
43+
44+
- uses: ankane/setup-postgres@v1
45+
with:
46+
postgres-version: ${{ matrix.postgres-version }}
47+
database: ${{ env.CS_DATABASE__NAME }}
48+
49+
- name: Test EQL
50+
run: |
51+
just build
52+
just test
53+

justfile

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,27 @@ set dotenv-load
22
set positional-arguments
33

44

5-
test_dsl:
5+
test:
66
#!/usr/bin/env bash
77
set -euxo pipefail
88

9-
PGPASSWORD=$CS_DATABASE__PASSWORD dropdb --force --if-exists --username $CS_DATABASE__USERNAME --port $CS_DATABASE__PORT cs_migrator_test
10-
PGPASSWORD=$CS_DATABASE__PASSWORD createdb --username $CS_DATABASE__USERNAME --port $CS_DATABASE__PORT cs_migrator_test
9+
PGPASSWORD=$CS_DATABASE__PASSWORD dropdb --force --if-exists --username $CS_DATABASE__USERNAME --port $CS_DATABASE__PORT $CS_DATABASE__NAME
10+
PGPASSWORD=$CS_DATABASE__PASSWORD createdb --username $CS_DATABASE__USERNAME --port $CS_DATABASE__PORT $CS_DATABASE__NAME
1111

12-
connection_url=postgresql://$CS_DATABASE__USERNAME:@localhost:$CS_DATABASE__PORT/cs_migrator_test
13-
PGPASSWORD=$CS_DATABASE__PASSWORD psql $connection_url -f sql/dsl-core.sql
14-
PGPASSWORD=$CS_DATABASE__PASSWORD psql $connection_url -f sql/dsl-config-schema.sql
15-
PGPASSWORD=$CS_DATABASE__PASSWORD psql $connection_url -f sql/dsl-config-functions.sql
16-
PGPASSWORD=$CS_DATABASE__PASSWORD psql $connection_url -f sql/dsl-encryptindex.sql
12+
connection_url=postgresql://$CS_DATABASE__USERNAME:@localhost:$CS_DATABASE__PORT/$CS_DATABASE__NAME
13+
14+
# Install
15+
PGPASSWORD=$CS_DATABASE__PASSWORD psql $connection_url -f release/cipherstash-encrypt.sql
1716

1817
# tests
1918
PGPASSWORD=$CS_DATABASE__PASSWORD psql $connection_url -f tests/core.sql
2019
PGPASSWORD=$CS_DATABASE__PASSWORD psql $connection_url -f tests/config.sql
2120
PGPASSWORD=$CS_DATABASE__PASSWORD psql $connection_url -f tests/encryptindex.sql
2221

23-
dropdb --username $CS_DATABASE__USERNAME --port $CS_DATABASE__PORT cs_migrator_test
22+
# Uninstall
23+
PGPASSWORD=$CS_DATABASE__PASSWORD psql $connection_url -f release/cipherstash-encrypt-uninstall.sql
24+
25+
dropdb --username $CS_DATABASE__USERNAME --port $CS_DATABASE__PORT $CS_DATABASE__NAME
2426

2527

2628
build:
@@ -29,12 +31,17 @@ build:
2931

3032
mkdir -p release
3133

32-
cat sql/666-drop.sql > release/cipherstash-encrypt-uninstall.sql
34+
# uninstall renames configuration table
35+
cat sql/666-uninstall.sql > release/cipherstash-encrypt-uninstall.sql
3336
grep -h '^DROP' sql/0*-*.sql | tac >> release/cipherstash-encrypt-uninstall.sql
3437

35-
cat release/cipherstash-encrypt-uninstall.sql > release/cipherstash-encrypt.sql
38+
# Drop and Recreate everything (except the configuration table)
39+
grep -h '^DROP' sql/0*-*.sql | tac >> release/cipherstash-encrypt-drop.sql
40+
cat release/cipherstash-encrypt-drop.sql > release/cipherstash-encrypt.sql
3641
cat sql/0*-*.sql >> release/cipherstash-encrypt.sql
3742

43+
rm release/cipherstash-encrypt-drop.sql
44+
3845

3946
psql:
4047
psql postgresql://$CS_USERNAME:$CS_PASSWORD@localhost:$CS_PORT/$CS_DATABASE__NAME

sql/000-ore.sql

Lines changed: 112 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ CREATE TYPE ore_64_8_v1 AS (
88
terms ore_64_8_v1_term[]
99
);
1010

11-
CREATE OR REPLACE FUNCTION compare_ore_64_8_v1_term(a ore_64_8_v1_term, b ore_64_8_v1_term) returns integer AS $$
11+
DROP FUNCTION IF EXISTS compare_ore_64_8_v1_term(a ore_64_8_v1_term, b ore_64_8_v1_term);
12+
13+
CREATE FUNCTION compare_ore_64_8_v1_term(a ore_64_8_v1_term, b ore_64_8_v1_term) returns integer AS $$
1214
DECLARE
1315
eq boolean := true;
1416
unequal_block smallint := 0;
@@ -85,30 +87,54 @@ CREATE OR REPLACE FUNCTION compare_ore_64_8_v1_term(a ore_64_8_v1_term, b ore_64
8587
$$ LANGUAGE plpgsql;
8688

8789

88-
CREATE OR REPLACE FUNCTION ore_64_8_v1_term_eq(a ore_64_8_v1_term, b ore_64_8_v1_term) RETURNS boolean AS $$
90+
DROP FUNCTION IF EXISTS ore_64_8_v1_term_eq(a ore_64_8_v1_term, b ore_64_8_v1_term);
91+
92+
CREATE FUNCTION ore_64_8_v1_term_eq(a ore_64_8_v1_term, b ore_64_8_v1_term)
93+
RETURNS boolean AS $$
8994
SELECT compare_ore_64_8_v1_term(a, b) = 0
9095
$$ LANGUAGE SQL;
9196

92-
CREATE OR REPLACE FUNCTION ore_64_8_v1_term_neq(a ore_64_8_v1_term, b ore_64_8_v1_term) RETURNS boolean AS $$
97+
98+
DROP FUNCTION IF EXISTS ore_64_8_v1_term_neq(a ore_64_8_v1_term, b ore_64_8_v1_term);
99+
100+
CREATE FUNCTION ore_64_8_v1_term_neq(a ore_64_8_v1_term, b ore_64_8_v1_term)
101+
RETURNS boolean AS $$
93102
SELECT compare_ore_64_8_v1_term(a, b) <> 0
94103
$$ LANGUAGE SQL;
95104

96-
CREATE OR REPLACE FUNCTION ore_64_8_v1_term_lt(a ore_64_8_v1_term, b ore_64_8_v1_term) RETURNS boolean AS $$
105+
106+
DROP FUNCTION IF EXISTS ore_64_8_v1_term_lt(a ore_64_8_v1_term, b ore_64_8_v1_term);
107+
108+
CREATE FUNCTION ore_64_8_v1_term_lt(a ore_64_8_v1_term, b ore_64_8_v1_term)
109+
RETURNS boolean AS $$
97110
SELECT compare_ore_64_8_v1_term(a, b) = -1
98111
$$ LANGUAGE SQL;
99112

100-
CREATE OR REPLACE FUNCTION ore_64_8_v1_term_lte(a ore_64_8_v1_term, b ore_64_8_v1_term) RETURNS boolean AS $$
113+
114+
DROP FUNCTION IF EXISTS ore_64_8_v1_term_lte(a ore_64_8_v1_term, b ore_64_8_v1_term);
115+
116+
CREATE FUNCTION ore_64_8_v1_term_lte(a ore_64_8_v1_term, b ore_64_8_v1_term)
117+
RETURNS boolean AS $$
101118
SELECT compare_ore_64_8_v1_term(a, b) != 1
102119
$$ LANGUAGE SQL;
103120

104-
CREATE OR REPLACE FUNCTION ore_64_8_v1_term_gt(a ore_64_8_v1_term, b ore_64_8_v1_term) RETURNS boolean AS $$
121+
122+
DROP FUNCTION IF EXISTS ore_64_8_v1_term_gt(a ore_64_8_v1_term, b ore_64_8_v1_term);
123+
RETURNS boolean AS $$
105124
SELECT compare_ore_64_8_v1_term(a, b) = 1
106125
$$ LANGUAGE SQL;
107126

108-
CREATE OR REPLACE FUNCTION ore_64_8_v1_term_gte(a ore_64_8_v1_term, b ore_64_8_v1_term) RETURNS boolean AS $$
127+
128+
DROP FUNCTION IF EXISTS ore_64_8_v1_term_gte(a ore_64_8_v1_term, b ore_64_8_v1_term);
129+
130+
CREATE FUNCTION ore_64_8_v1_term_gte(a ore_64_8_v1_term, b ore_64_8_v1_term)
131+
RETURNS boolean AS $$
109132
SELECT compare_ore_64_8_v1_term(a, b) != -1
110133
$$ LANGUAGE SQL;
111134

135+
136+
DROP OPERATOR IF EXISTS = (ore_64_8_v1_term, ore_64_8_v1_term);
137+
112138
CREATE OPERATOR = (
113139
PROCEDURE="ore_64_8_v1_term_eq",
114140
LEFTARG=ore_64_8_v1_term,
@@ -120,6 +146,9 @@ CREATE OPERATOR = (
120146
MERGES
121147
);
122148

149+
150+
DROP OPERATOR IF EXISTS <> (ore_64_8_v1_term, ore_64_8_v1_term);
151+
123152
CREATE OPERATOR <> (
124153
PROCEDURE="ore_64_8_v1_term_neq",
125154
LEFTARG=ore_64_8_v1_term,
@@ -131,6 +160,8 @@ CREATE OPERATOR <> (
131160
MERGES
132161
);
133162

163+
DROP OPERATOR IF EXISTS > (ore_64_8_v1_term, ore_64_8_v1_term);
164+
134165
CREATE OPERATOR > (
135166
PROCEDURE="ore_64_8_v1_term_gt",
136167
LEFTARG=ore_64_8_v1_term,
@@ -141,6 +172,8 @@ CREATE OPERATOR > (
141172
JOIN = scalargtjoinsel
142173
);
143174

175+
DROP OPERATOR IF EXISTS < (ore_64_8_v1_term, ore_64_8_v1_term);
176+
144177
CREATE OPERATOR < (
145178
PROCEDURE="ore_64_8_v1_term_lt",
146179
LEFTARG=ore_64_8_v1_term,
@@ -151,6 +184,8 @@ CREATE OPERATOR < (
151184
JOIN = scalarltjoinsel
152185
);
153186

187+
DROP OPERATOR IF EXISTS <= (ore_64_8_v1_term, ore_64_8_v1_term);
188+
154189
CREATE OPERATOR <= (
155190
PROCEDURE="ore_64_8_v1_term_lte",
156191
LEFTARG=ore_64_8_v1_term,
@@ -161,6 +196,8 @@ CREATE OPERATOR <= (
161196
JOIN = scalarlejoinsel
162197
);
163198

199+
DROP OPERATOR IF EXISTS >= (ore_64_8_v1_term, ore_64_8_v1_term);
200+
164201
CREATE OPERATOR >= (
165202
PROCEDURE="ore_64_8_v1_term_gte",
166203
LEFTARG=ore_64_8_v1_term,
@@ -171,7 +208,13 @@ CREATE OPERATOR >= (
171208
JOIN = scalarlejoinsel
172209
);
173210

211+
DROP OPERATOR FAMILY IF EXISTS ore_64_8_v1_term_btree_ops USING btree;
212+
174213
CREATE OPERATOR FAMILY ore_64_8_v1_term_btree_ops USING btree;
214+
215+
216+
DROP OPERATOR CLASS IF EXISTS ore_64_8_v1_term_btree_ops USING btree;
217+
175218
CREATE OPERATOR CLASS ore_64_8_v1_term_btree_ops DEFAULT FOR TYPE ore_64_8_v1_term USING btree FAMILY ore_64_8_v1_term_btree_ops AS
176219
OPERATOR 1 <,
177220
OPERATOR 2 <=,
@@ -187,7 +230,10 @@ CREATE OPERATOR CLASS ore_64_8_v1_term_btree_ops DEFAULT FOR TYPE ore_64_8_v1_te
187230
-- doesn't always make sense but it's here for completeness.
188231
-- If both are non-empty, we compare the first element. If they are equal
189232
-- we need to consider the next block so we recurse, otherwise we return the comparison result.
190-
CREATE OR REPLACE FUNCTION compare_ore_array(a ore_64_8_v1_term[], b ore_64_8_v1_term[]) returns integer AS $$
233+
DROP FUNCTION IF EXISTS compare_ore_array(a ore_64_8_v1_term[], b ore_64_8_v1_term[]);
234+
235+
CREATE FUNCTION compare_ore_array(a ore_64_8_v1_term[], b ore_64_8_v1_term[])
236+
RETURNS integer AS $$
191237
DECLARE
192238
cmp_result integer;
193239
BEGIN
@@ -212,7 +258,10 @@ CREATE OR REPLACE FUNCTION compare_ore_array(a ore_64_8_v1_term[], b ore_64_8_v1
212258
$$ LANGUAGE plpgsql;
213259

214260
-- This function uses lexicographic comparison
215-
CREATE OR REPLACE FUNCTION compare_ore_64_8_v1(a ore_64_8_v1, b ore_64_8_v1) returns integer AS $$
261+
DROP FUNCTION IF EXISTS compare_ore_64_8_v1(a ore_64_8_v1, b ore_64_8_v1);
262+
263+
CREATE FUNCTION compare_ore_64_8_v1(a ore_64_8_v1, b ore_64_8_v1)
264+
RETURNS integer AS $$
216265
DECLARE
217266
cmp_result integer;
218267
BEGIN
@@ -221,30 +270,57 @@ CREATE OR REPLACE FUNCTION compare_ore_64_8_v1(a ore_64_8_v1, b ore_64_8_v1) ret
221270
END
222271
$$ LANGUAGE plpgsql;
223272

224-
CREATE OR REPLACE FUNCTION ore_64_8_v1_eq(a ore_64_8_v1, b ore_64_8_v1) RETURNS boolean AS $$
273+
274+
DROP FUNCTION IF EXISTS ore_64_8_v1_eq(a ore_64_8_v1, b ore_64_8_v1);
275+
276+
CREATE FUNCTION ore_64_8_v1_eq(a ore_64_8_v1, b ore_64_8_v1)
277+
RETURNS boolean AS $$
225278
SELECT compare_ore_64_8_v1(a, b) = 0
226279
$$ LANGUAGE SQL;
227280

228-
CREATE OR REPLACE FUNCTION ore_64_8_v1_neq(a ore_64_8_v1, b ore_64_8_v1) RETURNS boolean AS $$
281+
282+
DROP FUNCTION IF EXISTS ore_64_8_v1_neq(a ore_64_8_v1, b ore_64_8_v1);
283+
284+
CREATE FUNCTION ore_64_8_v1_neq(a ore_64_8_v1, b ore_64_8_v1)
285+
RETURNS boolean AS $$
229286
SELECT compare_ore_64_8_v1(a, b) <> 0
230287
$$ LANGUAGE SQL;
231288

232-
CREATE OR REPLACE FUNCTION ore_64_8_v1_lt(a ore_64_8_v1, b ore_64_8_v1) RETURNS boolean AS $$
289+
290+
DROP FUNCTION IF EXISTS ore_64_8_v1_lt(a ore_64_8_v1, b ore_64_8_v1);
291+
292+
CREATE FUNCTION ore_64_8_v1_lt(a ore_64_8_v1, b ore_64_8_v1)
293+
RETURNS boolean AS $$
233294
SELECT compare_ore_64_8_v1(a, b) = -1
234295
$$ LANGUAGE SQL;
235296

236-
CREATE OR REPLACE FUNCTION ore_64_8_v1_lte(a ore_64_8_v1, b ore_64_8_v1) RETURNS boolean AS $$
297+
298+
DROP FUNCTION IF EXISTS ore_64_8_v1_lte(a ore_64_8_v1, b ore_64_8_v1);
299+
300+
CREATE FUNCTION ore_64_8_v1_lte(a ore_64_8_v1, b ore_64_8_v1)
301+
RETURNS boolean AS $$
237302
SELECT compare_ore_64_8_v1(a, b) != 1
238303
$$ LANGUAGE SQL;
239304

240-
CREATE OR REPLACE FUNCTION ore_64_8_v1_gt(a ore_64_8_v1, b ore_64_8_v1) RETURNS boolean AS $$
305+
306+
DROP FUNCTION IF EXISTS ore_64_8_v1_gt(a ore_64_8_v1, b ore_64_8_v1);
307+
308+
CREATE FUNCTION ore_64_8_v1_gt(a ore_64_8_v1, b ore_64_8_v1)
309+
RETURNS boolean AS $$
241310
SELECT compare_ore_64_8_v1(a, b) = 1
242311
$$ LANGUAGE SQL;
243312

244-
CREATE OR REPLACE FUNCTION ore_64_8_v1_gte(a ore_64_8_v1, b ore_64_8_v1) RETURNS boolean AS $$
313+
314+
DROP FUNCTION IF EXISTS ore_64_8_v1_gte(a ore_64_8_v1, b ore_64_8_v1);
315+
316+
CREATE FUNCTION ore_64_8_v1_gte(a ore_64_8_v1, b ore_64_8_v1)
317+
RETURNS boolean AS $$
245318
SELECT compare_ore_64_8_v1(a, b) != -1
246319
$$ LANGUAGE SQL;
247320

321+
322+
DROP OPERATOR IF EXISTS = (ore_64_8_v1, ore_64_8_v1);
323+
248324
CREATE OPERATOR = (
249325
PROCEDURE="ore_64_8_v1_eq",
250326
LEFTARG=ore_64_8_v1,
@@ -256,6 +332,9 @@ CREATE OPERATOR = (
256332
MERGES
257333
);
258334

335+
336+
DROP OPERATOR IF EXISTS <> (ore_64_8_v1, ore_64_8_v1);
337+
259338
CREATE OPERATOR <> (
260339
PROCEDURE="ore_64_8_v1_neq",
261340
LEFTARG=ore_64_8_v1,
@@ -267,6 +346,8 @@ CREATE OPERATOR <> (
267346
MERGES
268347
);
269348

349+
DROP OPERATOR IF EXISTS > (ore_64_8_v1, ore_64_8_v1);
350+
270351
CREATE OPERATOR > (
271352
PROCEDURE="ore_64_8_v1_gt",
272353
LEFTARG=ore_64_8_v1,
@@ -277,6 +358,9 @@ CREATE OPERATOR > (
277358
JOIN = scalargtjoinsel
278359
);
279360

361+
362+
DROP OPERATOR IF EXISTS < (ore_64_8_v1, ore_64_8_v1);
363+
280364
CREATE OPERATOR < (
281365
PROCEDURE="ore_64_8_v1_lt",
282366
LEFTARG=ore_64_8_v1,
@@ -287,6 +371,9 @@ CREATE OPERATOR < (
287371
JOIN = scalarltjoinsel
288372
);
289373

374+
375+
DROP OPERATOR IF EXISTS <= (ore_64_8_v1, ore_64_8_v1);
376+
290377
CREATE OPERATOR <= (
291378
PROCEDURE="ore_64_8_v1_lte",
292379
LEFTARG=ore_64_8_v1,
@@ -297,6 +384,9 @@ CREATE OPERATOR <= (
297384
JOIN = scalarlejoinsel
298385
);
299386

387+
388+
DROP OPERATOR IF EXISTS >= (ore_64_8_v1, ore_64_8_v1);
389+
300390
CREATE OPERATOR >= (
301391
PROCEDURE="ore_64_8_v1_gte",
302392
LEFTARG=ore_64_8_v1,
@@ -307,7 +397,14 @@ CREATE OPERATOR >= (
307397
JOIN = scalarlejoinsel
308398
);
309399

400+
401+
DROP OPERATOR FAMILY IF EXISTS ore_64_8_v1_btree_ops USING btree;
402+
310403
CREATE OPERATOR FAMILY ore_64_8_v1_btree_ops USING btree;
404+
405+
406+
DROP OPERATOR CLASS IF EXISTS ore_64_8_v1_btree_ops USING btree;
407+
311408
CREATE OPERATOR CLASS ore_64_8_v1_btree_ops DEFAULT FOR TYPE ore_64_8_v1 USING btree FAMILY ore_64_8_v1_btree_ops AS
312409
OPERATOR 1 <,
313410
OPERATOR 2 <=,

0 commit comments

Comments
 (0)