From 86a38aa61ac17fa83b974137135833af68236681 Mon Sep 17 00:00:00 2001 From: Kraiem Taha Yassine Date: Thu, 14 Dec 2023 19:10:34 +0100 Subject: [PATCH] Api v1.17.0 (#1778) (#1779) * refactor(DB): Defined v1.17.0 delta scripts * feat(DB): support of UT flag in sessions table --- .../db/init_dbs/clickhouse/1.17.0/1.17.0.sql | 1 + .../db/init_dbs/postgresql/1.17.0/1.17.0.sql | 38 +++++++++++++++++++ .../db/init_dbs/postgresql/init_schema.sql | 8 ++-- .../rollback_dbs/clickhouse/1.17.0/1.17.0.sql | 1 + .../rollback_dbs/postgresql/1.17.0/1.17.0.sql | 29 ++++++++++++++ .../db/init_dbs/postgresql/1.17.0/1.17.0.sql | 38 +++++++++++++++++++ .../db/init_dbs/postgresql/init_schema.sql | 8 ++-- .../rollback_dbs/postgresql/1.17.0/1.17.0.sql | 30 +++++++++++++++ 8 files changed, 147 insertions(+), 6 deletions(-) create mode 100644 ee/scripts/schema/db/init_dbs/clickhouse/1.17.0/1.17.0.sql create mode 100644 ee/scripts/schema/db/init_dbs/postgresql/1.17.0/1.17.0.sql create mode 100644 ee/scripts/schema/db/rollback_dbs/clickhouse/1.17.0/1.17.0.sql create mode 100644 ee/scripts/schema/db/rollback_dbs/postgresql/1.17.0/1.17.0.sql create mode 100644 scripts/schema/db/init_dbs/postgresql/1.17.0/1.17.0.sql create mode 100644 scripts/schema/db/rollback_dbs/postgresql/1.17.0/1.17.0.sql diff --git a/ee/scripts/schema/db/init_dbs/clickhouse/1.17.0/1.17.0.sql b/ee/scripts/schema/db/init_dbs/clickhouse/1.17.0/1.17.0.sql new file mode 100644 index 000000000..912bee522 --- /dev/null +++ b/ee/scripts/schema/db/init_dbs/clickhouse/1.17.0/1.17.0.sql @@ -0,0 +1 @@ +CREATE OR REPLACE FUNCTION openreplay_version AS() -> 'v1.17.0-ee'; \ No newline at end of file diff --git a/ee/scripts/schema/db/init_dbs/postgresql/1.17.0/1.17.0.sql b/ee/scripts/schema/db/init_dbs/postgresql/1.17.0/1.17.0.sql new file mode 100644 index 000000000..45f2244bd --- /dev/null +++ b/ee/scripts/schema/db/init_dbs/postgresql/1.17.0/1.17.0.sql @@ -0,0 +1,38 @@ +\set previous_version 'v1.16.0-ee' +\set next_version 'v1.17.0-ee' +SELECT openreplay_version() AS current_version, + openreplay_version() = :'previous_version' AS valid_previous, + openreplay_version() = :'next_version' AS is_next +\gset + +\if :valid_previous +\echo valid previous DB version :'previous_version', starting DB upgrade to :'next_version' +BEGIN; +SELECT format($fn_def$ +CREATE OR REPLACE FUNCTION openreplay_version() + RETURNS text AS +$$ +SELECT '%1$s' +$$ LANGUAGE sql IMMUTABLE; +$fn_def$, :'next_version') +\gexec + +-- + +ALTER TABLE IF EXISTS public.sessions + ADD COLUMN IF NOT EXISTS has_ut_test boolean DEFAULT FALSE; + +-- !!! The following query takes a lot of time +CREATE INDEX IF NOT EXISTS sessions_session_id_has_ut_test_idx ON public.sessions (session_id, has_ut_test); + +UPDATE public.sessions +SET has_ut_test= TRUE +WHERE session_id IN (SELECT session_id FROM public.ut_tests_signals); + +COMMIT; + +\elif :is_next +\echo new version detected :'next_version', nothing to do +\else +\warn skipping DB upgrade of :'next_version', expected previous version :'previous_version', found :'current_version' +\endif \ No newline at end of file diff --git a/ee/scripts/schema/db/init_dbs/postgresql/init_schema.sql b/ee/scripts/schema/db/init_dbs/postgresql/init_schema.sql index 25ebe6a44..838016bc4 100644 --- a/ee/scripts/schema/db/init_dbs/postgresql/init_schema.sql +++ b/ee/scripts/schema/db/init_dbs/postgresql/init_schema.sql @@ -9,7 +9,7 @@ CREATE EXTENSION IF NOT EXISTS pgcrypto; CREATE OR REPLACE FUNCTION openreplay_version() RETURNS text AS $$ -SELECT 'v1.16.0-ee' +SELECT 'v1.17.0-ee' $$ LANGUAGE sql IMMUTABLE; @@ -460,6 +460,7 @@ $$ referrer text NULL DEFAULT NULL, base_referrer text NULL DEFAULT NULL, file_key bytea DEFAULT NULL, + has_ut_test boolean DEFAULT FALSE, metadata_1 text DEFAULT NULL, metadata_2 text DEFAULT NULL, metadata_3 text DEFAULT NULL, @@ -515,12 +516,13 @@ $$ CREATE INDEX sessions_utm_medium_gin_idx ON public.sessions USING GIN (utm_medium gin_trgm_ops); CREATE INDEX sessions_utm_campaign_gin_idx ON public.sessions USING GIN (utm_campaign gin_trgm_ops); CREATE INDEX sessions_base_referrer_gin_idx ON public.sessions USING GIN (base_referrer gin_trgm_ops); + CREATE INDEX sessions_session_id_has_ut_test_idx ON public.sessions (session_id, has_ut_test); ALTER TABLE public.sessions ADD CONSTRAINT web_browser_constraint CHECK ( - (sessions.platform = 'web' AND sessions.user_browser NOTNULL) OR - (sessions.platform != 'web' AND sessions.user_browser ISNULL)); + (sessions.platform = 'web' AND sessions.user_browser NOTNULL) OR + (sessions.platform != 'web' AND sessions.user_browser ISNULL)); ALTER TABLE public.sessions ADD CONSTRAINT web_user_browser_version_constraint CHECK ( sessions.platform = 'web' OR sessions.user_browser_version ISNULL); diff --git a/ee/scripts/schema/db/rollback_dbs/clickhouse/1.17.0/1.17.0.sql b/ee/scripts/schema/db/rollback_dbs/clickhouse/1.17.0/1.17.0.sql new file mode 100644 index 000000000..afd3c22ad --- /dev/null +++ b/ee/scripts/schema/db/rollback_dbs/clickhouse/1.17.0/1.17.0.sql @@ -0,0 +1 @@ +CREATE OR REPLACE FUNCTION openreplay_version AS() -> 'v1.16.0-ee'; \ No newline at end of file diff --git a/ee/scripts/schema/db/rollback_dbs/postgresql/1.17.0/1.17.0.sql b/ee/scripts/schema/db/rollback_dbs/postgresql/1.17.0/1.17.0.sql new file mode 100644 index 000000000..7ff97c691 --- /dev/null +++ b/ee/scripts/schema/db/rollback_dbs/postgresql/1.17.0/1.17.0.sql @@ -0,0 +1,29 @@ +\set previous_version 'v1.17.0-ee' +\set next_version 'v1.16.0-ee' +SELECT openreplay_version() AS current_version, + openreplay_version() = :'previous_version' AS valid_previous, + openreplay_version() = :'next_version' AS is_next +\gset + +\if :valid_previous +\echo valid previous DB version :'previous_version', starting DB downgrade to :'next_version' +BEGIN; +SELECT format($fn_def$ +CREATE OR REPLACE FUNCTION openreplay_version() + RETURNS text AS +$$ +SELECT '%1$s' +$$ LANGUAGE sql IMMUTABLE; +$fn_def$, :'next_version') +\gexec + +-- + + +COMMIT; + +\elif :is_next +\echo new version detected :'next_version', nothing to do +\else +\warn skipping DB downgrade of :'next_version', expected previous version :'previous_version', found :'current_version' +\endif \ No newline at end of file diff --git a/scripts/schema/db/init_dbs/postgresql/1.17.0/1.17.0.sql b/scripts/schema/db/init_dbs/postgresql/1.17.0/1.17.0.sql new file mode 100644 index 000000000..c6c0c4028 --- /dev/null +++ b/scripts/schema/db/init_dbs/postgresql/1.17.0/1.17.0.sql @@ -0,0 +1,38 @@ +\set previous_version 'v1.16.0' +\set next_version 'v1.17.0' +SELECT openreplay_version() AS current_version, + openreplay_version() = :'previous_version' AS valid_previous, + openreplay_version() = :'next_version' AS is_next +\gset + +\if :valid_previous +\echo valid previous DB version :'previous_version', starting DB upgrade to :'next_version' +BEGIN; +SELECT format($fn_def$ +CREATE OR REPLACE FUNCTION openreplay_version() + RETURNS text AS +$$ +SELECT '%1$s' +$$ LANGUAGE sql IMMUTABLE; +$fn_def$, :'next_version') +\gexec + +-- + +ALTER TABLE IF EXISTS public.sessions + ADD COLUMN IF NOT EXISTS has_ut_test boolean DEFAULT FALSE; + +-- !!! The following query takes a lot of time +CREATE INDEX IF NOT EXISTS sessions_session_id_has_ut_test_idx ON public.sessions (session_id, has_ut_test); + +UPDATE public.sessions +SET has_ut_test= TRUE +WHERE session_id IN (SELECT session_id FROM public.ut_tests_signals); + +COMMIT; + +\elif :is_next +\echo new version detected :'next_version', nothing to do +\else +\warn skipping DB upgrade of :'next_version', expected previous version :'previous_version', found :'current_version' +\endif diff --git a/scripts/schema/db/init_dbs/postgresql/init_schema.sql b/scripts/schema/db/init_dbs/postgresql/init_schema.sql index e448ec3a9..b684e3622 100644 --- a/scripts/schema/db/init_dbs/postgresql/init_schema.sql +++ b/scripts/schema/db/init_dbs/postgresql/init_schema.sql @@ -9,7 +9,7 @@ CREATE EXTENSION IF NOT EXISTS pgcrypto; CREATE OR REPLACE FUNCTION openreplay_version() RETURNS text AS $$ -SELECT 'v1.16.0' +SELECT 'v1.17.0' $$ LANGUAGE sql IMMUTABLE; @@ -421,6 +421,7 @@ $$ utm_campaign text NULL DEFAULT NULL, referrer text NULL DEFAULT NULL, base_referrer text NULL DEFAULT NULL, + has_ut_test boolean DEFAULT FALSE, metadata_1 text DEFAULT NULL, metadata_2 text DEFAULT NULL, metadata_3 text DEFAULT NULL, @@ -476,12 +477,13 @@ $$ CREATE INDEX sessions_utm_medium_gin_idx ON public.sessions USING GIN (utm_medium gin_trgm_ops); CREATE INDEX sessions_utm_campaign_gin_idx ON public.sessions USING GIN (utm_campaign gin_trgm_ops); CREATE INDEX sessions_base_referrer_gin_idx ON public.sessions USING GIN (base_referrer gin_trgm_ops); + CREATE INDEX sessions_session_id_has_ut_test_idx ON public.sessions (session_id, has_ut_test); ALTER TABLE public.sessions ADD CONSTRAINT web_browser_constraint CHECK ( - (sessions.platform = 'web' AND sessions.user_browser NOTNULL) OR - (sessions.platform != 'web' AND sessions.user_browser ISNULL)); + (sessions.platform = 'web' AND sessions.user_browser NOTNULL) OR + (sessions.platform != 'web' AND sessions.user_browser ISNULL)); ALTER TABLE public.sessions ADD CONSTRAINT web_user_browser_version_constraint CHECK ( sessions.platform = 'web' OR sessions.user_browser_version ISNULL); diff --git a/scripts/schema/db/rollback_dbs/postgresql/1.17.0/1.17.0.sql b/scripts/schema/db/rollback_dbs/postgresql/1.17.0/1.17.0.sql new file mode 100644 index 000000000..ef3ffb734 --- /dev/null +++ b/scripts/schema/db/rollback_dbs/postgresql/1.17.0/1.17.0.sql @@ -0,0 +1,30 @@ +\set previous_version 'v1.17.0' +\set next_version 'v1.16.0' +SELECT openreplay_version() AS current_version, + openreplay_version() = :'previous_version' AS valid_previous, + openreplay_version() = :'next_version' AS is_next +\gset + +\if :valid_previous +\echo valid previous DB version :'previous_version', starting DB downgrade to :'next_version' +BEGIN; +SELECT format($fn_def$ +CREATE OR REPLACE FUNCTION openreplay_version() + RETURNS text AS +$$ +SELECT '%1$s' +$$ LANGUAGE sql IMMUTABLE; +$fn_def$, :'next_version') +\gexec + +-- + + + +COMMIT; + +\elif :is_next +\echo new version detected :'next_version', nothing to do +\else +\warn skipping DB downgrade of :'next_version', expected previous version :'previous_version', found :'current_version' +\endif \ No newline at end of file