return typemod - 4 if typemod >= 0 else None
+class BitTypeModifier(TypeModifier):
+ """Handle bit/varbit type modifier."""
+
+ def get_modifier(self, typemod: int) -> tuple[int, ...] | None:
+ dsize = self.get_display_size(typemod)
+ return (dsize,) if dsize else None
+
+ def get_display_size(self, typemod: int) -> int | None:
+ return typemod if typemod >= 0 else None
+
+
class TimeTypeModifier(TypeModifier):
"""Handle time-related types modifier."""
from ..abc import AdaptContext, NoneType
from .._oids import TEXT_OID
-from .._typemod import CharTypeModifier, NumericTypeModifier, TimeTypeModifier
+from .._typemod import BitTypeModifier, CharTypeModifier, NumericTypeModifier
+from .._typemod import TimeTypeModifier
from .._adapters_map import AdaptersMap
from ..types.enum import EnumDumper, EnumBinaryDumper
from ..types.none import NoneDumper
TypeInfo('"char"', 18, 1002), # special case, not generated
# autogenerated: start
# Generated from CockroachDB 23.1.10
- TypeInfo("bit", 1560, 1561),
+ TypeInfo("bit", 1560, 1561, typemod=BitTypeModifier),
TypeInfo("bool", 16, 1000, regtype="boolean"),
TypeInfo("bpchar", 1042, 1014, regtype="character", typemod=CharTypeModifier),
TypeInfo("bytea", 17, 1001),
TypeInfo("tsvector", 3614, 3643),
TypeInfo("unknown", 705, 0),
TypeInfo("uuid", 2950, 2951),
- TypeInfo("varbit", 1562, 1563, regtype="bit varying"),
+ TypeInfo("varbit", 1562, 1563, regtype="bit varying", typemod=BitTypeModifier),
TypeInfo(
"varchar", 1043, 1015, regtype="character varying", typemod=CharTypeModifier
),
# Copyright (C) 2020 The Psycopg Team
from .abc import AdaptContext
-from ._typemod import CharTypeModifier, NumericTypeModifier, TimeTypeModifier
+from ._typemod import BitTypeModifier, CharTypeModifier, NumericTypeModifier
+from ._typemod import TimeTypeModifier
from ._typeinfo import TypeInfo, TypesRegistry
from ._adapters_map import AdaptersMap
# autogenerated: start
# Generated from PostgreSQL 16.2
TypeInfo("aclitem", 1033, 1034),
- TypeInfo("bit", 1560, 1561),
+ TypeInfo("bit", 1560, 1561, typemod=BitTypeModifier),
TypeInfo("bool", 16, 1000, regtype="boolean"),
TypeInfo("box", 603, 1020, delimiter=";"),
TypeInfo("bpchar", 1042, 1014, regtype="character", typemod=CharTypeModifier),
TypeInfo("tsvector", 3614, 3643),
TypeInfo("txid_snapshot", 2970, 2949),
TypeInfo("uuid", 2950, 2951),
- TypeInfo("varbit", 1562, 1563, regtype="bit varying"),
+ TypeInfo("varbit", 1562, 1563, regtype="bit varying", typemod=BitTypeModifier),
TypeInfo(
"varchar", 1043, 1015, regtype="character varying", typemod=CharTypeModifier
),
("timestamp", None, None, None, 8),
("timestamptz", None, None, None, 8),
("interval", None, None, None, 16),
+ ("bit(1)", None, None, 1, None),
+ ("bit(42)", None, None, 42, None),
+ ("bit(83886080)", None, None, 83886080, None),
+ ("varbit", None, None, None, None),
+ ("varbit(1)", None, None, 1, None),
+ ("varbit(42)", None, None, 42, None),
+ ("varbit(83886080)", None, None, 83886080, None),
],
)
def test_details(conn, type, precision, scale, dsize, isize):
"timestamp": "TimeTypeModifier",
"timestamptz": "TimeTypeModifier",
"interval": "TimeTypeModifier",
+ "bit": "BitTypeModifier",
+ "varbit": "BitTypeModifier",
}