]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Added array delimiter to the data types info
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 2 Apr 2020 23:32:58 +0000 (12:32 +1300)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 2 Apr 2020 23:45:00 +0000 (12:45 +1300)
psycopg3/types/oids.py

index 32b71b452bad8ed6626c4ce86848cf620860bdf2..2ec524bfc5cc9b35d9eb37782ab1b6c88996ffd8 100644 (file)
@@ -8,117 +8,128 @@ to a Postgres server.
 # Copyright (C) 2020 The Psycopg Team
 
 import re
-from typing import Dict
-from ..utils.typing import Oid
+from typing import Dict, NamedTuple
+
+from psycopg3.utils.typing import Oid
 
 INVALID_OID = Oid(0)
 
 
-# typname, oid, array oid, regtype
+class TypeInfo(NamedTuple):
+    name: str
+    oid: int
+    array_oid: int
+    alt_name: str
+    delimiter: str
+
+
 _oids_table = [
-    # autogenerated start
-    # Generated from PostgreSQL 12.2
-    ("aclitem", 1033, 1034, "aclitem"),
-    ("any", 2276, 0, '"any"'),
-    ("anyarray", 2277, 0, "anyarray"),
-    ("anyelement", 2283, 0, "anyelement"),
-    ("anyenum", 3500, 0, "anyenum"),
-    ("anynonarray", 2776, 0, "anynonarray"),
-    ("anyrange", 3831, 0, "anyrange"),
-    ("bit", 1560, 1561, "bit"),
-    ("bool", 16, 1000, "boolean"),
-    ("box", 603, 1020, "box"),
-    ("bpchar", 1042, 1014, "character"),
-    ("bytea", 17, 1001, "bytea"),
-    ("char", 18, 1002, '"char"'),
-    ("cid", 29, 1012, "cid"),
-    ("cidr", 650, 651, "cidr"),
-    ("circle", 718, 719, "circle"),
-    ("cstring", 2275, 1263, "cstring"),
-    ("date", 1082, 1182, "date"),
-    ("daterange", 3912, 3913, "daterange"),
-    ("event_trigger", 3838, 0, "event_trigger"),
-    ("float4", 700, 1021, "real"),
-    ("float8", 701, 1022, "double precision"),
-    ("gtsvector", 3642, 3644, "gtsvector"),
-    ("inet", 869, 1041, "inet"),
-    ("int2", 21, 1005, "smallint"),
-    ("int2vector", 22, 1006, "int2vector"),
-    ("int4", 23, 1007, "integer"),
-    ("int4range", 3904, 3905, "int4range"),
-    ("int8", 20, 1016, "bigint"),
-    ("int8range", 3926, 3927, "int8range"),
-    ("internal", 2281, 0, "internal"),
-    ("interval", 1186, 1187, "interval"),
-    ("json", 114, 199, "json"),
-    ("jsonb", 3802, 3807, "jsonb"),
-    ("jsonpath", 4072, 4073, "jsonpath"),
-    ("line", 628, 629, "line"),
-    ("lseg", 601, 1018, "lseg"),
-    ("macaddr", 829, 1040, "macaddr"),
-    ("macaddr8", 774, 775, "macaddr8"),
-    ("money", 790, 791, "money"),
-    ("name", 19, 1003, "name"),
-    ("numeric", 1700, 1231, "numeric"),
-    ("numrange", 3906, 3907, "numrange"),
-    ("oid", 26, 1028, "oid"),
-    ("oidvector", 30, 1013, "oidvector"),
-    ("opaque", 2282, 0, "opaque"),
-    ("path", 602, 1019, "path"),
-    ("point", 600, 1017, "point"),
-    ("polygon", 604, 1027, "polygon"),
-    ("record", 2249, 2287, "record"),
-    ("refcursor", 1790, 2201, "refcursor"),
-    ("text", 25, 1009, "text"),
-    ("tid", 27, 1010, "tid"),
-    ("time", 1083, 1183, "time without time zone"),
-    ("timestamp", 1114, 1115, "timestamp without time zone"),
-    ("timestamptz", 1184, 1185, "timestamp with time zone"),
-    ("timetz", 1266, 1270, "time with time zone"),
-    ("trigger", 2279, 0, "trigger"),
-    ("tsquery", 3615, 3645, "tsquery"),
-    ("tsrange", 3908, 3909, "tsrange"),
-    ("tstzrange", 3910, 3911, "tstzrange"),
-    ("tsvector", 3614, 3643, "tsvector"),
-    ("txid_snapshot", 2970, 2949, "txid_snapshot"),
-    ("unknown", 705, 0, "unknown"),
-    ("uuid", 2950, 2951, "uuid"),
-    ("varbit", 1562, 1563, "bit varying"),
-    ("varchar", 1043, 1015, "character varying"),
-    ("void", 2278, 0, "void"),
-    ("xid", 28, 1011, "xid"),
-    ("xml", 142, 143, "xml"),
-    # autogenerated end
+    TypeInfo(*r)
+    for r in [
+        # fmt: off
+        # autogenerated: start
+
+        # Generated from PostgreSQL 12.2
+
+        ('aclitem', 1033, 1034, 'aclitem', ','),
+        ('any', 2276, 0, '"any"', ','),
+        ('anyarray', 2277, 0, 'anyarray', ','),
+        ('anyelement', 2283, 0, 'anyelement', ','),
+        ('anyenum', 3500, 0, 'anyenum', ','),
+        ('anynonarray', 2776, 0, 'anynonarray', ','),
+        ('anyrange', 3831, 0, 'anyrange', ','),
+        ('bit', 1560, 1561, 'bit', ','),
+        ('bool', 16, 1000, 'boolean', ','),
+        ('box', 603, 1020, 'box', ';'),
+        ('bpchar', 1042, 1014, 'character', ','),
+        ('bytea', 17, 1001, 'bytea', ','),
+        ('char', 18, 1002, '"char"', ','),
+        ('cid', 29, 1012, 'cid', ','),
+        ('cidr', 650, 651, 'cidr', ','),
+        ('circle', 718, 719, 'circle', ','),
+        ('cstring', 2275, 1263, 'cstring', ','),
+        ('date', 1082, 1182, 'date', ','),
+        ('daterange', 3912, 3913, 'daterange', ','),
+        ('event_trigger', 3838, 0, 'event_trigger', ','),
+        ('float4', 700, 1021, 'real', ','),
+        ('float8', 701, 1022, 'double precision', ','),
+        ('gtsvector', 3642, 3644, 'gtsvector', ','),
+        ('inet', 869, 1041, 'inet', ','),
+        ('int2', 21, 1005, 'smallint', ','),
+        ('int2vector', 22, 1006, 'int2vector', ','),
+        ('int4', 23, 1007, 'integer', ','),
+        ('int4range', 3904, 3905, 'int4range', ','),
+        ('int8', 20, 1016, 'bigint', ','),
+        ('int8range', 3926, 3927, 'int8range', ','),
+        ('internal', 2281, 0, 'internal', ','),
+        ('interval', 1186, 1187, 'interval', ','),
+        ('json', 114, 199, 'json', ','),
+        ('jsonb', 3802, 3807, 'jsonb', ','),
+        ('jsonpath', 4072, 4073, 'jsonpath', ','),
+        ('line', 628, 629, 'line', ','),
+        ('lseg', 601, 1018, 'lseg', ','),
+        ('macaddr', 829, 1040, 'macaddr', ','),
+        ('macaddr8', 774, 775, 'macaddr8', ','),
+        ('money', 790, 791, 'money', ','),
+        ('name', 19, 1003, 'name', ','),
+        ('numeric', 1700, 1231, 'numeric', ','),
+        ('numrange', 3906, 3907, 'numrange', ','),
+        ('oid', 26, 1028, 'oid', ','),
+        ('oidvector', 30, 1013, 'oidvector', ','),
+        ('opaque', 2282, 0, 'opaque', ','),
+        ('path', 602, 1019, 'path', ','),
+        ('point', 600, 1017, 'point', ','),
+        ('polygon', 604, 1027, 'polygon', ','),
+        ('record', 2249, 2287, 'record', ','),
+        ('refcursor', 1790, 2201, 'refcursor', ','),
+        ('text', 25, 1009, 'text', ','),
+        ('tid', 27, 1010, 'tid', ','),
+        ('time', 1083, 1183, 'time without time zone', ','),
+        ('timestamp', 1114, 1115, 'timestamp without time zone', ','),
+        ('timestamptz', 1184, 1185, 'timestamp with time zone', ','),
+        ('timetz', 1266, 1270, 'time with time zone', ','),
+        ('trigger', 2279, 0, 'trigger', ','),
+        ('tsquery', 3615, 3645, 'tsquery', ','),
+        ('tsrange', 3908, 3909, 'tsrange', ','),
+        ('tstzrange', 3910, 3911, 'tstzrange', ','),
+        ('tsvector', 3614, 3643, 'tsvector', ','),
+        ('txid_snapshot', 2970, 2949, 'txid_snapshot', ','),
+        ('unknown', 705, 0, 'unknown', ','),
+        ('uuid', 2950, 2951, 'uuid', ','),
+        ('varbit', 1562, 1563, 'bit varying', ','),
+        ('varchar', 1043, 1015, 'character varying', ','),
+        ('void', 2278, 0, 'void', ','),
+        ('xid', 28, 1011, 'xid', ','),
+        ('xml', 142, 143, 'xml', ','),
+        # autogenerated: end
+        # fmt: on
+    ]
 ]
 
