Source code for sqlalchemy_jdbcapi.jdbc.types
"""
DB-API 2.0 type objects and constructors.
"""
from __future__ import annotations
import datetime
from typing import Any
# Type Objects for DB-API 2.0 compliance
[docs]
class DBAPITypeObject:
"""Base class for DB-API type objects."""
[docs]
def __init__(self, *values: Any) -> None:
self.values = frozenset(values)
def __eq__(self, other: Any) -> bool:
if isinstance(other, DBAPITypeObject):
return self.values == other.values
return other in self.values
def __hash__(self) -> int:
return hash(self.values)
# Type objects
STRING = DBAPITypeObject(str)
BINARY = DBAPITypeObject(bytes, bytearray)
NUMBER = DBAPITypeObject(int, float)
DATETIME = DBAPITypeObject(datetime.datetime, datetime.date, datetime.time)
ROWID = DBAPITypeObject(int)
# Date/Time constructors (DB-API 2.0 requires capitalized names)
[docs]
def Date(year: int, month: int, day: int) -> datetime.date: # noqa: N802
"""Construct a date object."""
return datetime.date(year, month, day)
[docs]
def Time(hour: int, minute: int, second: int) -> datetime.time: # noqa: N802
"""Construct a time object."""
return datetime.time(hour, minute, second)
[docs]
def Timestamp( # noqa: N802
year: int, month: int, day: int, hour: int, minute: int, second: int
) -> datetime.datetime:
"""Construct a timestamp object."""
return datetime.datetime(year, month, day, hour, minute, second) # noqa: DTZ001
[docs]
def DateFromTicks(ticks: float) -> datetime.date: # noqa: N802
"""Construct a date object from ticks since epoch."""
return datetime.date.fromtimestamp(ticks) # noqa: DTZ012
[docs]
def TimeFromTicks(ticks: float) -> datetime.time: # noqa: N802
"""Construct a time object from ticks since epoch."""
return datetime.datetime.fromtimestamp(ticks).time()
[docs]
def TimestampFromTicks(ticks: float) -> datetime.datetime: # noqa: N802
"""Construct a timestamp object from ticks since epoch."""
return datetime.datetime.fromtimestamp(ticks)
[docs]
def Binary(value: bytes | bytearray | str) -> bytes: # noqa: N802
"""Construct a binary object."""
if isinstance(value, str):
return value.encode("utf-8")
return bytes(value)