misleading warning when "non column elements" in selfref but we have remote side

Issue #3194 resolved
Mike Bayer repo owner created an issue

this warns "SAWarning: Non-simple column elements in primary join condition for property Foo.us - consider using remote() annotations to mark the remote side.". we need to qualify the warning for remote_side actually present.

from sqlalchemy import Table, Column, Integer, ForeignKeyConstraint, \
    MetaData, and_, func
from sqlalchemy.orm import mapper, relationship, configure_mappers

m = MetaData()


composite_selfref = Table(
    'composite_selfref', m,
    Column('id', Integer, primary_key=True),
    Column('group_id', Integer, primary_key=True),
    Column('parent_id', Integer),
    ForeignKeyConstraint(
        ['parent_id', 'group_id'],
        ['composite_selfref.id', 'composite_selfref.group_id']
    )
)


class Foo(object):
    pass


mapper(Foo, composite_selfref, properties={
    "us": relationship(
        Foo,
        primaryjoin=and_(
            composite_selfref.c.group_id ==
            func.foo(composite_selfref.c.group_id),
            composite_selfref.c.parent_id ==
            composite_selfref.c.id
        ),
        remote_side=set([composite_selfref.c.parent_id]),
    )
})


configure_mappers()

Comments (2)

  1. Mike Bayer reporter
    • Fixed warning that would emit when a complex self-referential primaryjoin contained functions, while at the same time remote_side was specified; the warning would suggest setting "remote side". It now only emits if remote_side isn't present. fixes #3194

    → <<cset f98c89d2bee2>>

  2. Mike Bayer reporter
    • Fixed warning that would emit when a complex self-referential primaryjoin contained functions, while at the same time remote_side was specified; the warning would suggest setting "remote side". It now only emits if remote_side isn't present. fixes #3194

    → <<cset 9eeb3a118d79>>

  3. Log in to comment