summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/dialects/oracle/cx_oracle.py4
-rw-r--r--test/engine/test_reconnect.py3
-rw-r--r--test/requirements.py7
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,