Project

General

Profile

1
--
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
SET search_path = functions, pg_catalog;
20

    
21
--
22
-- Name: datatype; Type: TYPE; Schema: functions; Owner: -
23
--
24

    
25
CREATE TYPE datatype AS ENUM (
26
    'str',
27
    'float'
28
);
29

    
30

    
31
--
32
-- 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 := functions._alt(new."0", new."1", new."2", new."3", new."4",
40
        new."5", new."6", new."7", new."8", new."9");
41
    RETURN new;
42
END;
43
$$;
44

    
45

    
46
--
47
-- 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
-- Name: _label(); Type: FUNCTION; Schema: functions; Owner: -
59
--
60

    
61
CREATE FUNCTION _label() RETURNS trigger
62
    LANGUAGE plpgsql IMMUTABLE
63
    AS $$
64
BEGIN
65
    new.result := functions._label(new.label, new.value);
66
    RETURN new;
67
END;
68
$$;
69

    
70

    
71
--
72
-- Name: _label(text, text); Type: FUNCTION; Schema: functions; Owner: -
73
--
74

    
75
CREATE FUNCTION _label(label text, value text) RETURNS text
76
    LANGUAGE plpgsql IMMUTABLE
77
    AS $$
78
DECLARE
79
    label text NOT NULL := label; -- add NOT NULL
80
BEGIN
81
    RETURN label||': '||value;
82
END;
83
$$;
84

    
85

    
86
--
87
-- Name: _merge(); Type: FUNCTION; Schema: functions; Owner: -
88
--
89

    
90
CREATE FUNCTION _merge() RETURNS trigger
91
    LANGUAGE plpgsql IMMUTABLE
92
    AS $$
93
BEGIN
94
    new.result := functions._merge(new."0", new."1", new."2", new."3", new."4",
95
        new."5", new."6", new."7", new."8", new."9");
96
    RETURN new;
97
END;
98
$$;
99

    
100

    
101
--
102
-- Name: _merge(text, text, text, text, text, text, text, text, text, text); Type: FUNCTION; Schema: functions; Owner: -
103
--
104

    
105
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
106
    LANGUAGE sql IMMUTABLE
107
    AS $_$
108
SELECT functions.join_strs('; ', value)
109
FROM
110
(
111
    SELECT *
112
    FROM
113
    (
114
        SELECT
115
        DISTINCT ON (value)
116
        *
117
        FROM
118
        (VALUES
119
              (0, $1)
120
            , (1, $2)
121
            , (2, $3)
122
            , (3, $4)
123
            , (4, $5)
124
            , (5, $6)
125
            , (6, $7)
126
            , (7, $8)
127
            , (8, $9)
128
            , (9, $10)
129
        )
130
        AS v (sort_order, value)
131
    )
132
    AS v
133
    ORDER BY sort_order
134
)
135
AS v
136
$_$;
137

    
138

    
139
--
140
-- Name: _nullIf(); Type: FUNCTION; Schema: functions; Owner: -
141
--
142

    
143
CREATE FUNCTION "_nullIf"() RETURNS trigger
144
    LANGUAGE plpgsql IMMUTABLE
145
    AS $$
146
BEGIN
147
    new.result := functions."_nullIf"(new.value, new."null", new.type);
148
    RETURN new;
149
END;
150
$$;
151

    
152

    
153
--
154
-- Name: _nullIf(text, text, datatype); Type: FUNCTION; Schema: functions; Owner: -
155
--
156

    
157
CREATE FUNCTION "_nullIf"(value text, "null" text, type datatype DEFAULT 'str'::datatype) RETURNS text
158
    LANGUAGE plpgsql IMMUTABLE
159
    AS $$
160
DECLARE
161
    "null" text NOT NULL := "null"; -- add NOT NULL
162
    type functions.datatype NOT NULL := type; -- add NOT NULL
163
BEGIN
164
    IF type = 'str' THEN RETURN nullif(value, "null"); -- no cast needed
165
    -- Invalid value is ignored, but invalid null value generates error
166
    ELSIF type = 'float' THEN
167
        DECLARE
168
            -- Outside the try block so that invalid null value generates error
169
            "null" double precision := "null"::double precision;
170
        BEGIN
171
            RETURN nullif(value::double precision, "null");
172
        EXCEPTION
173
            WHEN data_exception THEN RETURN value; -- ignore invalid value
174
        END;
175
    END IF;
176
END;
177
$$;
178

    
179

    
180
--
181
-- Name: join_strs_(text, text, text); Type: FUNCTION; Schema: functions; Owner: -
182
--
183

    
184
CREATE FUNCTION join_strs_(state text, delim text, value text) RETURNS text
185
    LANGUAGE sql IMMUTABLE
