From ce572f09f2692e276237fcf7f3f4841cb0a24e3b Mon Sep 17 00:00:00 2001 From: Robin Bisping Date: Sat, 22 Oct 2022 19:00:57 +0200 Subject: [PATCH] Fix missing function argument of getFilterQuery In getEventMetrics no `column` argument is passed to getFilterQuery. Thus, the subsequent arguments are shifted by one. This leads to wrong API responses, since the filters are not properly applied. One option is to pass a null value as the `column` argument. However, it is not used in getFilterQuery. Therefore, I removed it. --- lib/clickhouse.js | 10 +++++----- lib/prisma.js | 10 +++++----- queries/analytics/pageview/getPageviewMetrics.js | 2 -- queries/analytics/pageview/getPageviewParams.js | 3 +-- queries/analytics/pageview/getPageviewStats.js | 8 +------- queries/analytics/session/getSessionMetrics.js | 8 +------- queries/analytics/stats/getWebsiteStats.js | 8 +------- 7 files changed, 14 insertions(+), 35 deletions(-) diff --git a/lib/clickhouse.js b/lib/clickhouse.js index 519899f2a..351c89307 100644 --- a/lib/clickhouse.js +++ b/lib/clickhouse.js @@ -62,7 +62,7 @@ function getBetweenDates(field, start_at, end_at) { and ${getDateFormat(end_at)}`; } -function getFilterQuery(table, column, filters = {}, params = []) { +function getFilterQuery(table, filters = {}, params = []) { const query = Object.keys(filters).reduce((arr, key) => { const filter = filters[key]; @@ -122,7 +122,7 @@ function getFilterQuery(table, column, filters = {}, params = []) { return query.join('\n'); } -function parseFilters(table, column, filters = {}, params = [], sessionKey = 'session_id') { +function parseFilters(table, filters = {}, params = [], sessionKey = 'session_id') { const { domain, url, event_url, referrer, os, browser, device, country, event_name, query } = filters; @@ -139,9 +139,9 @@ function parseFilters(table, column, filters = {}, params = [], sessionKey = 'se os || browser || device || country ? `inner join session on ${table}.${sessionKey} = session.${sessionKey}` : '', - pageviewQuery: getFilterQuery('pageview', column, pageviewFilters, params), - sessionQuery: getFilterQuery('session', column, sessionFilters, params), - eventQuery: getFilterQuery('event', column, eventFilters, params), + pageviewQuery: getFilterQuery('pageview', pageviewFilters, params), + sessionQuery: getFilterQuery('session', sessionFilters, params), + eventQuery: getFilterQuery('event', eventFilters, params), }; } diff --git a/lib/prisma.js b/lib/prisma.js index b93afafa8..bc7e06ee6 100644 --- a/lib/prisma.js +++ b/lib/prisma.js @@ -85,7 +85,7 @@ function getTimestampInterval(field) { } } -function getFilterQuery(table, column, filters = {}, params = []) { +function getFilterQuery(table, filters = {}, params = []) { const query = Object.keys(filters).reduce((arr, key) => { const filter = filters[key]; @@ -145,7 +145,7 @@ function getFilterQuery(table, column, filters = {}, params = []) { return query.join('\n'); } -function parseFilters(table, column, filters = {}, params = [], sessionKey = 'session_id') { +function parseFilters(table, filters = {}, params = [], sessionKey = 'session_id') { const { domain, url, event_url, referrer, os, browser, device, country, event_name, query } = filters; @@ -162,9 +162,9 @@ function parseFilters(table, column, filters = {}, params = [], sessionKey = 'se os || browser || device || country ? `inner join session on ${table}.${sessionKey} = session.${sessionKey}` : '', - pageviewQuery: getFilterQuery('pageview', column, pageviewFilters, params), - sessionQuery: getFilterQuery('session', column, sessionFilters, params), - eventQuery: getFilterQuery('event', column, eventFilters, params), + pageviewQuery: getFilterQuery('pageview', pageviewFilters, params), + sessionQuery: getFilterQuery('session', sessionFilters, params), + eventQuery: getFilterQuery('event', eventFilters, params), }; } diff --git a/queries/analytics/pageview/getPageviewMetrics.js b/queries/analytics/pageview/getPageviewMetrics.js index d34f4c17e..abf2d12dd 100644 --- a/queries/analytics/pageview/getPageviewMetrics.js +++ b/queries/analytics/pageview/getPageviewMetrics.js @@ -14,7 +14,6 @@ async function relationalQuery(website_id, start_at, end_at, column, table, filt const params = [website_id, start_at, end_at]; const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters( table, - column, filters, params, ); @@ -39,7 +38,6 @@ async function clickhouseQuery(website_id, start_at, end_at, column, table, filt const params = [website_id]; const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters( table, - column, filters, params, 'session_uuid', diff --git a/queries/analytics/pageview/getPageviewParams.js b/queries/analytics/pageview/getPageviewParams.js index fa445da58..798176593 100644 --- a/queries/analytics/pageview/getPageviewParams.js +++ b/queries/analytics/pageview/getPageviewParams.js @@ -8,12 +8,11 @@ export async function getPageviewParams(...args) { }); } -async function relationalQuery(website_id, start_at, end_at, column, table, filters = {}) { +async function relationalQuery(website_id, start_at, end_at, table, filters = {}) { const { parseFilters, rawQuery } = prisma; const params = [website_id, start_at, end_at]; const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters( table, - column, filters, params, ); diff --git a/queries/analytics/pageview/getPageviewStats.js b/queries/analytics/pageview/getPageviewStats.js index da25ab0c6..3c7c3147d 100644 --- a/queries/analytics/pageview/getPageviewStats.js +++ b/queries/analytics/pageview/getPageviewStats.js @@ -21,12 +21,7 @@ async function relationalQuery( ) { const { getDateQuery, parseFilters, rawQuery } = prisma; const params = [website_id, start_at, end_at]; - const { pageviewQuery, sessionQuery, joinSession } = parseFilters( - 'pageview', - null, - filters, - params, - ); + const { pageviewQuery, sessionQuery, joinSession } = parseFilters('pageview', filters, params); return rawQuery( `select ${getDateQuery('pageview.created_at', unit, timezone)} t, @@ -56,7 +51,6 @@ async function clickhouseQuery( const params = [website_id]; const { pageviewQuery, sessionQuery, joinSession } = parseFilters( 'pageview', - null, filters, params, sessionKey, diff --git a/queries/analytics/session/getSessionMetrics.js b/queries/analytics/session/getSessionMetrics.js index 36eb75680..d95e15126 100644 --- a/queries/analytics/session/getSessionMetrics.js +++ b/queries/analytics/session/getSessionMetrics.js @@ -12,12 +12,7 @@ export async function getSessionMetrics(...args) { async function relationalQuery(website_id, start_at, end_at, field, filters = {}) { const { parseFilters, rawQuery } = prisma; const params = [website_id, start_at, end_at]; - const { pageviewQuery, sessionQuery, joinSession } = parseFilters( - 'pageview', - null, - filters, - params, - ); + const { pageviewQuery, sessionQuery, joinSession } = parseFilters('pageview', filters, params); return rawQuery( `select ${field} x, count(*) y @@ -42,7 +37,6 @@ async function clickhouseQuery(website_id, start_at, end_at, field, filters = {} const params = [website_id]; const { pageviewQuery, sessionQuery, joinSession } = parseFilters( 'pageview', - null, filters, params, 'session_uuid', diff --git a/queries/analytics/stats/getWebsiteStats.js b/queries/analytics/stats/getWebsiteStats.js index 5d280563b..1f9ba5659 100644 --- a/queries/analytics/stats/getWebsiteStats.js +++ b/queries/analytics/stats/getWebsiteStats.js @@ -12,12 +12,7 @@ export async function getWebsiteStats(...args) { async function relationalQuery(website_id, start_at, end_at, filters = {}) { const { getDateQuery, getTimestampInterval, parseFilters, rawQuery } = prisma; const params = [website_id, start_at, end_at]; - const { pageviewQuery, sessionQuery, joinSession } = parseFilters( - 'pageview', - null, - filters, - params, - ); + const { pageviewQuery, sessionQuery, joinSession } = parseFilters('pageview', filters, params); return rawQuery( `select sum(t.c) as "pageviews", @@ -46,7 +41,6 @@ async function clickhouseQuery(website_id, start_at, end_at, filters = {}) { const params = [website_id]; const { pageviewQuery, sessionQuery, joinSession } = parseFilters( 'pageview', - null, filters, params, 'session_uuid',