diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-07-28 17:50:21 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-07-28 18:04:02 -0400 |
commit | f83cbd50d7d0710f9bd174690cd2ef17f91122f3 (patch) | |
tree | 5f6c69f07e3a3bbc949739a4c991c076c4a162dc | |
parent | 7997d7fdc3634e7dba9fd0113b8b85ef311bfeaa (diff) | |
download | sqlalchemy-setinputsizes_oracle_string.tar.gz |
See what happens if we setinputsizes for Stringsetinputsizes_oracle_string
Per Anthony Tuininga, setinputsizes() is important
particularly if you have a unicode value you want to line
up with an index under Python 3, because you want the type
to be bound using NVARCHAR2 and not VARCHAR2. Only if
we setinputsizes() for NVARCHAR2 will we get that effect.
So see at least if setinputsizes() works for STRING these
days or otherwise figure out what the problem was.
Additionally, the type object now for NVARCHAR2 is
cx_Oracle.NCHAR, so use that, and also remove some
old _cx_oracle_XYZ collections we aren't using to
reduce verbosity.
Change-Id: I4977f54796485ec454b20697ec20db6d70fb6f84
-rw-r--r-- | lib/sqlalchemy/dialects/oracle/cx_oracle.py | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/lib/sqlalchemy/dialects/oracle/cx_oracle.py b/lib/sqlalchemy/dialects/oracle/cx_oracle.py index 4e9f6314b..038cb8846 100644 --- a/lib/sqlalchemy/dialects/oracle/cx_oracle.py +++ b/lib/sqlalchemy/dialects/oracle/cx_oracle.py @@ -50,8 +50,7 @@ on the URL, or as keyword arguments to :func:`.create_engine()` are: * ``exclude_setinputsizes`` - a tuple or list of string DBAPI type names to be excluded from the "auto setinputsizes" feature. The type names here must match DBAPI types that are found in the "cx_Oracle" module namespace, - such as cx_Oracle.UNICODE, cx_Oracle.NCLOB, etc. Defaults to - ``(STRING, UNICODE)``. + such as cx_Oracle.NCHAR, cx_Oracle.NCLOB, etc. Defaults to ``()``. .. versionadded:: 0.8 specific DBAPI types can be excluded from the auto_setinputsizes feature via the exclude_setinputsizes attribute. @@ -95,7 +94,7 @@ Python 2: the advantage that the unicode conversion is global to all statements at the cx_Oracle driver level, meaning it works with raw textual SQL statements that have no typing information associated. However, this system - has been observed to incur signfiicant performance overhead, not only + has been observed to incur significant performance overhead, not only because it takes effect for all string values unconditionally, but also because cx_Oracle under Python 2 seems to use a pure-Python function call in order to do the decode operation, which under cPython can orders of @@ -373,7 +372,7 @@ class _OracleChar(_NativeUnicodeMixin, sqltypes.CHAR): class _OracleNVarChar(_NativeUnicodeMixin, sqltypes.NVARCHAR): def get_dbapi_type(self, dbapi): - return getattr(dbapi, 'UNICODE', dbapi.STRING) + return dbapi.NCHAR class _OracleText(_LOBMixin, sqltypes.Text): @@ -496,9 +495,9 @@ class OracleExecutionContext_cx_oracle(OracleExecutionContext): del param[fromname] if self.dialect.auto_setinputsizes: - # cx_oracle really has issues when you setinputsizes - # on String, including that outparams/RETURNING - # breaks for varchars + # setinputsizes for all datatypes. + # previously, we had problems with String but these seem + # to not be present. self.set_input_sizes( quoted_bind_names, exclude_types=self.dialect.exclude_setinputsizes @@ -666,7 +665,7 @@ class OracleDialect_cx_oracle(OracleDialect): def __init__(self, auto_setinputsizes=True, - exclude_setinputsizes=("STRING", "UNICODE"), + exclude_setinputsizes=(), auto_convert_lobs=True, threaded=True, allow_twophase=True, @@ -696,9 +695,6 @@ class OracleDialect_cx_oracle(OracleDialect): ).difference([None]) self.exclude_setinputsizes = types(*(exclude_setinputsizes or ())) - self._cx_oracle_string_types = types("STRING", "UNICODE", - "NCLOB", "CLOB") - self._cx_oracle_unicode_types = types("UNICODE", "NCLOB") self._cx_oracle_binary_types = types("BFILE", "CLOB", "NCLOB", "BLOB") self.supports_unicode_binds = self.cx_oracle_ver >= (5, 0) @@ -720,7 +716,6 @@ class OracleDialect_cx_oracle(OracleDialect): if self.cx_oracle_ver is None: # this occurs in tests with mock DBAPIs - self._cx_oracle_string_types = set() self._cx_oracle_with_unicode = False elif util.py3k or ( self.cx_oracle_ver >= (5,) and |