codekingpro/portable-devtools
114k
1# dialects/postgresql/pg_catalog.py
2# Copyright (C) 2005-2024 the SQLAlchemy authors and contributors
3# <see AUTHORS file>
4#
5# This module is part of SQLAlchemy and is released under
6# the MIT License: https://www.opensource.org/licenses/mit-license.php
7# mypy: ignore-errors
8
9from .array import ARRAY
10from .types import OID
11from .types import REGCLASS
12from ... import Column
13from ... import func
14from ... import MetaData
15from ... import Table
16from ...types import BigInteger
17from ...types import Boolean
18from ...types import CHAR
19from ...types import Float
20from ...types import Integer
21from ...types import SmallInteger
22from ...types import String
23from ...types import Text
24from ...types import TypeDecorator
25
26
27# types
28class NAME(TypeDecorator):
29 impl = String(64, collation="C")
30 cache_ok = True
31
32
33class PG_NODE_TREE(TypeDecorator):
34 impl = Text(collation="C")
35 cache_ok = True
36
37
38class INT2VECTOR(TypeDecorator):
39 impl = ARRAY(SmallInteger)
40 cache_ok = True
41
42
43class OIDVECTOR(TypeDecorator):
44 impl = ARRAY(OID)
45 cache_ok = True
46
47
48class _SpaceVector:
49 def result_processor(self, dialect, coltype):
50 def process(value):
51 if value is None:
52 return value
53 return [int(p) for p in value.split(" ")]
54
55 return process
56
57
58REGPROC = REGCLASS # seems an alias
59
60# functions
61_pg_cat = func.pg_catalog
62quote_ident = _pg_cat.quote_ident
63pg_table_is_visible = _pg_cat.pg_table_is_visible
64pg_type_is_visible = _pg_cat.pg_type_is_visible
65pg_get_viewdef = _pg_cat.pg_get_viewdef
66pg_get_serial_sequence = _pg_cat.pg_get_serial_sequence
67format_type = _pg_cat.format_type
68pg_get_expr = _pg_cat.pg_get_expr
69pg_get_constraintdef = _pg_cat.pg_get_constraintdef
70pg_get_indexdef = _pg_cat.pg_get_indexdef
71
72# constants
73RELKINDS_TABLE_NO_FOREIGN = ("r", "p")
74RELKINDS_TABLE = RELKINDS_TABLE_NO_FOREIGN + ("f",)
75RELKINDS_VIEW = ("v",)
76RELKINDS_MAT_VIEW = ("m",)
77RELKINDS_ALL_TABLE_LIKE = RELKINDS_TABLE + RELKINDS_VIEW + RELKINDS_MAT_VIEW
78
79# tables
80pg_catalog_meta = MetaData(schema="pg_catalog")
81
82pg_namespace = Table(
83 "pg_namespace",
84 pg_catalog_meta,
85 Column("oid", OID),
86 Column("nspname", NAME),
87 Column("nspowner", OID),
88)
89
90pg_class = Table(
91 "pg_class",
92 pg_catalog_meta,
93 Column("oid", OID, info={"server_version": (9, 3)}),
94 Column("relname", NAME),
95 Column("relnamespace", OID),
96 Column("reltype", OID),
97 Column("reloftype", OID),
98 Column("relowner", OID),
99 Column("relam", OID),
100 Column("relfilenode", OID),
101 Column("reltablespace", OID),
102 Column("relpages", Integer),
103 Column("reltuples", Float),
104 Column("relallvisible", Integer, info={"server_version": (9, 2)}),
105 Column("reltoastrelid", OID),
106 Column("relhasindex", Boolean),
107 Column("relisshared", Boolean),
108 Column("relpersistence", CHAR, info={"server_version": (9, 1)}),
109 Column("relkind", CHAR),
110 Column("relnatts", SmallInteger),
111 Column("relchecks", SmallInteger),
112 Column("relhasrules", Boolean),
113 Column("relhastriggers", Boolean),
114 Column("relhassubclass", Boolean),
115 Column("relrowsecurity", Boolean),
116 Column("relforcerowsecurity", Boolean, info={"server_version": (9, 5)}),
117 Column("relispopulated", Boolean, info={"server_version": (9, 3)}),
118 Column("relreplident", CHAR, info={"server_version": (9, 4)}),
119 Column("relispartition", Boolean, info={"server_version": (10,)}),
120 Column("relrewrite", OID, info={"server_version": (11,)}),
121 Column("reloptions", ARRAY(Text)),
122)
123
124pg_type = Table(
125 "pg_type",
126 pg_catalog_meta,
127 Column("oid", OID, info={"server_version": (9, 3)}),
128 Column("typname", NAME),
129 Column("typnamespace", OID),
130 Column("typowner", OID),
131 Column("typlen", SmallInteger),
132 Column("typbyval", Boolean),
133 Column("typtype", CHAR),
134 Column("typcategory", CHAR),
135 Column("typispreferred", Boolean),
136 Column("typisdefined", Boolean),
137 Column("typdelim", CHAR),
138 Column("typrelid", OID),
139 Column("typelem", OID),
140 Column("typarray", OID),
141 Column("typinput", REGPROC),
142 Column("typoutput", REGPROC),
143 Column("typreceive", REGPROC),
144 Column("typsend", REGPROC),
145 Column("typmodin", REGPROC),
146 Column("typmodout", REGPROC),
147 Column("typanalyze", REGPROC),
148 Column("typalign", CHAR),
149 Column("typstorage", CHAR),
150 Column("typnotnull", Boolean),
151 Column("typbasetype", OID),
152 Column("typtypmod", Integer),
153 Column("typndims", Integer),
154 Column("typcollation", OID, info={"server_version": (9, 1)}),
155 Column("typdefault", Text),
156)
157
158pg_index = Table(
159 "pg_index",
160 pg_catalog_meta,
161 Column("indexrelid", OID),
162 Column("indrelid", OID),
163 Column("indnatts", SmallInteger),
164 Column("indnkeyatts", SmallInteger, info={"server_version": (11,)}),
165 Column("indisunique", Boolean),
166 Column("indnullsnotdistinct", Boolean, info={"server_version": (15,)}),
167 Column("indisprimary", Boolean),
168 Column("indisexclusion", Boolean, info={"server_version": (9, 1)}),
169 Column("indimmediate", Boolean),
170 Column("indisclustered", Boolean),
171 Column("indisvalid", Boolean),
172 Column("indcheckxmin", Boolean),
173 Column("indisready", Boolean),
174 Column("indislive", Boolean, info={"server_version": (9, 3)}), # 9.3
175 Column("indisreplident", Boolean),
176 Column("indkey", INT2VECTOR),
177 Column("indcollation", OIDVECTOR, info={"server_version": (9, 1)}), # 9.1
178 Column("indclass", OIDVECTOR),
179 Column("indoption", INT2VECTOR),
180 Column("indexprs", PG_NODE_TREE),
181 Column("indpred", PG_NODE_TREE),
182)
183
184pg_attribute = Table(
185 "pg_attribute",
186 pg_catalog_meta,
187 Column("attrelid", OID),
188 Column("attname", NAME),
189 Column("atttypid", OID),
190 Column("attstattarget", Integer),
191 Column("attlen", SmallInteger),
192 Column("attnum", SmallInteger),
193 Column("attndims", Integer),
194 Column("attcacheoff", Integer),
195 Column("atttypmod", Integer),
196 Column("attbyval", Boolean),
197 Column("attstorage", CHAR),
198 Column("attalign", CHAR),
199 Column("attnotnull", Boolean),
200 Column("atthasdef", Boolean),
201 Column("atthasmissing", Boolean, info={"server_version": (11,)}),
202 Column("attidentity", CHAR, info={"server_version": (10,)}),
203 Column("attgenerated", CHAR, info={"server_version": (12,)}),
204 Column("attisdropped", Boolean),
205 Column("attislocal", Boolean),
206 Column("attinhcount", Integer),
207 Column("attcollation", OID, info={"server_version": (9, 1)}),
208)
209
210pg_constraint = Table(
211 "pg_constraint",
212 pg_catalog_meta,
213 Column("oid", OID), # 9.3
214 Column("conname", NAME),
215 Column("connamespace", OID),
216 Column("contype", CHAR),
217 Column("condeferrable", Boolean),
218 Column("condeferred", Boolean),
219 Column("convalidated", Boolean, info={"server_version": (9, 1)}),
220 Column("conrelid", OID),
221 Column("contypid", OID),
222 Column("conindid", OID),
223 Column("conparentid", OID, info={"server_version": (11,)}),
224 Column("confrelid", OID),
225 Column("confupdtype", CHAR),
226 Column("confdeltype", CHAR),
227 Column("confmatchtype", CHAR),
228 Column("conislocal", Boolean),
229 Column("coninhcount", Integer),
230 Column("connoinherit", Boolean, info={"server_version": (9, 2)}),
231 Column("conkey", ARRAY(SmallInteger)),
232 Column("confkey", ARRAY(SmallInteger)),
233)
234
235pg_sequence = Table(
236 "pg_sequence",
237 pg_catalog_meta,
238 Column("seqrelid", OID),
239 Column("seqtypid", OID),
240 Column("seqstart", BigInteger),
241 Column("seqincrement", BigInteger),
242 Column("seqmax", BigInteger),
243 Column("seqmin", BigInteger),
244 Column("seqcache", BigInteger),
245 Column("seqcycle", Boolean),
246 info={"server_version": (10,)},
247)
248
249pg_attrdef = Table(
250 "pg_attrdef",
251 pg_catalog_meta,
252 Column("oid", OID, info={"server_version": (9, 3)}),
253 Column("adrelid", OID),
254 Column("adnum", SmallInteger),
255 Column("adbin", PG_NODE_TREE),
256)
257
258pg_description = Table(
259 "pg_description",
260 pg_catalog_meta,
261 Column("objoid", OID),
262 Column("classoid", OID),
263 Column("objsubid", Integer),
264 Column("description", Text(collation="C")),
265)
266
267pg_enum = Table(
268 "pg_enum",
269 pg_catalog_meta,
270 Column("oid", OID, info={"server_version": (9, 3)}),
271 Column("enumtypid", OID),
272 Column("enumsortorder", Float(), info={"server_version": (9, 1)}),
273 Column("enumlabel", NAME),
274)
275
276pg_am = Table(
277 "pg_am",
278 pg_catalog_meta,
279 Column("oid", OID, info={"server_version": (9, 3)}),
280 Column("amname", NAME),
281 Column("amhandler", REGPROC, info={"server_version": (9, 6)}),
282 Column("amtype", CHAR, info={"server_version": (9, 6)}),
283)
284
285pg_collation = Table(
286 "pg_collation",
287 pg_catalog_meta,
288 Column("oid", OID, info={"server_version": (9, 3)}),
289 Column("collname", NAME),
290 Column("collnamespace", OID),
291 Column("collowner", OID),
292 Column("collprovider", CHAR, info={"server_version": (10,)}),
293 Column("collisdeterministic", Boolean, info={"server_version": (12,)}),
294 Column("collencoding", Integer),
295 Column("collcollate", Text),
296 Column("collctype", Text),
297 Column("colliculocale", Text),
298 Column("collicurules", Text, info={"server_version": (16,)}),
299 Column("collversion", Text, info={"server_version": (10,)}),
300)
301 