# Copyright (C) 2020 The Psycopg Team
-from typing import Any, NamedTuple, Optional, Sequence, TYPE_CHECKING
+from typing import Any, Optional, Sequence, TYPE_CHECKING
from operator import attrgetter
if TYPE_CHECKING:
from ._cursor_base import BaseCursor
-class ColumnData(NamedTuple):
- ftype: int
- fmod: int
- fsize: int
-
-
class Column(Sequence[Any]):
__module__ = "psycopg"
# COPY_OUT results have columns but no name
self._name = f"column_{index + 1}"
- self._data = ColumnData(
- ftype=res.ftype(index),
- fmod=res.fmod(index),
- fsize=res.fsize(index),
- )
- self._type = cursor.adapters.types.get(self._data.ftype)
+ self._ftype = res.ftype(index)
+ self._type = cursor.adapters.types.get(self._ftype)
+ self._fmod = res.fmod(index)
+ self._fsize = res.fsize(index)
_attrs = tuple(
attrgetter(attr)
parts = []
parts.append(self._type.name)
- mod = self._type.get_modifier(self._data.fmod)
+ mod = self._type.get_modifier(self._fmod)
if mod:
parts.append(f"({', '.join(map(str, mod))})")
@property
def type_code(self) -> int:
"""The numeric OID of the column."""
- return self._data.ftype
+ return self._ftype
@property
def display_size(self) -> Optional[int]:
"""The field size, for :sql:`varchar(n)`, None otherwise."""
- return self._type.get_display_size(self._data.fmod) if self._type else None
+ return self._type.get_display_size(self._fmod) if self._type else None
@property
def internal_size(self) -> Optional[int]:
"""The internal field size for fixed-size types, None otherwise."""
- fsize = self._data.fsize
+ fsize = self._fsize
return fsize if fsize >= 0 else None
@property
def precision(self) -> Optional[int]:
"""The number of digits for fixed precision types."""
- return self._type.get_precision(self._data.fmod) if self._type else None
+ return self._type.get_precision(self._fmod) if self._type else None
@property
def scale(self) -> Optional[int]:
"""The number of digits after the decimal point if available."""
- return self._type.get_scale(self._data.fmod) if self._type else None
+ return self._type.get_scale(self._fmod) if self._type else None
@property
def null_ok(self) -> Optional[bool]: