summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2021-12-29 19:26:08 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2022-01-01 11:28:24 -0500
commiteee7a3add99df2865e6d907f29f84f6d4ce22a8b (patch)
treea7c6be5c0dbba0238e6174adc734cb55d2af3faa /lib/sqlalchemy/sql
parente913ec8155b64e055f3a88ca9c1bb7f112202c76 (diff)
downloadsqlalchemy-eee7a3add99df2865e6d907f29f84f6d4ce22a8b.tar.gz
remove 2.0-removed Query elements
* :meth:`_orm.Query.join` no longer accepts the "aliased" and "from_joinpoint" arguments * :meth:`_orm.Query.join` no longer accepts chains of multiple join targets in one method call. * ``Query.from_self()`` and ``Query.with_polymorphic()`` are removed. Change-Id: I534d04b53a538a4fc374966eb2bc8eb98a16497d References: #7257
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r--lib/sqlalchemy/sql/coercions.py19
-rw-r--r--lib/sqlalchemy/sql/roles.py5
-rw-r--r--lib/sqlalchemy/sql/selectable.py23
3 files changed, 16 insertions, 31 deletions
diff --git a/lib/sqlalchemy/sql/coercions.py b/lib/sqlalchemy/sql/coercions.py
index fa21fbeef..1a0336c67 100644
--- a/lib/sqlalchemy/sql/coercions.py
+++ b/lib/sqlalchemy/sql/coercions.py
@@ -606,22 +606,15 @@ class InElementImpl(RoleImpl):
return element
-class OnClauseImpl(_CoerceLiterals, _ColumnCoercions, RoleImpl):
+class OnClauseImpl(_ColumnCoercions, RoleImpl):
__slots__ = ()
_coerce_consts = True
- def _text_coercion(self, element, argname=None, legacy=False):
- if legacy and isinstance(element, str):
- util.warn_deprecated_20(
- "Using strings to indicate relationship names in "
- "Query.join() is deprecated and will be removed in "
- "SQLAlchemy 2.0. Please use the class-bound attribute "
- "directly."
- )
- return element
-
- return super(OnClauseImpl, self)._text_coercion(element, argname)
+ def _literal_coercion(
+ self, element, name=None, type_=None, argname=None, is_crud=False, **kw
+ ):
+ self._raise_for_expected(element)
def _post_coercion(self, resolved, original_element=None, **kw):
# this is a hack right now as we want to use coercion on an
@@ -936,8 +929,6 @@ class JoinTargetImpl(RoleImpl):
# #6550, unless JoinTargetImpl._skip_clauseelement_for_target_match
# were set to False.
return original_element
- elif legacy and isinstance(resolved, roles.WhereHavingRole):
- return resolved
elif legacy and resolved._is_select_statement:
util.warn_deprecated(
"Implicit coercion of SELECT and textual SELECT "
diff --git a/lib/sqlalchemy/sql/roles.py b/lib/sqlalchemy/sql/roles.py
index 1f6a8ddf2..f076f1092 100644
--- a/lib/sqlalchemy/sql/roles.py
+++ b/lib/sqlalchemy/sql/roles.py
@@ -120,7 +120,10 @@ class StatementOptionRole(StructuralRole):
class OnClauseRole(AllowsLambdaRole, StructuralRole):
__slots__ = ()
- _role_name = "SQL expression for ON clause"
+ _role_name = (
+ "ON clause, typically a SQL expression or "
+ "ORM relationship attribute"
+ )
class WhereHavingRole(OnClauseRole):
diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py
index 8b35dc6ac..b53235a83 100644
--- a/lib/sqlalchemy/sql/selectable.py
+++ b/lib/sqlalchemy/sql/selectable.py
@@ -4636,7 +4636,7 @@ class SelectState(util.MemoizedSlots, CompileState):
class _SelectFromElements:
def _iterate_from_elements(self):
# note this does not include elements
- # in _setup_joins or _legacy_setup_joins
+ # in _setup_joins
seen = set()
for element in self._raw_columns:
@@ -4666,7 +4666,6 @@ class _MemoizedSelectEntities(
_traverse_internals = [
("_raw_columns", InternalTraversal.dp_clauseelement_list),
("_setup_joins", InternalTraversal.dp_setup_join_tuple),
- ("_legacy_setup_joins", InternalTraversal.dp_setup_join_tuple),
("_with_options", InternalTraversal.dp_executable_options),
]
@@ -4680,22 +4679,15 @@ class _MemoizedSelectEntities(
@classmethod
def _generate_for_statement(cls, select_stmt):
- if (
- select_stmt._setup_joins
- or select_stmt._legacy_setup_joins
- or select_stmt._with_options
- ):
+ if select_stmt._setup_joins or select_stmt._with_options:
self = _MemoizedSelectEntities()
self._raw_columns = select_stmt._raw_columns
self._setup_joins = select_stmt._setup_joins
- self._legacy_setup_joins = select_stmt._legacy_setup_joins
self._with_options = select_stmt._with_options
select_stmt._memoized_select_entities += (self,)
select_stmt._raw_columns = (
select_stmt._setup_joins
- ) = (
- select_stmt._legacy_setup_joins
) = select_stmt._with_options = ()
@@ -4730,7 +4722,6 @@ class Select(
__visit_name__ = "select"
_setup_joins = ()
- _legacy_setup_joins = ()
_memoized_select_entities = ()
_distinct = False
@@ -4757,7 +4748,6 @@ class Select(
("_order_by_clauses", InternalTraversal.dp_clauseelement_tuple),
("_group_by_clauses", InternalTraversal.dp_clauseelement_tuple),
("_setup_joins", InternalTraversal.dp_setup_join_tuple),
- ("_legacy_setup_joins", InternalTraversal.dp_setup_join_tuple),
("_correlate", InternalTraversal.dp_clauseelement_tuple),
("_correlate_except", InternalTraversal.dp_clauseelement_tuple),
("_limit_clause", InternalTraversal.dp_clauseelement),
@@ -4921,7 +4911,7 @@ class Select(
@_generative
def join(
- self: SelfSelect, target, onclause=None, isouter=False, full=False
+ self: SelfSelect, target, onclause=None, *, isouter=False, full=False
) -> SelfSelect:
r"""Create a SQL JOIN against this :class:`_expression.Select`
object's criterion
@@ -4990,7 +4980,7 @@ class Select(
)
return self
- def outerjoin_from(self, from_, target, onclause=None, full=False):
+ def outerjoin_from(self, from_, target, onclause=None, *, full=False):
r"""Create a SQL LEFT OUTER JOIN against this :class:`_expression.Select`
object's criterion
and apply generatively, returning the newly resulting
@@ -5009,8 +4999,9 @@ class Select(
from_,
target,
onclause=None,
+ *,
isouter=False,
- full=False,
+ full=False
) -> SelfSelect:
r"""Create a SQL JOIN against this :class:`_expression.Select`
object's criterion
@@ -5071,7 +5062,7 @@ class Select(
)
return self
- def outerjoin(self, target, onclause=None, full=False):
+ def outerjoin(self, target, onclause=None, *, full=False):
"""Create a left outer join.
Parameters are the same as that of :meth:`_expression.Select.join`.