mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-05-09 02:09:53 -04:00
87bbba32bc
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]
96 lines
3.4 KiB
Python
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()
|
|
|