Project

General

Profile

1 2094 aaronmk
--
2
-- PostgreSQL database dump
3
--
4
5
SET statement_timeout = 0;
6
SET client_encoding = 'UTF8';
7
SET standard_conforming_strings = off;
8
SET check_function_bodies = false;
9
SET client_min_messages = warning;
10
SET escape_string_warning = off;
11
12
--
13
-- Name: functions; Type: SCHEMA; Schema: -; Owner: -
14
--
15
16
CREATE SCHEMA functions;
17
18
19 2107 aaronmk
SET search_path = functions, pg_catalog;
20
21 2094 aaronmk
--
22 2610 aaronmk
-- Name: datatype; Type: TYPE; Schema: functions; Owner: -
23
--
24
25
CREATE TYPE datatype AS ENUM (
26
    'str',
27
    'float'
28
);
29
30
31
--
32 2566 aaronmk
-- Name: _alt(); Type: FUNCTION; Schema: functions; Owner: -
33
--
34
35
CREATE FUNCTION _alt() RETURNS trigger
36
    LANGUAGE plpgsql IMMUTABLE
37
    AS $$
38
BEGIN
39 2944 aaronmk
    new.result := functions._alt(new."0", new."1", new."2", new."3", new."4",
40
        new."5", new."6", new."7", new."8", new."9");
41 2566 aaronmk
    RETURN new;
42
END;
43
$$;
44
45
46
--
47 2939 aaronmk
-- Name: _alt(text, text, text, text, text, text, text, text, text, text); Type: FUNCTION; Schema: functions; Owner: -
48
--
49
50
CREATE FUNCTION _alt("0" text DEFAULT NULL::text, "1" text DEFAULT NULL::text, "2" text DEFAULT NULL::text, "3" text DEFAULT NULL::text, "4" text DEFAULT NULL::text, "5" text DEFAULT NULL::text, "6" text DEFAULT NULL::text, "7" text DEFAULT NULL::text, "8" text DEFAULT NULL::text, "9" text DEFAULT NULL::text) RETURNS text
51
    LANGUAGE sql IMMUTABLE
52
    AS $_$
