| defmodule Plausible.Stats.Base do | |
| use Plausible | |
| alias Plausible.Stats.{TableDecider, SQL} | |
| import Ecto.Query | |
| def base_event_query(query) do | |
| events_q = query_events(query) | |
| if TableDecider.events_join_sessions?(query) do | |
| sessions_q = | |
| from( | |
| s in query_sessions(query), | |
| select: %{session_id: s.session_id}, | |
| where: s.sign == 1, | |
| group_by: s.session_id | |
| ) | |
| from( | |
| e in events_q, | |
| join: sq in subquery(sessions_q), | |
| on: e.session_id == sq.session_id | |
| ) | |
| else | |
| events_q | |
| end | |
| end | |
| defp query_events(query) do | |
| q = | |
| from(e in "events_v2", | |
| where: ^SQL.WhereBuilder.build(:events, query), | |
| where: ^SQL.WhereBuilder.derived_name_filter(query) | |
| ) | |
| on_ee do | |
| q = Plausible.Stats.Sampling.add_query_hint(q, query) | |
| end | |
| q | |
| end | |
| def query_sessions(query) do | |
| q = from(s in "sessions_v2", where: ^SQL.WhereBuilder.build(:sessions, query)) | |
| on_ee do | |
| q = Plausible.Stats.Sampling.add_query_hint(q, query) | |
| end | |
| q | |
| end | |
| end | |