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()
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()
def setup_class(cls): global unicode_bind, metadata, t1, t2, t3 unicode_bind = utf8_engine() metadata = MetaData(unicode_bind) 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, ) metadata.create_all()
def setup_class(cls): # trigger mysql _server_casing check... testing.db.connect().close() cls.bind = bind = engines.utf8_engine(options={"convert_unicode": True}) cls.metadata = metadata = MetaData() no_multibyte_period = set([(u"plain", u"col_plain", u"ix_plain")]) no_has_table = [ (u"no_has_table_1", u"col_Unit\u00e9ble", u"ix_Unit\u00e9ble"), (u"no_has_table_2", u"col_\u6e2c\u8a66", u"ix_\u6e2c\u8a66"), ] no_case_sensitivity = [ (u"\u6e2c\u8a66", u"col_\u6e2c\u8a66", u"ix_\u6e2c\u8a66"), (u"unit\u00e9ble", u"col_unit\u00e9ble", u"ix_unit\u00e9ble"), ] full = [ (u"Unit\u00e9ble", u"col_Unit\u00e9ble", u"ix_Unit\u00e9ble"), (u"\u6e2c\u8a66", u"col_\u6e2c\u8a66", u"ix_\u6e2c\u8a66"), ] # as you can see, our options for this kind of thing # are really limited unless you're on PG or SQLite # forget about it on these backends if testing.against("sybase", "maxdb", "oracle"): names = no_multibyte_period # mysql can't handle casing usually elif testing.against("mysql") and not testing.requires._has_mysql_fully_case_sensitive(): names = no_multibyte_period.union(no_case_sensitivity) # mssql + pyodbc + freetds can't compare multibyte names to # information_schema.tables.table_name elif testing.against("mssql"): names = no_multibyte_period.union(no_has_table) else: names = no_multibyte_period.union(full) for tname, cname, ixname in names: t = Table( tname, metadata, Column("id", sa.Integer, sa.Sequence(cname + "_id_seq"), primary_key=True), Column(cname, Integer), ) schema.Index(ixname, t.c[cname]) metadata.create_all(bind) cls.names = names
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 _prep_testing_database(options, file_config): from sqlalchemy.testing import engines from sqlalchemy import schema, inspect # also create alt schemas etc. here? if options.dropfirst: e = engines.utf8_engine() inspector = inspect(e) try: view_names = inspector.get_view_names() except NotImplementedError: pass else: for vname in view_names: e.execute( schema._DropView(schema.Table(vname, schema.MetaData()))) try: view_names = inspector.get_view_names(schema="test_schema") except NotImplementedError: pass else: for vname in view_names: e.execute( schema._DropView( schema.Table(vname, schema.MetaData(), schema="test_schema"))) for tname in reversed( inspector.get_table_names(order_by="foreign_key")): e.execute(schema.DropTable(schema.Table(tname, schema.MetaData()))) for tname in reversed( inspector.get_table_names(order_by="foreign_key", schema="test_schema")): e.execute( schema.DropTable( schema.Table(tname, schema.MetaData(), schema="test_schema"))) e.dispose()
def setup_class(cls): global unicode_bind, metadata, t1, t2, t3 unicode_bind = utf8_engine() metadata = MetaData(unicode_bind) 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, ) metadata.create_all()
def _prep_testing_database(options, file_config): from sqlalchemy.testing import engines from sqlalchemy import schema, inspect # also create alt schemas etc. here? if options.dropfirst: e = engines.utf8_engine() inspector = inspect(e) try: view_names = inspector.get_view_names() except NotImplementedError: pass else: for vname in view_names: e.execute(schema._DropView(schema.Table(vname, schema.MetaData()))) try: view_names = inspector.get_view_names(schema="test_schema") except NotImplementedError: pass else: for vname in view_names: e.execute(schema._DropView( schema.Table(vname, schema.MetaData(), schema="test_schema"))) for tname in reversed(inspector.get_table_names(order_by="foreign_key")): e.execute(schema.DropTable(schema.Table(tname, schema.MetaData()))) for tname in reversed(inspector.get_table_names( order_by="foreign_key", schema="test_schema")): e.execute(schema.DropTable( schema.Table(tname, schema.MetaData(), schema="test_schema"))) e.dispose()