aliased-union-fix
All checks were successful
Deploy on push / deploy (push) Successful in 26s

This commit is contained in:
Untone 2024-05-18 16:16:09 +03:00
parent 5fe51e03bb
commit b7dbaa6e73
2 changed files with 11 additions and 16 deletions

View File

@ -1,4 +1,4 @@
from sqlalchemy import and_, distinct, func, join, select, CompoundSelect from sqlalchemy import and_, distinct, func, join, select
from sqlalchemy.orm import aliased from sqlalchemy.orm import aliased
from orm.author import Author, AuthorFollower from orm.author import Author, AuthorFollower
@ -181,12 +181,10 @@ def get_with_stat(q):
records = [] records = []
try: try:
with local_session() as session: with local_session() as session:
# Convert the CompoundSelect object to a Query object
if isinstance(q, CompoundSelect):
q = session.query().from_statement(q)
# detect author # detect author
is_author = f"{q}".lower().startswith("select author") is_author = f"{q}".lower().startswith("select author")
# Add stat columns to the query
q = add_author_stat_columns(q) if is_author else add_topic_stat_columns(q) q = add_author_stat_columns(q) if is_author else add_topic_stat_columns(q)
# execute query # execute query

View File

@ -1,7 +1,8 @@
import asyncio import asyncio
import json import json
from sqlalchemy import event, select from sqlalchemy import event, select, union
from sqlalchemy.orm import aliased
from orm.author import Author, AuthorFollower from orm.author import Author, AuthorFollower
from orm.reaction import Reaction from orm.reaction import Reaction
@ -81,17 +82,13 @@ def after_reaction_update(mapper, connection, reaction: Reaction):
.where(Reaction.id == reaction.reply_to) .where(Reaction.id == reaction.reply_to)
) )
author_query = ( author_aliased_query = aliased(union(author_subquery, replied_author_subquery))
select(author_subquery.subquery())
.select_from(author_subquery.subquery())
.union(
select(replied_author_subquery.subquery()).select_from(
replied_author_subquery.subquery()
)
)
)
for author_with_stat in get_with_stat(author_query): # Get authors with stat
authors_with_stat = get_with_stat(author_aliased_query)
# Cache authors
for author_with_stat in authors_with_stat:
asyncio.create_task(cache_author(author_with_stat.dict())) asyncio.create_task(cache_author(author_with_stat.dict()))
shout_query = select(Shout).select_from(Shout).where(Shout.id == reaction.shout) shout_query = select(Shout).select_from(Shout).where(Shout.id == reaction.shout)