11CREATE EXTENSION IF NOT EXISTS pgcrypto;
22
3- CREATE TYPE ore_64_8_v1_term AS (
4- bytes bytea
5- );
6-
7- CREATE TYPE ore_64_8_v1 AS (
8- terms ore_64_8_v1_term[]
9- );
10-
3+ CREATE DOMAIN ore_64_8_index_v1 AS bytea [];
114
12- DROP FUNCTION IF EXISTS compare_ore_64_8_v1_term(a ore_64_8_v1_term, b ore_64_8_v1_term);
135DROP FUNCTION IF EXISTS compare_ore_64_8_v1_term(a bytea , b bytea );
146
15- CREATE FUNCTION compare_ore_64_8_v1_term (a ore_64_8_v1_term, b ore_64_8_v1_term) returns integer AS $$
16- BEGIN
17- SELECT compare_ore_64_8_v1_term(a .bytes , b .bytes );
18- END;
19- $$ LANGUAGE plpgsql;
20-
217CREATE FUNCTION compare_ore_64_8_v1_term (a bytea , b bytea ) returns integer AS $$
228 DECLARE
239 eq boolean := true;
@@ -95,177 +81,40 @@ CREATE FUNCTION compare_ore_64_8_v1_term(a bytea, b bytea) returns integer AS $$
9581$$ LANGUAGE plpgsql;
9682
9783
98- DROP FUNCTION IF EXISTS ore_64_8_v1_term_eq(a ore_64_8_v1_term, b ore_64_8_v1_term);
99-
100- CREATE FUNCTION ore_64_8_v1_term_eq (a ore_64_8_v1_term, b ore_64_8_v1_term)
101- RETURNS boolean AS $$
102- SELECT compare_ore_64_8_v1_term(a, b) = 0
103- $$ LANGUAGE SQL;
104-
105-
106- DROP FUNCTION IF EXISTS ore_64_8_v1_term_neq(a ore_64_8_v1_term, b ore_64_8_v1_term);
107-
108- CREATE FUNCTION ore_64_8_v1_term_neq (a ore_64_8_v1_term, b ore_64_8_v1_term)
109- RETURNS boolean AS $$
110- SELECT compare_ore_64_8_v1_term(a, b) <> 0
111- $$ LANGUAGE SQL;
112-
113-
114- DROP FUNCTION IF EXISTS ore_64_8_v1_term_lt(a ore_64_8_v1_term, b ore_64_8_v1_term);
115-
116- CREATE FUNCTION ore_64_8_v1_term_lt (a ore_64_8_v1_term, b ore_64_8_v1_term)
117- RETURNS boolean AS $$
118- SELECT compare_ore_64_8_v1_term(a, b) = - 1
119- $$ LANGUAGE SQL;
120-
121-
122- DROP FUNCTION IF EXISTS ore_64_8_v1_term_lte(a ore_64_8_v1_term, b ore_64_8_v1_term);
123-
124- CREATE FUNCTION ore_64_8_v1_term_lte (a ore_64_8_v1_term, b ore_64_8_v1_term)
125- RETURNS boolean AS $$
126- SELECT compare_ore_64_8_v1_term(a, b) != 1
127- $$ LANGUAGE SQL;
128-
129-
130- DROP FUNCTION IF EXISTS ore_64_8_v1_term_gt(a ore_64_8_v1_term, b ore_64_8_v1_term);
131-
132- CREATE FUNCTION ore_64_8_v1_term_gt (a ore_64_8_v1_term, b ore_64_8_v1_term)
133- RETURNS boolean AS $$
134- SELECT compare_ore_64_8_v1_term(a, b) = 1
135- $$ LANGUAGE SQL;
136-
137-
138- DROP FUNCTION IF EXISTS ore_64_8_v1_term_gte(a ore_64_8_v1_term, b ore_64_8_v1_term);
139-
140- CREATE FUNCTION ore_64_8_v1_term_gte (a ore_64_8_v1_term, b ore_64_8_v1_term)
141- RETURNS boolean AS $$
142- SELECT compare_ore_64_8_v1_term(a, b) != - 1
143- $$ LANGUAGE SQL;
144-
145-
146- DROP OPERATOR IF EXISTS = (ore_64_8_v1_term, ore_64_8_v1_term);
147-
148- CREATE OPERATOR = (
149- PROCEDURE= " ore_64_8_v1_term_eq" ,
150- LEFTARG= ore_64_8_v1_term,
151- RIGHTARG= ore_64_8_v1_term,
152- NEGATOR = <> ,
153- RESTRICT = eqsel,
154- JOIN = eqjoinsel,
155- HASHES,
156- MERGES
157- );
158-
159-
160- DROP OPERATOR IF EXISTS <> (ore_64_8_v1_term, ore_64_8_v1_term);
161-
162- CREATE OPERATOR <> (
163- PROCEDURE= " ore_64_8_v1_term_neq" ,
164- LEFTARG= ore_64_8_v1_term,
165- RIGHTARG= ore_64_8_v1_term,
166- NEGATOR = = ,
167- RESTRICT = eqsel,
168- JOIN = eqjoinsel,
169- HASHES,
170- MERGES
171- );
172-
173- DROP OPERATOR IF EXISTS > (ore_64_8_v1_term, ore_64_8_v1_term);
174-
175- CREATE OPERATOR > (
176- PROCEDURE= " ore_64_8_v1_term_gt" ,
177- LEFTARG= ore_64_8_v1_term,
178- RIGHTARG= ore_64_8_v1_term,
179- COMMUTATOR = < ,
180- NEGATOR = <= ,
181- RESTRICT = scalargtsel,
182- JOIN = scalargtjoinsel
183- );
184-
185- DROP OPERATOR IF EXISTS < (ore_64_8_v1_term, ore_64_8_v1_term);
186-
187- CREATE OPERATOR < (
188- PROCEDURE= " ore_64_8_v1_term_lt" ,
189- LEFTARG= ore_64_8_v1_term,
190- RIGHTARG= ore_64_8_v1_term,
191- COMMUTATOR = > ,
192- NEGATOR = >= ,
193- RESTRICT = scalarltsel,
194- JOIN = scalarltjoinsel
195- );
196-
197- DROP OPERATOR IF EXISTS <= (ore_64_8_v1_term, ore_64_8_v1_term);
198-
199- CREATE OPERATOR <= (
200- PROCEDURE= " ore_64_8_v1_term_lte" ,
201- LEFTARG= ore_64_8_v1_term,
202- RIGHTARG= ore_64_8_v1_term,
203- COMMUTATOR = >= ,
204- NEGATOR = > ,
205- RESTRICT = scalarlesel,
206- JOIN = scalarlejoinsel
207- );
208-
209- DROP OPERATOR IF EXISTS >= (ore_64_8_v1_term, ore_64_8_v1_term);
210-
211- CREATE OPERATOR >= (
212- PROCEDURE= " ore_64_8_v1_term_gte" ,
213- LEFTARG= ore_64_8_v1_term,
214- RIGHTARG= ore_64_8_v1_term,
215- COMMUTATOR = <= ,
216- NEGATOR = < ,
217- RESTRICT = scalarlesel,
218- JOIN = scalarlejoinsel
219- );
220-
221- DROP OPERATOR FAMILY IF EXISTS ore_64_8_v1_term_btree_ops USING btree;
222-
223- CREATE OPERATOR FAMILY ore_64_8_v1_term_btree_ops USING btree;
224-
225-
226- DROP OPERATOR CLASS IF EXISTS ore_64_8_v1_term_btree_ops USING btree;
227-
228- 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
229- OPERATOR 1 < ,
230- OPERATOR 2 <= ,
231- OPERATOR 3 = ,
232- OPERATOR 4 >= ,
233- OPERATOR 5 > ,
234- FUNCTION 1 compare_ore_64_8_v1_term(a ore_64_8_v1_term, b ore_64_8_v1_term);
235-
23684-- Compare the "head" of each array and recurse if necessary
23785-- This function assumes an empty string is "less than" everything else
23886-- so if a is empty we return -1, if be is empty and a isn't, we return 1.
23987-- If both are empty we return 0. This cases probably isn't necessary as equality
24088-- doesn't always make sense but it's here for completeness.
24189-- If both are non-empty, we compare the first element. If they are equal
24290-- we need to consider the next block so we recurse, otherwise we return the comparison result.
243- -- DROP FUNCTION IF EXISTS compare_ore_array(a ore_64_8_v1_term[], b ore_64_8_v1_term[]);
24491
245- -- CREATE FUNCTION compare_ore_array(a ore_64_8_v1_term[], b ore_64_8_v1_term[])
246- -- RETURNS integer AS $$
247- -- BEGIN
248- -- -- SELECT compare_ore_array(a, b);
249- -- SELECT compare_ore_array(CAST(a AS bytea[]), CAST(b AS bytea[]));
250- -- END
251- -- $$ LANGUAGE plpgsql;
25292
25393CREATE FUNCTION compare_ore_array (a bytea [], b bytea [])
25494RETURNS integer AS $$
25595 DECLARE
25696 cmp_result integer ;
97+ len_a integer ;
98+ len_b integer ;
25799 BEGIN
100+
101+ SELECT array_length(a, 1 ) INTO len_a;
102+ SELECT array_length(b, 1 ) INTO len_b;
103+
258104 IF (array_length(a, 1 ) = 0 OR a IS NULL ) AND (array_length(b, 1 ) = 0 OR b IS NULL ) THEN
259105 RETURN 0 ;
260106 END IF;
107+
261108 IF array_length(a, 1 ) = 0 OR a IS NULL THEN
262109 RETURN - 1 ;
263110 END IF;
111+
264112 IF array_length(b, 1 ) = 0 OR a IS NULL THEN
265113 RETURN 1 ;
266114 END IF;
267115
268116 cmp_result := compare_ore_64_8_v1_term(a[1 ], b[1 ]);
117+
269118 IF cmp_result = 0 THEN
270119 -- Removes the first element in the array, and calls this fn again to compare the next element/s in the array.
271120 RETURN compare_ore_array(a[2 :array_length(a,1 )], b[2 :array_length(b,1 )]);
@@ -276,80 +125,68 @@ RETURNS integer AS $$
276125$$ LANGUAGE plpgsql;
277126
278127-- This function uses lexicographic comparison
279- DROP FUNCTION IF EXISTS compare_ore_64_8_v1(a ore_64_8_v1 , b ore_64_8_v1 );
128+ DROP FUNCTION IF EXISTS compare_ore_64_8_v1(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
280129
281- CREATE FUNCTION compare_ore_64_8_v1 (a ore_64_8_v1 , b ore_64_8_v1 )
130+ CREATE FUNCTION compare_ore_64_8_v1 (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
282131RETURNS integer AS $$
283- DECLARE
284- cmp_result integer ;
285- BEGIN
286- -- Recursively compare blocks bailing as soon as we can make a decision
287- RETURN compare_ore_array(a .terms ::bytea [], b .terms ::bytea []);
288- END
289- $$ LANGUAGE plpgsql;
290-
291- DROP FUNCTION IF EXISTS compare_ore_64_8_v1(a bytea [], b bytea []);
292-
293- CREATE FUNCTION compare_ore_64_8_v1 (a bytea [], b bytea [])
294- RETURNS integer AS $$
295- DECLARE
296- cmp_result integer ;
297132 BEGIN
298133 -- Recursively compare blocks bailing as soon as we can make a decision
299134 RETURN compare_ore_array(a, b);
300135 END
301136$$ LANGUAGE plpgsql;
302137
303138
304- DROP FUNCTION IF EXISTS ore_64_8_v1_eq(a ore_64_8_v1 , b ore_64_8_v1 );
139+ DROP FUNCTION IF EXISTS ore_64_8_v1_eq(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
305140
306- CREATE FUNCTION ore_64_8_v1_eq (a ore_64_8_v1 , b ore_64_8_v1 )
141+ CREATE FUNCTION ore_64_8_v1_eq (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
307142RETURNS boolean AS $$
308143 SELECT compare_ore_64_8_v1(a, b) = 0
309144$$ LANGUAGE SQL;
310145
311146
312- DROP FUNCTION IF EXISTS ore_64_8_v1_neq(a ore_64_8_v1 , b ore_64_8_v1 );
147+ DROP FUNCTION IF EXISTS ore_64_8_v1_neq(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
313148
314- CREATE FUNCTION ore_64_8_v1_neq (a ore_64_8_v1 , b ore_64_8_v1 )
149+ CREATE FUNCTION ore_64_8_v1_neq (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
315150RETURNS boolean AS $$
316151 SELECT compare_ore_64_8_v1(a, b) <> 0
317152$$ LANGUAGE SQL;
318153
319154
320- DROP FUNCTION IF EXISTS ore_64_8_v1_lt(a ore_64_8_v1 , b ore_64_8_v1 );
155+ DROP FUNCTION IF EXISTS ore_64_8_v1_lt(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
321156
322- CREATE FUNCTION ore_64_8_v1_lt (a ore_64_8_v1 , b ore_64_8_v1 )
157+ CREATE FUNCTION ore_64_8_v1_lt (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
323158RETURNS boolean AS $$
324159 SELECT compare_ore_64_8_v1(a, b) = - 1
325160$$ LANGUAGE SQL;
326161
327162
328- DROP FUNCTION IF EXISTS ore_64_8_v1_lte(a ore_64_8_v1 , b ore_64_8_v1 );
163+ DROP FUNCTION IF EXISTS ore_64_8_v1_lte(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
329164
330- CREATE FUNCTION ore_64_8_v1_lte (a ore_64_8_v1 , b ore_64_8_v1 )
165+ CREATE FUNCTION ore_64_8_v1_lte (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
331166RETURNS boolean AS $$
332167 SELECT compare_ore_64_8_v1(a, b) != 1
333168$$ LANGUAGE SQL;
334169
335170
336- DROP FUNCTION IF EXISTS ore_64_8_v1_gt(a ore_64_8_v1 , b ore_64_8_v1 );
171+ DROP FUNCTION IF EXISTS ore_64_8_v1_gt(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
337172
338- CREATE FUNCTION ore_64_8_v1_gt (a ore_64_8_v1 , b ore_64_8_v1 )
173+ CREATE FUNCTION ore_64_8_v1_gt (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
339174RETURNS boolean AS $$
340- SELECT compare_ore_64_8_v1(a, b) = 1
341- $$ LANGUAGE SQL;
175+ BEGIN
176+ SELECT compare_ore_64_8_v1(a, b) = 1 ;
177+ END;
178+ $$ LANGUAGE plpgsql;
342179
343180
344- DROP FUNCTION IF EXISTS ore_64_8_v1_gte(a ore_64_8_v1 , b ore_64_8_v1 );
181+ DROP FUNCTION IF EXISTS ore_64_8_v1_gte(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
345182
346- CREATE FUNCTION ore_64_8_v1_gte (a ore_64_8_v1 , b ore_64_8_v1 )
183+ CREATE FUNCTION ore_64_8_v1_gte (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
347184RETURNS boolean AS $$
348185 SELECT compare_ore_64_8_v1(a, b) != - 1
349186$$ LANGUAGE SQL;
350187
351188
352- DROP OPERATOR IF EXISTS = (ore_64_8_v1, ore_64_8_v1 );
189+ DROP OPERATOR IF EXISTS = (ore_64_8_index_v1, ore_64_8_index_v1 );
353190
354191CREATE OPERATOR = (
355192 PROCEDURE= " ore_64_8_v1_eq" ,
@@ -363,7 +200,7 @@ CREATE OPERATOR = (
363200);
364201
365202
366- DROP OPERATOR IF EXISTS <> (ore_64_8_v1, ore_64_8_v1 );
203+ DROP OPERATOR IF EXISTS <> (ore_64_8_index_v1, ore_64_8_index_v1 );
367204
368205CREATE OPERATOR <> (
369206 PROCEDURE= " ore_64_8_v1_neq" ,
@@ -376,7 +213,7 @@ CREATE OPERATOR <> (
376213 MERGES
377214);
378215
379- DROP OPERATOR IF EXISTS > (ore_64_8_v1, ore_64_8_v1 );
216+ DROP OPERATOR IF EXISTS > (ore_64_8_index_v1, ore_64_8_index_v1 );
380217
381218CREATE OPERATOR > (
382219 PROCEDURE= " ore_64_8_v1_gt" ,
@@ -389,7 +226,7 @@ CREATE OPERATOR > (
389226);
390227
391228
392- DROP OPERATOR IF EXISTS < (ore_64_8_v1, ore_64_8_v1 );
229+ DROP OPERATOR IF EXISTS < (ore_64_8_index_v1, ore_64_8_index_v1 );
393230
394231CREATE OPERATOR < (
395232 PROCEDURE= " ore_64_8_v1_lt" ,
@@ -402,7 +239,7 @@ CREATE OPERATOR < (
402239);
403240
404241
405- DROP OPERATOR IF EXISTS <= (ore_64_8_v1, ore_64_8_v1 );
242+ DROP OPERATOR IF EXISTS <= (ore_64_8_index_v1, ore_64_8_index_v1 );
406243
407244CREATE OPERATOR <= (
408245 PROCEDURE= " ore_64_8_v1_lte" ,
@@ -415,7 +252,7 @@ CREATE OPERATOR <= (
415252);
416253
417254
418- DROP OPERATOR IF EXISTS >= (ore_64_8_v1, ore_64_8_v1 );
255+ DROP OPERATOR IF EXISTS >= (ore_64_8_index_v1, ore_64_8_index_v1 );
419256
420257CREATE OPERATOR >= (
421258 PROCEDURE= " ore_64_8_v1_gte" ,
@@ -441,4 +278,4 @@ CREATE OPERATOR CLASS ore_64_8_v1_btree_ops DEFAULT FOR TYPE ore_64_8_v1 USING b
441278 OPERATOR 3 = ,
442279 OPERATOR 4 >= ,
443280 OPERATOR 5 > ,
444- FUNCTION 1 compare_ore_64_8_v1(a ore_64_8_v1 , b ore_64_8_v1 );
281+ FUNCTION 1 compare_ore_64_8_v1(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
0 commit comments