--- /dev/null
+.. change:: 3975
+ :tags: bug, oracle
+ :versions: 1.2.0b1, 1.1.10
+ :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.
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 import sql
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
oracle_resolve_synonyms=True)
self.assert_compile(parent.select(),
"SELECT %(test_schema)s_pt.id, "
- "%(test_schema)s_pt.data FROM %(test_schema)s_pt"
+ "%(test_schema)s_pt.data FROM %(test_schema)s_pt"
% {"test_schema": testing.config.test_schema})
select([parent]).execute().fetchall()
create_engine, url_string,
_initialize=False
)
+