|
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