@@ -43,7 +43,8 @@ SET search_path TO information_schema;
43
43
CREATE FUNCTION _pg_expandarray (IN anyarray, OUT x anyelement, OUT n int )
44
44
RETURNS SETOF RECORD
45
45
LANGUAGE sql STRICT IMMUTABLE PARALLEL SAFE
46
- AS ' select $1[s], s - pg_catalog.array_lower($1,1) + 1
46
+ AS ' select $1[s],
47
+ s operator(pg_catalog.-) pg_catalog.array_lower($1,1) operator(pg_catalog.+) 1
47
48
from pg_catalog.generate_series(pg_catalog.array_lower($1,1),
48
49
pg_catalog.array_upper($1,1),
49
50
1) as g(s)' ;
@@ -52,28 +53,26 @@ CREATE FUNCTION _pg_expandarray(IN anyarray, OUT x anyelement, OUT n int)
52
53
* column's position in the index (NULL if not there) */
53
54
CREATE FUNCTION _pg_index_position (oid , smallint ) RETURNS int
54
55
LANGUAGE sql STRICT STABLE
55
- AS $$
56
+ BEGIN ATOMIC
56
57
SELECT (ss .a ).n FROM
57
58
(SELECT information_schema ._pg_expandarray (indkey) AS a
58
59
FROM pg_catalog .pg_index WHERE indexrelid = $1 ) ss
59
60
WHERE (ss .a ).x = $2 ;
60
- $$ ;
61
+ END ;
61
62
62
63
CREATE FUNCTION _pg_truetypid (pg_attribute, pg_type) RETURNS oid
63
64
LANGUAGE sql
64
65
IMMUTABLE
65
66
PARALLEL SAFE
66
67
RETURNS NULL ON NULL INPUT
67
- AS
68
- $$SELECT CASE WHEN $2 .typtype = ' d' THEN $2 .typbasetype ELSE $1 .atttypid END$$;
68
+ RETURN CASE WHEN $2 .typtype = ' d' THEN $2 .typbasetype ELSE $1 .atttypid END;
69
69
70
70
CREATE FUNCTION _pg_truetypmod (pg_attribute, pg_type) RETURNS int4
71
71
LANGUAGE sql
72
72
IMMUTABLE
73
73
PARALLEL SAFE
74
74
RETURNS NULL ON NULL INPUT
75
- AS
76
- $$SELECT CASE WHEN $2 .typtype = ' d' THEN $2 .typtypmod ELSE $1 .atttypmod END$$;
75
+ RETURN CASE WHEN $2 .typtype = ' d' THEN $2 .typtypmod ELSE $1 .atttypmod END;
77
76
78
77
-- these functions encapsulate knowledge about the encoding of typmod:
79
78
@@ -82,40 +81,37 @@ CREATE FUNCTION _pg_char_max_length(typid oid, typmod int4) RETURNS integer
82
81
IMMUTABLE
83
82
PARALLEL SAFE
84
83
RETURNS NULL ON NULL INPUT
85
- AS
86
- $$SELECT
84
+ RETURN
87
85
CASE WHEN $2 = - 1 /* default typmod */
88
86
THEN null
89
87
WHEN $1 IN (1042 , 1043 ) /* char, varchar */
90
88
THEN $2 - 4
91
89
WHEN $1 IN (1560 , 1562 ) /* bit, varbit */
92
90
THEN $2
93
91
ELSE null
94
- END$$ ;
92
+ END;
95
93
96
94
CREATE FUNCTION _pg_char_octet_length (typid oid , typmod int4) RETURNS integer
97
95
LANGUAGE sql
98
96
IMMUTABLE
99
97
PARALLEL SAFE
100
98
RETURNS NULL ON NULL INPUT
101
- AS
102
- $$SELECT
99
+ RETURN
103
100
CASE WHEN $1 IN (25 , 1042 , 1043 ) /* text, char, varchar */
104
101
THEN CASE WHEN $2 = - 1 /* default typmod */
105
102
THEN CAST(2 ^30 AS integer )
106
103
ELSE information_schema ._pg_char_max_length ($1 , $2 ) *
107
104
pg_catalog .pg_encoding_max_length ((SELECT encoding FROM pg_catalog .pg_database WHERE datname = pg_catalog .current_database ()))
108
105
END
109
106
ELSE null
110
- END$$ ;
107
+ END;
111
108
112
109
CREATE FUNCTION _pg_numeric_precision (typid oid , typmod int4) RETURNS integer
113
110
LANGUAGE sql
114
111
IMMUTABLE
115
112
PARALLEL SAFE
116
113
RETURNS NULL ON NULL INPUT
117
- AS
118
- $$SELECT
114
+ RETURN
119
115
CASE $1
120
116
WHEN 21 /* int2*/ THEN 16
121
117
WHEN 23 /* int4*/ THEN 32
@@ -128,63 +124,59 @@ $$SELECT
128
124
WHEN 700 /* float4*/ THEN 24 /* FLT_MANT_DIG*/
129
125
WHEN 701 /* float8*/ THEN 53 /* DBL_MANT_DIG*/
130
126
ELSE null
131
- END$$ ;
127
+ END;
132
128
133
129
CREATE FUNCTION _pg_numeric_precision_radix (typid oid , typmod int4) RETURNS integer
134
130
LANGUAGE sql
135
131
IMMUTABLE
136
132
PARALLEL SAFE
137
133
RETURNS NULL ON NULL INPUT
138
- AS
139
- $$SELECT
134
+ RETURN
140
135
CASE WHEN $1 IN (21 , 23 , 20 , 700 , 701 ) THEN 2
141
136
WHEN $1 IN (1700 ) THEN 10
142
137
ELSE null
143
- END$$ ;
138
+ END;
144
139
145
140
CREATE FUNCTION _pg_numeric_scale (typid oid , typmod int4) RETURNS integer
146
141
LANGUAGE sql
147
142
IMMUTABLE
148
143
PARALLEL SAFE
149
144
RETURNS NULL ON NULL INPUT
150
- AS
151
- $$SELECT
145
+ RETURN
152
146
CASE WHEN $1 IN (21 , 23 , 20 ) THEN 0
153
147
WHEN $1 IN (1700 ) THEN
154
148
CASE WHEN $2 = - 1
155
149
THEN null
156
150
ELSE ($2 - 4 ) & 65535
157
151
END
158
152
ELSE null
159
- END$$ ;
153
+ END;
160
154
161
155
CREATE FUNCTION _pg_datetime_precision (typid oid , typmod int4) RETURNS integer
162
156
LANGUAGE sql
163
157
IMMUTABLE
164
158
PARALLEL SAFE
165
159
RETURNS NULL ON NULL INPUT
166
- AS
167
- $$SELECT
160
+ RETURN
168
161
CASE WHEN $1 IN (1082 ) /* date */
169
162
THEN 0
170
163
WHEN $1 IN (1083 , 1114 , 1184 , 1266 ) /* time, timestamp, same + tz */
171
164
THEN CASE WHEN $2 < 0 THEN 6 ELSE $2 END
172
165
WHEN $1 IN (1186 ) /* interval */
173
166
THEN CASE WHEN $2 < 0 OR $2 & 65535 = 65535 THEN 6 ELSE $2 & 65535 END
174
167
ELSE null
175
- END$$ ;
168
+ END;
176
169
177
170
CREATE FUNCTION _pg_interval_type (typid oid , mod int4) RETURNS text
178
171
LANGUAGE sql
179
172
IMMUTABLE
180
173
PARALLEL SAFE
181
174
RETURNS NULL ON NULL INPUT
182
- AS
183
- $$SELECT
175
+ RETURN
184
176
CASE WHEN $1 IN (1186 ) /* interval */
185
177
THEN pg_catalog .upper (substring (pg_catalog .format_type ($1 , $2 ) similar ' interval[()0-9]* #"%#"' escape ' #' ))
186
178
ELSE null
187
- END$$ ;
179
+ END;
188
180
189
181
190
182
-- 5.2 INFORMATION_SCHEMA_CATALOG_NAME view appears later.
0 commit comments