From fd07c22e6e104b2d8f295e2e4a8ca19d7f218513 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 4 Feb 2016 13:36:45 -0500 Subject: [PATCH] - add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) --- lib/sqlalchemy/dialects/oracle/cx_oracle.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/sqlalchemy/dialects/oracle/cx_oracle.py b/lib/sqlalchemy/dialects/oracle/cx_oracle.py index cfbb87e7bf..73ea65c663 100644 --- a/lib/sqlalchemy/dialects/oracle/cx_oracle.py +++ b/lib/sqlalchemy/dialects/oracle/cx_oracle.py @@ -415,6 +415,18 @@ class _OracleLong(oracle.LONG): class _OracleString(_NativeUnicodeMixin, sqltypes.String): pass +class _OracleEnum(_NativeUnicodeMixin, sqltypes.Enum): + def bind_processor(self, dialect): + enum_proc = sqltypes.Enum.bind_processor(self, dialect) + unicode_proc = _NativeUnicodeMixin.bind_processor(self, dialect) + + def process(value): + raw_str = enum_proc(value) + if unicode_proc: + raw_str = unicode_proc(raw_str) + return raw_str + return process + class _OracleUnicodeText( _LOBMixin, _NativeUnicodeMixin, sqltypes.UnicodeText): @@ -651,6 +663,7 @@ class OracleDialect_cx_oracle(OracleDialect): sqltypes.String: _OracleString, sqltypes.UnicodeText: _OracleUnicodeText, sqltypes.CHAR: _OracleChar, + sqltypes.Enum: _OracleEnum, # a raw LONG is a text type, but does *not* # get the LobMixin with cx_oracle. -- 2.47.2