def _fixture(self, view): class Error(Exception): pass dialect = pyodbc.MSDialect_pyodbc() dialect.dbapi = Mock(Error=Error) dialect.server_version_info = base.MS_2012_VERSION result = [] def fail_on_exec(stmt,): if view is not None and view in stmt: result.append(("SERIALIZABLE",)) else: raise Error("that didn't work") connection = Mock( cursor=Mock( return_value=Mock( execute=fail_on_exec, fetchone=lambda: result[0] ) ) ) return dialect, connection
def _fixture(self, view_result): class Error(Exception): pass dialect = pyodbc.MSDialect_pyodbc() dialect.dbapi = Mock(Error=Error) dialect.server_version_info = base.MS_2012_VERSION result = [] def fail_on_exec(stmt, ): result.clear() if "SELECT name FROM sys.system_views" in stmt: if view_result: result.append((view_result, )) elif re.match( ".*SELECT CASE transaction_isolation_level.*FROM sys.%s" % (view_result, ), stmt, re.S, ): result.append(("SERIALIZABLE", )) else: assert False connection = Mock(cursor=Mock(return_value=Mock( execute=fail_on_exec, fetchone=lambda: result[0] if result else None, ))) return dialect, connection
def test_pyodbc_version_fallback(self): dialect = pyodbc.MSDialect_pyodbc() dialect.dbapi = Mock() for vers, expected in [("11.0.9216.62", (11, 0, 9216, 62)), ("notsqlserver.11.foo.0.9216.BAR.62", (11, 0, 9216, 62)), ("Not SQL Server Version 10.5", (5, ))]: conn = Mock(scalar=Mock( side_effect=exc.DBAPIError("stmt", "params", None)), connection=Mock(getinfo=Mock(return_value=vers))) eq_(dialect._get_server_version_info(conn), expected)
def test_pyodbc_version_productversion(self, mock_conn_scalar): dialect = pyodbc.MSDialect_pyodbc() conn = mock_conn_scalar("11.0.9216.62") eq_(dialect._get_server_version_info(conn), (11, 0, 9216, 62))
def test_pyodbc_version_productversion(self): dialect = pyodbc.MSDialect_pyodbc() conn = Mock(scalar=Mock(return_value="11.0.9216.62")) eq_(dialect._get_server_version_info(conn), (11, 0, 9216, 62))