from .cursor import BaseCursor
from .types.oids import builtins, INVALID_OID
from .connection import BaseConnection
-from .utils.typing import DecodeFunc
TEXT_OID = builtins["text"].oid
return Loader.globals[INVALID_OID, format]
-@Loader.text(INVALID_OID)
-class UnknownLoader(Loader):
- """
- Fallback object to convert unknown types to Python
- """
-
- def __init__(self, oid: int, context: AdaptContext):
- super().__init__(oid, context)
- self.decode: DecodeFunc
- if self.connection is not None:
- self.decode = self.connection.codec.decode
- else:
- self.decode = codecs.lookup("utf8").decode
-
- def load(self, data: bytes) -> str:
- return self.decode(data)[0]
-
-
-@Loader.binary(INVALID_OID)
-def load_unknown_binary(data: bytes) -> bytes:
- return data
-
-
def _connection_from_context(
context: AdaptContext,
) -> Optional[BaseConnection]:
cdef void fill_row_loader(RowLoader *loader, object pyloader):
loader.pyloader = <PyObject *>pyloader
- print(pyloader)
cdef CLoader cloader
cloader = cloaders.get(pyloader)
if cloader is not None:
from psycopg3 import adapt
from psycopg3.types import text
register_c_loader(text.StringLoader.load, load_text, get_context_text)
- register_c_loader(text.NameLoader.load, load_text, get_context_text)
+ register_c_loader(text.UnknownLoader.load, load_text, get_context_text)
register_c_loader(text.load_bytea_text, load_bytea_text)
register_c_loader(text.load_bytea_binary, load_bytea_binary)
- register_c_loader(adapt.UnknownLoader.load, load_unknown_text)
- register_c_loader(adapt.load_unknown_binary, load_unknown_binary)
cdef object load_text(const char *data, size_t length, void *context)
cdef void *get_context_text(object loader)
-cdef object load_unknown_text(const char *data, size_t length, void *context)
-cdef object load_unknown_binary(const char *data, size_t length, void *context)
from ..adapt import Dumper, Loader, AdaptContext
from ..utils.typing import EncodeFunc, DecodeFunc
from ..pq import Escaping
-from .oids import builtins
+from .oids import builtins, INVALID_OID
TEXT_OID = builtins["text"].oid
BYTEA_OID = builtins["bytea"].oid
@Loader.binary(builtins["text"].oid)
@Loader.text(builtins["varchar"].oid)
@Loader.binary(builtins["varchar"].oid)
+@Loader.text(INVALID_OID)
class StringLoader(Loader):
decode: Optional[DecodeFunc]
@Loader.binary(builtins["name"].oid)
@Loader.text(builtins["bpchar"].oid)
@Loader.binary(builtins["bpchar"].oid)
-class NameLoader(Loader):
+class UnknownLoader(Loader):
def __init__(self, oid: int, context: AdaptContext):
super().__init__(oid, context)
@Loader.binary(builtins["bytea"].oid)
+@Loader.binary(INVALID_OID)
def load_bytea_binary(data: bytes) -> bytes:
return data
cdef object load_bytea_binary(const char *data, size_t length, void *context):
return data[:length]
-
-
-cdef object load_unknown_text(const char *data, size_t length, void *context):
- # TODO: codec
- return PyUnicode_DecodeUTF8(data, length, NULL)
-
-
-cdef object load_unknown_binary(const char *data, size_t length, void *context):
- return PyBytes_FromStringAndSize(data, length)