~ubuntu-branches/debian/jessie/sqlalchemy/jessie

« back to all changes in this revision

Viewing changes to test/dialect/test_mxodbc.py

  • Committer: Package Import Robot
  • Author(s): Piotr Ożarowski, Jakub Wilk, Piotr Ożarowski
  • Date: 2013-07-06 20:53:52 UTC
  • mfrom: (1.4.23) (16.1.17 experimental)
  • Revision ID: package-import@ubuntu.com-20130706205352-ryppl1eto3illd79
Tags: 0.8.2-1
[ Jakub Wilk ]
* Use canonical URIs for Vcs-* fields.

[ Piotr Ożarowski ]
* New upstream release
* Upload to unstable
* Build depend on python3-all instead of -dev, extensions are not built for
  Python 3.X 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
from sqlalchemy import *
2
 
from test.lib.testing import eq_
3
 
from test.lib import engines
4
 
from test.lib import fixtures
5
 
 
6
 
# TODO: we should probably build mock bases for
7
 
# these to share with test_reconnect, test_parseconnect
8
 
class MockDBAPI(object):
9
 
    paramstyle = 'qmark'
10
 
    def __init__(self):
11
 
        self.log = []
12
 
    def connect(self, *args, **kwargs):
13
 
        return MockConnection(self)
14
 
 
15
 
class MockConnection(object):
16
 
    def __init__(self, parent):
17
 
        self.parent = parent
18
 
    def cursor(self):
19
 
        return MockCursor(self)
20
 
    def close(self):
21
 
        pass
22
 
    def rollback(self):
23
 
        pass
24
 
    def commit(self):
25
 
        pass
26
 
 
27
 
class MockCursor(object):
28
 
    description = None
29
 
    rowcount = None
30
 
    def __init__(self, parent):
31
 
        self.parent = parent
32
 
    def execute(self, *args, **kwargs):
33
 
        self.parent.parent.log.append('execute')
34
 
    def executedirect(self, *args, **kwargs):
35
 
        self.parent.parent.log.append('executedirect')
36
 
    def close(self):
37
 
        pass
 
2
from sqlalchemy.testing import eq_
 
3
from sqlalchemy.testing import engines
 
4
from sqlalchemy.testing import fixtures
 
5
from sqlalchemy.testing.mock import Mock
 
6
 
 
7
def mock_dbapi():
 
8
    return Mock(paramstyle='qmark',
 
9
                connect=Mock(
 
10
                        return_value=Mock(
 
11
                            cursor=Mock(
 
12
                                return_value=Mock(
 
13
                                                description=None,
 
14
                                                rowcount=None)
 
15
                                )
 
16
                        )
 
17
                )
 
18
            )
38
19
 
39
20
class MxODBCTest(fixtures.TestBase):
40
21
 
41
22
    def test_native_odbc_execute(self):
42
23
        t1 = Table('t1', MetaData(), Column('c1', Integer))
43
 
        dbapi = MockDBAPI()
 
24
        dbapi = mock_dbapi()
 
25
 
44
26
        engine = engines.testing_engine('mssql+mxodbc://localhost',
45
27
                options={'module': dbapi, '_initialize': False})
46
28
        conn = engine.connect()
47
29
 
48
30
        # crud: uses execute
49
 
 
50
31
        conn.execute(t1.insert().values(c1='foo'))
51
32
        conn.execute(t1.delete().where(t1.c.c1 == 'foo'))
52
 
        conn.execute(t1.update().where(t1.c.c1 == 'foo').values(c1='bar'
53
 
                     ))
 
33
        conn.execute(t1.update().where(t1.c.c1 == 'foo').values(c1='bar'))
54
34
 
55
35
        # select: uses executedirect
56
 
 
57
36
        conn.execute(t1.select())
58
37
 
59
38
        # manual flagging
60
 
 
61
39
        conn.execution_options(native_odbc_execute=True).\
62
40
                execute(t1.select())
63
41
        conn.execution_options(native_odbc_execute=False).\
64
 
                execute(t1.insert().values(c1='foo'
65
 
                ))
66
 
        eq_(dbapi.log, [
67
 
            'execute',
68
 
            'execute',
69
 
            'execute',
70
 
            'executedirect',
71
 
            'execute',
72
 
            'executedirect',
73
 
            ])
 
42
                execute(t1.insert().values(c1='foo'))
 
43
 
 
44
        eq_(
 
45
            [c[2] for c in
 
46
            dbapi.connect.return_value.cursor.return_value.execute.mock_calls],
 
47
            [{'direct': True}, {'direct': True}, {'direct': True},
 
48
                {'direct': True}, {'direct': False}, {'direct': True}]
 
49
        )