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