diff options
Diffstat (limited to 'test/sql/unicode.py')
-rw-r--r-- | test/sql/unicode.py | 56 |
1 files changed, 41 insertions, 15 deletions
diff --git a/test/sql/unicode.py b/test/sql/unicode.py index 7ce42bf4c..f882c2a5f 100644 --- a/test/sql/unicode.py +++ b/test/sql/unicode.py @@ -1,23 +1,27 @@ # coding: utf-8 -import testbase +"""verrrrry basic unicode column name testing""" +import testbase from sqlalchemy import * +from sqlalchemy.orm import mapper, relation, create_session, eagerload +from testlib import * -"""verrrrry basic unicode column name testing""" -class UnicodeSchemaTest(testbase.PersistTest): +class UnicodeSchemaTest(PersistTest): def setUpAll(self): - global metadata, t1, t2 - metadata = MetaData(engine=testbase.db) + global unicode_bind, metadata, t1, t2 + + unicode_bind = self._unicode_bind() + + metadata = MetaData(unicode_bind) t1 = Table('unitable1', metadata, Column(u'méil', Integer, primary_key=True), - Column(u'éXXm', Integer), + Column(u'\u6e2c\u8a66', Integer), ) - t2 = Table(u'unitéble2', metadata, + t2 = Table(u'Unitéble2', metadata, Column(u'méil', Integer, primary_key=True, key="a"), - Column(u'éXXm', Integer, ForeignKey(u'unitable1.méil'), key="b"), - + Column(u'\u6e2c\u8a66', Integer, ForeignKey(u'unitable1.méil'), key="b"), ) metadata.create_all() @@ -26,24 +30,46 @@ class UnicodeSchemaTest(testbase.PersistTest): t1.delete().execute() def tearDownAll(self): + global unicode_bind metadata.drop_all() + del unicode_bind + + def _unicode_bind(self): + if testbase.db.name != 'mysql': + return testbase.db + else: + # most mysql installations don't default to utf8 connections + version = testbase.db.dialect.get_version_info(testbase.db) + if version < (4, 1): + raise AssertionError("Unicode not supported on MySQL < 4.1") + + c = testbase.db.connect() + if not hasattr(c.connection.connection, 'set_character_set'): + raise AssertionError( + "Unicode not supported on this MySQL-python version") + else: + c.connection.set_character_set('utf8') + c.detach() + + return c def test_insert(self): - t1.insert().execute({u'méil':1, u'éXXm':5}) + t1.insert().execute({u'méil':1, u'\u6e2c\u8a66':5}) t2.insert().execute({'a':1, 'b':1}) assert t1.select().execute().fetchall() == [(1, 5)] assert t2.select().execute().fetchall() == [(1, 1)] def test_reflect(self): - t1.insert().execute({u'méil':2, u'éXXm':7}) + t1.insert().execute({u'méil':2, u'\u6e2c\u8a66':7}) t2.insert().execute({'a':2, 'b':2}) - meta = MetaData(testbase.db) + meta = MetaData(unicode_bind) tt1 = Table(t1.name, meta, autoload=True) tt2 = Table(t2.name, meta, autoload=True) - tt1.insert().execute({u'méil':1, u'éXXm':5}) - tt2.insert().execute({u'méil':1, u'éXXm':1}) + + tt1.insert().execute({u'méil':1, u'\u6e2c\u8a66':5}) + tt2.insert().execute({u'méil':1, u'\u6e2c\u8a66':1}) assert tt1.select(order_by=desc(u'méil')).execute().fetchall() == [(2, 7), (1, 5)] assert tt2.select(order_by=desc(u'méil')).execute().fetchall() == [(2, 2), (1, 1)] @@ -57,7 +83,7 @@ class UnicodeSchemaTest(testbase.PersistTest): mapper(A, t1, properties={ 't2s':relation(B), 'a':t1.c[u'méil'], - 'b':t1.c[u'éXXm'] + 'b':t1.c[u'\u6e2c\u8a66'] }) mapper(B, t2) sess = create_session() |