summaryrefslogtreecommitdiff
path: root/test/sql/test_unicode.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2009-06-10 21:18:24 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2009-06-10 21:18:24 +0000
commit45cec095b4904ba71425d2fe18c143982dd08f43 (patch)
treeaf5e540fdcbf1cb2a3337157d69d4b40be010fa8 /test/sql/test_unicode.py
parent698a3c1ac665e7cd2ef8d5ad3ebf51b7fe6661f4 (diff)
downloadsqlalchemy-45cec095b4904ba71425d2fe18c143982dd08f43.tar.gz
- unit tests have been migrated from unittest to nose.
See README.unittests for information on how to run the tests. [ticket:970]
Diffstat (limited to 'test/sql/test_unicode.py')
-rw-r--r--test/sql/test_unicode.py138
1 files changed, 138 insertions, 0 deletions
diff --git a/test/sql/test_unicode.py b/test/sql/test_unicode.py
new file mode 100644
index 000000000..d75913267
--- /dev/null
+++ b/test/sql/test_unicode.py
@@ -0,0 +1,138 @@
+# coding: utf-8
+"""verrrrry basic unicode column name testing"""
+
+from sqlalchemy import *
+from sqlalchemy.test import *
+from sqlalchemy.test.engines import utf8_engine
+from sqlalchemy.sql import column
+
+class UnicodeSchemaTest(TestBase):
+ __requires__ = ('unicode_ddl',)
+
+ @classmethod
+ def setup_class(cls):
+ global unicode_bind, metadata, t1, t2, t3
+
+ unicode_bind = utf8_engine()
+
+ metadata = MetaData(unicode_bind)
+ t1 = Table('unitable1', metadata,
+ Column(u'méil', Integer, primary_key=True),
+ Column(u'\u6e2c\u8a66', Integer),
+ test_needs_fk=True,
+ )
+ t2 = Table(u'Unitéble2', metadata,
+ Column(u'méil', Integer, primary_key=True, key="a"),
+ Column(u'\u6e2c\u8a66', Integer, ForeignKey(u'unitable1.méil'),
+ key="b"
+ ),
+ test_needs_fk=True,
+ )
+
+ # Few DBs support Unicode foreign keys
+ if testing.against('sqlite'):
+ t3 = Table(u'\u6e2c\u8a66', metadata,
+ Column(u'\u6e2c\u8a66_id', Integer, primary_key=True,
+ autoincrement=False),
+ Column(u'unitable1_\u6e2c\u8a66', Integer,
+ ForeignKey(u'unitable1.\u6e2c\u8a66')
+ ),
+ Column(u'Unitéble2_b', Integer,
+ ForeignKey(u'Unitéble2.b')
+ ),
+ Column(u'\u6e2c\u8a66_self', Integer,
+ ForeignKey(u'\u6e2c\u8a66.\u6e2c\u8a66_id')
+ ),
+ test_needs_fk=True,
+ )
+ else:
+ t3 = Table(u'\u6e2c\u8a66', metadata,
+ Column(u'\u6e2c\u8a66_id', Integer, primary_key=True,
+ autoincrement=False),
+ Column(u'unitable1_\u6e2c\u8a66', Integer),
+ Column(u'Unitéble2_b', Integer),
+ Column(u'\u6e2c\u8a66_self', Integer),
+ test_needs_fk=True,
+ )
+ metadata.create_all()
+
+ def teardown(self):
+ if metadata.tables:
+ t3.delete().execute()
+ t2.delete().execute()
+ t1.delete().execute()
+
+ @classmethod
+ def teardown_class(cls):
+ global unicode_bind
+ metadata.drop_all()
+ del unicode_bind
+
+ def test_insert(self):
+ t1.insert().execute({u'méil':1, u'\u6e2c\u8a66':5})
+ t2.insert().execute({'a':1, 'b':1})
+ t3.insert().execute({u'\u6e2c\u8a66_id': 1,
+ u'unitable1_\u6e2c\u8a66': 5,
+ u'Unitéble2_b': 1,
+ u'\u6e2c\u8a66_self': 1})
+
+ assert t1.select().execute().fetchall() == [(1, 5)]
+ assert t2.select().execute().fetchall() == [(1, 1)]
+ assert t3.select().execute().fetchall() == [(1, 5, 1, 1)]
+
+ def test_reflect(self):
+ t1.insert().execute({u'méil':2, u'\u6e2c\u8a66':7})
+ t2.insert().execute({'a':2, 'b':2})
+ t3.insert().execute({u'\u6e2c\u8a66_id': 2,
+ u'unitable1_\u6e2c\u8a66': 7,
+ u'Unitéble2_b': 2,
+ u'\u6e2c\u8a66_self': 2})
+
+ meta = MetaData(unicode_bind)
+ tt1 = Table(t1.name, meta, autoload=True)
+ tt2 = Table(t2.name, meta, autoload=True)
+ tt3 = Table(t3.name, meta, autoload=True)
+
+ tt1.insert().execute({u'méil':1, u'\u6e2c\u8a66':5})
+ tt2.insert().execute({u'méil':1, u'\u6e2c\u8a66':1})
+ tt3.insert().execute({u'\u6e2c\u8a66_id': 1,
+ u'unitable1_\u6e2c\u8a66': 5,
+ u'Unitéble2_b': 1,
+ u'\u6e2c\u8a66_self': 1})
+
+ self.assert_(tt1.select(order_by=desc(u'méil')).execute().fetchall() ==
+ [(2, 7), (1, 5)])
+ self.assert_(tt2.select(order_by=desc(u'méil')).execute().fetchall() ==
+ [(2, 2), (1, 1)])
+ self.assert_(tt3.select(order_by=desc(u'\u6e2c\u8a66_id')).
+ execute().fetchall() ==
+ [(2, 7, 2, 2), (1, 5, 1, 1)])
+ meta.drop_all()
+ metadata.create_all()
+
+class EscapesDefaultsTest(testing.TestBase):
+ def test_default_exec(self):
+ metadata = MetaData(testing.db)
+ t1 = Table('t1', metadata,
+ Column(u'special_col', Integer, Sequence('special_col'), primary_key=True),
+ Column('data', String(50)) # to appease SQLite without DEFAULT VALUES
+ )
+ t1.create()
+
+ try:
+ engine = metadata.bind
+
+ # reset the identifier preparer, so that we can force it to cache
+ # a unicode identifier
+ engine.dialect.identifier_preparer = engine.dialect.preparer(engine.dialect)
+ select([column(u'special_col')]).select_from(t1).execute()
+ assert isinstance(engine.dialect.identifier_preparer.format_sequence(Sequence('special_col')), unicode)
+
+ # now execute, run the sequence. it should run in u"Special_col.nextid" or similar as
+ # a unicode object; cx_oracle asserts that this is None or a String (postgres lets it pass thru).
+ # ensure that base.DefaultRunner is encoding.
+ t1.insert().execute(data='foo')
+ finally:
+ t1.drop()
+
+