-type_oid: Dict[str, Oid] = {name: Oid(oid) for name, oid, _, _ in _oids_table}
+type_oid: Dict[str, Oid] = {r.name: Oid(r.oid) for r in _oids_table}
 
 # add aliases too
 for r in _oids_table:
-    if r[3] not in type_oid:
-        type_oid[r[3]] = Oid(r[1])
+    if r.alt_name not in type_oid:
+        type_oid[r.alt_name] = Oid(r.oid)
 
 
 def self_update() -> None:
     import subprocess as sp
 
-    # queries output should make black happy
     queries = [
         """
-select format(
-        '    # Generated from PostgreSQL %s.%s',
+select format($$
+# Generated from PostgreSQL %s.%s
+$$,
         setting::int / 10000, setting::int % 100)   -- assume PG >= 10
     from pg_settings
     where name = 'server_version_num'
 """,
         r"""
 select format(
-        '    ("%s", %s, %s, %s),',
-        typname, oid, typarray,
-        case when oid::regtype::text ~ '^"'
-            then '''' || oid::regtype::text || ''''
-            else '"' || oid::regtype::text || '"'
-        end)
+        '(%L, %s, %s, %L, %L),',
+        typname, oid, typarray, oid::regtype, typdelim)
     from pg_type
     where oid < 10000
     and typname !~ all('{^(_|pg_|reg),_handler$}')
@@ -136,10 +147,11 @@ select format(
         )
         new.extend(out.stdout.splitlines())
 
+    new = [b" " * 8 + l if l else b"" for l in new]  # indent
     istart, iend = [
         i
         for i, l in enumerate(lines)
-        if re.match(br"\s*#\s*autogenerated\s+(start|end)", l)
+        if re.match(br"\s*#\s*autogenerated:\s+(start|end)", l)
     ]
     lines[istart + 1 : iend] = new