summaryrefslogtreecommitdiff
path: root/test/dialect/test_mysql.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/dialect/test_mysql.py')
-rw-r--r--test/dialect/test_mysql.py126
1 files changed, 79 insertions, 47 deletions
diff --git a/test/dialect/test_mysql.py b/test/dialect/test_mysql.py
index 9fc71be78..64f65d8f6 100644
--- a/test/dialect/test_mysql.py
+++ b/test/dialect/test_mysql.py
@@ -1,4 +1,6 @@
-from sqlalchemy.test.testing import eq_
+# coding: utf-8
+
+from sqlalchemy.test.testing import eq_, assert_raises
# Py2K
import sets
@@ -9,6 +11,7 @@ from sqlalchemy import sql, exc
from sqlalchemy.dialects.mysql import base as mysql
from sqlalchemy.test.testing import eq_
from sqlalchemy.test import *
+from sqlalchemy.test.engines import utf8_engine
class TypesTest(TestBase, AssertsExecutionResults):
@@ -30,8 +33,8 @@ class TypesTest(TestBase, AssertsExecutionResults):
Column('num4', mysql.MSDouble),
Column('num5', mysql.MSDouble()),
Column('num6', mysql.MSMediumInteger),
- Column('enum1', mysql.MSEnum("'black'", "'white'")),
- Column('enum2', mysql.MSEnum("dog", "cat")),
+ Column('enum1', mysql.ENUM("'black'", "'white'")),
+ Column('enum2', mysql.ENUM("dog", "cat")),
)
try:
table.drop(checkfirst=True)
@@ -47,8 +50,8 @@ class TypesTest(TestBase, AssertsExecutionResults):
assert isinstance(t2.c.num4.type, mysql.MSDouble)
assert isinstance(t2.c.num5.type, mysql.MSDouble)
assert isinstance(t2.c.num6.type, mysql.MSMediumInteger)
- assert isinstance(t2.c.enum1.type, mysql.MSEnum)
- assert isinstance(t2.c.enum2.type, mysql.MSEnum)
+ assert isinstance(t2.c.enum1.type, mysql.ENUM)
+ assert isinstance(t2.c.enum2.type, mysql.ENUM)
t2.drop()
t2.create()
finally:
@@ -257,7 +260,7 @@ class TypesTest(TestBase, AssertsExecutionResults):
(mysql.MSLongText, [], {'ascii':True},
'LONGTEXT ASCII'),
- (mysql.MSEnum, ["foo", "bar"], {'unicode':True},
+ (mysql.ENUM, ["foo", "bar"], {'unicode':True},
'''ENUM('foo','bar') UNICODE''')
]
@@ -538,55 +541,55 @@ class TypesTest(TestBase, AssertsExecutionResults):
db = testing.db
enum_table = Table('mysql_enum', MetaData(testing.db),
- Column('e1', mysql.MSEnum("'a'", "'b'")),
- Column('e2', mysql.MSEnum("'a'", "'b'"),
+ Column('e1', mysql.ENUM("'a'", "'b'")),
+ Column('e2', mysql.ENUM("'a'", "'b'"),
nullable=False),
- Column('e3', mysql.MSEnum("'a'", "'b'", strict=True)),
- Column('e4', mysql.MSEnum("'a'", "'b'", strict=True),
+ Column('e2generic', Enum("a", "b"),
+ nullable=False),
+ Column('e3', mysql.ENUM("'a'", "'b'", strict=True)),
+ Column('e4', mysql.ENUM("'a'", "'b'", strict=True),
nullable=False),
- Column('e5', mysql.MSEnum("a", "b")),
- Column('e6', mysql.MSEnum("'a'", "b")),
+ Column('e5', mysql.ENUM("a", "b")),
+ Column('e5generic', Enum("a", "b")),
+ Column('e6', mysql.ENUM("'a'", "b")),
)
eq_(colspec(enum_table.c.e1),
"e1 ENUM('a','b')")
eq_(colspec(enum_table.c.e2),
"e2 ENUM('a','b') NOT NULL")
+ eq_(colspec(enum_table.c.e2generic),
+ "e2generic ENUM('a','b') NOT NULL")
eq_(colspec(enum_table.c.e3),
"e3 ENUM('a','b')")
eq_(colspec(enum_table.c.e4),
"e4 ENUM('a','b') NOT NULL")
eq_(colspec(enum_table.c.e5),
"e5 ENUM('a','b')")
+ eq_(colspec(enum_table.c.e5generic),
+ "e5generic ENUM('a','b')")
eq_(colspec(enum_table.c.e6),
"e6 ENUM('''a''','b')")
enum_table.drop(checkfirst=True)
enum_table.create()
- try:
- enum_table.insert().execute(e1=None, e2=None, e3=None, e4=None)
- self.assert_(False)
- except exc.SQLError:
- self.assert_(True)
-
- try:
- enum_table.insert().execute(e1='c', e2='c', e3='c',
- e4='c', e5='c', e6='c')
- self.assert_(False)
- except exc.InvalidRequestError:
- self.assert_(True)
+ assert_raises(exc.SQLError, enum_table.insert().execute, e1=None, e2=None, e3=None, e4=None)
+
+ assert_raises(exc.InvalidRequestError, enum_table.insert().execute,
+ e1='c', e2='c', e2generic='c', e3='c',
+ e4='c', e5='c', e5generic='c', e6='c')
enum_table.insert().execute()
- enum_table.insert().execute(e1='a', e2='a', e3='a',
- e4='a', e5='a', e6="'a'")
- enum_table.insert().execute(e1='b', e2='b', e3='b',
- e4='b', e5='b', e6='b')
+ enum_table.insert().execute(e1='a', e2='a', e2generic='a', e3='a',
+ e4='a', e5='a', e5generic='a', e6="'a'")
+ enum_table.insert().execute(e1='b', e2='b', e2generic='b', e3='b',
+ e4='b', e5='b', e5generic='b', e6='b')
res = enum_table.select().execute().fetchall()
- expected = [(None, 'a', None, 'a', None, None),
- ('a', 'a', 'a', 'a', 'a', "'a'"),
- ('b', 'b', 'b', 'b', 'b', 'b')]
+ expected = [(None, 'a', 'a', None, 'a', None, None, None),
+ ('a', 'a', 'a', 'a', 'a', 'a', 'a', "'a'"),
+ ('b', 'b', 'b', 'b', 'b', 'b', 'b', 'b')]
# This is known to fail with MySQLDB 1.2.2 beta versions
# which return these as sets.Set(['a']), sets.Set(['b'])
@@ -611,7 +614,36 @@ class TypesTest(TestBase, AssertsExecutionResults):
eq_(res, expected)
enum_table.drop()
-
+
+ def test_unicode_enum(self):
+ unicode_engine = utf8_engine()
+ metadata = MetaData(unicode_engine)
+ t1 = Table('table', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('value', Enum(u'réveillé', u'drôle', u'S’il')),
+ Column('value2', mysql.ENUM(u'réveillé', u'drôle', u'S’il'))
+ )
+ metadata.create_all()
+ try:
+ t1.insert().execute(value=u'drôle', value2=u'drôle')
+ t1.insert().execute(value=u'réveillé', value2=u'réveillé')
+ t1.insert().execute(value=u'S’il', value2=u'S’il')
+ eq_(t1.select().order_by(t1.c.id).execute().fetchall(),
+ [(1, u'drôle', u'drôle'), (2, u'réveillé', u'réveillé'), (3, u'S’il', u'S’il')]
+ )
+
+ # test reflection of the enum labels
+ m2 = MetaData(testing.db)
+ t2 = Table('table', m2, autoload=True)
+ # TODO: what's wrong with the last element ? is there
+ # latin-1 stuff forcing its way in ?
+ assert t2.c.value.type.enums[0:2] == (u'réveillé', u'drôle') #, u'S’il') # eh ?
+ assert t2.c.value2.type.enums[0:2] == (u'réveillé', u'drôle') #, u'S’il') # eh ?
+
+ finally:
+ metadata.drop_all()
+
+
@testing.exclude('mysql', '<', (4,), "3.23 can't handle an ENUM of ''")
@testing.uses_deprecated('Manually quoting ENUM value literals')
def test_enum_parse(self):
@@ -620,13 +652,13 @@ class TypesTest(TestBase, AssertsExecutionResults):
# MySQL 3.23 can't handle an ENUM of ''....
enum_table = Table('mysql_enum', MetaData(testing.db),
- Column('e1', mysql.MSEnum("'a'")),
- Column('e2', mysql.MSEnum("''")),
- Column('e3', mysql.MSEnum('a')),
- Column('e4', mysql.MSEnum('')),
- Column('e5', mysql.MSEnum("'a'", "''")),
- Column('e6', mysql.MSEnum("''", "'a'")),
- Column('e7', mysql.MSEnum("''", "'''a'''", "'b''b'", "''''")))
+ Column('e1', mysql.ENUM("'a'")),
+ Column('e2', mysql.ENUM("''")),
+ Column('e3', mysql.ENUM('a')),
+ Column('e4', mysql.ENUM('')),
+ Column('e5', mysql.ENUM("'a'", "''")),
+ Column('e6', mysql.ENUM("''", "'a'")),
+ Column('e7', mysql.ENUM("''", "'''a'''", "'b''b'", "''''")))
for col in enum_table.c:
self.assert_(repr(col))
@@ -635,13 +667,13 @@ class TypesTest(TestBase, AssertsExecutionResults):
reflected = Table('mysql_enum', MetaData(testing.db),
autoload=True)
for t in enum_table, reflected:
- eq_(t.c.e1.type.enums, ["a"])
- eq_(t.c.e2.type.enums, [""])
- eq_(t.c.e3.type.enums, ["a"])
- eq_(t.c.e4.type.enums, [""])
- eq_(t.c.e5.type.enums, ["a", ""])
- eq_(t.c.e6.type.enums, ["", "a"])
- eq_(t.c.e7.type.enums, ["", "'a'", "b'b", "'"])
+ eq_(t.c.e1.type.enums, ("a",))
+ eq_(t.c.e2.type.enums, ("",))
+ eq_(t.c.e3.type.enums, ("a",))
+ eq_(t.c.e4.type.enums, ("",))
+ eq_(t.c.e5.type.enums, ("a", ""))
+ eq_(t.c.e6.type.enums, ("", "a"))
+ eq_(t.c.e7.type.enums, ("", "'a'", "b'b", "'"))
finally:
enum_table.drop()
@@ -746,7 +778,7 @@ class ReflectionTest(TestBase, AssertsExecutionResults):
( mysql.MSBlob(1234), mysql.MSBlob()),
( mysql.MSMediumBlob(),),
( mysql.MSLongBlob(),),
- ( mysql.MSEnum("''","'fleem'"), ),
+ ( mysql.ENUM("''","'fleem'"), ),
]
columns = [Column('c%i' % (i + 1), t[0]) for i, t in enumerate(specs)]