v3 prisma queries update

This commit is contained in:
Francis Cao 2025-10-27 11:48:35 -07:00
parent 61b667c587
commit 2ffde37f5b
21 changed files with 119 additions and 108 deletions

View file

@ -118,6 +118,7 @@ function getCohortQuery(filters: QueryFilters = {}) {
(select distinct website_event.session_id
from website_event
join session on session.session_id = website_event.session_id
and session.website_id = website_event.website_id
where website_event.website_id = {{websiteId}}
and website_event.created_at between {{cohort_startDate}} and {{cohort_endDate}}
${filterQuery}
@ -165,7 +166,7 @@ function parseFilters(filters: Record<string, any>, options?: QueryOptions) {
return {
joinSessionQuery:
options?.joinSession || joinSession
? `inner join session on website_event.session_id = session.session_id`
? `inner join session on website_event.session_id = session.session_id and website_event.website_id = session.website_id`
: '',
dateQuery: getDateQuery(filters),
filterQuery: getFilterQuery(filters, options),
@ -225,8 +226,8 @@ async function pagedQuery<T>(model: string, criteria: T, filters?: QueryFilters)
async function pagedRawQuery(
query: string,
filters: QueryFilters,
queryParams: Record<string, any>,
filters: QueryFilters,
name?: string,
) {
const { page = 1, pageSize, orderBy, sortDescending = false } = filters;

View file

@ -19,17 +19,17 @@ async function relationalQuery(websiteId: string, eventId: string) {
return rawQuery(
`
select website_id as websiteId,
session_id as sessionId,
event_id as eventId,
url_path as urlPath,
event_name as eventName,
data_key as dataKey,
string_value as stringValue,
number_value as numberValue,
date_value as dateValue,
data_type as dataType,
created_at as createdAt
select website_id as "websiteId",
session_id as "sessionId",
event_id as "eventId",
url_path as "urlPath",
event_name as "eventName",
data_key as "dataKey",
string_value as "stringValue",
number_value as "numberValue",
date_value as "dateValue",
data_type as "dataType",
created_at as "createdAt"
from event_data
website_id = {{websiteId::uuid}}
event_id = {{eventId::uuid}}

View file

@ -18,7 +18,6 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) {
const { filterQuery, dateQuery, cohortQuery, queryParams } = parseFilters({
...filters,
websiteId,
search: `%${search}%`,
});
const searchQuery = search
@ -29,32 +28,33 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) {
return pagedRawQuery(
`
select
event_id as "id",
website_id as "websiteId",
session_id as "sessionId",
created_at as "createdAt",
hostname,
url_path as "urlPath",
url_query as "urlQuery",
referrer_path as "referrerPath",
referrer_query as "referrerQuery",
referrer_domain as "referrerDomain",
country as country,
website_event.event_id as "id",
website_event.website_id as "websiteId",
website_event.session_id as "sessionId",
website_event.created_at as "createdAt",
website_event.hostname,
website_event.url_path as "urlPath",
website_event.url_query as "urlQuery",
website_event.referrer_path as "referrerPath",
website_event.referrer_query as "referrerQuery",
website_event.referrer_domain as "referrerDomain",
session.country as country,
city as city,
device as device,
os as os,
browser as browser,
page_title as "pageTitle",
event_type as "eventType",
event_name as "eventName"
website_event.event_type as "eventType",
website_event.event_name as "eventName"
from website_event
${cohortQuery}
join session on website_event.session_id = session.session_id
where website_id = {{websiteId::uuid}}
join session on session.session_id = website_event.session_id
and session.website_id = website_event.website_id
where website_event.website_id = {{websiteId::uuid}}
${dateQuery}
${filterQuery}
${searchQuery}
order by created_at desc
order by website_event.created_at desc
`,
queryParams,
filters,

View file

@ -18,7 +18,7 @@ async function relationalQuery(websiteId: string) {
const result = await rawQuery(
`
select count(distinct session_id) as visitors
select count(distinct session_id) as "visitors"
from website_event
where website_id = {{websiteId::uuid}}
and created_at >= {{startDate}}

View file

@ -49,19 +49,19 @@ async function relationalQuery(
return rawQuery(
`
WITH prefix AS (
select case when utm_medium LIKE 'p%' OR
utm_medium LIKE '%ppc%' OR
utm_medium LIKE '%retargeting%' OR
utm_medium LIKE '%paid%' then 'paid' else 'organic' end prefix,
referrer_domain,
url_query,
utm_medium,
utm_source,
session_id,
visit_id,
select case when website_event.utm_medium LIKE 'p%' OR
website_event.utm_medium LIKE '%ppc%' OR
website_event.utm_medium LIKE '%retargeting%' OR
website_event.utm_medium LIKE '%paid%' then 'paid' else 'organic' end prefix,
website_event.referrer_domain,
website_event.url_query,
website_event.utm_medium,
website_event.utm_source,
website_event.session_id,
website_event.visit_id,
count(*) c,
min(created_at) min_time,
max(created_at) max_time
min(website_event.created_at) min_time,
max(website_event.created_at) max_time
from website_event
${cohortQuery}
${joinSessionQuery}
@ -70,12 +70,12 @@ async function relationalQuery(
${dateQuery}
${filterQuery}
group by prefix,
referrer_domain,
url_query,
utm_medium,
utm_source,
session_id,
visit_id),
website_event.referrer_domain,
website_event.url_query,
website_event.utm_medium,
website_event.utm_source,
website_event.session_id,
website_event.visit_id),
channels as (
select case

View file

@ -30,15 +30,15 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) {
return rawQuery(
`
WITH prefix AS (
select case when utm_medium LIKE 'p%' OR
utm_medium LIKE '%ppc%' OR
utm_medium LIKE '%retargeting%' OR
utm_medium LIKE '%paid%' then 'paid' else 'organic' end prefix,
referrer_domain,
url_query,
utm_medium,
utm_source,
session_id
select case when website_event.utm_medium LIKE 'p%' OR
website_event.utm_medium LIKE '%ppc%' OR
website_event.utm_medium LIKE '%retargeting%' OR
website_event.utm_medium LIKE '%paid%' then 'paid' else 'organic' end prefix,
website_event.referrer_domain,
website_event.url_query,
website_event.utm_medium,
website_event.utm_source,
website_event.session_id
from website_event
${cohortQuery}
${joinSessionQuery}

View file

@ -35,6 +35,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) {
${cohortQuery}
inner join session
on session.session_id = website_event.session_id
and session.website_id = website_event.website_id
where website_event.website_id = {{websiteId::uuid}}
${filterQuery}
${dateQuery}

View file

@ -51,6 +51,7 @@ async function relationalQuery(websiteId: string, column: string, filters: Query
from website_event
inner join session
on session.session_id = website_event.session_id
and session.website_id = website_event.website_id
where website_event.website_id = {{websiteId::uuid}}
and website_event.created_at between {{startDate}} and {{endDate}}
${searchQuery}

View file

@ -20,8 +20,8 @@ async function relationalQuery(websiteId: string) {
const result = await rawQuery(
`
select
min(created_at) as startDate,
max(created_at) as endDate
min(created_at) as "startDate",
max(created_at) as "endDate"
from website_event
where website_id = {{websiteId::uuid}}
and created_at >= {{startDate}}

View file

@ -24,13 +24,13 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) {
return rawQuery(
`
select
${getDateWeeklySQL('created_at', timezone)} as time,
count(distinct session_id) as value
${getDateWeeklySQL('website_event.created_at', timezone)} as time,
count(distinct website_event.session_id) as value
from website_event
${cohortQuery}
${joinSessionQuery}
where website_id = {{websiteId::uuid}}
and created_at between {{startDate}} and {{endDate}}
where website_event.website_id = {{websiteId::uuid}}
and website_event.created_at between {{startDate}} and {{endDate}}
${filterQuery}
group by time
order by 2

View file

@ -103,6 +103,7 @@ async function relationalQuery(
${filterQuery}
group by name, website_event.session_id, website_event.visit_id
) as t
where name != ''
group by name
order by visitors desc, visits desc
limit ${limit}

View file

@ -69,14 +69,14 @@ async function relationalQuery(
const eventQuery = `WITH events AS (
select distinct
session_id,
max(created_at) max_dt
website_event.session_id,
max(website_event.created_at) max_dt
from website_event
${cohortQuery}
${joinSessionQuery}
where website_id = {{websiteId::uuid}}
and created_at between {{startDate}} and {{endDate}}
and ${column} = {{step}}
where website_event.website_id = {{websiteId::uuid}}
and website_event.created_at between {{startDate}} and {{endDate}}
and website_event.${column} = {{step}}
${filterQuery}
group by 1),`;
@ -234,14 +234,14 @@ async function relationalQuery(
`
select
count(*) as "pageviews",
count(distinct session_id) as "visitors",
count(distinct visit_id) as "visits"
count(distinct website_event.session_id) as "visitors",
count(distinct website_event.visit_id) as "visits"
from website_event
${joinSessionQuery}
${cohortQuery}
where website_id = {{websiteId::uuid}}
and created_at between {{startDate}} and {{endDate}}
and ${column} = {{step}}
where website_event.website_id = {{websiteId::uuid}}
and website_event.created_at between {{startDate}} and {{endDate}}
and website_event.${column} = {{step}}
${filterQuery}
`,
queryParams,

View file

@ -67,12 +67,12 @@ async function relationalQuery(
if (levelNumber === 1) {
pv.levelOneQuery = `
WITH level1 AS (
select distinct session_id, created_at
select distinct website_event.session_id, website_event.created_at
from website_event
${cohortQuery}
${joinSessionQuery}
where website_id = {{websiteId::uuid}}
and created_at between {{startDate}} and {{endDate}}
where website_event.website_id = {{websiteId::uuid}}
and website_event.created_at between {{startDate}} and {{endDate}}
and ${column} ${operator} {{${i}}}
${filterQuery}
)`;

View file

@ -42,26 +42,26 @@ async function relationalQuery(
return rawQuery(
`
select count(*) as num,
select count(distinct website_event.session_id) as num,
(
select count(distinct session_id)
select count(distinct website_event.session_id)
from website_event
${cohortQuery}
${joinSessionQuery}
where website_id = {{websiteId::uuid}}
where website_event.website_id = {{websiteId::uuid}}
${dateQuery}
${filterQuery}
) as total
from website_event
${cohortQuery}
${joinSessionQuery}
where website_id = {{websiteId::uuid}}
where website_event.website_id = {{websiteId::uuid}}
and ${column} = {{value}}
${dateQuery}
${filterQuery}
`,
queryParams,
);
).then(results => results?.[0]);
}
async function clickhouseQuery(
@ -84,7 +84,7 @@ async function clickhouseQuery(
return rawQuery(
`
select count(*) as num,
select count(distinct session_id) as num,
(
select count(distinct session_id)
from website_event

View file

@ -117,16 +117,16 @@ async function relationalQuery(
`
WITH events AS (
select distinct
visit_id,
referrer_path,
coalesce(nullIf(event_name, ''), url_path) event,
row_number() OVER (PARTITION BY visit_id ORDER BY created_at) AS event_number
website_event.visit_id,
website_event.referrer_path,
coalesce(nullIf(website_event.event_name, ''), website_event.url_path) event,
row_number() OVER (PARTITION BY visit_id ORDER BY website_event.created_at) AS event_number
from website_event
${cohortQuery}
${joinSessionQuery}
where website_id = {{websiteId::uuid}}
and created_at between {{startDate}} and {{endDate}}),
${filterQuery}
where website_event.website_id = {{websiteId::uuid}}
and website_event.created_at between {{startDate}} and {{endDate}}
${filterQuery}),
${sequenceQuery}
select *
from sequences

View file

@ -37,13 +37,13 @@ async function relationalQuery(
return rawQuery(
`
select ${column} utm, count(*) as views
select website_event.${column} utm, count(*) as views
from website_event
${cohortQuery}
${joinSessionQuery}
where website_id = {{websiteId::uuid}}
and created_at between {{startDate}} and {{endDate}}
and coalesce(${column}, '') != ''
where website_event.website_id = {{websiteId::uuid}}
and website_event.created_at between {{startDate}} and {{endDate}}
and coalesce(website_event.${column}, '') != ''
${filterQuery}
group by 1
order by 2 desc

View file

@ -21,20 +21,23 @@ async function relationalQuery(websiteId: string, sessionId: string, filters: Qu
return rawQuery(
`
select
created_at as createdAt,
url_path as urlPath,
url_query as urlQuery,
referrer_domain as referrerDomain,
event_id as eventId,
event_type as eventType,
event_name as eventName,
visit_id as visitId,
event_id IN (SELECT event_id FROM event_data) AS hasData
from website_event e
where e.website_id = {websiteId:UUID}
and e.session_id = {sessionId:UUID}
and e.created_at between {startDate:DateTime64} and {endDate:DateTime64}
order by e.created_at desc
created_at as "createdAt",
url_path as "urlPath",
url_query as "urlQuery",
referrer_domain as "referrerDomain",
event_id as "eventId",
event_type as "eventType",
event_name as "eventName",
visit_id as "visitId",
event_id IN (select event_id
from event_data
where website_id = {{websiteId::uuid}}
and session_id = {{sessionId::uuid}}) AS "hasData"
from website_event
where website_id = {{websiteId::uuid}}
and session_id = {{sessionId::uuid}}
and created_at between {{startDate}} and {{endDate}}
order by created_at desc
limit 500
`,
{ websiteId, sessionId, startDate, endDate },

View file

@ -31,6 +31,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) {
${joinSessionQuery}
join session_data
on session_data.session_id = website_event.session_id
and session_data.website_id = website_event.website_id
where website_event.website_id = {{websiteId::uuid}}
and website_event.created_at between {{startDate}} and {{endDate}}
${filterQuery}

View file

@ -38,6 +38,7 @@ async function relationalQuery(
${joinSessionQuery}
join session_data
on session_data.session_id = website_event.session_id
and session_data.website_id = website_event.website_id
where website_event.website_id = {{websiteId::uuid}}
and website_event.created_at between {{startDate}} and {{endDate}}
and session_data.data_key = {{propertyName}}

View file

@ -44,6 +44,7 @@ async function relationalQuery(
from website_event
${cohortQuery}
join session on website_event.session_id = session.session_id
and website_event.website_id = session.website_id
where website_event.website_id = {{websiteId::uuid}}
and website_event.created_at between {{startDate}} and {{endDate}}
${filterQuery}

View file

@ -52,6 +52,7 @@ async function relationalQuery(websiteId: string, filters: QueryFilters) {
from website_event
${cohortQuery}
join session on session.session_id = website_event.session_id
and session.website_id = website_event.website_id
where website_event.website_id = {{websiteId::uuid}}
${dateQuery}
${filterQuery}