.. changelog::
:version: 1.1.10
+ .. change:: 3975
+ :tags: bug, oracle
+ :versions: 1.2.0b1
+ :tickets: 3975
+
+ Fixed bug in cx_Oracle dialect where version string parsing would
+ fail for cx_Oracle version 6.0b1 due to the "b" character. Version
+ string parsing is now via a regexp rather than a simple split.
+
.. change:: 3980
:tags: bug, ext
:versions: 1.2.0b1
self._retry_on_12516 = _retry_on_12516
if hasattr(self.dbapi, 'version'):
- self.cx_oracle_ver = tuple([int(x) for x in
- self.dbapi.version.split('.')])
+ self.cx_oracle_ver = self._parse_cx_oracle_ver(self.dbapi.version)
+
else:
self.cx_oracle_ver = (0, 0, 0)
self.dbapi.BINARY: oracle.RAW(),
}
+ def _parse_cx_oracle_ver(self, version):
+ m = re.match(r'(\d+)\.(\d+)(?:\.(\d+))?', version)
+ if m:
+ return tuple(
+ int(x)
+ for x in m.group(1, 2, 3)
+ if x is not None)
+ else:
+ return (0, 0, 0)
+
@classmethod
def dbapi(cls):
import cx_Oracle
from sqlalchemy.testing.mock import Mock
+class DialectTest(fixtures.TestBase):
+ def test_cx_oracle_version_parse(self):
+ dialect = cx_oracle.OracleDialect_cx_oracle()
+
+ eq_(
+ dialect._parse_cx_oracle_ver("5.2"),
+ (5, 2)
+ )
+
+ eq_(
+ dialect._parse_cx_oracle_ver("5.0.1"),
+ (5, 0, 1)
+ )
+
+ eq_(
+ dialect._parse_cx_oracle_ver("6.0b1"),
+ (6, 0)
+ )
+
+
class OutParamTest(fixtures.TestBase, AssertsExecutionResults):
__only_on__ = 'oracle+cx_oracle'
__backend__ = True
create_engine, url_string,
_initialize=False
)
+