Files
sqlalchemy/test/aaa_profiling/test_resultset.py
T
Mike Bayer 87bbba32bc - [feature] The behavior of column targeting
in result sets is now case sensitive by
default.   SQLAlchemy for many years would
run a case-insensitive conversion on these values,
probably to alleviate early case sensitivity
issues with dialects like Oracle and
Firebird.   These issues have been more cleanly
solved in more modern versions so the performance
hit of calling lower() on identifiers is removed.
The case insensitive comparisons can be re-enabled
by setting "case_insensitive=False" on
create_engine().  [ticket:2423]
2012-04-24 16:03:00 -04:00

96 lines
3.4 KiB
Python

from sqlalchemy import *
from test.lib import *
NUM_FIELDS = 10
NUM_RECORDS = 1000
class ResultSetTest(fixtures.TestBase, AssertsExecutionResults):
__requires__ = 'cpython',
__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)])
# warm up type caches
t.select().execute().fetchall()
t2.select().execute().fetchall()
def teardown(self):
metadata.drop_all()
@profiling.function_call_count(versions={
'2.4': 13214,
'2.6':14416,
'2.7':14416,
'2.6+cextension': 336,
'2.7+cextension':336})
def test_string(self):
[tuple(row) for row in t.select().execute().fetchall()]
# sqlite3 returns native unicode. so shouldn't be an increase here.
@profiling.function_call_count(versions={
'2.7':14396,
'2.6':14396,
'2.6+cextension': 336,
'2.7+cextension':336})
def test_unicode(self):
[tuple(row) for row in t2.select().execute().fetchall()]
def test_contains_doesnt_compile(self):
row = t.select().execute().first()
c1 = Column('some column', Integer) + Column("some other column", Integer)
@profiling.function_call_count(9, variance=.15)
def go():
c1 in row
go()
class ExecutionTest(fixtures.TestBase):
__requires__ = 'cpython',
__only_on__ = 'sqlite'
def test_minimal_connection_execute(self):
# create an engine without any instrumentation.
e = create_engine('sqlite://')
c = e.connect()
# ensure initial connect activities complete
c.execute("select 1")
@profiling.function_call_count(versions={'2.7':40, '2.6':40, '2.5':35,
'2.4':21, '3':40},
variance=.10)
def go():
c.execute("select 1")
go()
def test_minimal_engine_execute(self):
# create an engine without any instrumentation.
e = create_engine('sqlite://')
# ensure initial connect activities complete
e.execute("select 1")
@profiling.function_call_count(versions={'2.4':41, '2.5':60,
'2.6':60, '3':61,
'2.7':60,
'2.6+cextension':60},
variance=.05)
def go():
e.execute("select 1")
go()