_OnClauseElement = Union["ColumnElement[bool]", _JoinTargetProtocol]
_ForUpdateOfArgument = Union[
- # single column, Table, ORM Entity
+ # single column, Table, ORM entity
Union[
"_ColumnExpressionArgument[Any]",
"_FromClauseArgument",
],
- # or sequence of single column elements
- Sequence["_ColumnExpressionArgument[Any]"],
+ # or sequence of column, Table, ORM entity
+ Sequence[
+ Union[
+ "_ColumnExpressionArgument[Any]",
+ "_FromClauseArgument",
+ ]
+ ],
]
email: Mapped[str]
+class A(Base):
+ __tablename__ = "a"
+ id: Mapped[int] = mapped_column(primary_key=True)
+
+
+class B(Base):
+ __tablename__ = "b"
+ id: Mapped[int] = mapped_column(primary_key=True)
+
+
+a_table = Table("a", MetaData(), Column("id", Integer))
+b_table = Table("b", MetaData(), Column("id", Integer))
+
user_table = Table(
"user_table", MetaData(), Column("id", Integer), Column("email", String)
)
of=[user_table.c.id, user_table.c.email]
)
+# test 12730 - multiple FROM clauses
+s12730_1 = select(A, B).with_for_update(of=(A, B))
+s12730_2 = select(A, B).with_for_update(of=(A,))
+s12730_3 = select(A, B).with_for_update(of=[A, B])
+s12730_4 = select(A, B).with_for_update(of=[A, B])
+s12730_5 = select(a_table, b_table).with_for_update(of=[a_table, b_table])
+
+
# with_for_update but for query
session = Session()
user = session.query(User).with_for_update(of=User)
user = session.query(user_table).with_for_update(
of=[user_table.c.id, user_table.c.email]
)
+s12730_q1 = session.query(A, B).with_for_update(of=(A, B))
+s12730_q2 = session.query(A, B).with_for_update(of=(A, B))
+
# literal
assert_type(literal("5"), BindParameter[str])