defmodule Plausible.Stats.CustomProps do @moduledoc """ Module for querying user defined 'custom properties'. """ alias Plausible.Stats.Filters use Plausible.ClickhouseRepo import Plausible.Stats.Base def fetch_prop_names(site, query) do case Filters.get_toplevel_filter(query, "event:props:") do [_op, "event:props:" <> key | _rest] -> [key] _ -> from(e in base_event_query(query), join: meta in fragment("meta"), hints: "ARRAY", on: true, select: meta.key, distinct: true ) |> maybe_allowed_props_only(site) |> ClickhouseRepo.all() end end def maybe_allowed_props_only(q, site) do case Plausible.Props.allowed_for(site) do :all -> q allowed_props -> from [..., m] in q, where: m.key in ^allowed_props end end end