OpenHome/venv/Lib/site-packages/sqlalchemy/testing/suite/test_unicode_ddl.py
2021-07-21 21:33:05 +02:00

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)"
),
)