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