-from sqlalchemy import func, Integer, String
+from sqlalchemy import func, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, Session, aliased
from test.lib.schema import Column
from sqlalchemy.ext.declarative import declarative_base
class A(Base):
__tablename__ = 'a'
id = Column(Integer, primary_key=True)
+
_value = Column("value", String)
@hybrid.hybrid_property
return A
+ def _relationship_fixture(self):
+ Base = declarative_base()
+
+ class A(Base):
+ __tablename__ = 'a'
+ id = Column(Integer, primary_key=True)
+ b_id = Column('bid', Integer, ForeignKey('b.id'))
+ _value = Column("value", String)
+
+ @hybrid.hybrid_property
+ def value(self):
+ return int(self._value) - 5
+
+ @value.expression
+ def value(cls):
+ return func.foo(cls._value) + cls.bar_value
+
+ @value.setter
+ def value(self, v):
+ self._value = v + 5
+
+ @hybrid.hybrid_property
+ def bar_value(cls):
+ return func.bar(cls._value)
+
+ class B(Base):
+ __tablename__ = 'b'
+ id = Column(Integer, primary_key=True)
+
+ as_ = relationship("A")
+
+ return A, B
+
def test_set_get(self):
A = self._fixture()
a1 = A(value=5)
"foo(a.value) + bar(a.value)"
)
+ def test_any(self):
+ A, B = self._relationship_fixture()
+ sess = Session()
+ self.assert_compile(
+ sess.query(B).filter(B.as_.any(value=5)),
+ "SELECT b.id AS b_id FROM b WHERE EXISTS "
+ "(SELECT 1 FROM a WHERE b.id = a.bid "
+ "AND foo(a.value) + bar(a.value) = :param_1)"
+ )
+
+
def test_aliased_expression(self):
A = self._fixture()
self.assert_compile(