feat(api): changed main sessions' search&count logic

feat(DB): new index
This commit is contained in:
Taha Yassine Kraiem 2021-12-23 20:15:36 +01:00
parent 7d55e9d0da
commit 1ea681269b
4 changed files with 34 additions and 16 deletions

View file

@ -562,29 +562,40 @@ def search2_pg(data: schemas.SessionsSearchPayloadSchema, project_id, user_id, f
{query_part};""",
full_args)
else:
main_query = cur.mogrify(f"""SELECT * FROM
(SELECT DISTINCT ON(s.session_id) {SESSION_PROJECTION_COLS}
{query_part}
ORDER BY s.session_id desc) AS filtred_sessions
ORDER BY favorite DESC, issue_score DESC, {sort} {order};""",
main_query = cur.mogrify(f"""SELECT COUNT(full_sessions) AS count, JSONB_AGG(full_sessions) FILTER (WHERE rn <= 200) AS sessions
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY favorite DESC, issue_score DESC, session_id desc, start_ts desc) AS rn FROM
(SELECT DISTINCT ON(s.session_id) {SESSION_PROJECTION_COLS}
{query_part}
ORDER BY s.session_id desc) AS filtred_sessions
ORDER BY favorite DESC, issue_score DESC, {sort} {order}) AS full_sessions;""",
full_args)
# main_query = cur.mogrify(f"""SELECT * FROM
# (SELECT DISTINCT ON(s.session_id) {SESSION_PROJECTION_COLS}
# {query_part}
# ORDER BY s.session_id desc) AS filtred_sessions
# ORDER BY favorite DESC, issue_score DESC, {sort} {order};""",
# full_args)
print("--------------------")
print(main_query)
cur.execute(main_query)
print("Executed--------------------")
if count_only:
return helper.dict_to_camel_case(cur.fetchone())
sessions = []
total = cur.rowcount
row = cur.fetchone()
limit = 200
while row is not None and len(sessions) < limit:
if row.get("favorite"):
limit += 1
sessions.append(row)
row = cur.fetchone()
sessions = cur.fetchone()
total = sessions["count"]
sessions = sessions["sessions"]
# sessions = []
# total = cur.rowcount
# row = cur.fetchone()
# limit = 200
# while row is not None and len(sessions) < limit:
# if row.get("favorite"):
# limit += 1
# sessions.append(row)
# row = cur.fetchone()
if errors_only:
return sessions

View file

@ -15,4 +15,6 @@ CREATE TABLE traces
);
CREATE INDEX traces_user_id_idx ON traces (user_id);
CREATE INDEX traces_tenant_id_idx ON traces (tenant_id);
CREATE INDEX user_favorite_sessions_user_id_session_id_idx ON user_favorite_sessions(user_id,session_id);
COMMIT;

View file

@ -0,0 +1,5 @@
BEGIN;
CREATE INDEX user_favorite_sessions_user_id_session_id_idx ON user_favorite_sessions (user_id, session_id);
END;

View file

@ -598,7 +598,7 @@ $$
session_id bigint NOT NULL REFERENCES sessions (session_id) ON DELETE CASCADE,
PRIMARY KEY (user_id, session_id)
);
CREATE INDEX user_favorite_sessions_user_id_session_id_idx ON user_favorite_sessions (user_id, session_id);
-- --- assignments.sql ---