diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-10-24 16:38:07 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-10-24 16:38:07 +0000 |
| commit | 52b1ace6768a7f00b411d5f8b86ad8d1f84666b8 (patch) | |
| tree | 844505a47a826b9d37a8717d2b59215493916452 /test | |
| parent | 2e8b1639f82547b1f6ba3a14aa9bfeb7b505cb91 (diff) | |
| download | sqlalchemy-52b1ace6768a7f00b411d5f8b86ad8d1f84666b8.tar.gz | |
- ResultProxy internals have been overhauled to greatly reduce
method call counts when fetching columns that have no
type-level processing applied. Provides a 100% speed
improvement when fetching large result sets with no unicode
conversion. Many thanks to Elixir's Gaƫtan de Menten
for this dramatic improvement ! [ticket:1586]
Diffstat (limited to 'test')
| -rw-r--r-- | test/aaa_profiling/test_resultset.py | 39 | ||||
| -rw-r--r-- | test/sql/test_query.py | 19 |
2 files changed, 57 insertions, 1 deletions
diff --git a/test/aaa_profiling/test_resultset.py b/test/aaa_profiling/test_resultset.py new file mode 100644 index 000000000..d67f9560c --- /dev/null +++ b/test/aaa_profiling/test_resultset.py @@ -0,0 +1,39 @@ +from sqlalchemy import * +from sqlalchemy.test import * + +NUM_FIELDS = 10 +NUM_RECORDS = 1000 + +class ResultSetTest(TestBase, AssertsExecutionResults): + __only_on__ = 'sqlite' + + @classmethod + def setup_class(cls): + global t, t2, metadata + + metadata = MetaData(testing.db) + t = Table('table', metadata, *[Column("field%d" % fnum, String) for fnum in range(NUM_FIELDS)]) + t2 = Table('table2', metadata, *[Column("field%d" % fnum, Unicode) for fnum in range(NUM_FIELDS)]) + + def setup(self): + metadata.create_all() + t.insert().execute( + [dict(("field%d" % fnum, u"value%d" % fnum) + for fnum in range(NUM_FIELDS)) for r_num in range(NUM_RECORDS)] + ) + t2.insert().execute( + [dict(("field%d" % fnum, u"value%d" % fnum) + for fnum in range(NUM_FIELDS)) for r_num in range(NUM_RECORDS)] + ) + + def teardown(self): + metadata.drop_all() + + @profiling.function_call_count(14416) + def test_string(self): + [tuple(row) for row in t.select().execute().fetchall()] + + @profiling.function_call_count(44406) + def test_unicode(self): + [tuple(row) for row in t2.select().execute().fetchall()] + diff --git a/test/sql/test_query.py b/test/sql/test_query.py index 05c61ee47..0e1787e9e 100644 --- a/test/sql/test_query.py +++ b/test/sql/test_query.py @@ -2,7 +2,7 @@ from sqlalchemy.test.testing import eq_ import datetime from sqlalchemy import * from sqlalchemy import exc, sql, util -from sqlalchemy.engine import default +from sqlalchemy.engine import default, base from sqlalchemy.test import * from sqlalchemy.test.testing import eq_, assert_raises_message, assert_raises from sqlalchemy.test.schema import Table, Column @@ -614,6 +614,23 @@ class QueryTest(TestBase): lambda: r['user_id'] ) + r = util.pickle.loads(util.pickle.dumps(r)) + assert_raises_message( + exc.InvalidRequestError, + "Ambiguous column name", + lambda: r['user_id'] + ) + + result = users.outerjoin(addresses).select().execute() + result = base.BufferedColumnResultProxy(result.context) + r = result.first() + assert isinstance(r, base.BufferedColumnRow) + assert_raises_message( + exc.InvalidRequestError, + "Ambiguous column name", + lambda: r['user_id'] + ) + @testing.requires.subqueries def test_column_label_targeting(self): users.insert().execute(user_id=7, user_name='ed') |
