Skip to content

Commit

Permalink
#144 Handle null days
Browse files Browse the repository at this point in the history
  • Loading branch information
1yuv committed Jan 31, 2024
1 parent 0210ece commit 0c7573b
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 51 deletions.
43 changes: 23 additions & 20 deletions libs/medic-users-meta/migrations/202105171933.do.86.usersMeta.sql
Original file line number Diff line number Diff line change
Expand Up @@ -24,26 +24,29 @@ CREATE INDEX idx_useview_feedback_period_start_user ON useview_feedback(period_s
CREATE MATERIALIZED VIEW useview_telemetry AS
SELECT
doc->>'_id' AS uuid,
CONCAT_WS( --> Date concatenation from JSON fields, eg. 2021-5-17
'-',
doc#>>'{metadata,year}', --> year
CASE --> month of the year
WHEN
string_to_array(substring(doc#>>'{metadata,versions,app}' FROM '(\d+.\d+.\d+)'),'.')::int[] < '{3,8,0}'::int[]
THEN
(doc#>>'{metadata,month}')::int+1 --> Legacy, months zero-indexed (0 - 11)
ELSE
(doc#>>'{metadata,month}')::int --> Month is between 1 - 12
END,
CASE --> day of the month, else 1
WHEN
(doc#>>'{metadata,day}') IS NOT NULL
THEN
doc#>>'{metadata,day}'
ELSE
'1'
END
)::date AS period_start,
(CASE
WHEN doc#>>'{metadata,year}' IS NULL THEN '1970-1-1'
ELSE
CONCAT_WS( --> Date concatenation from JSON fields, eg. 2021-5-17
'-',
doc#>>'{metadata,year}', --> year
CASE --> month of the year
WHEN
string_to_array(substring(doc#>>'{metadata,versions,app}' FROM '(\d+.\d+.\d+)'),'.')::int[] < '{3,8,0}'::int[]
THEN
(doc#>>'{metadata,month}')::int+1 --> Legacy, months zero-indexed (0 - 11)
ELSE
(doc#>>'{metadata,month}')::int --> Month is between 1 - 12
END,
CASE --> day of the month, else 1
WHEN
(doc#>>'{metadata,day}') IS NOT NULL
THEN
doc#>>'{metadata,day}'
ELSE
'1'
END)
END)::date AS period_start,
doc#>>'{metadata,user}' AS user_name,
doc#>>'{metadata,versions,app}' AS app_version,
doc#>>'{metrics,boot_time,min}' AS boot_time_min,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,28 @@ SELECT
doc #>> '{_id}' AS telemetry_doc_id,
doc #>> '{metadata,deviceId}' AS device_id,
doc #>> '{metadata,user}' AS user_name,

concat_ws(
'-',
doc #>> '{metadata,year}',
CASE
WHEN
doc #>> '{metadata,day}' IS NULL
AND (
doc #>> '{metadata,versions,app}' IS NULL
OR string_to_array("substring"(doc #>> '{metadata,versions,app}', '(\d+.\d+.\d+)'), '.')::integer[] < '{3,8,0}'::integer[]
)
THEN (doc #>> '{metadata,month}')::integer + 1
ELSE (doc #>> '{metadata,month}')::integer
END,
CASE
WHEN doc #>> '{metadata,day}' IS NOT NULL
THEN doc #>> '{metadata,day}'
ELSE '1'
END
)::date AS period_start,
(CASE
WHEN doc#>>'{metadata,year}' IS NULL THEN '1970-1-1'
ELSE
concat_ws(
'-',
doc #>> '{metadata,year}',
CASE
WHEN
doc #>> '{metadata,day}' IS NULL
AND (
doc #>> '{metadata,versions,app}' IS NULL
OR string_to_array("substring"(doc #>> '{metadata,versions,app}', '(\d+.\d+.\d+)'), '.')::integer[] < '{3,8,0}'::integer[]
)
THEN (doc #>> '{metadata,month}')::integer + 1
ELSE (doc #>> '{metadata,month}')::integer
END,
CASE
WHEN doc #>> '{metadata,day}' IS NOT NULL
THEN doc #>> '{metadata,day}'
ELSE '1'
END)
END)::date AS period_start,


doc #>> '{device,deviceInfo,hardware,manufacturer}' AS device_manufacturer,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,20 @@ WITH telemetry_docs_with_metric_blob AS (
doc #>> '{metadata,deviceId}' AS device_id,
doc #>> '{_id}' AS telemetry_doc_id,
doc #>> '{metadata,user}' AS user_name,
concat_ws(
'-', doc #>> '{metadata,year}',
CASE
WHEN (doc #>> '{metadata,day}') IS NULL AND ((doc #>> '{metadata,versions,app}') IS NULL OR string_to_array("substring"(doc #>> '{metadata,versions,app}', '(\d+.\d+.\d+)'::text), '.'::text)::integer[] < '{3,8,0}'::integer[]) THEN ((doc #>> '{metadata,month}')::integer) + 1
ELSE (doc #>> '{metadata,month}')::integer
END,
CASE
WHEN (doc #>> '{metadata,day}') IS NOT NULL THEN doc #>> '{metadata,day}'
ELSE '1'::text
END
)::date AS period_start,
(CASE
WHEN doc#>>'{metadata,year}' IS NULL THEN '1970-1-1'
ELSE
concat_ws(
'-', doc #>> '{metadata,year}',
CASE
WHEN (doc #>> '{metadata,day}') IS NULL AND ((doc #>> '{metadata,versions,app}') IS NULL OR string_to_array("substring"(doc #>> '{metadata,versions,app}', '(\d+.\d+.\d+)'::text), '.'::text)::integer[] < '{3,8,0}'::integer[]) THEN ((doc #>> '{metadata,month}')::integer) + 1
ELSE (doc #>> '{metadata,month}')::integer
END,
CASE
WHEN (doc #>> '{metadata,day}') IS NOT NULL THEN doc #>> '{metadata,day}'
ELSE '1'::text
END)
END)::date AS period_start,
jsonb_object_keys(doc -> 'metrics'::text) AS metric,
doc -> 'metrics' -> jsonb_object_keys(doc -> 'metrics') AS metric_values
FROM couchdb_users_meta
Expand Down

0 comments on commit 0c7573b

Please sign in to comment.