Skip to content

Commit

Permalink
fix(fdb): ensure TEXT blob subtypes are read if still blob readers.
Browse files Browse the repository at this point in the history
Signed-off-by: Braden Mars <[email protected]>
  • Loading branch information
BradenM committed Jan 21, 2023
1 parent fce842a commit de9c992
Showing 1 changed file with 25 additions and 4 deletions.
29 changes: 25 additions & 4 deletions sqlalchemy_firebird/fdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,15 @@
""" # noqa

from .kinterbasdb import FBDialect_kinterbasdb
from sqlalchemy import util
from sqlalchemy import LargeBinary
from sqlalchemy import types as sqltypes
from sqlalchemy import util

from .base import _StringType
from .kinterbasdb import FBDialect_kinterbasdb


class _FBBlob(LargeBinary):
class _FBLargeBinary(LargeBinary):
def result_processor(self, dialect, coltype):
def process(value):
if value is not None:
Expand All @@ -74,12 +76,31 @@ def process(value):
return process


class _FBTEXT(_StringType, sqltypes.TEXT):
__visit_name__ = "TEXT"

def result_processor(self, dialect, coltype):
from fdb.fbcore import BlobReader

proc = super(sqltypes.TEXT, self).result_processor(dialect, coltype)

def process(value):
if proc:
value = proc(value)
if isinstance(value, BlobReader):
value = value.read()
return value

return process


class FBDialect_fdb(FBDialect_kinterbasdb):
driver = "fdb"
supports_statement_cache = True
is_interbase = False
colspecs = util.update_copy(
FBDialect_kinterbasdb.colspecs, {sqltypes.LargeBinary: _FBBlob}
FBDialect_kinterbasdb.colspecs,
{sqltypes.LargeBinary: _FBLargeBinary, sqltypes.TEXT: _FBTEXT},
)

def __init__(
Expand Down

0 comments on commit de9c992

Please sign in to comment.