assert on primaryjoin/secondaryjoin

Issue #1087 resolved
Former user created an issue

Note by Michael Bayer: assert that primaryjoin/secondaryjoin are instances of ClauseElement

A primary join like this will cause the following exception which is difficult to trace back to the mistake in ones model.

vrecingrwfit = sao.relation('Vrecingrwfit', primaryjoin=

       ('Recipe.recipeid'=='vrecingrwfit.fk_recipeid'),

passive_deletes=True)

Traceback (most recent call last):

File "saTest.py", line 42, in <module> x = session.query(dbmin.Prefminimal).get(1) File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\orm\session.py", line 894, in query return self._query_cls(entities, self, **kwargs) File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\orm\query.py", line 97, in init self.setup_aliasizers(self._entities) File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\orm\query.py", line 111, in __setup_aliasizers mapper, selectable, is_aliased_class = _entity_info(entity, ent.entity_name) File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\orm\util.py", line 398, in _entity_info mapper = class_mapper(entity, entity_name, compile) File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\orm\util.py", line 488, in class_mapper mapper = mapper.compile() File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\orm\mapper.py", line 370, in compile mapper.__initialize_properties() File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\orm\mapper.py", line 391, in __initialize_properties prop.init(key, self) File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\orm\interfaces.py", line 378, in init self.do_init() File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\orm\properties.py", line 510, in do_init self._determine_synchronize_pairs() File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\orm\properties.py", line 605, in _determine_synchronize_pairs eq_pairs = criterion_as_pairs(self.primaryjoin, consider_as_foreign_keys=self._foreign_keys,
any_operator=self.viewonly) File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\sql\util.py", line 268, in criterion_as_pairs visitors.traverse(expression, {}, {'binary':visit_binary}) File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\sql\visitors.py", line 123, in traverse return traverse_using(iterate(obj, opts), obj, visitors) File "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta1-py2.5.egg \sqlalchemy\sql\visitors.py", line 115, in traverse_using meth = visitors.get(target.__visit_name
, None) AttributeError: 'bool' object has no attribute 'visit_name'