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.
pull/1574/head
Robin Bisping 2022-10-22 19:00:57 +02:00
parent 0cb14f3f6c
commit ce572f09f2
7 changed files with 14 additions and 35 deletions

View File

@ -62,7 +62,7 @@ function getBetweenDates(field, start_at, end_at) {
and ${getDateFormat(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 query = Object.keys(filters).reduce((arr, key) => {
const filter = filters[key]; const filter = filters[key];
@ -122,7 +122,7 @@ function getFilterQuery(table, column, filters = {}, params = []) {
return query.join('\n'); 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 } = const { domain, url, event_url, referrer, os, browser, device, country, event_name, query } =
filters; filters;
@ -139,9 +139,9 @@ function parseFilters(table, column, filters = {}, params = [], sessionKey = 'se
os || browser || device || country os || browser || device || country
? `inner join session on ${table}.${sessionKey} = session.${sessionKey}` ? `inner join session on ${table}.${sessionKey} = session.${sessionKey}`
: '', : '',
pageviewQuery: getFilterQuery('pageview', column, pageviewFilters, params), pageviewQuery: getFilterQuery('pageview', pageviewFilters, params),
sessionQuery: getFilterQuery('session', column, sessionFilters, params), sessionQuery: getFilterQuery('session', sessionFilters, params),
eventQuery: getFilterQuery('event', column, eventFilters, params), eventQuery: getFilterQuery('event', eventFilters, params),
}; };
} }

View File

@ -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 query = Object.keys(filters).reduce((arr, key) => {
const filter = filters[key]; const filter = filters[key];
@ -145,7 +145,7 @@ function getFilterQuery(table, column, filters = {}, params = []) {
return query.join('\n'); 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 } = const { domain, url, event_url, referrer, os, browser, device, country, event_name, query } =
filters; filters;
@ -162,9 +162,9 @@ function parseFilters(table, column, filters = {}, params = [], sessionKey = 'se
os || browser || device || country os || browser || device || country
? `inner join session on ${table}.${sessionKey} = session.${sessionKey}` ? `inner join session on ${table}.${sessionKey} = session.${sessionKey}`
: '', : '',
pageviewQuery: getFilterQuery('pageview', column, pageviewFilters, params), pageviewQuery: getFilterQuery('pageview', pageviewFilters, params),
sessionQuery: getFilterQuery('session', column, sessionFilters, params), sessionQuery: getFilterQuery('session', sessionFilters, params),
eventQuery: getFilterQuery('event', column, eventFilters, params), eventQuery: getFilterQuery('event', eventFilters, params),
}; };
} }

View File

@ -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 params = [website_id, start_at, end_at];
const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters( const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters(
table, table,
column,
filters, filters,
params, params,
); );
@ -39,7 +38,6 @@ async function clickhouseQuery(website_id, start_at, end_at, column, table, filt
const params = [website_id]; const params = [website_id];
const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters( const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters(
table, table,
column,
filters, filters,
params, params,
'session_uuid', 'session_uuid',

View File

@ -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 { parseFilters, rawQuery } = prisma;
const params = [website_id, start_at, end_at]; const params = [website_id, start_at, end_at];
const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters( const { pageviewQuery, sessionQuery, eventQuery, joinSession } = parseFilters(
table, table,
column,
filters, filters,
params, params,
); );

View File

@ -21,12 +21,7 @@ async function relationalQuery(
) { ) {
const { getDateQuery, parseFilters, rawQuery } = prisma; const { getDateQuery, parseFilters, rawQuery } = prisma;
const params = [website_id, start_at, end_at]; const params = [website_id, start_at, end_at];
const { pageviewQuery, sessionQuery, joinSession } = parseFilters( const { pageviewQuery, sessionQuery, joinSession } = parseFilters('pageview', filters, params);
'pageview',
null,
filters,
params,
);
return rawQuery( return rawQuery(
`select ${getDateQuery('pageview.created_at', unit, timezone)} t, `select ${getDateQuery('pageview.created_at', unit, timezone)} t,
@ -56,7 +51,6 @@ async function clickhouseQuery(
const params = [website_id]; const params = [website_id];
const { pageviewQuery, sessionQuery, joinSession } = parseFilters( const { pageviewQuery, sessionQuery, joinSession } = parseFilters(
'pageview', 'pageview',
null,
filters, filters,
params, params,
sessionKey, sessionKey,

View File

@ -12,12 +12,7 @@ export async function getSessionMetrics(...args) {
async function relationalQuery(website_id, start_at, end_at, field, filters = {}) { async function relationalQuery(website_id, start_at, end_at, field, filters = {}) {
const { parseFilters, rawQuery } = prisma; const { parseFilters, rawQuery } = prisma;
const params = [website_id, start_at, end_at]; const params = [website_id, start_at, end_at];
const { pageviewQuery, sessionQuery, joinSession } = parseFilters( const { pageviewQuery, sessionQuery, joinSession } = parseFilters('pageview', filters, params);
'pageview',
null,
filters,
params,
);
return rawQuery( return rawQuery(
`select ${field} x, count(*) y `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 params = [website_id];
const { pageviewQuery, sessionQuery, joinSession } = parseFilters( const { pageviewQuery, sessionQuery, joinSession } = parseFilters(
'pageview', 'pageview',
null,
filters, filters,
params, params,
'session_uuid', 'session_uuid',

View File

@ -12,12 +12,7 @@ export async function getWebsiteStats(...args) {
async function relationalQuery(website_id, start_at, end_at, filters = {}) { async function relationalQuery(website_id, start_at, end_at, filters = {}) {
const { getDateQuery, getTimestampInterval, parseFilters, rawQuery } = prisma; const { getDateQuery, getTimestampInterval, parseFilters, rawQuery } = prisma;
const params = [website_id, start_at, end_at]; const params = [website_id, start_at, end_at];
const { pageviewQuery, sessionQuery, joinSession } = parseFilters( const { pageviewQuery, sessionQuery, joinSession } = parseFilters('pageview', filters, params);
'pageview',
null,
filters,
params,
);
return rawQuery( return rawQuery(
`select sum(t.c) as "pageviews", `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 params = [website_id];
const { pageviewQuery, sessionQuery, joinSession } = parseFilters( const { pageviewQuery, sessionQuery, joinSession } = parseFilters(
'pageview', 'pageview',
null,
filters, filters,
params, params,
'session_uuid', 'session_uuid',