Skip to content
Snippets Groups Projects
Commit 7acb33d7 authored by Martin Mareš's avatar Martin Mareš
Browse files

DB: find_place_nth_parent()

parent 74b95e60
No related branches found
No related tags found
No related merge requests found
......@@ -11,8 +11,9 @@ from sqlalchemy import \
text, func, \
create_engine, inspect, select
from sqlalchemy.engine import Engine
from sqlalchemy.orm import relationship, sessionmaker, Session, class_mapper, joinedload
from sqlalchemy.orm import relationship, sessionmaker, Session, class_mapper, joinedload, aliased
from sqlalchemy.orm.attributes import get_history
from sqlalchemy.orm.query import Query
from sqlalchemy.dialects.postgresql import JSONB
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql.expression import CTE
......@@ -819,6 +820,15 @@ def get_place_descendants(place: Place, min_level: Optional[int] = None, max_lev
return q.all()
def filter_place_nth_parent(query: Query, place_attr: Any, n: int, parent_id: int) -> Query:
assert n >= 0
for _ in range(n):
pp = aliased(Place)
query = query.join(pp, pp.place_id == place_attr)
place_attr = pp.parent
return query.filter(place_attr == parent_id)
def get_object_changes(obj):
""" Given a model instance, returns dict of pending
changes waiting for database flush/commit.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment