diff options
| -rw-r--r-- | lib/sqlalchemy/dialects/oracle/cx_oracle.py | 4 | ||||
| -rw-r--r-- | test/engine/test_reconnect.py | 3 | ||||
| -rw-r--r-- | test/requirements.py | 7 |
3 files changed, 12 insertions, 2 deletions
diff --git a/lib/sqlalchemy/dialects/oracle/cx_oracle.py b/lib/sqlalchemy/dialects/oracle/cx_oracle.py index 4e9f6314b..86562dfd0 100644 --- a/lib/sqlalchemy/dialects/oracle/cx_oracle.py +++ b/lib/sqlalchemy/dialects/oracle/cx_oracle.py @@ -863,6 +863,7 @@ class OracleDialect_cx_oracle(OracleDialect): size, precision, scale): # convert all NUMBER with precision + positive scale to Decimal # this almost allows "native decimal" mode. + if self.supports_native_decimal and \ defaultType == cx_Oracle.NUMBER and \ precision and scale > 0: @@ -971,7 +972,8 @@ class OracleDialect_cx_oracle(OracleDialect): def is_disconnect(self, e, connection, cursor): error, = e.args - if isinstance(e, self.dbapi.InterfaceError): + if isinstance(e, ( + self.dbapi.InterfaceError, self.dbapi.DatabaseError)): return "not connected" in str(e) elif hasattr(error, 'code'): # ORA-00028: your session has been killed diff --git a/test/engine/test_reconnect.py b/test/engine/test_reconnect.py index f798ff845..c690ae772 100644 --- a/test/engine/test_reconnect.py +++ b/test/engine/test_reconnect.py @@ -1003,6 +1003,9 @@ class InvalidateDuringResultTest(fixtures.TestBase): self.meta.drop_all() self.engine.dispose() + @testing.crashes( + "oracle", + "cx_oracle 6 doesn't allow a close like this due to open cursors") @testing.fails_if([ '+mysqlconnector', '+mysqldb', '+cymysql', '+pymysql', '+pg8000'], "Buffers the result set and doesn't check for connection close") diff --git a/test/requirements.py b/test/requirements.py index a83b8b533..737d654ae 100644 --- a/test/requirements.py +++ b/test/requirements.py @@ -713,8 +713,13 @@ class DefaultRequirements(SuiteRequirements): such as 319438950232418390.273596, 87673.594069654243 """ + def cx_oracle_6_config(config): + return config.db.driver == "cx_oracle" and \ + config.db.dialect.cx_oracle_ver >= (6, ) + return fails_if( - [('sqlite', None, None, 'TODO'), + [cx_oracle_6_config, + ('sqlite', None, None, 'TODO'), ("firebird", None, None, "Precision must be from 1 to 18"), ("sybase+pysybase", None, None, "TODO"), ('mssql+pymssql', None, None, |