53
SELECT coalesce($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
54
$_$;
55
56
57
--
58 2606 aaronmk
-- Name: _label(); Type: FUNCTION; Schema: functions; Owner: -
59
--
60
61
CREATE FUNCTION _label() RETURNS trigger
62
    LANGUAGE plpgsql IMMUTABLE
63
    AS $$
64
BEGIN
65 2944 aaronmk
    new.result := functions._label(new.label, new.value);
66 2606 aaronmk
    RETURN new;
67
END;
68
$$;
69
70
71
--
72 2943 aaronmk
-- Name: _label(text, text); Type: FUNCTION; Schema: functions; Owner: -
73
--
74
75
CREATE FUNCTION _label(label text, value text) RETURNS text
76
    LANGUAGE sql IMMUTABLE
77
    AS $_$
78
SELECT $1||': '||$2
79
$_$;
80
81
82
--
83 2596 aaronmk
-- Name: _merge(); Type: FUNCTION; Schema: functions; Owner: -
84
--
85
86
CREATE FUNCTION _merge() RETURNS trigger
87
    LANGUAGE plpgsql IMMUTABLE
88
    AS $$
89
BEGIN
90 2944 aaronmk
    new.result := functions._merge(new."0", new."1", new."2", new."3", new."4",
91
        new."5", new."6", new."7", new."8", new."9");
92 2596 aaronmk
    RETURN new;
93
END;
94
$$;
95
96
97
--
98 2940 aaronmk
-- Name: _merge(text, text, text, text, text, text, text, text, text, text); Type: FUNCTION; Schema: functions; Owner: -
99
--
100
101
CREATE FUNCTION _merge("0" text DEFAULT NULL::text, "1" text DEFAULT NULL::text, "2" text DEFAULT NULL::text, "3" text DEFAULT NULL::text, "4" text DEFAULT NULL::text, "5" text DEFAULT NULL::text, "6" text DEFAULT NULL::text, "7" text DEFAULT NULL::text, "8" text DEFAULT NULL::text, "9" text DEFAULT NULL::text) RETURNS text
102
    LANGUAGE sql IMMUTABLE
103
    AS $_$
104
SELECT functions.join_strs('; ', value)
105
FROM
106
(
107
    SELECT *
108
    FROM
109
    (
110
        SELECT
111
        DISTINCT ON (value)
112
        *
113
        FROM
114
        (VALUES
115
              (0, $1)
116
            , (1, $2)
117
            , (2, $3)
118
            , (3, $4)
119
            , (4, $5)
120
            , (5, $6)
121
            , (6, $7)
122
            , (7, $8)
123
            , (8, $9)
124
            , (9, $10)
125
        )
126
        AS v (sort_order, value)
127
    )
128
    AS v
129
    ORDER BY sort_order
130
)
131
AS v
132
$_$;
133
134
135
--
136 2610 aaronmk
-- Name: _nullIf(); Type: FUNCTION; Schema: functions; Owner: -
137
--
138
139
CREATE FUNCTION "_nullIf"() RETURNS trigger
140
    LANGUAGE plpgsql IMMUTABLE
141
    AS $$
142
BEGIN
143 2662 aaronmk
    IF new.type = 'str' THEN -- no cast needed
144 2610 aaronmk
        new.result := (SELECT nullif(new.value, new."null"));
145 2722 aaronmk
    -- Invalid value is ignored, but invalid null value generates error
146 2662 aaronmk
    ELSIF new.type = 'float' THEN
147 2722 aaronmk
        DECLARE
148
            -- Outside the try block so that invalid null value generates error
149
            "null" double precision := new."null"::double precision;
150
        BEGIN
151
            new.result := (SELECT nullif(new.value::double precision, "null"));
152
        EXCEPTION
153
            WHEN data_exception THEN NULL; -- ignore invalid value
154
        END;
155 2610 aaronmk
    END IF;
156
157
    RETURN new;
158
END;
159
$$;
160
161
162
--
163 2595 aaronmk
-- Name: join_strs_(text, text, text); Type: FUNCTION; Schema: functions; Owner: -
164
--
165
166
CREATE FUNCTION join_strs_(state text, delim text, value text) RETURNS text
167
    LANGUAGE sql IMMUTABLE
168
    AS $_$
169
SELECT $1 || (CASE
170
WHEN $1 = '' OR $3 IS NULL OR $3 = ''
171
THEN ''
172
ELSE $2
173
END) || coalesce($3, '');
174
$_$;
175
176
177
--
178
-- Name: join_strs(text, text); Type: AGGREGATE; Schema: functions; Owner: -
179
--
180
181
CREATE AGGREGATE join_strs(text, text) (
182
    SFUNC = join_strs_,
183
    STYPE = text,
184
    INITCOND = ''
185
);
186
187
188 2566 aaronmk
SET default_tablespace = '';
189
190
SET default_with_oids = false;
191
192 2107 aaronmk
--
193 2566 aaronmk
-- Name: _alt; Type: TABLE; Schema: functions; Owner: -; Tablespace:
194
--
195
196
CREATE TABLE _alt (
197
    result text,
198
    not_null_col boolean DEFAULT true NOT NULL,
199
    "0" text,
200
    "1" text,
201
    "2" text,
202
    "3" text,
203
    "4" text,
204
    "5" text,
205
    "6" text,
206
    "7" text,
207
    "8" text,
208
    "9" text
209
);
210
211
212
--
213 2606 aaronmk
-- Name: _label; Type: TABLE; Schema: functions; Owner: -; Tablespace:
214
--
215
216
CREATE TABLE _label (
217
    result text,
218
    not_null_col boolean DEFAULT true NOT NULL,
219 2862 aaronmk
    label text NOT NULL,
220 2606 aaronmk
    value text
221
);
222
223
224
--
225 2596 aaronmk
-- Name: _merge; Type: TABLE; Schema: functions; Owner: -; Tablespace:
226
--
227
228
CREATE TABLE _merge (
229
    result text,
230
    not_null_col boolean DEFAULT true NOT NULL,
231
    "0" text,
232
    "1" text,
233
    "2" text,
234
    "3" text,
235
    "4" text,
236
    "5" text,
237
    "6" text,
238
    "7" text,
239
    "8" text,
240
    "9" text
241
);
242
243
244
--
245 2662 aaronmk
-- Name: _nullIf; Type: TABLE; Schema: functions; Owner: -; Tablespace:
246
--
247
248
CREATE TABLE "_nullIf" (
249
    result text,
250
    not_null_col boolean DEFAULT true NOT NULL,
251 2864 aaronmk
    "null" text NOT NULL,
252 2662 aaronmk
    type datatype DEFAULT 'str'::datatype NOT NULL,
253
    value text
254
);
255
256
257
--
258 2636 aaronmk
-- Name: _alt_0; Type: INDEX; Schema: functions; Owner: -; Tablespace:
259
--
260
261 2838 aaronmk
CREATE INDEX _alt_0 ON _alt USING btree ((COALESCE("0", '\\N'::text)));
262 2636 aaronmk
263
264
--
265
-- Name: _alt_1; Type: INDEX; Schema: functions; Owner: -; Tablespace:
266
--
267
268 2838 aaronmk
CREATE INDEX _alt_1 ON _alt USING btree ((COALESCE("1", '\\N'::text)));
269 2636 aaronmk
270
271
--
272
-- Name: _alt_2; Type: INDEX; Schema: functions; Owner: -; Tablespace:
273
--
274
275 2838 aaronmk
CREATE INDEX _alt_2 ON _alt USING btree ((COALESCE("2", '\\N'::text)));
276 2636 aaronmk
277
278
--
279
-- Name: _alt_3; Type: INDEX; Schema: functions; Owner: -; Tablespace:
280
--
281
282 2838 aaronmk
CREATE INDEX _alt_3 ON _alt USING btree ((COALESCE("3", '\\N'::text)));
283 2636 aaronmk
284
285
--
286
-- Name: _alt_4; Type: INDEX; Schema: functions; Owner: -; Tablespace:
287
--
288
289 2838 aaronmk
CREATE INDEX _alt_4 ON _alt USING btree ((COALESCE("4", '\\N'::text)));
290 2636 aaronmk
291
292
--
293
-- Name: _alt_5; Type: INDEX; Schema: functions; Owner: -; Tablespace:
294
--
295
296 2838 aaronmk
CREATE INDEX _alt_5 ON _alt USING btree ((COALESCE("5", '\\N'::text)));
297 2636 aaronmk
298
299
--
300
-- Name: _alt_6; Type: INDEX; Schema: functions; Owner: -; Tablespace:
301
--
302
303 2838 aaronmk
CREATE INDEX _alt_6 ON _alt USING btree ((COALESCE("6", '\\N'::text)));
304 2636 aaronmk
305
306
--
307
-- Name: _alt_7; Type: INDEX; Schema: functions; Owner: -; Tablespace:
308
--
309
310 2838 aaronmk
CREATE INDEX _alt_7 ON _alt USING btree ((COALESCE("7", '\\N'::text)));
311 2636 aaronmk
312
313
--
314
-- Name: _alt_8; Type: INDEX; Schema: functions; Owner: -; Tablespace:
315
--
316
317 2838 aaronmk
CREATE INDEX _alt_8 ON _alt USING btree ((COALESCE("8", '\\N'::text)));
318 2636 aaronmk
319
320
--
321
-- Name: _alt_9; Type: INDEX; Schema: functions; Owner: -; Tablespace:
322
--
323
324 2838 aaronmk
CREATE INDEX _alt_9 ON _alt USING btree ((COALESCE("9", '\\N'::text)));
325 2636 aaronmk
326
327
--
328 2566 aaronmk
-- Name: _alt_unique; Type: INDEX; Schema: functions; Owner: -; Tablespace:
329
--
330
331 2838 aaronmk
CREATE UNIQUE INDEX _alt_unique ON _alt USING btree ((COALESCE("0", '\\N'::text)), (COALESCE("1", '\\N'::text)), (COALESCE("2", '\\N'::text)), (COALESCE("3", '\\N'::text)), (COALESCE("4", '\\N'::text)), (COALESCE("5", '\\N'::text)), (COALESCE("6", '\\N'::text)), (COALESCE("7", '\\N'::text)), (COALESCE("8", '\\N'::text)), (COALESCE("9", '\\N'::text)));
332 2566 aaronmk
333
334
--
335 2636 aaronmk
-- Name: _label_label; Type: INDEX; Schema: functions; Owner: -; Tablespace:
336
--
337
338 2863 aaronmk
CREATE INDEX _label_label ON _label USING btree ((COALESCE(label, '\\N'::text)));
339 2636 aaronmk
340
341
--
342 2606 aaronmk
-- Name: _label_unique; Type: INDEX; Schema: functions; Owner: -; Tablespace:
343
--
344
345 2863 aaronmk
CREATE UNIQUE INDEX _label_unique ON _label USING btree ((COALESCE(label, '\\N'::text)), (COALESCE(value, '\\N'::text)));
346 2606 aaronmk
347
348
--
349 2636 aaronmk
-- Name: _label_value; Type: INDEX; Schema: functions; Owner: -; Tablespace:
350
--
351
352
CREATE INDEX _label_value ON _label USING btree (value);
353
354
355
--
356
-- Name: _merge_0; Type: INDEX; Schema: functions; Owner: -; Tablespace:
357
--
358
359 2839 aaronmk
CREATE INDEX _merge_0 ON _merge USING btree ((COALESCE("0", '\\N'::text)));
360 2636 aaronmk
361
362
--
363
-- Name: _merge_1; Type: INDEX; Schema: functions; Owner: -; Tablespace:
364
--
365
366 2839 aaronmk
CREATE INDEX _merge_1 ON _merge USING btree ((COALESCE("1", '\\N'::text)));
367 2636 aaronmk
368
369
--
370
-- Name: _merge_2; Type: INDEX; Schema: functions; Owner: -; Tablespace:
371
--
372
373 2839 aaronmk
CREATE INDEX _merge_2 ON _merge USING btree ((COALESCE("2", '\\N'::text)));
374 2636 aaronmk
375
376
--
377
-- Name: _merge_3; Type: INDEX; Schema: functions; Owner: -; Tablespace:
378
--
379
380 2839 aaronmk
CREATE INDEX _merge_3 ON _merge USING btree ((COALESCE("3", '\\N'::text)));
381 2636 aaronmk
382
383
--
384
-- Name: _merge_4; Type: INDEX; Schema: functions; Owner: -; Tablespace:
385
--
386
387 2839 aaronmk
CREATE INDEX _merge_4 ON _merge USING btree ((COALESCE("4", '\\N'::text)));
388 2636 aaronmk
389
390
--
391
-- Name: _merge_5; Type: INDEX; Schema: functions; Owner: -; Tablespace:
392
--
393
394 2839 aaronmk
CREATE INDEX _merge_5 ON _merge USING btree ((COALESCE("5", '\\N'::text)));
395 2636 aaronmk
396
397
--
398
-- Name: _merge_6; Type: INDEX; Schema: functions; Owner: -; Tablespace:
399
--
400
401 2839 aaronmk
CREATE INDEX _merge_6 ON _merge USING btree ((COALESCE("6", '\\N'::text)));
402 2636 aaronmk
403
404
--
405
-- Name: _merge_7; Type: INDEX; Schema: functions; Owner: -; Tablespace:
406
--
407
408 2839 aaronmk
CREATE INDEX _merge_7 ON _merge USING btree ((COALESCE("7", '\\N'::text)));
409 2636 aaronmk
410
411
--
412
-- Name: _merge_8; Type: INDEX; Schema: functions; Owner: -; Tablespace:
413
--
414
415 2839 aaronmk
CREATE INDEX _merge_8 ON _merge USING btree ((COALESCE("8", '\\N'::text)));
416 2636 aaronmk
417
418
--
419
-- Name: _merge_9; Type: INDEX; Schema: functions; Owner: -; Tablespace:
420
--
421
422 2839 aaronmk
CREATE INDEX _merge_9 ON _merge USING btree ((COALESCE("9", '\\N'::text)));
423 2636 aaronmk
424
425
--
426 2596 aaronmk
-- Name: _merge_unique; Type: INDEX; Schema: functions; Owner: -; Tablespace:
427
--
428
429 2839 aaronmk
CREATE UNIQUE INDEX _merge_unique ON _merge USING btree ((COALESCE("0", '\\N'::text)), (COALESCE("1", '\\N'::text)), (COALESCE("2", '\\N'::text)), (COALESCE("3", '\\N'::text)), (COALESCE("4", '\\N'::text)), (COALESCE("5", '\\N'::text)), (COALESCE("6", '\\N'::text)), (COALESCE("7", '\\N'::text)), (COALESCE("8", '\\N'::text)), (COALESCE("9", '\\N'::text)));
430 2596 aaronmk
431
432
--
433 2636 aaronmk
-- Name: _nullIf_null; Type: INDEX; Schema: functions; Owner: -; Tablespace:
434
--
435
436 2662 aaronmk
CREATE INDEX "_nullIf_null" ON "_nullIf" USING btree ("null");
437 2636 aaronmk
438
439
--
440
-- Name: _nullIf_type; Type: INDEX; Schema: functions; Owner: -; Tablespace:
441
--
442
443 2662 aaronmk
CREATE INDEX "_nullIf_type" ON "_nullIf" USING btree (type);
444 2636 aaronmk
445
446
--
447 2610 aaronmk
-- Name: _nullIf_unique; Type: INDEX; Schema: functions; Owner: -; Tablespace:
448
--
449
450 2865 aaronmk
CREATE UNIQUE INDEX "_nullIf_unique" ON "_nullIf" USING btree ("null", type, (COALESCE(value, '\\N'::text)));
451 2610 aaronmk
452
453
--
454 2636 aaronmk
-- Name: _nullIf_value; Type: INDEX; Schema: functions; Owner: -; Tablespace:
455
--
456
457 2662 aaronmk
CREATE INDEX "_nullIf_value" ON "_nullIf" USING btree (value);
458 2636 aaronmk
459
460
--
461 2566 aaronmk
-- Name: _alt; Type: TRIGGER; Schema: functions; Owner: -
462
--
463
464 2939 aaronmk
CREATE TRIGGER _alt BEFORE INSERT OR UPDATE ON _alt FOR EACH ROW EXECUTE PROCEDURE functions._alt();
465 2566 aaronmk
466
467
--
468 2606 aaronmk
-- Name: _label; Type: TRIGGER; Schema: functions; Owner: -
469
--
470
471
CREATE TRIGGER _label BEFORE INSERT OR UPDATE ON _label FOR EACH ROW EXECUTE PROCEDURE _label();
472
473
474
--
475 2596 aaronmk
-- Name: _merge; Type: TRIGGER; Schema: functions; Owner: -
476
--
477
478 2940 aaronmk
CREATE TRIGGER _merge BEFORE INSERT OR UPDATE ON _merge FOR EACH ROW EXECUTE PROCEDURE functions._merge();
479 2596 aaronmk
480
481
--
482 2610 aaronmk
-- Name: _nullIf; Type: TRIGGER; Schema: functions; Owner: -
483
--
484
485 2662 aaronmk
CREATE TRIGGER "_nullIf" BEFORE INSERT OR UPDATE ON "_nullIf" FOR EACH ROW EXECUTE PROCEDURE "_nullIf"();
486 2610 aaronmk
487
488
--
489 2136 aaronmk
-- PostgreSQL database dump complete
490
--