variant_mapping = self._variant_mapping_for_set_table(column)
e = schema.CheckConstraint(
- type_coerce(column, self).in_(self.enums),
+ type_coerce(column, String()).in_(self.enums),
name=_NONE_NAME if self.name is None else self.name,
_create_rule=util.portable_instancemethod(
self._should_create_constraint,
return process
def bind_processor(self, dialect):
+ parent_processor = super(Enum, self).bind_processor(dialect)
+
def process(value):
value = self._db_value_for_elem(value)
if parent_processor:
value = parent_processor(value)
return value
- parent_processor = super(Enum, self).bind_processor(dialect)
return process
def result_processor(self, dialect, coltype):
from sqlalchemy.testing import engines
from sqlalchemy.testing import eq_
from sqlalchemy.testing import expect_deprecated_20
+from sqlalchemy.testing import expect_raises
from sqlalchemy.testing import expect_warnings
from sqlalchemy.testing import fixtures
from sqlalchemy.testing import is_
assert_raises(
(exc.DBAPIError,),
connection.exec_driver_sql,
- "insert into my_table " "(data) values('two')",
+ "insert into my_table (data) values('two')",
)
trans.rollback()
):
Enum(self.SomeEnum)
+ @testing.combinations(
+ (True, "native"), (False, "non_native"), id_="ai", argnames="native"
+ )
+ @testing.combinations(
+ (True, "omit_alias"), (False, "with_alias"), id_="ai", argnames="omit"
+ )
+ @testing.provide_metadata
+ @testing.skip_if('mysql < 8')
+ def test_duplicate_values_accepted(self, native, omit):
+ foo_enum = pep435_enum("foo_enum")
+ foo_enum("one", 1, "two")
+ foo_enum("three", 3, "four")
+ tbl = sa.Table(
+ "foo_table",
+ self.metadata,
+ sa.Column("id", sa.Integer),
+ sa.Column(
+ "data",
+ sa.Enum(
+ foo_enum,
+ native_enum=native,
+ omit_aliases=omit,
+ create_constraint=True,
+ ),
+ ),
+ )
+ t = sa.table("foo_table", sa.column("id"), sa.column("data"))
+
+ self.metadata.create_all(testing.db)
+ if omit:
+ with expect_raises(
+ (
+ exc.IntegrityError,
+ exc.DataError,
+ exc.OperationalError,
+ exc.DBAPIError,
+ )
+ ):
+ with testing.db.begin() as conn:
+ conn.execute(
+ t.insert(),
+ [
+ {"id": 1, "data": "four"},
+ {"id": 2, "data": "three"},
+ ],
+ )
+ else:
+ with testing.db.begin() as conn:
+ conn.execute(
+ t.insert(),
+ [{"id": 1, "data": "four"}, {"id": 2, "data": "three"}],
+ )
+
+ eq_(
+ conn.execute(t.select().order_by(t.c.id)).fetchall(),
+ [(1, "four"), (2, "three")],
+ )
+ eq_(
+ conn.execute(tbl.select().order_by(tbl.c.id)).fetchall(),
+ [(1, foo_enum.three), (2, foo_enum.three)],
+ )
+
MyPickleType = None