207 lines
6.6 KiB
Python
207 lines
6.6 KiB
Python
# coding: utf-8
|
|
"""verrrrry basic unicode column name testing"""
|
|
|
|
from sqlalchemy import desc
|
|
from sqlalchemy import ForeignKey
|
|
from sqlalchemy import Integer
|
|
from sqlalchemy import MetaData
|
|
from sqlalchemy import testing
|
|
from sqlalchemy import util
|
|
from sqlalchemy.testing import eq_
|
|
from sqlalchemy.testing import fixtures
|
|
from sqlalchemy.testing.schema import Column
|
|
from sqlalchemy.testing.schema import Table
|
|
from sqlalchemy.util import u
|
|
from sqlalchemy.util import ue
|
|
|
|
|
|
class UnicodeSchemaTest(fixtures.TablesTest):
|
|
__requires__ = ("unicode_ddl",)
|
|
__backend__ = True
|
|
|
|
@classmethod
|
|
def define_tables(cls, metadata):
|
|
global t1, t2, t3
|
|
|
|
t1 = Table(
|
|
u("unitable1"),
|
|
metadata,
|
|
Column(u("méil"), Integer, primary_key=True),
|
|
Column(ue("\u6e2c\u8a66"), Integer),
|
|
test_needs_fk=True,
|
|
)
|
|
t2 = Table(
|
|
u("Unitéble2"),
|
|
metadata,
|
|
Column(u("méil"), Integer, primary_key=True, key="a"),
|
|
Column(
|
|
ue("\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(
|
|
ue("\u6e2c\u8a66"),
|
|
metadata,
|
|
Column(
|
|
ue("\u6e2c\u8a66_id"),
|
|
Integer,
|
|
primary_key=True,
|
|
autoincrement=False,
|
|
),
|
|
Column(
|
|
ue("unitable1_\u6e2c\u8a66"),
|
|
Integer,
|
|
ForeignKey(ue("unitable1.\u6e2c\u8a66")),
|
|
),
|
|
Column(
|
|
u("Unitéble2_b"), Integer, ForeignKey(u("Unitéble2.b"))
|
|
),
|
|
Column(
|
|
ue("\u6e2c\u8a66_self"),
|
|
Integer,
|
|
ForeignKey(ue("\u6e2c\u8a66.\u6e2c\u8a66_id")),
|
|
),
|
|
test_needs_fk=True,
|
|
)
|
|
else:
|
|
t3 = Table(
|
|
ue("\u6e2c\u8a66"),
|
|
metadata,
|
|
Column(
|
|
ue("\u6e2c\u8a66_id"),
|
|
Integer,
|
|
primary_key=True,
|
|
autoincrement=False,
|
|
),
|
|
Column(ue("unitable1_\u6e2c\u8a66"), Integer),
|
|
Column(u("Unitéble2_b"), Integer),
|
|
Column(ue("\u6e2c\u8a66_self"), Integer),
|
|
test_needs_fk=True,
|
|
)
|
|
|
|
def test_insert(self, connection):
|
|
connection.execute(t1.insert(), {u("méil"): 1, ue("\u6e2c\u8a66"): 5})
|
|
connection.execute(t2.insert(), {u("a"): 1, u("b"): 1})
|
|
connection.execute(
|
|
t3.insert(),
|
|
{
|
|
ue("\u6e2c\u8a66_id"): 1,
|
|
ue("unitable1_\u6e2c\u8a66"): 5,
|
|
u("Unitéble2_b"): 1,
|
|
ue("\u6e2c\u8a66_self"): 1,
|
|
},
|
|
)
|
|
|
|
eq_(connection.execute(t1.select()).fetchall(), [(1, 5)])
|
|
eq_(connection.execute(t2.select()).fetchall(), [(1, 1)])
|
|
eq_(connection.execute(t3.select()).fetchall(), [(1, 5, 1, 1)])
|
|
|
|
def test_col_targeting(self, connection):
|
|
connection.execute(t1.insert(), {u("méil"): 1, ue("\u6e2c\u8a66"): 5})
|
|
connection.execute(t2.insert(), {u("a"): 1, u("b"): 1})
|
|
connection.execute(
|
|
t3.insert(),
|
|
{
|
|
ue("\u6e2c\u8a66_id"): 1,
|
|
ue("unitable1_\u6e2c\u8a66"): 5,
|
|
u("Unitéble2_b"): 1,
|
|
ue("\u6e2c\u8a66_self"): 1,
|
|
},
|
|
)
|
|
|
|
row = connection.execute(t1.select()).first()
|
|
eq_(row._mapping[t1.c[u("méil")]], 1)
|
|
eq_(row._mapping[t1.c[ue("\u6e2c\u8a66")]], 5)
|
|
|
|
row = connection.execute(t2.select()).first()
|
|
eq_(row._mapping[t2.c[u("a")]], 1)
|
|
eq_(row._mapping[t2.c[u("b")]], 1)
|
|
|
|
row = connection.execute(t3.select()).first()
|
|
eq_(row._mapping[t3.c[ue("\u6e2c\u8a66_id")]], 1)
|
|
eq_(row._mapping[t3.c[ue("unitable1_\u6e2c\u8a66")]], 5)
|
|
eq_(row._mapping[t3.c[u("Unitéble2_b")]], 1)
|
|
eq_(row._mapping[t3.c[ue("\u6e2c\u8a66_self")]], 1)
|
|
|
|
def test_reflect(self, connection):
|
|
connection.execute(t1.insert(), {u("méil"): 2, ue("\u6e2c\u8a66"): 7})
|
|
connection.execute(t2.insert(), {u("a"): 2, u("b"): 2})
|
|
connection.execute(
|
|
t3.insert(),
|
|
{
|
|
ue("\u6e2c\u8a66_id"): 2,
|
|
ue("unitable1_\u6e2c\u8a66"): 7,
|
|
u("Unitéble2_b"): 2,
|
|
ue("\u6e2c\u8a66_self"): 2,
|
|
},
|
|
)
|
|
|
|
meta = MetaData()
|
|
tt1 = Table(t1.name, meta, autoload_with=connection)
|
|
tt2 = Table(t2.name, meta, autoload_with=connection)
|
|
tt3 = Table(t3.name, meta, autoload_with=connection)
|
|
|
|
connection.execute(tt1.insert(), {u("méil"): 1, ue("\u6e2c\u8a66"): 5})
|
|
connection.execute(tt2.insert(), {u("méil"): 1, ue("\u6e2c\u8a66"): 1})
|
|
connection.execute(
|
|
tt3.insert(),
|
|
{
|
|
ue("\u6e2c\u8a66_id"): 1,
|
|
ue("unitable1_\u6e2c\u8a66"): 5,
|
|
u("Unitéble2_b"): 1,
|
|
ue("\u6e2c\u8a66_self"): 1,
|
|
},
|
|
)
|
|
|
|
eq_(
|
|
connection.execute(
|
|
tt1.select(order_by=desc(u("méil")))
|
|
).fetchall(),
|
|
[(2, 7), (1, 5)],
|
|
)
|
|
eq_(
|
|
connection.execute(
|
|
tt2.select(order_by=desc(u("méil")))
|
|
).fetchall(),
|
|
[(2, 2), (1, 1)],
|
|
)
|
|
eq_(
|
|
connection.execute(
|
|
tt3.select(order_by=desc(ue("\u6e2c\u8a66_id")))
|
|
).fetchall(),
|
|
[(2, 7, 2, 2), (1, 5, 1, 1)],
|
|
)
|
|
|
|
def test_repr(self):
|
|
meta = MetaData()
|
|
t = Table(
|
|
ue("\u6e2c\u8a66"), meta, Column(ue("\u6e2c\u8a66_id"), Integer)
|
|
)
|
|
|
|
if util.py2k:
|
|
eq_(
|
|
repr(t),
|
|
(
|
|
"Table('\\u6e2c\\u8a66', MetaData(), "
|
|
"Column('\\u6e2c\\u8a66_id', Integer(), "
|
|
"table=<\u6e2c\u8a66>), "
|
|
"schema=None)"
|
|
),
|
|
)
|
|
else:
|
|
eq_(
|
|
repr(t),
|
|
(
|
|
"Table('測試', MetaData(), "
|
|
"Column('測試_id', Integer(), "
|
|
"table=<測試>), "
|
|
"schema=None)"
|
|
),
|
|
)
|