186
    AS $_$
187
SELECT $1 || (CASE
188
WHEN $1 = '' OR $3 IS NULL OR $3 = ''
189
THEN ''
190
ELSE $2
191
END) || coalesce($3, '');
192
$_$;
193

    
194

    
195
--
196
-- Name: join_strs(text, text); Type: AGGREGATE; Schema: functions; Owner: -
197
--
198

    
199
CREATE AGGREGATE join_strs(text, text) (
200
    SFUNC = join_strs_,
201
    STYPE = text,
202
    INITCOND = ''
203
);
204

    
205

    
206
SET default_tablespace = '';
207

    
208
SET default_with_oids = false;
209

    
210
--
211
-- Name: _alt; Type: TABLE; Schema: functions; Owner: -; Tablespace: 
212
--
213

    
214
CREATE TABLE _alt (
215
    result text,
216
    not_null_col boolean DEFAULT true NOT NULL,
217
    "0" text,
218
    "1" text,
219
    "2" text,
220
    "3" text,
221
    "4" text,
222
    "5" text,
223
    "6" text,
224
    "7" text,
225
    "8" text,
226
    "9" text
227
);
228

    
229

    
230
--
231
-- Name: _label; Type: TABLE; Schema: functions; Owner: -; Tablespace: 
232
--
233

    
234
CREATE TABLE _label (
235
    result text,
236
    not_null_col boolean DEFAULT true NOT NULL,
237
    label text NOT NULL,
238
    value text
239
);
240

    
241

    
242
--
243
-- Name: _merge; Type: TABLE; Schema: functions; Owner: -; Tablespace: 
244
--
245

    
246
CREATE TABLE _merge (
247
    result text,
248
    not_null_col boolean DEFAULT true NOT NULL,
249
    "0" text,
250
    "1" text,
251
    "2" text,
252
    "3" text,
253
    "4" text,
254
    "5" text,
255
    "6" text,
256
    "7" text,
257
    "8" text,
258
    "9" text
259
);
260

    
261

    
262
--
263
-- Name: _nullIf; Type: TABLE; Schema: functions; Owner: -; Tablespace: 
264
--
265

    
266
CREATE TABLE "_nullIf" (
267
    result text,
268
    not_null_col boolean DEFAULT true NOT NULL,
269
    "null" text NOT NULL,
270
    type datatype DEFAULT 'str'::datatype NOT NULL,
271
    value text
272
);
273

    
274

    
275
--
276
-- Name: _alt_unique; Type: INDEX; Schema: functions; Owner: -; Tablespace: 
277
--
278

    
279
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)));
280

    
281

    
282
--
283
-- Name: _label_unique; Type: INDEX; Schema: functions; Owner: -; Tablespace: 
284
--
285

    
286
CREATE UNIQUE INDEX _label_unique ON _label USING btree ((COALESCE(label, '\\N'::text)), (COALESCE(value, '\\N'::text)));
287

    
288

    
289
--
290
-- Name: _merge_unique; Type: INDEX; Schema: functions; Owner: -; Tablespace: 
291
--
292

    
293
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)));
294

    
295

    
296
--
297
-- Name: _nullIf_unique; Type: INDEX; Schema: functions; Owner: -; Tablespace: 
298
--
299

    
300
CREATE UNIQUE INDEX "_nullIf_unique" ON "_nullIf" USING btree ("null", type, (COALESCE(value, '\\N'::text)));
301

    
302

    
303
--
304
-- Name: _alt; Type: TRIGGER; Schema: functions; Owner: -
305
--
306

    
307
CREATE TRIGGER _alt BEFORE INSERT OR UPDATE ON _alt FOR EACH ROW EXECUTE PROCEDURE functions._alt();
308

    
309

    
310
--
311
-- Name: _label; Type: TRIGGER; Schema: functions; Owner: -
312
--
313

    
314
CREATE TRIGGER _label BEFORE INSERT OR UPDATE ON _label FOR EACH ROW EXECUTE PROCEDURE _label();
315

    
316

    
317
--
318
-- Name: _merge; Type: TRIGGER; Schema: functions; Owner: -
319
--
320

    
321
CREATE TRIGGER _merge BEFORE INSERT OR UPDATE ON _merge FOR EACH ROW EXECUTE PROCEDURE functions._merge();
322

    
323

    
324
--
325
-- Name: _nullIf; Type: TRIGGER; Schema: functions; Owner: -
326
--
327

    
328
CREATE TRIGGER "_nullIf" BEFORE INSERT OR UPDATE ON "_nullIf" FOR EACH ROW EXECUTE PROCEDURE "_nullIf"();
329

    
330

    
331
--
332
-- PostgreSQL database dump complete
333
--
334

    
(4-4/19)