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,61 @@ 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+ RAISE NOTICE ' ////////////////////////' ;
101+
102+ SELECT array_length(a, 1 ) INTO len_a;
103+ SELECT array_length(b, 1 ) INTO len_b;
104+
105+ RAISE NOTICE ' len_a %' , len_a;
106+ RAISE NOTICE ' len_b %' , len_b;
107+
108+ -- IF (a IS NULL) THEN
109+ -- RAISE NOTICE 'a is NULL';
110+ -- END IF;
111+
112+ -- IF (b IS NULL) THEN
113+ -- RAISE NOTICE 'b is NULL';
114+ -- END IF;
115+
258116 IF (array_length(a, 1 ) = 0 OR a IS NULL ) AND (array_length(b, 1 ) = 0 OR b IS NULL ) THEN
117+ RAISE NOTICE ' RETURN 0' ;
259118 RETURN 0 ;
260119 END IF;
120+
261121 IF array_length(a, 1 ) = 0 OR a IS NULL THEN
122+ RAISE NOTICE ' RETURN -1' ;
262123 RETURN - 1 ;
263124 END IF;
125+
264126 IF array_length(b, 1 ) = 0 OR a IS NULL THEN
127+ RAISE NOTICE ' RETURN 1' ;
265128 RETURN 1 ;
266129 END IF;
267130
131+ -- RAISE NOTICE '////////////////////////';
132+
268133 cmp_result := compare_ore_64_8_v1_term(a[1 ], b[1 ]);
134+
135+ RAISE NOTICE ' cmp_result %' , cmp_result;
136+ RAISE NOTICE ' ////////////////////////' ;
137+
138+
269139 IF cmp_result = 0 THEN
270140 -- Removes the first element in the array, and calls this fn again to compare the next element/s in the array.
271141 RETURN compare_ore_array(a[2 :array_length(a,1 )], b[2 :array_length(b,1 )]);
@@ -276,80 +146,70 @@ RETURNS integer AS $$
276146$$ LANGUAGE plpgsql;
277147
278148-- 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 );
149+ DROP FUNCTION IF EXISTS compare_ore_64_8_v1(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
280150
281- CREATE FUNCTION compare_ore_64_8_v1 (a ore_64_8_v1 , b ore_64_8_v1 )
151+ CREATE FUNCTION compare_ore_64_8_v1 (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
282152RETURNS 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 ;
297153 BEGIN
154+ RAISE NOTICE ' compare_ore_64_8_v1' ;
298155 -- Recursively compare blocks bailing as soon as we can make a decision
299156 RETURN compare_ore_array(a, b);
300157 END
301158$$ LANGUAGE plpgsql;
302159
303160
304- DROP FUNCTION IF EXISTS ore_64_8_v1_eq(a ore_64_8_v1 , b ore_64_8_v1 );
161+ DROP FUNCTION IF EXISTS ore_64_8_v1_eq(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
305162
306- CREATE FUNCTION ore_64_8_v1_eq (a ore_64_8_v1 , b ore_64_8_v1 )
163+ CREATE FUNCTION ore_64_8_v1_eq (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
307164RETURNS boolean AS $$
308165 SELECT compare_ore_64_8_v1(a, b) = 0
309166$$ LANGUAGE SQL;
310167
311168
312- DROP FUNCTION IF EXISTS ore_64_8_v1_neq(a ore_64_8_v1 , b ore_64_8_v1 );
169+ DROP FUNCTION IF EXISTS ore_64_8_v1_neq(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
313170
314- CREATE FUNCTION ore_64_8_v1_neq (a ore_64_8_v1 , b ore_64_8_v1 )
171+ CREATE FUNCTION ore_64_8_v1_neq (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
315172RETURNS boolean AS $$
316173 SELECT compare_ore_64_8_v1(a, b) <> 0
317174$$ LANGUAGE SQL;
318175
319176
320- DROP FUNCTION IF EXISTS ore_64_8_v1_lt(a ore_64_8_v1 , b ore_64_8_v1 );
177+ DROP FUNCTION IF EXISTS ore_64_8_v1_lt(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
321178
322- CREATE FUNCTION ore_64_8_v1_lt (a ore_64_8_v1 , b ore_64_8_v1 )
179+ CREATE FUNCTION ore_64_8_v1_lt (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
323180RETURNS boolean AS $$
324181 SELECT compare_ore_64_8_v1(a, b) = - 1
325182$$ LANGUAGE SQL;
326183
327184
328- DROP FUNCTION IF EXISTS ore_64_8_v1_lte(a ore_64_8_v1 , b ore_64_8_v1 );
185+ DROP FUNCTION IF EXISTS ore_64_8_v1_lte(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
329186
330- CREATE FUNCTION ore_64_8_v1_lte (a ore_64_8_v1 , b ore_64_8_v1 )
187+ CREATE FUNCTION ore_64_8_v1_lte (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
331188RETURNS boolean AS $$
332189 SELECT compare_ore_64_8_v1(a, b) != 1
333190$$ LANGUAGE SQL;
334191
335192
336- DROP FUNCTION IF EXISTS ore_64_8_v1_gt(a ore_64_8_v1 , b ore_64_8_v1 );
193+ DROP FUNCTION IF EXISTS ore_64_8_v1_gt(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
337194
338- CREATE FUNCTION ore_64_8_v1_gt (a ore_64_8_v1 , b ore_64_8_v1 )
195+ CREATE FUNCTION ore_64_8_v1_gt (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
339196RETURNS boolean AS $$
340- SELECT compare_ore_64_8_v1(a, b) = 1
341- $$ LANGUAGE SQL;
197+ BEGIN
198+ RAISE NOTICE ' ore_64_8_v1_gt' ;
199+ SELECT compare_ore_64_8_v1(a, b) = 1 ;
200+ END;
201+ $$ LANGUAGE plpgsql;
342202
343203
344- DROP FUNCTION IF EXISTS ore_64_8_v1_gte(a ore_64_8_v1 , b ore_64_8_v1 );
204+ DROP FUNCTION IF EXISTS ore_64_8_v1_gte(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
345205
346- CREATE FUNCTION ore_64_8_v1_gte (a ore_64_8_v1 , b ore_64_8_v1 )
206+ CREATE FUNCTION ore_64_8_v1_gte (a ore_64_8_index_v1 , b ore_64_8_index_v1 )
347207RETURNS boolean AS $$
348208 SELECT compare_ore_64_8_v1(a, b) != - 1
349209$$ LANGUAGE SQL;
350210
351211
352- DROP OPERATOR IF EXISTS = (ore_64_8_v1, ore_64_8_v1 );
212+ DROP OPERATOR IF EXISTS = (ore_64_8_index_v1, ore_64_8_index_v1 );
353213
354214CREATE OPERATOR = (
355215 PROCEDURE= " ore_64_8_v1_eq" ,
@@ -363,7 +223,7 @@ CREATE OPERATOR = (
363223);
364224
365225
366- DROP OPERATOR IF EXISTS <> (ore_64_8_v1, ore_64_8_v1 );
226+ DROP OPERATOR IF EXISTS <> (ore_64_8_index_v1, ore_64_8_index_v1 );
367227
368228CREATE OPERATOR <> (
369229 PROCEDURE= " ore_64_8_v1_neq" ,
@@ -376,7 +236,7 @@ CREATE OPERATOR <> (
376236 MERGES
377237);
378238
379- DROP OPERATOR IF EXISTS > (ore_64_8_v1, ore_64_8_v1 );
239+ DROP OPERATOR IF EXISTS > (ore_64_8_index_v1, ore_64_8_index_v1 );
380240
381241CREATE OPERATOR > (
382242 PROCEDURE= " ore_64_8_v1_gt" ,
@@ -389,7 +249,7 @@ CREATE OPERATOR > (
389249);
390250
391251
392- DROP OPERATOR IF EXISTS < (ore_64_8_v1, ore_64_8_v1 );
252+ DROP OPERATOR IF EXISTS < (ore_64_8_index_v1, ore_64_8_index_v1 );
393253
394254CREATE OPERATOR < (
395255 PROCEDURE= " ore_64_8_v1_lt" ,
@@ -402,7 +262,7 @@ CREATE OPERATOR < (
402262);
403263
404264
405- DROP OPERATOR IF EXISTS <= (ore_64_8_v1, ore_64_8_v1 );
265+ DROP OPERATOR IF EXISTS <= (ore_64_8_index_v1, ore_64_8_index_v1 );
406266
407267CREATE OPERATOR <= (
408268 PROCEDURE= " ore_64_8_v1_lte" ,
@@ -415,7 +275,7 @@ CREATE OPERATOR <= (
415275);
416276
417277
418- DROP OPERATOR IF EXISTS >= (ore_64_8_v1, ore_64_8_v1 );
278+ DROP OPERATOR IF EXISTS >= (ore_64_8_index_v1, ore_64_8_index_v1 );
419279
420280CREATE OPERATOR >= (
421281 PROCEDURE= " ore_64_8_v1_gte" ,
@@ -441,4 +301,4 @@ CREATE OPERATOR CLASS ore_64_8_v1_btree_ops DEFAULT FOR TYPE ore_64_8_v1 USING b
441301 OPERATOR 3 = ,
442302 OPERATOR 4 >= ,
443303 OPERATOR 5 > ,
444- FUNCTION 1 compare_ore_64_8_v1(a ore_64_8_v1 , b ore_64_8_v1 );
304+ FUNCTION 1 compare_ore_64_8_v1(a ore_64_8_index_v1 , b ore_64_8_index_v1 );
0 commit comments