summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-12-19 12:14:52 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2014-12-19 12:14:52 -0500
commitd1ac6cb33af3b105db7cdb51411e10ac3bafff1f (patch)
tree80ec9997106226b0f15ac3173144dcafebad265e /lib
parentb92589e3a0b2bc52d842b6b543e5976b694cc214 (diff)
downloadsqlalchemy-d1ac6cb33af3b105db7cdb51411e10ac3bafff1f.tar.gz
- Fixed bug where using a :class:`.TypeDecorator` that implemented
a type that was also a :class:`.TypeDecorator` would fail with Python's "Cannot create a consistent method resolution order (MRO)" error, when any kind of SQL comparison expression were used against an object using this type.
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/sql/type_api.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/sqlalchemy/sql/type_api.py b/lib/sqlalchemy/sql/type_api.py
index d3e0a008e..d414daf2a 100644
--- a/lib/sqlalchemy/sql/type_api.py
+++ b/lib/sqlalchemy/sql/type_api.py
@@ -630,9 +630,13 @@ class TypeDecorator(TypeEngine):
@property
def comparator_factory(self):
- return type("TDComparator",
- (TypeDecorator.Comparator, self.impl.comparator_factory),
- {})
+ if TypeDecorator.Comparator in self.impl.comparator_factory.__mro__:
+ return self.impl.comparator_factory
+ else:
+ return type("TDComparator",
+ (TypeDecorator.Comparator,
+ self.impl.comparator_factory),
+ {})
def _gen_dialect_impl(self, dialect):
"""