# register default adapters for PostgreSQL
adapters = postgres.adapters # exposed by the package
+postgres.register_default_types(adapters.types)
postgres.register_default_adapters(adapters)
# After the default ones, because these can deal with the bytea oid better
adapters = _types.adapters # exposed by the package
connect = CrdbConnection.connect
+_types.register_crdb_types(adapters.types)
_types.register_crdb_adapters(adapters)
__all__ = [
context.adapters.register_dumper(NoneType, CrdbNoneDumper)
-for t in [
- TypeInfo("json", 3802, 3807, regtype="jsonb"), # Alias json -> jsonb.
- TypeInfo("int8", 20, 1016, regtype="integer"), # Alias integer -> int8
- TypeInfo('"char"', 18, 1002), # special case, not generated
- # autogenerated: start
- # Generated from CockroachDB 22.2.1
- TypeInfo("bit", 1560, 1561),
- TypeInfo("bool", 16, 1000, regtype="boolean"),
- TypeInfo("bpchar", 1042, 1014, regtype="character"),
- TypeInfo("bytea", 17, 1001),
- TypeInfo("date", 1082, 1182),
- TypeInfo("float4", 700, 1021, regtype="real"),
- TypeInfo("float8", 701, 1022, regtype="double precision"),
- TypeInfo("inet", 869, 1041),
- TypeInfo("int2", 21, 1005, regtype="smallint"),
- TypeInfo("int2vector", 22, 1006),
- TypeInfo("int4", 23, 1007),
- TypeInfo("int8", 20, 1016, regtype="bigint"),
- TypeInfo("interval", 1186, 1187),
- TypeInfo("jsonb", 3802, 3807),
- TypeInfo("name", 19, 1003),
- TypeInfo("numeric", 1700, 1231),
- TypeInfo("oid", 26, 1028),
- TypeInfo("oidvector", 30, 1013),
- TypeInfo("record", 2249, 2287),
- TypeInfo("regclass", 2205, 2210),
- TypeInfo("regnamespace", 4089, 4090),
- TypeInfo("regproc", 24, 1008),
- TypeInfo("regprocedure", 2202, 2207),
- TypeInfo("regrole", 4096, 4097),
- TypeInfo("regtype", 2206, 2211),
- TypeInfo("text", 25, 1009),
- TypeInfo("time", 1083, 1183, regtype="time without time zone"),
- TypeInfo("timestamp", 1114, 1115, regtype="timestamp without time zone"),
- TypeInfo("timestamptz", 1184, 1185, regtype="timestamp with time zone"),
- TypeInfo("timetz", 1266, 1270, regtype="time with time zone"),
- TypeInfo("unknown", 705, 0),
- TypeInfo("uuid", 2950, 2951),
- TypeInfo("varbit", 1562, 1563, regtype="bit varying"),
- TypeInfo("varchar", 1043, 1015, regtype="character varying"),
- # autogenerated: end
-]:
- types.add(t)
+def register_crdb_types(types: TypesRegistry) -> None:
+ for t in [
+ TypeInfo("json", 3802, 3807, regtype="jsonb"), # Alias json -> jsonb.
+ TypeInfo("int8", 20, 1016, regtype="integer"), # Alias integer -> int8
+ TypeInfo('"char"', 18, 1002), # special case, not generated
+ # autogenerated: start
+ # Generated from CockroachDB 22.2.1
+ TypeInfo("bit", 1560, 1561),
+ TypeInfo("bool", 16, 1000, regtype="boolean"),
+ TypeInfo("bpchar", 1042, 1014, regtype="character"),
+ TypeInfo("bytea", 17, 1001),
+ TypeInfo("date", 1082, 1182),
+ TypeInfo("float4", 700, 1021, regtype="real"),
+ TypeInfo("float8", 701, 1022, regtype="double precision"),
+ TypeInfo("inet", 869, 1041),
+ TypeInfo("int2", 21, 1005, regtype="smallint"),
+ TypeInfo("int2vector", 22, 1006),
+ TypeInfo("int4", 23, 1007),
+ TypeInfo("int8", 20, 1016, regtype="bigint"),
+ TypeInfo("interval", 1186, 1187),
+ TypeInfo("jsonb", 3802, 3807),
+ TypeInfo("name", 19, 1003),
+ TypeInfo("numeric", 1700, 1231),
+ TypeInfo("oid", 26, 1028),
+ TypeInfo("oidvector", 30, 1013),
+ TypeInfo("record", 2249, 2287),
+ TypeInfo("regclass", 2205, 2210),
+ TypeInfo("regnamespace", 4089, 4090),
+ TypeInfo("regproc", 24, 1008),
+ TypeInfo("regprocedure", 2202, 2207),
+ TypeInfo("regrole", 4096, 4097),
+ TypeInfo("regtype", 2206, 2211),
+ TypeInfo("text", 25, 1009),
+ TypeInfo("time", 1083, 1183, regtype="time without time zone"),
+ TypeInfo("timestamp", 1114, 1115, regtype="timestamp without time zone"),
+ TypeInfo("timestamptz", 1184, 1185, regtype="timestamp with time zone"),
+ TypeInfo("timetz", 1266, 1270, regtype="time with time zone"),
+ TypeInfo("unknown", 705, 0),
+ TypeInfo("uuid", 2950, 2951),
+ TypeInfo("varbit", 1562, 1563, regtype="bit varying"),
+ TypeInfo("varchar", 1043, 1015, regtype="character varying"),
+ # autogenerated: end
+ ]:
+ types.add(t)
from math import floor
from typing import Any, Sequence, Union
-from . import postgres
+from . import _oids
from .abc import AdaptContext, Buffer
from .types.string import BytesDumper, BytesBinaryDumper
class DBAPITypeObject:
- def __init__(self, name: str, type_names: Sequence[str]):
+ def __init__(self, name: str, oids: Sequence[int]):
self.name = name
- self.values = tuple(postgres.types[n].oid for n in type_names)
+ self.values = tuple(oids)
def __repr__(self) -> str:
return f"psycopg.{self.name}"
return NotImplemented
-BINARY = DBAPITypeObject("BINARY", ("bytea",))
+BINARY = DBAPITypeObject("BINARY", (_oids.BYTEA_OID,))
DATETIME = DBAPITypeObject(
- "DATETIME", "timestamp timestamptz date time timetz interval".split()
+ "DATETIME",
+ (
+ _oids.TIMESTAMP_OID,
+ _oids.TIMESTAMPTZ_OID,
+ _oids.DATE_OID,
+ _oids.TIME_OID,
+ _oids.TIMETZ_OID,
+ _oids.INTERVAL_OID,
+ ),
+)
+NUMBER = DBAPITypeObject(
+ "NUMBER",
+ (
+ _oids.INT2_OID,
+ _oids.INT4_OID,
+ _oids.INT8_OID,
+ _oids.FLOAT4_OID,
+ _oids.FLOAT8_OID,
+ _oids.NUMERIC_OID,
+ ),
+)
+ROWID = DBAPITypeObject("ROWID", (_oids.OID_OID,))
+STRING = DBAPITypeObject(
+ "STRING", (_oids.TEXT_OID, _oids.VARCHAR_OID, _oids.BPCHAR_OID)
)
-NUMBER = DBAPITypeObject("NUMBER", "int2 int4 int8 float4 float8 numeric".split())
-ROWID = DBAPITypeObject("ROWID", ("oid",))
-STRING = DBAPITypeObject("STRING", "text varchar bpchar".split())
class Binary:
# Global adapter maps with PostgreSQL types configuration
adapters = AdaptersMap(types=types)
-# Use tools/update_oids.py to update this data.
-for t in [
- TypeInfo('"char"', 18, 1002),
- # autogenerated: start
- # Generated from PostgreSQL 15.1
- TypeInfo("aclitem", 1033, 1034),
- TypeInfo("bit", 1560, 1561),
- TypeInfo("bool", 16, 1000, regtype="boolean"),
- TypeInfo("box", 603, 1020, delimiter=";"),
- TypeInfo("bpchar", 1042, 1014, regtype="character"),
- TypeInfo("bytea", 17, 1001),
- TypeInfo("cid", 29, 1012),
- TypeInfo("cidr", 650, 651),
- TypeInfo("circle", 718, 719),
- TypeInfo("date", 1082, 1182),
- TypeInfo("float4", 700, 1021, regtype="real"),
- TypeInfo("float8", 701, 1022, regtype="double precision"),
- TypeInfo("gtsvector", 3642, 3644),
- TypeInfo("inet", 869, 1041),
- TypeInfo("int2", 21, 1005, regtype="smallint"),
- TypeInfo("int2vector", 22, 1006),
- TypeInfo("int4", 23, 1007, regtype="integer"),
- TypeInfo("int8", 20, 1016, regtype="bigint"),
- TypeInfo("interval", 1186, 1187),
- TypeInfo("json", 114, 199),
- TypeInfo("jsonb", 3802, 3807),
- TypeInfo("jsonpath", 4072, 4073),
- TypeInfo("line", 628, 629),
- TypeInfo("lseg", 601, 1018),
- TypeInfo("macaddr", 829, 1040),
- TypeInfo("macaddr8", 774, 775),
- TypeInfo("money", 790, 791),
- TypeInfo("name", 19, 1003),
- TypeInfo("numeric", 1700, 1231),
- TypeInfo("oid", 26, 1028),
- TypeInfo("oidvector", 30, 1013),
- TypeInfo("path", 602, 1019),
- TypeInfo("pg_lsn", 3220, 3221),
- TypeInfo("point", 600, 1017),
- TypeInfo("polygon", 604, 1027),
- TypeInfo("record", 2249, 2287),
- TypeInfo("refcursor", 1790, 2201),
- TypeInfo("regclass", 2205, 2210),
- TypeInfo("regcollation", 4191, 4192),
- TypeInfo("regconfig", 3734, 3735),
- TypeInfo("regdictionary", 3769, 3770),
- TypeInfo("regnamespace", 4089, 4090),
- TypeInfo("regoper", 2203, 2208),
- TypeInfo("regoperator", 2204, 2209),
- TypeInfo("regproc", 24, 1008),
- TypeInfo("regprocedure", 2202, 2207),
- TypeInfo("regrole", 4096, 4097),
- TypeInfo("regtype", 2206, 2211),
- TypeInfo("text", 25, 1009),
- TypeInfo("tid", 27, 1010),
- TypeInfo("time", 1083, 1183, regtype="time without time zone"),
- TypeInfo("timestamp", 1114, 1115, regtype="timestamp without time zone"),
- TypeInfo("timestamptz", 1184, 1185, regtype="timestamp with time zone"),
- TypeInfo("timetz", 1266, 1270, regtype="time with time zone"),
- TypeInfo("tsquery", 3615, 3645),
- TypeInfo("tsvector", 3614, 3643),
- TypeInfo("txid_snapshot", 2970, 2949),
- TypeInfo("uuid", 2950, 2951),
- TypeInfo("varbit", 1562, 1563, regtype="bit varying"),
- TypeInfo("varchar", 1043, 1015, regtype="character varying"),
- TypeInfo("xid", 28, 1011),
- TypeInfo("xid8", 5069, 271),
- TypeInfo("xml", 142, 143),
- RangeInfo("daterange", 3912, 3913, subtype_oid=1082),
- RangeInfo("int4range", 3904, 3905, subtype_oid=23),
- RangeInfo("int8range", 3926, 3927, subtype_oid=20),
- RangeInfo("numrange", 3906, 3907, subtype_oid=1700),
- RangeInfo("tsrange", 3908, 3909, subtype_oid=1114),
- RangeInfo("tstzrange", 3910, 3911, subtype_oid=1184),
- MultirangeInfo("datemultirange", 4535, 6155, range_oid=3912, subtype_oid=1082),
- MultirangeInfo("int4multirange", 4451, 6150, range_oid=3904, subtype_oid=23),
- MultirangeInfo("int8multirange", 4536, 6157, range_oid=3926, subtype_oid=20),
- MultirangeInfo("nummultirange", 4532, 6151, range_oid=3906, subtype_oid=1700),
- MultirangeInfo("tsmultirange", 4533, 6152, range_oid=3908, subtype_oid=1114),
- MultirangeInfo("tstzmultirange", 4534, 6153, range_oid=3910, subtype_oid=1184),
- # autogenerated: end
-]:
- types.add(t)
+
+def register_default_types(types: TypesRegistry) -> None:
+
+ # Use tools/update_oids.py to update this data.
+ for t in [
+ TypeInfo('"char"', 18, 1002),
+ # autogenerated: start
+ # Generated from PostgreSQL 15.1
+ TypeInfo("aclitem", 1033, 1034),
+ TypeInfo("bit", 1560, 1561),
+ TypeInfo("bool", 16, 1000, regtype="boolean"),
+ TypeInfo("box", 603, 1020, delimiter=";"),
+ TypeInfo("bpchar", 1042, 1014, regtype="character"),
+ TypeInfo("bytea", 17, 1001),
+ TypeInfo("cid", 29, 1012),
+ TypeInfo("cidr", 650, 651),
+ TypeInfo("circle", 718, 719),
+ TypeInfo("date", 1082, 1182),
+ TypeInfo("float4", 700, 1021, regtype="real"),
+ TypeInfo("float8", 701, 1022, regtype="double precision"),
+ TypeInfo("gtsvector", 3642, 3644),
+ TypeInfo("inet", 869, 1041),
+ TypeInfo("int2", 21, 1005, regtype="smallint"),
+ TypeInfo("int2vector", 22, 1006),
+ TypeInfo("int4", 23, 1007, regtype="integer"),
+ TypeInfo("int8", 20, 1016, regtype="bigint"),
+ TypeInfo("interval", 1186, 1187),
+ TypeInfo("json", 114, 199),
+ TypeInfo("jsonb", 3802, 3807),
+ TypeInfo("jsonpath", 4072, 4073),
+ TypeInfo("line", 628, 629),
+ TypeInfo("lseg", 601, 1018),
+ TypeInfo("macaddr", 829, 1040),
+ TypeInfo("macaddr8", 774, 775),
+ TypeInfo("money", 790, 791),
+ TypeInfo("name", 19, 1003),
+ TypeInfo("numeric", 1700, 1231),
+ TypeInfo("oid", 26, 1028),
+ TypeInfo("oidvector", 30, 1013),
+ TypeInfo("path", 602, 1019),
+ TypeInfo("pg_lsn", 3220, 3221),
+ TypeInfo("point", 600, 1017),
+ TypeInfo("polygon", 604, 1027),
+ TypeInfo("record", 2249, 2287),
+ TypeInfo("refcursor", 1790, 2201),
+ TypeInfo("regclass", 2205, 2210),
+ TypeInfo("regcollation", 4191, 4192),
+ TypeInfo("regconfig", 3734, 3735),
+ TypeInfo("regdictionary", 3769, 3770),
+ TypeInfo("regnamespace", 4089, 4090),
+ TypeInfo("regoper", 2203, 2208),
+ TypeInfo("regoperator", 2204, 2209),
+ TypeInfo("regproc", 24, 1008),
+ TypeInfo("regprocedure", 2202, 2207),
+ TypeInfo("regrole", 4096, 4097),
+ TypeInfo("regtype", 2206, 2211),
+ TypeInfo("text", 25, 1009),
+ TypeInfo("tid", 27, 1010),
+ TypeInfo("time", 1083, 1183, regtype="time without time zone"),
+ TypeInfo("timestamp", 1114, 1115, regtype="timestamp without time zone"),
+ TypeInfo("timestamptz", 1184, 1185, regtype="timestamp with time zone"),
+ TypeInfo("timetz", 1266, 1270, regtype="time with time zone"),
+ TypeInfo("tsquery", 3615, 3645),
+ TypeInfo("tsvector", 3614, 3643),
+ TypeInfo("txid_snapshot", 2970, 2949),
+ TypeInfo("uuid", 2950, 2951),
+ TypeInfo("varbit", 1562, 1563, regtype="bit varying"),
+ TypeInfo("varchar", 1043, 1015, regtype="character varying"),
+ TypeInfo("xid", 28, 1011),
+ TypeInfo("xid8", 5069, 271),
+ TypeInfo("xml", 142, 143),
+ RangeInfo("daterange", 3912, 3913, subtype_oid=1082),
+ RangeInfo("int4range", 3904, 3905, subtype_oid=23),
+ RangeInfo("int8range", 3926, 3927, subtype_oid=20),
+ RangeInfo("numrange", 3906, 3907, subtype_oid=1700),
+ RangeInfo("tsrange", 3908, 3909, subtype_oid=1114),
+ RangeInfo("tstzrange", 3910, 3911, subtype_oid=1184),
+ MultirangeInfo("datemultirange", 4535, 6155, range_oid=3912, subtype_oid=1082),
+ MultirangeInfo("int4multirange", 4451, 6150, range_oid=3904, subtype_oid=23),
+ MultirangeInfo("int8multirange", 4536, 6157, range_oid=3926, subtype_oid=20),
+ MultirangeInfo("nummultirange", 4532, 6151, range_oid=3906, subtype_oid=1700),
+ MultirangeInfo("tsmultirange", 4533, 6152, range_oid=3908, subtype_oid=1114),
+ MultirangeInfo("tstzmultirange", 4534, 6153, range_oid=3910, subtype_oid=1184),
+ # autogenerated: end
+ ]:
+ types.add(t)
def register_default_adapters(context: AdaptContext) -> None:
from .. import postgres
from ..abc import AdaptContext, Buffer, Dumper, DumperKey, NoneType, Loader, Transformer
from ..adapt import RecursiveDumper, RecursiveLoader, PyFormat
-from .._oids import TEXT_OID, INVALID_OID
+from .._oids import TEXT_OID, INVALID_OID, TEXT_ARRAY_OID
from .._compat import cache, prod
from .._struct import pack_len, unpack_len
from .._cmodule import _psycopg
_pack_dim = cast(Callable[[int, int], bytes], _struct_dim.pack)
_unpack_dim = cast(Callable[[Buffer, int], Tuple[int, int]], _struct_dim.unpack_from)
-TEXT_ARRAY_OID = postgres.types["text"].array_oid
-
PY_TEXT = PyFormat.TEXT
PQ_BINARY = pq.Format.BINARY
class BaseListDumper(RecursiveDumper):
- element_oid = 0
+ element_oid = INVALID_OID
def __init__(self, cls: type, context: Optional[AdaptContext] = None):
if cls is NoneType:
# Copyright (C) 2020 The Psycopg Team
-from .. import postgres
+from .. import _oids
from ..pq import Format
from ..abc import AdaptContext
from ..adapt import Buffer, Dumper, Loader
class BoolDumper(Dumper):
- oid = postgres.types["bool"].oid
+ oid = _oids.BOOL_OID
def dump(self, obj: bool) -> bytes:
return b"t" if obj else b"f"
class BoolBinaryDumper(Dumper):
format = Format.BINARY
- oid = postgres.types["bool"].oid
+ oid = _oids.BOOL_OID
def dump(self, obj: bool) -> bytes:
return b"\x01" if obj else b"\x00"
class TupleDumper(SequenceDumper):
# Should be this, but it doesn't work
- # oid = postgres_types["record"].oid
+ # oid = _oids.RECORD_OID
def dump(self, obj: Tuple[Any, ...]) -> bytes:
return self._dump_sequence(obj, b"(", b")", b",")
from datetime import date, datetime, time, timedelta, timezone
from typing import Any, Callable, cast, Optional, Tuple, TYPE_CHECKING
-from .. import postgres
+from .. import _oids
from ..pq import Format
from .._tz import get_tzinfo
from ..abc import AdaptContext, DumperKey
class DateDumper(Dumper):
- oid = postgres.types["date"].oid
+ oid = _oids.DATE_OID
def dump(self, obj: date) -> bytes:
# NOTE: whatever the PostgreSQL DateStyle input format (DMY, MDY, YMD)
class DateBinaryDumper(Dumper):
format = Format.BINARY
- oid = postgres.types["date"].oid
+ oid = _oids.DATE_OID
def dump(self, obj: date) -> bytes:
days = obj.toordinal() - _pg_date_epoch_days
class TimeDumper(_BaseTimeTextDumper):
- oid = postgres.types["time"].oid
+ oid = _oids.TIME_OID
def upgrade(self, obj: time, format: PyFormat) -> Dumper:
if not obj.tzinfo:
class TimeTzDumper(_BaseTimeTextDumper):
- oid = postgres.types["timetz"].oid
+ oid = _oids.TIMETZ_OID
class TimeBinaryDumper(_BaseTimeDumper):
format = Format.BINARY
- oid = postgres.types["time"].oid
+ oid = _oids.TIME_OID
def dump(self, obj: time) -> bytes:
us = obj.microsecond + 1_000_000 * (
class TimeTzBinaryDumper(_BaseTimeDumper):
format = Format.BINARY
- oid = postgres.types["timetz"].oid
+ oid = _oids.TIMETZ_OID
def dump(self, obj: time) -> bytes:
us = obj.microsecond + 1_000_000 * (
class DatetimeDumper(_BaseDatetimeTextDumper):
- oid = postgres.types["timestamptz"].oid
+ oid = _oids.TIMESTAMPTZ_OID
def upgrade(self, obj: datetime, format: PyFormat) -> Dumper:
if obj.tzinfo:
class DatetimeNoTzDumper(_BaseDatetimeTextDumper):
- oid = postgres.types["timestamp"].oid
+ oid = _oids.TIMESTAMP_OID
class DatetimeBinaryDumper(_BaseDatetimeDumper):
format = Format.BINARY
- oid = postgres.types["timestamptz"].oid
+ oid = _oids.TIMESTAMPTZ_OID
def dump(self, obj: datetime) -> bytes:
delta = obj - _pg_datetimetz_epoch
class DatetimeNoTzBinaryDumper(_BaseDatetimeDumper):
format = Format.BINARY
- oid = postgres.types["timestamp"].oid
+ oid = _oids.TIMESTAMP_OID
def dump(self, obj: datetime) -> bytes:
delta = obj - _pg_datetime_epoch
class TimedeltaDumper(Dumper):
- oid = postgres.types["interval"].oid
+ oid = _oids.INTERVAL_OID
def __init__(self, cls: type, context: Optional[AdaptContext] = None):
super().__init__(cls, context)
class TimedeltaBinaryDumper(Dumper):
format = Format.BINARY
- oid = postgres.types["interval"].oid
+ oid = _oids.INTERVAL_OID
def dump(self, obj: timedelta) -> bytes:
micros = 1_000_000 * obj.seconds + obj.microseconds
from typing import Any, Callable, Dict, Optional, Tuple, Type, Union
from .. import abc
+from .. import _oids
from .. import errors as e
-from .. import postgres
from ..pq import Format
from ..adapt import Buffer, Dumper, Loader, PyFormat, AdaptersMap
from ..errors import DataError
class JsonDumper(_JsonDumper):
- oid = postgres.types["json"].oid
+ oid = _oids.JSON_OID
class JsonBinaryDumper(_JsonDumper):
format = Format.BINARY
- oid = postgres.types["json"].oid
+ oid = _oids.JSON_OID
class JsonbDumper(_JsonDumper):
- oid = postgres.types["jsonb"].oid
+ oid = _oids.JSONB_OID
class JsonbBinaryDumper(_JsonDumper):
format = Format.BINARY
- oid = postgres.types["jsonb"].oid
+ oid = _oids.JSONB_OID
def dump(self, obj: _JsonWrapper) -> bytes:
dumps = obj.dumps or self.dumps
from typing import MutableSequence, Optional, Type, Union, overload
from datetime import date, datetime
+from .. import _oids
from .. import errors as e
from .. import postgres
from ..pq import Format
class Int4MultirangeDumper(MultirangeDumper):
- oid = postgres.types["int4multirange"].oid
+ oid = _oids.INT4MULTIRANGE_OID
class Int8MultirangeDumper(MultirangeDumper):
- oid = postgres.types["int8multirange"].oid
+ oid = _oids.INT8MULTIRANGE_OID
class NumericMultirangeDumper(MultirangeDumper):
- oid = postgres.types["nummultirange"].oid
+ oid = _oids.NUMMULTIRANGE_OID
class DateMultirangeDumper(MultirangeDumper):
- oid = postgres.types["datemultirange"].oid
+ oid = _oids.DATEMULTIRANGE_OID
class TimestampMultirangeDumper(MultirangeDumper):
- oid = postgres.types["tsmultirange"].oid
+ oid = _oids.TSMULTIRANGE_OID
class TimestamptzMultirangeDumper(MultirangeDumper):
- oid = postgres.types["tstzmultirange"].oid
+ oid = _oids.TSTZMULTIRANGE_OID
# Binary dumpers for builtin multirange types wrappers
class Int4MultirangeBinaryDumper(MultirangeBinaryDumper):
- oid = postgres.types["int4multirange"].oid
+ oid = _oids.INT4MULTIRANGE_OID
class Int8MultirangeBinaryDumper(MultirangeBinaryDumper):
- oid = postgres.types["int8multirange"].oid
+ oid = _oids.INT8MULTIRANGE_OID
class NumericMultirangeBinaryDumper(MultirangeBinaryDumper):
- oid = postgres.types["nummultirange"].oid
+ oid = _oids.NUMMULTIRANGE_OID
class DateMultirangeBinaryDumper(MultirangeBinaryDumper):
- oid = postgres.types["datemultirange"].oid
+ oid = _oids.DATEMULTIRANGE_OID
class TimestampMultirangeBinaryDumper(MultirangeBinaryDumper):
- oid = postgres.types["tsmultirange"].oid
+ oid = _oids.TSMULTIRANGE_OID
class TimestamptzMultirangeBinaryDumper(MultirangeBinaryDumper):
- oid = postgres.types["tstzmultirange"].oid
+ oid = _oids.TSTZMULTIRANGE_OID
# Text loaders for builtin multirange types
class Int4MultirangeLoader(MultirangeLoader[int]):
- subtype_oid = postgres.types["int4"].oid
+ subtype_oid = _oids.INT4_OID
class Int8MultirangeLoader(MultirangeLoader[int]):
- subtype_oid = postgres.types["int8"].oid
+ subtype_oid = _oids.INT8_OID
class NumericMultirangeLoader(MultirangeLoader[Decimal]):
- subtype_oid = postgres.types["numeric"].oid
+ subtype_oid = _oids.NUMERIC_OID
class DateMultirangeLoader(MultirangeLoader[date]):
- subtype_oid = postgres.types["date"].oid
+ subtype_oid = _oids.DATE_OID
class TimestampMultirangeLoader(MultirangeLoader[datetime]):
- subtype_oid = postgres.types["timestamp"].oid
+ subtype_oid = _oids.TIMESTAMP_OID
class TimestampTZMultirangeLoader(MultirangeLoader[datetime]):
- subtype_oid = postgres.types["timestamptz"].oid
+ subtype_oid = _oids.TIMESTAMPTZ_OID
# Binary loaders for builtin multirange types
class Int4MultirangeBinaryLoader(MultirangeBinaryLoader[int]):
- subtype_oid = postgres.types["int4"].oid
+ subtype_oid = _oids.INT4_OID
class Int8MultirangeBinaryLoader(MultirangeBinaryLoader[int]):
- subtype_oid = postgres.types["int8"].oid
+ subtype_oid = _oids.INT8_OID
class NumericMultirangeBinaryLoader(MultirangeBinaryLoader[Decimal]):
- subtype_oid = postgres.types["numeric"].oid
+ subtype_oid = _oids.NUMERIC_OID
class DateMultirangeBinaryLoader(MultirangeBinaryLoader[date]):
- subtype_oid = postgres.types["date"].oid
+ subtype_oid = _oids.DATE_OID
class TimestampMultirangeBinaryLoader(MultirangeBinaryLoader[datetime]):
- subtype_oid = postgres.types["timestamp"].oid
+ subtype_oid = _oids.TIMESTAMP_OID
class TimestampTZMultirangeBinaryLoader(MultirangeBinaryLoader[datetime]):
- subtype_oid = postgres.types["timestamptz"].oid
+ subtype_oid = _oids.TIMESTAMPTZ_OID
def register_default_adapters(context: AdaptContext) -> None:
from typing import Callable, Optional, Type, Union, TYPE_CHECKING
from typing_extensions import TypeAlias
-from .. import postgres
+from .. import _oids
from ..pq import Format
from ..abc import AdaptContext
from ..adapt import Buffer, Dumper, Loader
class InterfaceDumper(Dumper):
- oid = postgres.types["inet"].oid
+ oid = _oids.INET_OID
def dump(self, obj: Interface) -> bytes:
return str(obj).encode()
class NetworkDumper(Dumper):
- oid = postgres.types["cidr"].oid
+ oid = _oids.CIDR_OID
def dump(self, obj: Network) -> bytes:
return str(obj).encode()
class _AIBinaryDumper(Dumper):
format = Format.BINARY
- oid = postgres.types["inet"].oid
+ oid = _oids.INET_OID
class AddressBinaryDumper(_AIBinaryDumper):
class NetworkBinaryDumper(Dumper):
format = Format.BINARY
- oid = postgres.types["cidr"].oid
+ oid = _oids.CIDR_OID
def dump(self, obj: Network) -> bytes:
packed = obj.network_address.packed
from typing import Any, Callable, DefaultDict, Dict, Tuple, Union, cast
from decimal import Decimal, DefaultContext, Context
-from .. import postgres
+from .. import _oids
from .. import errors as e
from ..pq import Format
from ..abc import AdaptContext
class FloatDumper(_SpecialValuesDumper):
- oid = postgres.types["float8"].oid
+ oid = _oids.FLOAT8_OID
_special = {
b"inf": b"'Infinity'::float8",
class Float4Dumper(FloatDumper):
- oid = postgres.types["float4"].oid
+ oid = _oids.FLOAT4_OID
class FloatBinaryDumper(Dumper):
format = Format.BINARY
- oid = postgres.types["float8"].oid
+ oid = _oids.FLOAT8_OID
def dump(self, obj: float) -> bytes:
return pack_float8(obj)
class Float4BinaryDumper(FloatBinaryDumper):
- oid = postgres.types["float4"].oid
+ oid = _oids.FLOAT4_OID
def dump(self, obj: float) -> bytes:
return pack_float4(obj)
class DecimalDumper(_SpecialValuesDumper):
- oid = postgres.types["numeric"].oid
+ oid = _oids.NUMERIC_OID
def dump(self, obj: Decimal) -> bytes:
if obj.is_nan():
class Int2Dumper(_IntDumper):
- oid = postgres.types["int2"].oid
+ oid = _oids.INT2_OID
class Int4Dumper(_IntDumper):
- oid = postgres.types["int4"].oid
+ oid = _oids.INT4_OID
class Int8Dumper(_IntDumper):
- oid = postgres.types["int8"].oid
+ oid = _oids.INT8_OID
class IntNumericDumper(_IntDumper):
- oid = postgres.types["numeric"].oid
+ oid = _oids.NUMERIC_OID
class OidDumper(_IntDumper):
- oid = postgres.types["oid"].oid
+ oid = _oids.OID_OID
class IntDumper(Dumper):
class DecimalBinaryDumper(Dumper):
format = Format.BINARY
- oid = postgres.types["numeric"].oid
+ oid = _oids.NUMERIC_OID
def dump(self, obj: Decimal) -> Buffer:
return dump_decimal_to_numeric_binary(obj)
class NumericBinaryDumper(Dumper):
format = Format.BINARY
- oid = postgres.types["numeric"].oid
+ oid = _oids.NUMERIC_OID
def dump(self, obj: Union[Decimal, int]) -> Buffer:
if isinstance(obj, int):
from decimal import Decimal
from datetime import date, datetime
+from .. import _oids
from .. import errors as e
from .. import postgres
from ..pq import Format
class Int4RangeDumper(RangeDumper):
- oid = postgres.types["int4range"].oid
+ oid = _oids.INT4RANGE_OID
class Int8RangeDumper(RangeDumper):
- oid = postgres.types["int8range"].oid
+ oid = _oids.INT8RANGE_OID
class NumericRangeDumper(RangeDumper):
- oid = postgres.types["numrange"].oid
+ oid = _oids.NUMRANGE_OID
class DateRangeDumper(RangeDumper):
- oid = postgres.types["daterange"].oid
+ oid = _oids.DATERANGE_OID
class TimestampRangeDumper(RangeDumper):
- oid = postgres.types["tsrange"].oid
+ oid = _oids.TSRANGE_OID
class TimestamptzRangeDumper(RangeDumper):
- oid = postgres.types["tstzrange"].oid
+ oid = _oids.TSTZRANGE_OID
# Binary dumpers for builtin range types wrappers
class Int4RangeBinaryDumper(RangeBinaryDumper):
- oid = postgres.types["int4range"].oid
+ oid = _oids.INT4RANGE_OID
class Int8RangeBinaryDumper(RangeBinaryDumper):
- oid = postgres.types["int8range"].oid
+ oid = _oids.INT8RANGE_OID
class NumericRangeBinaryDumper(RangeBinaryDumper):
- oid = postgres.types["numrange"].oid
+ oid = _oids.NUMRANGE_OID
class DateRangeBinaryDumper(RangeBinaryDumper):
- oid = postgres.types["daterange"].oid
+ oid = _oids.DATERANGE_OID
class TimestampRangeBinaryDumper(RangeBinaryDumper):
- oid = postgres.types["tsrange"].oid
+ oid = _oids.TSRANGE_OID
class TimestamptzRangeBinaryDumper(RangeBinaryDumper):
- oid = postgres.types["tstzrange"].oid
+ oid = _oids.TSTZRANGE_OID
# Text loaders for builtin range types
class Int4RangeLoader(RangeLoader[int]):
- subtype_oid = postgres.types["int4"].oid
+ subtype_oid = _oids.INT4_OID
class Int8RangeLoader(RangeLoader[int]):
- subtype_oid = postgres.types["int8"].oid
+ subtype_oid = _oids.INT8_OID
class NumericRangeLoader(RangeLoader[Decimal]):
- subtype_oid = postgres.types["numeric"].oid
+ subtype_oid = _oids.NUMERIC_OID
class DateRangeLoader(RangeLoader[date]):
- subtype_oid = postgres.types["date"].oid
+ subtype_oid = _oids.DATE_OID
class TimestampRangeLoader(RangeLoader[datetime]):
- subtype_oid = postgres.types["timestamp"].oid
+ subtype_oid = _oids.TIMESTAMP_OID
class TimestampTZRangeLoader(RangeLoader[datetime]):
- subtype_oid = postgres.types["timestamptz"].oid
+ subtype_oid = _oids.TIMESTAMPTZ_OID
# Binary loaders for builtin range types
class Int4RangeBinaryLoader(RangeBinaryLoader[int]):
- subtype_oid = postgres.types["int4"].oid
+ subtype_oid = _oids.INT4_OID
class Int8RangeBinaryLoader(RangeBinaryLoader[int]):
- subtype_oid = postgres.types["int8"].oid
+ subtype_oid = _oids.INT8_OID
class NumericRangeBinaryLoader(RangeBinaryLoader[Decimal]):
- subtype_oid = postgres.types["numeric"].oid
+ subtype_oid = _oids.NUMERIC_OID
class DateRangeBinaryLoader(RangeBinaryLoader[date]):
- subtype_oid = postgres.types["date"].oid
+ subtype_oid = _oids.DATE_OID
class TimestampRangeBinaryLoader(RangeBinaryLoader[datetime]):
- subtype_oid = postgres.types["timestamp"].oid
+ subtype_oid = _oids.TIMESTAMP_OID
class TimestampTZRangeBinaryLoader(RangeBinaryLoader[datetime]):
- subtype_oid = postgres.types["timestamptz"].oid
+ subtype_oid = _oids.TIMESTAMPTZ_OID
def register_default_adapters(context: AdaptContext) -> None:
from typing import Optional, Union, TYPE_CHECKING
-from .. import postgres
+from .. import _oids
from ..pq import Format, Escaping
from ..abc import AdaptContext
from ..adapt import Buffer, Dumper, Loader
from ..errors import DataError
-from .._oids import INVALID_OID
from .._encodings import conn_encoding
if TYPE_CHECKING:
class StrBinaryDumper(_StrBinaryDumper):
- oid = postgres.types["text"].oid
+ oid = _oids.TEXT_OID
class StrBinaryDumperVarchar(_StrBinaryDumper):
- oid = postgres.types["varchar"].oid
+ oid = _oids.VARCHAR_OID
class StrBinaryDumperName(_StrBinaryDumper):
- oid = postgres.types["name"].oid
+ oid = _oids.NAME_OID
class StrDumper(_StrDumper):
text oid is required, for instance with variadic functions.
"""
- oid = postgres.types["text"].oid
+ oid = _oids.TEXT_OID
class StrDumperVarchar(_StrDumper):
- oid = postgres.types["varchar"].oid
+ oid = _oids.VARCHAR_OID
class StrDumperName(_StrDumper):
- oid = postgres.types["name"].oid
+ oid = _oids.NAME_OID
class StrDumperUnknown(_StrDumper):
class BytesDumper(Dumper):
- oid = postgres.types["bytea"].oid
+ oid = _oids.BYTEA_OID
_qprefix = b""
def __init__(self, cls: type, context: Optional[AdaptContext] = None):
class BytesBinaryDumper(Dumper):
format = Format.BINARY
- oid = postgres.types["bytea"].oid
+ oid = _oids.BYTEA_OID
def dump(self, obj: Buffer) -> Buffer:
return obj
adapters.register_dumper(str, StrDumper)
adapters.register_dumper(str, StrDumperUnknown)
- adapters.register_loader(INVALID_OID, TextLoader)
+ adapters.register_loader(_oids.INVALID_OID, TextLoader)
adapters.register_loader("bpchar", TextLoader)
adapters.register_loader("name", TextLoader)
adapters.register_loader("text", TextLoader)
adapters.register_dumper(memoryview, BytesBinaryDumper)
adapters.register_loader("bytea", ByteaLoader)
- adapters.register_loader(INVALID_OID, ByteaBinaryLoader)
+ adapters.register_loader(_oids.INVALID_OID, ByteaBinaryLoader)
adapters.register_loader("bytea", ByteaBinaryLoader)
from typing import Callable, Optional, TYPE_CHECKING
-from .. import postgres
+from .. import _oids
from ..pq import Format
from ..abc import AdaptContext
from ..adapt import Buffer, Dumper, Loader
class UUIDDumper(Dumper):
- oid = postgres.types["uuid"].oid
+ oid = _oids.UUID_OID
def dump(self, obj: "uuid.UUID") -> bytes:
return obj.hex.encode()