From: Mike Bayer Date: Thu, 4 Feb 2016 18:36:45 +0000 (-0500) Subject: - add an impl for Enum to Oracle which has subclassing requirements X-Git-Tag: rel_1_1_0b1~98^2~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd07c22e6e104b2d8f295e2e4a8ca19d7f218513;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - 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...) --- 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.