|
5 | 5 | # the Apache 2.0 License: http://www.apache.org/licenses/LICENSE-2.0 |
6 | 6 |
|
7 | 7 |
|
8 | | -INTRO_LOOKUP_TYPES = '''\ |
9 | | -WITH RECURSIVE typeinfo_tree( |
10 | | - oid, ns, name, kind, basetype, has_bin_io, elemtype, elemdelim, |
11 | | - range_subtype, elem_has_bin_io, attrtypoids, attrnames, depth) |
12 | | -AS ( |
13 | | - WITH composite_attrs |
14 | | - AS ( |
15 | | - SELECT |
16 | | - c.reltype AS comptype_oid, |
17 | | - array_agg(ia.atttypid ORDER BY ia.attnum) AS typoids, |
18 | | - array_agg(ia.attname::text ORDER BY ia.attnum) AS names |
19 | | - FROM |
20 | | - pg_attribute ia |
21 | | - INNER JOIN pg_class c |
22 | | - ON (ia.attrelid = c.oid) |
23 | | - WHERE |
24 | | - ia.attnum > 0 AND NOT ia.attisdropped |
25 | | - GROUP BY |
26 | | - c.reltype |
27 | | - ), |
28 | | -
|
29 | | - typeinfo |
30 | | - AS ( |
| 8 | +_TYPEINFO = '''\ |
| 9 | + ( |
31 | 10 | SELECT |
32 | 11 | t.oid AS oid, |
33 | 12 | ns.nspname AS ns, |
|
76 | 55 | elem_t.typsend::oid != 0 |
77 | 56 | END) AS elem_has_bin_io, |
78 | 57 | (CASE WHEN t.typtype = 'c' THEN |
79 | | - (SELECT ca.typoids |
80 | | - FROM composite_attrs AS ca |
81 | | - WHERE ca.comptype_oid = t.oid) |
| 58 | + (SELECT |
| 59 | + array_agg(ia.atttypid ORDER BY ia.attnum) |
| 60 | + FROM |
| 61 | + pg_attribute ia |
| 62 | + INNER JOIN pg_class c |
| 63 | + ON (ia.attrelid = c.oid) |
| 64 | + WHERE |
| 65 | + ia.attnum > 0 AND NOT ia.attisdropped |
| 66 | + AND c.reltype = t.oid) |
82 | 67 |
|
83 | 68 | ELSE NULL |
84 | 69 | END) AS attrtypoids, |
85 | 70 | (CASE WHEN t.typtype = 'c' THEN |
86 | | - (SELECT ca.names |
87 | | - FROM composite_attrs AS ca |
88 | | - WHERE ca.comptype_oid = t.oid) |
| 71 | + (SELECT |
| 72 | + array_agg(ia.attname::text ORDER BY ia.attnum) |
| 73 | + FROM |
| 74 | + pg_attribute ia |
| 75 | + INNER JOIN pg_class c |
| 76 | + ON (ia.attrelid = c.oid) |
| 77 | + WHERE |
| 78 | + ia.attnum > 0 AND NOT ia.attisdropped |
| 79 | + AND c.reltype = t.oid) |
89 | 80 |
|
90 | 81 | ELSE NULL |
91 | 82 | END) AS attrnames |
|
102 | 93 | t.oid = range_t.rngtypid |
103 | 94 | ) |
104 | 95 | ) |
| 96 | +''' |
| 97 | + |
105 | 98 |
|
| 99 | +INTRO_LOOKUP_TYPES = '''\ |
| 100 | +WITH RECURSIVE typeinfo_tree( |
| 101 | + oid, ns, name, kind, basetype, has_bin_io, elemtype, elemdelim, |
| 102 | + range_subtype, elem_has_bin_io, attrtypoids, attrnames, depth) |
| 103 | +AS ( |
106 | 104 | SELECT |
107 | 105 | ti.oid, ti.ns, ti.name, ti.kind, ti.basetype, ti.has_bin_io, |
108 | 106 | ti.elemtype, ti.elemdelim, ti.range_subtype, ti.elem_has_bin_io, |
109 | 107 | ti.attrtypoids, ti.attrnames, 0 |
110 | 108 | FROM |
111 | | - typeinfo AS ti |
| 109 | + {typeinfo} AS ti |
112 | 110 | WHERE |
113 | 111 | ti.oid = any($1::oid[]) |
114 | 112 |
|
|
119 | 117 | ti.elemtype, ti.elemdelim, ti.range_subtype, ti.elem_has_bin_io, |
120 | 118 | ti.attrtypoids, ti.attrnames, tt.depth + 1 |
121 | 119 | FROM |
122 | | - typeinfo ti, |
| 120 | + {typeinfo} ti, |
123 | 121 | typeinfo_tree tt |
124 | 122 | WHERE |
125 | 123 | (tt.elemtype IS NOT NULL AND ti.oid = tt.elemtype) |
|
133 | 131 | typeinfo_tree |
134 | 132 | ORDER BY |
135 | 133 | depth DESC |
136 | | -''' |
| 134 | +'''.format(typeinfo=_TYPEINFO) |
137 | 135 |
|
138 | 136 |
|
139 | 137 | # Prior to 9.2 PostgreSQL did not have range types. |
140 | | -INTRO_LOOKUP_TYPES_91 = '''\ |
141 | | -WITH RECURSIVE typeinfo_tree( |
142 | | - oid, ns, name, kind, basetype, has_bin_io, elemtype, elemdelim, |
143 | | - range_subtype, elem_has_bin_io, attrtypoids, attrnames, depth) |
144 | | -AS ( |
145 | | - WITH composite_attrs |
146 | | - AS ( |
147 | | - SELECT |
148 | | - c.reltype AS comptype_oid, |
149 | | - array_agg(ia.atttypid ORDER BY ia.attnum) AS typoids, |
150 | | - array_agg(ia.attname::text ORDER BY ia.attnum) AS names |
151 | | - FROM |
152 | | - pg_attribute ia |
153 | | - INNER JOIN pg_class c |
154 | | - ON (ia.attrelid = c.oid) |
155 | | - WHERE |
156 | | - ia.attnum > 0 AND NOT ia.attisdropped |
157 | | - GROUP BY |
158 | | - c.reltype |
159 | | - ), |
160 | | -
|
161 | | - typeinfo |
162 | | - AS ( |
| 138 | +_TYPEINFO_91 = '''\ |
| 139 | + ( |
163 | 140 | SELECT |
164 | 141 | t.oid AS oid, |
165 | 142 | ns.nspname AS ns, |
|
199 | 176 | elem_t.typsend::oid != 0 |
200 | 177 | AS elem_has_bin_io, |
201 | 178 | (CASE WHEN t.typtype = 'c' THEN |
202 | | - (SELECT ca.typoids |
203 | | - FROM composite_attrs AS ca |
204 | | - WHERE ca.comptype_oid = t.oid) |
| 179 | + (SELECT |
| 180 | + array_agg(ia.atttypid ORDER BY ia.attnum) |
| 181 | + FROM |
| 182 | + pg_attribute ia |
| 183 | + INNER JOIN pg_class c |
| 184 | + ON (ia.attrelid = c.oid) |
| 185 | + WHERE |
| 186 | + ia.attnum > 0 AND NOT ia.attisdropped |
| 187 | + AND c.reltype = t.oid) |
205 | 188 |
|
206 | 189 | ELSE NULL |
207 | 190 | END) AS attrtypoids, |
208 | 191 | (CASE WHEN t.typtype = 'c' THEN |
209 | | - (SELECT ca.names |
210 | | - FROM composite_attrs AS ca |
211 | | - WHERE ca.comptype_oid = t.oid) |
| 192 | + (SELECT |
| 193 | + array_agg(ia.attname::text ORDER BY ia.attnum) |
| 194 | + FROM |
| 195 | + pg_attribute ia |
| 196 | + INNER JOIN pg_class c |
| 197 | + ON (ia.attrelid = c.oid) |
| 198 | + WHERE |
| 199 | + ia.attnum > 0 AND NOT ia.attisdropped |
| 200 | + AND c.reltype = t.oid) |
212 | 201 |
|
213 | 202 | ELSE NULL |
214 | 203 | END) AS attrnames |
|
222 | 211 | t.typelem = elem_t.oid |
223 | 212 | ) |
224 | 213 | ) |
| 214 | +''' |
| 215 | + |
| 216 | +INTRO_LOOKUP_TYPES_91 = '''\ |
| 217 | +WITH RECURSIVE typeinfo_tree( |
| 218 | + oid, ns, name, kind, basetype, has_bin_io, elemtype, elemdelim, |
| 219 | + range_subtype, elem_has_bin_io, attrtypoids, attrnames, depth) |
| 220 | +AS ( |
225 | 221 |
|
226 | 222 | SELECT |
227 | 223 | ti.oid, ti.ns, ti.name, ti.kind, ti.basetype, ti.has_bin_io, |
228 | 224 | ti.elemtype, ti.elemdelim, ti.range_subtype, ti.elem_has_bin_io, |
229 | 225 | ti.attrtypoids, ti.attrnames, 0 |
230 | 226 | FROM |
231 | | - typeinfo AS ti |
| 227 | + {typeinfo} AS ti |
232 | 228 | WHERE |
233 | 229 | ti.oid = any($1::oid[]) |
234 | 230 |
|
|
239 | 235 | ti.elemtype, ti.elemdelim, ti.range_subtype, ti.elem_has_bin_io, |
240 | 236 | ti.attrtypoids, ti.attrnames, tt.depth + 1 |
241 | 237 | FROM |
242 | | - typeinfo ti, |
| 238 | + {typeinfo} ti, |
243 | 239 | typeinfo_tree tt |
244 | 240 | WHERE |
245 | 241 | (tt.elemtype IS NOT NULL AND ti.oid = tt.elemtype) |
|
253 | 249 | typeinfo_tree |
254 | 250 | ORDER BY |
255 | 251 | depth DESC |
256 | | -''' |
| 252 | +'''.format(typeinfo=_TYPEINFO_91) |
257 | 253 |
|
258 | 254 |
|
259 | 255 | TYPE_BY_NAME = '''\ |
|
0 commit comments