From 7b15732619391acb45f17220f9e82044be90dbb8 Mon Sep 17 00:00:00 2001 From: Konstantin Burkalev Date: Thu, 10 Jul 2025 22:07:05 +0300 Subject: [PATCH 1/5] chore(tests): Prepare tests for custom time shifts with calendar cubes (#9770) * Extend test schema / dataset with RetailCalendar * add tests for RetailCalendar * edit fixtures/excludes/etc * update snapshots --- .../fixtures/_schemas.json | 84 ++ .../fixtures/athena.json | 9 +- .../fixtures/bigquery.json | 6 +- .../fixtures/clickhouse.json | 6 +- .../fixtures/databricks-jdbc.json | 6 +- .../fixtures/mssql.json | 6 +- .../fixtures/mysql.json | 6 +- .../fixtures/postgres.json | 8 +- .../fixtures/redshift.json | 6 +- .../fixtures/snowflake.json | 8 +- .../cubejs-testing-drivers/src/dataset.ts | 922 ++++++++++++++++++ .../src/helpers/getCreateQueries.ts | 3 +- .../src/helpers/getSchemaPath.ts | 5 +- .../src/tests/testQueries.ts | 54 + .../athena-export-bucket-s3-full.test.ts.snap | 64 ++ ...gquery-export-bucket-gcs-full.test.ts.snap | 165 ++++ .../__snapshots__/postgres-full.test.ts.snap | 165 ++++ 17 files changed, 1509 insertions(+), 14 deletions(-) diff --git a/packages/cubejs-testing-drivers/fixtures/_schemas.json b/packages/cubejs-testing-drivers/fixtures/_schemas.json index 50bd967e15b06..2b5f19fd4dbd2 100644 --- a/packages/cubejs-testing-drivers/fixtures/_schemas.json +++ b/packages/cubejs-testing-drivers/fixtures/_schemas.json @@ -258,6 +258,11 @@ "name": "Customers", "relationship": "belongs_to", "sql": "{CUBE}.customer_id = {Customers}.customer_id" + }, + { + "name": "RetailCalendar", + "relationship": "many_to_one", + "sql": "{CUBE}.order_date = {RetailCalendar.date_val}" } ], "dimensions": [ @@ -389,6 +394,36 @@ "type": "prior" }] }, + { + "name": "totalCountRetailYearAgo", + "type": "number", + "sql": "{count}", + "multi_stage": true, + "time_shift": [{ + "interval": "1 year", + "type": "prior" + }] + }, + { + "name": "totalCountRetailMonthAgo", + "type": "number", + "sql": "{count}", + "multi_stage": true, + "time_shift": [{ + "interval": "1 month", + "type": "prior" + }] + }, + { + "name": "totalCountRetailWeekAgo", + "type": "number", + "sql": "{count}", + "multi_stage": true, + "time_shift": [{ + "interval": "1 week", + "type": "prior" + }] + }, { "name": "totalProfitForStatus", "type": "sum", @@ -462,6 +497,55 @@ } } ] + }, + { + "name": "RetailCalendar", + "calendar": true, + "dimensions": [ + { + "name": "date_val", + "sql": "date_val", + "type": "time", + "primary_key": true, + "shown": true + }, + { + "name": "retail_date", + "sql": "date_val", + "type": "time", + "granularities": [ + { + "name": "week", + "sql": "{CUBE}.retail_week_begin_date" + }, + { + "name": "quarter", + "sql": "{CUBE}.retail_quarter_begin_date" + }, + { + "name": "year", + "sql": "{CUBE}.retail_year_begin_date" + } + ], + "timeShift": [ + { + "interval": "1 month", + "type": "prior", + "sql": "{CUBE}.retail_date_prev_month" + }, + { + "interval": "1 quarter", + "type": "prior", + "sql": "{CUBE}.retail_date_prev_quarter" + }, + { + "interval": "1 year", + "type": "prior", + "sql": "{CUBE}.retail_date_prev_year" + } + ] + } + ] } ] } diff --git a/packages/cubejs-testing-drivers/fixtures/athena.json b/packages/cubejs-testing-drivers/fixtures/athena.json index 9b30cfacff973..4cf55c8379909 100644 --- a/packages/cubejs-testing-drivers/fixtures/athena.json +++ b/packages/cubejs-testing-drivers/fixtures/athena.json @@ -34,7 +34,8 @@ "products": "products", "customers": "customers", "ecommerce": "ecommerce", - "bigecommerce": "bigecommerce" + "bigecommerce": "bigecommerce", + "retailcalendar": "retailcalendar" }, "preAggregations": { "Products": [], @@ -150,6 +151,9 @@ "week granularity is not supported for intervals", "querying BigECommerce: rolling window by 2 week", "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", + "querying BigECommerce with Retail Calendar: totalCountRetailYearAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo", "---------------------------------------", "Custom Granularities ", @@ -203,6 +207,7 @@ "querying BigECommerce: rolling window YTD (month + week + no gran)", "querying BigECommerce: rolling window YTD without granularity", "SQL API: Rolling Window YTD (year + month + day + date_trunc equal)", - "SQL API: Rolling Window YTD (year + month + day + date_trunc IN)" + "SQL API: Rolling Window YTD (year + month + day + date_trunc IN)", + "querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo" ] } diff --git a/packages/cubejs-testing-drivers/fixtures/bigquery.json b/packages/cubejs-testing-drivers/fixtures/bigquery.json index 0defe94516aa8..2e11b800884db 100644 --- a/packages/cubejs-testing-drivers/fixtures/bigquery.json +++ b/packages/cubejs-testing-drivers/fixtures/bigquery.json @@ -36,7 +36,8 @@ "products": "test.products", "customers": "test.customers", "ecommerce": "test.ecommerce", - "bigecommerce": "test.bigecommerce" + "bigecommerce": "test.bigecommerce", + "retailcalendar": "test.retailcalendar" }, "preAggregations": { "Products": [], @@ -164,6 +165,9 @@ "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", + "querying BigECommerce with Retail Calendar: totalCountRetailYearAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo", "---------------------------------------", "SKIPPED SQL API (Need work)", diff --git a/packages/cubejs-testing-drivers/fixtures/clickhouse.json b/packages/cubejs-testing-drivers/fixtures/clickhouse.json index 8ce44e3bf905e..32dec81e2a52a 100644 --- a/packages/cubejs-testing-drivers/fixtures/clickhouse.json +++ b/packages/cubejs-testing-drivers/fixtures/clickhouse.json @@ -74,7 +74,8 @@ "products": "products", "customers": "customers", "ecommerce": "ecommerce", - "bigecommerce": "bigecommerce" + "bigecommerce": "bigecommerce", + "retailcalendar": "retailcalendar" }, "preAggregations": { "Products": [], @@ -201,6 +202,9 @@ "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", + "querying BigECommerce with Retail Calendar: totalCountRetailYearAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo", "---------------------------------------", "Custom Granularities ", diff --git a/packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json b/packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json index 13a0605c5d852..e2c62e8eaf59e 100644 --- a/packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json +++ b/packages/cubejs-testing-drivers/fixtures/databricks-jdbc.json @@ -96,7 +96,8 @@ "products": "products", "customers": "customers", "ecommerce": "ecommerce", - "bigecommerce": "bigecommerce" + "bigecommerce": "bigecommerce", + "retailcalendar": "retailcalendar" }, "preAggregations": { "Products": [], @@ -217,6 +218,9 @@ "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", + "querying BigECommerce with Retail Calendar: totalCountRetailYearAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo", "---------------------------------------", "Custom Granularities ", diff --git a/packages/cubejs-testing-drivers/fixtures/mssql.json b/packages/cubejs-testing-drivers/fixtures/mssql.json index c2fef8fcb97d4..2ac9ae9db3777 100644 --- a/packages/cubejs-testing-drivers/fixtures/mssql.json +++ b/packages/cubejs-testing-drivers/fixtures/mssql.json @@ -43,7 +43,8 @@ "products": "products", "customers": "customers", "ecommerce": "ecommerce", - "bigecommerce": "bigecommerce" + "bigecommerce": "bigecommerce", + "retailcalendar": "retailcalendar" }, "preAggregations": { "Products": [], @@ -143,6 +144,9 @@ "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", + "querying BigECommerce with Retail Calendar: totalCountRetailYearAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo", "---------------------------------------", "SKIPPED SQL API (Need work)", diff --git a/packages/cubejs-testing-drivers/fixtures/mysql.json b/packages/cubejs-testing-drivers/fixtures/mysql.json index 413226f28f5ba..089741e261143 100644 --- a/packages/cubejs-testing-drivers/fixtures/mysql.json +++ b/packages/cubejs-testing-drivers/fixtures/mysql.json @@ -43,7 +43,8 @@ "products": "products", "customers": "customers", "ecommerce": "ecommerce", - "bigecommerce": "bigecommerce" + "bigecommerce": "bigecommerce", + "retailcalendar": "retailcalendar" }, "preAggregations": { "Products": [], @@ -139,6 +140,9 @@ "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", + "querying BigECommerce with Retail Calendar: totalCountRetailYearAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo", "---------------------------------------", "Custom Granularities ", diff --git a/packages/cubejs-testing-drivers/fixtures/postgres.json b/packages/cubejs-testing-drivers/fixtures/postgres.json index 068481dedbeba..b65d9c53f8f14 100644 --- a/packages/cubejs-testing-drivers/fixtures/postgres.json +++ b/packages/cubejs-testing-drivers/fixtures/postgres.json @@ -42,7 +42,8 @@ "products": "products", "customers": "customers", "ecommerce": "ecommerce", - "bigecommerce": "bigecommerce" + "bigecommerce": "bigecommerce", + "retailcalendar": "retailcalendar" }, "preAggregations": { "Products": [], @@ -163,7 +164,10 @@ "querying BigECommerce: rolling window by 2 day without date range", "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", - "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range" + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", + "querying BigECommerce with Retail Calendar: totalCountRetailYearAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo" ], "tesseractSkip": [ "querying Products: dimensions -- doesn't work wo ordering", diff --git a/packages/cubejs-testing-drivers/fixtures/redshift.json b/packages/cubejs-testing-drivers/fixtures/redshift.json index 4807fc88d567b..255d777790949 100644 --- a/packages/cubejs-testing-drivers/fixtures/redshift.json +++ b/packages/cubejs-testing-drivers/fixtures/redshift.json @@ -47,7 +47,8 @@ "products": "public.products", "customers": "public.customers", "ecommerce": "public.ecommerce", - "bigecommerce": "public.bigecommerce" + "bigecommerce": "public.bigecommerce", + "retailcalendar": "public.retailcalendar" }, "preAggregations": { "Products": [], @@ -175,6 +176,9 @@ "querying BigECommerce: rolling window by 2 month without date range", "querying BigECommerce: rolling window YTD without date range", "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading without date range", + "querying BigECommerce with Retail Calendar: totalCountRetailYearAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo", "---------------------------------------", "SKIPPED SQL API (Need work) ", diff --git a/packages/cubejs-testing-drivers/fixtures/snowflake.json b/packages/cubejs-testing-drivers/fixtures/snowflake.json index 6e3d2dc65e2c7..af9413ee1fc0d 100644 --- a/packages/cubejs-testing-drivers/fixtures/snowflake.json +++ b/packages/cubejs-testing-drivers/fixtures/snowflake.json @@ -120,7 +120,8 @@ "products": "public.products", "customers": "public.customers", "ecommerce": "public.ecommerce", - "bigecommerce": "public.bigecommerce" + "bigecommerce": "public.bigecommerce", + "retailcalendar": "public.retailcalendar" }, "preAggregations": { "Products": [], @@ -239,6 +240,9 @@ "---------------------------------------", "querying BigECommerce: rolling window by 2 day without date range", "querying BigECommerce: rolling window by 2 month without date range", - "querying BigECommerce: rolling window YTD without date range" + "querying BigECommerce: rolling window YTD without date range", + "querying BigECommerce with Retail Calendar: totalCountRetailYearAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo" ] } diff --git a/packages/cubejs-testing-drivers/src/dataset.ts b/packages/cubejs-testing-drivers/src/dataset.ts index 5138b1ec7b1f3..0d86b78e66c90 100644 --- a/packages/cubejs-testing-drivers/src/dataset.ts +++ b/packages/cubejs-testing-drivers/src/dataset.ts @@ -202,3 +202,925 @@ export const BigECommerce = { }, create: (cast: Cast, name: string, suf?: string) => create(name, BigECommerce.select(cast), cast, suf), }; + +export const RetailCalendar = { + select: (cast: Cast) => { + const { DATE_PREFIX, DATE_SUFFIX } = cast; + // Calendar data for retail dates holds full 2020 year and small portion of the end of 2019. + // As some DWHs are not able to process large datasets (e.g. Athena throws Member must have length less than or equal to 262144). + return ` + SELECT ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX} AS date_val, '2019' AS retail_year_name, '2019-Q1' AS retail_quarter_name, '2019-M01' AS retail_month_name, '2019-W01' AS retail_week_name, ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX} AS retail_year_begin_date, ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX} AS retail_quarter_begin_date, ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX} AS retail_month_begin_date, ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX} AS retail_week_begin_date, ${DATE_PREFIX}'2019-01-06'${DATE_SUFFIX} AS retail_date_prev_month, ${DATE_PREFIX}'2018-11-04'${DATE_SUFFIX} AS retail_date_prev_quarter, ${DATE_PREFIX}'2018-02-04'${DATE_SUFFIX} AS retail_date_prev_year + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W40', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-04'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W40', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-05'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W40', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-06'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W40', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-07'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W40', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-08'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W40', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-09'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W40', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-10'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W41', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-11'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W41', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-12'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W41', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-13'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W41', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-14'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W41', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-15'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W41', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-16'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W41', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-17'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W42', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-18'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W42', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-19'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W42', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-20'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W42', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-21'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W42', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-22'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W42', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-23'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W42', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-24'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W43', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-25'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W43', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-26'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W43', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-27'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W43', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-28'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W43', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-29'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W43', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-11-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-11-30'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M10', '2019-W43', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W44', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-02'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W44', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-03'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W44', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-04'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W44', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-05'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W44', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-06'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W44', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-07'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W44', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-08'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W45', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-09'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W45', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-10'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W45', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-11'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W45', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-12'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W45', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-13'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W45', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-14'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W45', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-15'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W46', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-16'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W46', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-17'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W46', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-18'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W46', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-19'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W46', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-20'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W46', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-21'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W46', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-22'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W47', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-23'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W47', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-24'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W47', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-25'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W47', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-26'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W47', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-27'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W47', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-28'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W47', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-29'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W48', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2019-09-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-30'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W48', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2019-09-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2018-12-31'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2019-12-31'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W48', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2019-10-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-01'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W48', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2019-10-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-02'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W48', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2019-10-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-03'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W48', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2019-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-04'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M11', '2019-W48', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2019-10-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W49', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-06'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W49', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-07'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W49', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-08'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W49', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-09'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W49', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-10'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W49', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-11'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W49', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-12'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W50', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-13'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W50', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-14'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W50', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-15'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W50', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-16'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W50', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-17'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W50', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-18'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W50', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-19'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W51', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-20'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W51', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-21'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W51', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-22'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W51', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-23'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W51', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-24'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W51', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-25'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W51', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-26'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W52', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-27'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W52', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-28'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W52', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-29'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W52', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-30'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W52', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-01-31'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-01-31'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W52', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-01'${DATE_SUFFIX}, '2019', '2019-Q4', '2019-M12', '2019-W52', ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W01', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-03'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W01', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-04'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W01', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-05'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W01', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-06'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W01', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-07'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W01', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-08'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W01', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-09'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W02', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-10'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W02', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-11'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W02', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-12'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W02', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-13'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W02', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-14'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W02', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-15'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W02', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-16'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W03', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-17'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W03', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-18'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W03', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-19'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W03', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-20'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W03', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-21'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W03', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-22'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W03', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-23'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W04', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-24'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W04', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-25'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W04', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-26'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W04', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-27'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W04', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-02-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-28'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W04', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-02-29'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M01', '2020-W04', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W05', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-02'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W05', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-03'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W05', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-04'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W05', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-05'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W05', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-06'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W05', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-07'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W05', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-08'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W06', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-09'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W06', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-10'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W06', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-11'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W06', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-12'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W06', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-13'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W06', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-14'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W06', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-15'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W07', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-16'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W07', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-17'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W07', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-18'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W07', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-19'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W07', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-20'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W07', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-21'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W07', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-22'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W08', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-23'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W08', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-24'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W08', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-25'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W08', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-26'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W08', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-27'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W08', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-28'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W08', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-29'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W09', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2019-12-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-03-31'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-30'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W09', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2019-12-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-03-31'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W09', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2019-12-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-01'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W09', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-01-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-02'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W09', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-01-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-03'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W09', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-04'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M02', '2020-W09', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-29'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-01-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W10', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-06'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W10', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-07'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W10', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-08'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W10', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-09'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W10', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-10'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W10', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-11'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W10', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-12'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W11', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-13'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W11', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-14'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W11', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-15'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W11', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-16'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W11', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-17'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W11', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-18'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W11', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-19'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W12', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-20'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W12', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-21'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W12', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-22'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W12', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-23'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W12', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-24'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W12', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-25'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W12', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-26'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W13', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-27'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W13', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-28'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W13', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-04-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-29'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W13', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-04-30'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W13', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-01'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W13', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-02'${DATE_SUFFIX}, '2020', '2020-Q1', '2020-M03', '2020-W13', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W14', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-04'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W14', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-05'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W14', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-06'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W14', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-07'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W14', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-08'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W14', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-09'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W14', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-10'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W15', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-11'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W15', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-12'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W15', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-13'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W15', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-14'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W15', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-15'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W15', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-16'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W15', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-17'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W16', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-18'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W16', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-19'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W16', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-20'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W16', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-21'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W16', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-22'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W16', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-23'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W16', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-24'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W17', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-25'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W17', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-26'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W17', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-27'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W17', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-28'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W17', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-29'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W17', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-05-31'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-30'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M04', '2020-W17', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W18', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-01'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W18', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-02'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W18', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-03'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W18', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-04'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W18', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-05'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W18', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-06'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W18', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-07'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W19', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-08'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W19', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-09'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W19', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-10'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W19', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-11'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W19', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-12'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W19', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-13'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W19', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-14'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W20', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-15'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W20', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-16'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W20', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-17'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W20', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-18'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W20', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-19'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W20', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-20'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W20', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-21'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W21', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-22'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W21', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-23'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W21', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-24'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W21', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-25'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W21', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-26'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W21', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-27'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W21', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-03-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-28'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W22', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-28'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-03-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-06-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-29'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W22', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-28'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-03-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-06-30'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W22', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-28'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-03-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-01'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W22', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-28'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-04-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-02'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W22', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-28'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-04-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-03'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W22', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-28'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-04-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-04'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M05', '2020-W22', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-28'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-04-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W23', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-06'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W23', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-07'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W23', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-08'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W23', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-09'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W23', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-10'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W23', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-11'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W23', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-12'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W24', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-13'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W24', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-14'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W24', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-15'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W24', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-16'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W24', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-17'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W24', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-18'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W24', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-19'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W25', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-20'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W25', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-21'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W25', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-22'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W25', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-23'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W25', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-24'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W25', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-25'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W25', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-26'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W26', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-27'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W26', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-28'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W26', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-29'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W26', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-07-31'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-30'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W26', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-04-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-07-31'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W26', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-01'${DATE_SUFFIX}, '2020', '2020-Q2', '2020-M06', '2020-W26', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W27', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-03'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W27', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-04'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W27', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-05'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W27', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-06'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W27', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-07'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W27', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-08'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W27', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-09'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W28', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-10'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W28', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-11'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W28', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-12'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W28', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-13'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W28', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-14'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W28', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-15'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W28', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-16'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W29', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-17'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W29', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-18'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W29', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-19'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W29', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-20'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W29', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-21'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W29', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-22'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W29', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-23'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W30', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-24'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W30', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-25'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W30', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-26'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W30', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-27'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W30', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-28'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W30', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-29'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M07', '2020-W30', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-08-31'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W31', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-05-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-08-31'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W31', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-01'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W31', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-02'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W31', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-03'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W31', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-04'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W31', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-05'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W31', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-06'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W32', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-07'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W32', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-08'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W32', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-09'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W32', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-10'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W32', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-11'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W32', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-12'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W32', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-13'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W33', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-14'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W33', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-15'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W33', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-16'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W33', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-17'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W33', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-18'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W33', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-19'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W33', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-20'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W34', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-21'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W34', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-22'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W34', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-23'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W34', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-24'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W34', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-25'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W34', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-26'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W34', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-06-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-27'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W35', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-06-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-28'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W35', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-06-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-09-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-29'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W35', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-06-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-09-30'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W35', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-07-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-01'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W35', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-07-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-02'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W35', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-07-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-03'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M08', '2020-W35', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-07-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W36', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-05'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W36', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-06'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W36', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-07'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W36', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-08'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W36', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-09'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W36', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-10'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W36', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-11'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W37', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-12'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W37', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-13'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W37', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-14'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W37', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-15'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W37', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-16'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W37', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-17'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W37', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-18'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W38', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-19'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W38', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-20'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W38', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-21'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W38', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-22'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W38', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-23'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W38', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-24'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W38', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-25'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W39', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-26'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W39', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-27'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W39', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-28'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W39', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-29'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W39', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-10-31'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-30'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W39', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-07-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-10-31'${DATE_SUFFIX}, '2020', '2020-Q3', '2020-M09', '2020-W39', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W40', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-02'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W40', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-03'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W40', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-04'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W40', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-05'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W40', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-06'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W40', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-07'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W40', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-08'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W41', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-09'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W41', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-10'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W41', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-11'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W41', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-12'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W41', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-13'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W41', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-14'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W41', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-15'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W42', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-16'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W42', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-17'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W42', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-18'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W42', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-19'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W42', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-20'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W42', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-21'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W42', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-22'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W43', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-23'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W43', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-24'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W43', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-25'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W43', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-26'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W43', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-27'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W43', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-28'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M10', '2020-W43', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-11-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W44', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-11-30'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W44', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-08-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-01'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W44', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-02'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W44', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-03'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W44', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-04'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W44', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-05'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W44', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-06'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W45', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-07'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W45', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-08'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W45', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-09'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W45', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-10'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W45', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-11'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W45', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-12'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W45', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-13'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W46', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-14'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W46', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-15'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W46', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-16'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W46', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-17'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W46', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-18'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W46', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-19'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W46', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-20'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W47', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-21'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W47', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-22'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W47', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-23'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W47', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-24'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W47', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-25'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W47', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-26'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W47', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-09-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-27'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W48', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-09-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-28'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W48', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-09-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-29'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W48', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-09-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2019-12-31'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-30'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W48', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-09-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-01'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2020-12-31'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W48', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-10-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-02'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-01'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W48', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-10-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-03'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-02'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M11', '2020-W48', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-27'${DATE_SUFFIX}, NULL, ${DATE_PREFIX}'2020-10-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-04'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W49', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-05'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-04'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W49', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-06'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-05'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W49', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-07'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-06'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W49', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-08'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-07'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W49', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-09'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-08'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W49', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-04'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-10'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-09'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W49', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-05'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-11'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-10'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W50', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-06'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-12'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-11'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W50', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-07'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-13'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-12'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W50', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-08'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-14'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-13'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W50', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-09'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-15'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-14'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W50', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-16'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-15'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W50', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-11'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-17'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-16'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W50', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-10'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-12'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-18'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-17'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W51', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-13'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-19'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-18'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W51', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-14'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-20'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-19'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W51', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-15'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-21'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-20'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W51', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-16'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-22'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-21'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W51', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-23'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-22'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W51', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-18'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-24'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-23'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W51', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-17'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-19'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-25'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-24'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W52', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-20'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-26'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-25'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W52', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-21'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-27'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-26'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W52', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-22'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-27'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-28'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-27'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W52', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-23'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-28'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-29'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-28'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W52', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-29'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-30'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-29'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W52', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-25'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-30'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-01-31'${DATE_SUFFIX} + UNION ALL + SELECT ${DATE_PREFIX}'2021-01-30'${DATE_SUFFIX}, '2020', '2020-Q4', '2020-M12', '2020-W52', ${DATE_PREFIX}'2020-02-02'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-11-01'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-03'${DATE_SUFFIX}, ${DATE_PREFIX}'2021-01-24'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-12-26'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-10-31'${DATE_SUFFIX}, ${DATE_PREFIX}'2020-02-01'${DATE_SUFFIX} + `; + }, + create: (cast: Cast, name: string, suf?: string) => create(name, RetailCalendar.select(cast), cast, suf), +}; diff --git a/packages/cubejs-testing-drivers/src/helpers/getCreateQueries.ts b/packages/cubejs-testing-drivers/src/helpers/getCreateQueries.ts index 7d7b6908f5819..17208eaebfbf2 100644 --- a/packages/cubejs-testing-drivers/src/helpers/getCreateQueries.ts +++ b/packages/cubejs-testing-drivers/src/helpers/getCreateQueries.ts @@ -1,5 +1,5 @@ import { getFixtures } from './getFixtures'; -import { Customers, Products, ECommerce, BigECommerce } from '../dataset'; +import { Customers, Products, ECommerce, BigECommerce, RetailCalendar } from '../dataset'; export function getCreateQueries(type: string, suf?: string): string[] { const { cast, tables } = getFixtures(type); @@ -8,5 +8,6 @@ export function getCreateQueries(type: string, suf?: string): string[] { Customers.create(cast, tables.customers, suf), ECommerce.create(cast, tables.ecommerce, suf), BigECommerce.create(cast, tables.bigecommerce, suf), + RetailCalendar.create(cast, tables.retailcalendar, suf), ]; } diff --git a/packages/cubejs-testing-drivers/src/helpers/getSchemaPath.ts b/packages/cubejs-testing-drivers/src/helpers/getSchemaPath.ts index 45401abc025c8..c68997d860aa1 100644 --- a/packages/cubejs-testing-drivers/src/helpers/getSchemaPath.ts +++ b/packages/cubejs-testing-drivers/src/helpers/getSchemaPath.ts @@ -18,7 +18,7 @@ export function getSchemaPath(type: string, suf?: string): [path: string, file: )); _content.cubes.forEach( (cube: { - name: 'Products' | 'Customers' | 'ECommerce' | 'BigECommerce', + name: 'Products' | 'Customers' | 'ECommerce' | 'BigECommerce' | 'RetailCalendar', [prop: string]: unknown }) => { let name = ''; @@ -35,6 +35,9 @@ export function getSchemaPath(type: string, suf?: string): [path: string, file: case 'BigECommerce': name = tables.bigecommerce; break; + case 'RetailCalendar': + name = tables.retailcalendar; + break; default: throw new Error(`Cube name is unsupported: ${cube.name}`); } diff --git a/packages/cubejs-testing-drivers/src/tests/testQueries.ts b/packages/cubejs-testing-drivers/src/tests/testQueries.ts index af3adffb0ed59..205ce718409dd 100644 --- a/packages/cubejs-testing-drivers/src/tests/testQueries.ts +++ b/packages/cubejs-testing-drivers/src/tests/testQueries.ts @@ -1833,6 +1833,60 @@ export function testQueries(type: string, { includeIncrementalSchemaSuite, exten expect(response.rawData()).toMatchSnapshot(); }); + execute('querying BigECommerce with Retail Calendar: totalCountRetailYearAgo', async () => { + const response = await client.load({ + measures: [ + 'BigECommerce.count', + 'BigECommerce.totalCountRetailYearAgo', + ], + timeDimensions: [{ + dimension: 'RetailCalendar.retail_date', + granularity: 'year', + dateRange: ['2020-02-02', '2021-02-01'], + }], + order: { + 'RetailCalendar.retail_date': 'asc', + } + }); + expect(response.rawData()).toMatchSnapshot(); + }); + + execute('querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo', async () => { + const response = await client.load({ + measures: [ + 'BigECommerce.count', + 'BigECommerce.totalCountRetailMonthAgo', + ], + timeDimensions: [{ + dimension: 'RetailCalendar.retail_date', + granularity: 'month', + dateRange: ['2020-02-02', '2021-02-01'], + }], + order: { + 'RetailCalendar.retail_date': 'asc', + } + }); + expect(response.rawData()).toMatchSnapshot(); + }); + + execute('querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo', async () => { + const response = await client.load({ + measures: [ + 'BigECommerce.count', + 'BigECommerce.totalCountRetailWeekAgo', + ], + timeDimensions: [{ + dimension: 'RetailCalendar.retail_date', + granularity: 'week', + dateRange: ['2020-02-02', '2021-03-07'], + }], + order: { + 'RetailCalendar.retail_date': 'asc', + } + }); + expect(response.rawData()).toMatchSnapshot(); + }); + execute('querying custom granularities ECommerce: count by half_year + no dimension', async () => { const response = await client.load({ measures: [ diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/athena-export-bucket-s3-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/athena-export-bucket-s3-full.test.ts.snap index a51e066219a71..75292433fe28d 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/athena-export-bucket-s3-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/athena-export-bucket-s3-full.test.ts.snap @@ -3057,6 +3057,70 @@ Array [ ] `; +exports[`Queries with the @cubejs-backend/athena-driver querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo 1`] = ` +Array [ + Object { + "BigECommerce.count": "1", + "BigECommerce.totalCountRetailMonthAgo": "1", + "RetailCalendar.retail_date": "2020-02-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-02-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "2", + "BigECommerce.totalCountRetailMonthAgo": "1", + "RetailCalendar.retail_date": "2020-03-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-03-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "1", + "BigECommerce.totalCountRetailMonthAgo": "2", + "RetailCalendar.retail_date": "2020-04-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-04-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "5", + "BigECommerce.totalCountRetailMonthAgo": "1", + "RetailCalendar.retail_date": "2020-05-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-05-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "7", + "BigECommerce.totalCountRetailMonthAgo": "5", + "RetailCalendar.retail_date": "2020-06-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-06-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "4", + "BigECommerce.totalCountRetailMonthAgo": "6", + "RetailCalendar.retail_date": "2020-10-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-10-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "9", + "BigECommerce.totalCountRetailMonthAgo": "5", + "RetailCalendar.retail_date": "2020-11-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-11-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "7", + "BigECommerce.totalCountRetailMonthAgo": "8", + "RetailCalendar.retail_date": "2020-12-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-12-01T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/athena-driver querying BigECommerce with Retail Calendar: totalCountRetailYearAgo 1`] = ` +Array [ + Object { + "BigECommerce.count": "42", + "BigECommerce.totalCountRetailYearAgo": "2", + "RetailCalendar.retail_date": "2020-02-02T00:00:00.000", + "RetailCalendar.retail_date.year": "2020-02-02T00:00:00.000", + }, +] +`; + exports[`Queries with the @cubejs-backend/athena-driver querying BigECommerce: partitioned pre-agg with multi time dimension 1`] = ` Array [ Object { diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/bigquery-export-bucket-gcs-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/bigquery-export-bucket-gcs-full.test.ts.snap index 0511af1464010..160de94c544e8 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/bigquery-export-bucket-gcs-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/bigquery-export-bucket-gcs-full.test.ts.snap @@ -6260,6 +6260,171 @@ Array [ ] `; +exports[`Queries with the @cubejs-backend/bigquery-driver querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo 1`] = ` +Array [ + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailMonthAgo": 1, + "RetailCalendar.retail_date": "2020-02-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-02-01T00:00:00.000", + }, + Object { + "BigECommerce.count": 2, + "BigECommerce.totalCountRetailMonthAgo": 1, + "RetailCalendar.retail_date": "2020-03-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-03-01T00:00:00.000", + }, + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailMonthAgo": 2, + "RetailCalendar.retail_date": "2020-04-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-04-01T00:00:00.000", + }, + Object { + "BigECommerce.count": 5, + "BigECommerce.totalCountRetailMonthAgo": 1, + "RetailCalendar.retail_date": "2020-05-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-05-01T00:00:00.000", + }, + Object { + "BigECommerce.count": 7, + "BigECommerce.totalCountRetailMonthAgo": 5, + "RetailCalendar.retail_date": "2020-06-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-06-01T00:00:00.000", + }, + Object { + "BigECommerce.count": 4, + "BigECommerce.totalCountRetailMonthAgo": 6, + "RetailCalendar.retail_date": "2020-10-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-10-01T00:00:00.000", + }, + Object { + "BigECommerce.count": 9, + "BigECommerce.totalCountRetailMonthAgo": 5, + "RetailCalendar.retail_date": "2020-11-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-11-01T00:00:00.000", + }, + Object { + "BigECommerce.count": 7, + "BigECommerce.totalCountRetailMonthAgo": 8, + "RetailCalendar.retail_date": "2020-12-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-12-01T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/bigquery-driver querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo 1`] = ` +Array [ + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailWeekAgo": 1, + "RetailCalendar.retail_date": "2020-03-22T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-03-22T00:00:00.000", + }, + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailWeekAgo": 2, + "RetailCalendar.retail_date": "2020-05-31T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-05-31T00:00:00.000", + }, + Object { + "BigECommerce.count": 2, + "BigECommerce.totalCountRetailWeekAgo": 1, + "RetailCalendar.retail_date": "2020-06-07T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-06-07T00:00:00.000", + }, + Object { + "BigECommerce.count": 2, + "BigECommerce.totalCountRetailWeekAgo": 2, + "RetailCalendar.retail_date": "2020-06-14T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-06-14T00:00:00.000", + }, + Object { + "BigECommerce.count": 2, + "BigECommerce.totalCountRetailWeekAgo": 2, + "RetailCalendar.retail_date": "2020-06-21T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-06-21T00:00:00.000", + }, + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailWeekAgo": 2, + "RetailCalendar.retail_date": "2020-09-06T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-09-06T00:00:00.000", + }, + Object { + "BigECommerce.count": 2, + "BigECommerce.totalCountRetailWeekAgo": 1, + "RetailCalendar.retail_date": "2020-09-13T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-09-13T00:00:00.000", + }, + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailWeekAgo": 2, + "RetailCalendar.retail_date": "2020-09-20T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-09-20T00:00:00.000", + }, + Object { + "BigECommerce.count": 2, + "BigECommerce.totalCountRetailWeekAgo": 1, + "RetailCalendar.retail_date": "2020-10-18T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-10-18T00:00:00.000", + }, + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailWeekAgo": 2, + "RetailCalendar.retail_date": "2020-10-25T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-10-25T00:00:00.000", + }, + Object { + "BigECommerce.count": 3, + "BigECommerce.totalCountRetailWeekAgo": 1, + "RetailCalendar.retail_date": "2020-11-01T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-11-01T00:00:00.000", + }, + Object { + "BigECommerce.count": 2, + "BigECommerce.totalCountRetailWeekAgo": 3, + "RetailCalendar.retail_date": "2020-11-08T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-11-08T00:00:00.000", + }, + Object { + "BigECommerce.count": 3, + "BigECommerce.totalCountRetailWeekAgo": 2, + "RetailCalendar.retail_date": "2020-11-15T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-11-15T00:00:00.000", + }, + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailWeekAgo": 3, + "RetailCalendar.retail_date": "2020-11-22T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-11-22T00:00:00.000", + }, + Object { + "BigECommerce.count": 3, + "BigECommerce.totalCountRetailWeekAgo": 1, + "RetailCalendar.retail_date": "2020-11-29T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-11-29T00:00:00.000", + }, + Object { + "BigECommerce.count": 2, + "BigECommerce.totalCountRetailWeekAgo": 2, + "RetailCalendar.retail_date": "2020-12-20T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-12-20T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/bigquery-driver querying BigECommerce with Retail Calendar: totalCountRetailYearAgo 1`] = ` +Array [ + Object { + "BigECommerce.count": 42, + "BigECommerce.totalCountRetailYearAgo": 2, + "RetailCalendar.retail_date": "2020-02-02T00:00:00.000", + "RetailCalendar.retail_date.year": "2020-02-02T00:00:00.000", + }, +] +`; + exports[`Queries with the @cubejs-backend/bigquery-driver querying BigECommerce: filtering with possible casts 1`] = ` Array [ Object { diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/postgres-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/postgres-full.test.ts.snap index 10c36f86216c0..c57e2e2681732 100644 --- a/packages/cubejs-testing-drivers/test/__snapshots__/postgres-full.test.ts.snap +++ b/packages/cubejs-testing-drivers/test/__snapshots__/postgres-full.test.ts.snap @@ -11116,6 +11116,171 @@ Array [ ] `; +exports[`Queries with the @cubejs-backend/postgres-driver querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo 1`] = ` +Array [ + Object { + "BigECommerce.count": "1", + "BigECommerce.totalCountRetailMonthAgo": "1", + "RetailCalendar.retail_date": "2020-02-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-02-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "2", + "BigECommerce.totalCountRetailMonthAgo": "1", + "RetailCalendar.retail_date": "2020-03-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-03-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "1", + "BigECommerce.totalCountRetailMonthAgo": "2", + "RetailCalendar.retail_date": "2020-04-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-04-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "5", + "BigECommerce.totalCountRetailMonthAgo": "1", + "RetailCalendar.retail_date": "2020-05-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-05-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "7", + "BigECommerce.totalCountRetailMonthAgo": "5", + "RetailCalendar.retail_date": "2020-06-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-06-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "4", + "BigECommerce.totalCountRetailMonthAgo": "6", + "RetailCalendar.retail_date": "2020-10-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-10-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "9", + "BigECommerce.totalCountRetailMonthAgo": "5", + "RetailCalendar.retail_date": "2020-11-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-11-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "7", + "BigECommerce.totalCountRetailMonthAgo": "8", + "RetailCalendar.retail_date": "2020-12-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-12-01T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/postgres-driver querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo 1`] = ` +Array [ + Object { + "BigECommerce.count": "1", + "BigECommerce.totalCountRetailWeekAgo": "1", + "RetailCalendar.retail_date": "2020-03-22T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-03-22T00:00:00.000", + }, + Object { + "BigECommerce.count": "1", + "BigECommerce.totalCountRetailWeekAgo": "2", + "RetailCalendar.retail_date": "2020-05-31T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-05-31T00:00:00.000", + }, + Object { + "BigECommerce.count": "2", + "BigECommerce.totalCountRetailWeekAgo": "1", + "RetailCalendar.retail_date": "2020-06-07T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-06-07T00:00:00.000", + }, + Object { + "BigECommerce.count": "2", + "BigECommerce.totalCountRetailWeekAgo": "2", + "RetailCalendar.retail_date": "2020-06-14T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-06-14T00:00:00.000", + }, + Object { + "BigECommerce.count": "2", + "BigECommerce.totalCountRetailWeekAgo": "2", + "RetailCalendar.retail_date": "2020-06-21T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-06-21T00:00:00.000", + }, + Object { + "BigECommerce.count": "1", + "BigECommerce.totalCountRetailWeekAgo": "2", + "RetailCalendar.retail_date": "2020-09-06T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-09-06T00:00:00.000", + }, + Object { + "BigECommerce.count": "2", + "BigECommerce.totalCountRetailWeekAgo": "1", + "RetailCalendar.retail_date": "2020-09-13T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-09-13T00:00:00.000", + }, + Object { + "BigECommerce.count": "1", + "BigECommerce.totalCountRetailWeekAgo": "2", + "RetailCalendar.retail_date": "2020-09-20T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-09-20T00:00:00.000", + }, + Object { + "BigECommerce.count": "2", + "BigECommerce.totalCountRetailWeekAgo": "1", + "RetailCalendar.retail_date": "2020-10-18T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-10-18T00:00:00.000", + }, + Object { + "BigECommerce.count": "1", + "BigECommerce.totalCountRetailWeekAgo": "2", + "RetailCalendar.retail_date": "2020-10-25T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-10-25T00:00:00.000", + }, + Object { + "BigECommerce.count": "3", + "BigECommerce.totalCountRetailWeekAgo": "1", + "RetailCalendar.retail_date": "2020-11-01T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-11-01T00:00:00.000", + }, + Object { + "BigECommerce.count": "2", + "BigECommerce.totalCountRetailWeekAgo": "3", + "RetailCalendar.retail_date": "2020-11-08T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-11-08T00:00:00.000", + }, + Object { + "BigECommerce.count": "3", + "BigECommerce.totalCountRetailWeekAgo": "2", + "RetailCalendar.retail_date": "2020-11-15T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-11-15T00:00:00.000", + }, + Object { + "BigECommerce.count": "1", + "BigECommerce.totalCountRetailWeekAgo": "3", + "RetailCalendar.retail_date": "2020-11-22T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-11-22T00:00:00.000", + }, + Object { + "BigECommerce.count": "3", + "BigECommerce.totalCountRetailWeekAgo": "1", + "RetailCalendar.retail_date": "2020-11-29T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-11-29T00:00:00.000", + }, + Object { + "BigECommerce.count": "2", + "BigECommerce.totalCountRetailWeekAgo": "2", + "RetailCalendar.retail_date": "2020-12-20T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-12-20T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/postgres-driver querying BigECommerce with Retail Calendar: totalCountRetailYearAgo 1`] = ` +Array [ + Object { + "BigECommerce.count": "42", + "BigECommerce.totalCountRetailYearAgo": "2", + "RetailCalendar.retail_date": "2020-02-02T00:00:00.000", + "RetailCalendar.retail_date.year": "2020-02-02T00:00:00.000", + }, +] +`; + exports[`Queries with the @cubejs-backend/postgres-driver querying BigECommerce: filtering with possible casts 1`] = ` Array [ Object { From 766f03d4a9a8b7b2b9c58ecca647932e14276682 Mon Sep 17 00:00:00 2001 From: waralexrom <108349432+waralexrom@users.noreply.github.com> Date: Fri, 11 Jul 2025 11:04:44 +0200 Subject: [PATCH 2/5] chore(tesseract): Disable multi-stage pre-aggregations if not supported by cubestore (#9771) --- packages/cubejs-backend-shared/src/env.ts | 4 +++- .../src/adapter/BaseQuery.js | 6 ++++-- .../src/adapter/CubeStoreQuery.ts | 17 +++++++++++++++-- .../pre-aggregations-multi-stage.test.ts | 11 +++++++---- .../postgres/pre-aggregations.test.ts | 2 ++ .../cubejs-testing-drivers/fixtures/athena.json | 4 ---- .../fixtures/postgres.json | 5 +---- .../src/cube_bridge/base_query_options.rs | 2 ++ .../optimizers/pre_aggregation/optimizer.rs | 9 +++++++-- .../cubesqlplanner/src/planner/base_query.rs | 12 ++++++++++-- 10 files changed, 51 insertions(+), 21 deletions(-) diff --git a/packages/cubejs-backend-shared/src/env.ts b/packages/cubejs-backend-shared/src/env.ts index 60b4e263ebdb7..cedc778b928f2 100644 --- a/packages/cubejs-backend-shared/src/env.ts +++ b/packages/cubejs-backend-shared/src/env.ts @@ -1983,7 +1983,9 @@ const variables: Record any> = { cubeStoreNoHeartBeatTimeout: () => get('CUBEJS_CUBESTORE_NO_HEART_BEAT_TIMEOUT') .default('30') .asInt(), - + cubeStoreRollingWindowJoin: () => get('CUBEJS_CUBESTORE_ROLLING_WINDOW_JOIN') + .default('false') + .asBoolStrict(), allowUngroupedWithoutPrimaryKey: () => get('CUBEJS_ALLOW_UNGROUPED_WITHOUT_PRIMARY_KEY') .default(get('CUBESQL_SQL_PUSH_DOWN').default('true').asString()) .asBoolStrict(), diff --git a/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js b/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js index de3278a966ada..43b270f34b5a9 100644 --- a/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js +++ b/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js @@ -335,7 +335,7 @@ export class BaseQuery { if (this.useNativeSqlPlanner && !this.neverUseSqlPlannerPreaggregation()) { const fullAggregateMeasures = this.fullKeyQueryAggregateMeasures({ hasMultipliedForPreAggregation: true }); - this.canUseNativeSqlPlannerPreAggregation = fullAggregateMeasures.multiStageMembers.length > 0 || fullAggregateMeasures.cumulativeMeasures.length > 0; + this.canUseNativeSqlPlannerPreAggregation = fullAggregateMeasures.multiStageMembers.length > 0; } this.queryLevelJoinHints = this.options.joinHints ?? []; this.prebuildJoin(); @@ -880,6 +880,7 @@ export class BaseQuery { preAggregationQuery: this.options.preAggregationQuery, totalQuery: this.options.totalQuery, joinHints: this.options.joinHints, + cubestoreSupportMultistage: this.options.cubestoreSupportMultistage ?? getEnv('cubeStoreRollingWindowJoin') }; const buildResult = nativeBuildSqlAndParams(queryParams); @@ -929,7 +930,8 @@ export class BaseQuery { baseTools: this, ungrouped: this.options.ungrouped, exportAnnotatedSql: false, - preAggregationQuery: this.options.preAggregationQuery + preAggregationQuery: this.options.preAggregationQuery, + cubestoreSupportMultistage: this.options.cubestoreSupportMultistage ?? getEnv('cubeStoreRollingWindowJoin') }; const buildResult = nativeBuildSqlAndParams(queryParams); diff --git a/packages/cubejs-schema-compiler/src/adapter/CubeStoreQuery.ts b/packages/cubejs-schema-compiler/src/adapter/CubeStoreQuery.ts index 7ecc8c1aad79f..fd6f23a44a666 100644 --- a/packages/cubejs-schema-compiler/src/adapter/CubeStoreQuery.ts +++ b/packages/cubejs-schema-compiler/src/adapter/CubeStoreQuery.ts @@ -1,5 +1,5 @@ import moment from 'moment-timezone'; -import { parseSqlInterval } from '@cubejs-backend/shared'; +import { parseSqlInterval, getEnv } from '@cubejs-backend/shared'; import { BaseQuery } from './BaseQuery'; import { BaseFilter } from './BaseFilter'; import { BaseMeasure } from './BaseMeasure'; @@ -32,6 +32,13 @@ type RollingWindow = { }; export class CubeStoreQuery extends BaseQuery { + private readonly cubeStoreRollingWindowJoin: boolean; + + public constructor(compilers, options) { + super(compilers, options); + this.cubeStoreRollingWindowJoin = getEnv('cubeStoreRollingWindowJoin'); + } + public newFilter(filter) { return new CubeStoreFilter(this, filter); } @@ -57,10 +64,16 @@ export class CubeStoreQuery extends BaseQuery { } public subtractInterval(date: string, interval: string) { + if (this.cubeStoreRollingWindowJoin) { + return super.subtractInterval(date, interval); + } return `DATE_SUB(${date}, INTERVAL ${this.formatInterval(interval)})`; } public addInterval(date: string, interval: string) { + if (this.cubeStoreRollingWindowJoin) { + return super.addInterval(date, interval); + } return `DATE_ADD(${date}, INTERVAL ${this.formatInterval(interval)})`; } @@ -185,7 +198,7 @@ export class CubeStoreQuery extends BaseQuery { cumulativeMeasures: Array<[boolean, BaseMeasure]>, preAggregationForQuery: any ) { - if (!cumulativeMeasures.length) { + if (this.cubeStoreRollingWindowJoin || !cumulativeMeasures.length) { return super.regularAndTimeSeriesRollupQuery(regularMeasures, multipliedMeasures, cumulativeMeasures, preAggregationForQuery); } const cumulativeMeasuresWithoutMultiplied = cumulativeMeasures.map(([_, measure]) => measure); diff --git a/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations-multi-stage.test.ts b/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations-multi-stage.test.ts index a3d0ebefaa707..4fa1b1bcad4c4 100644 --- a/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations-multi-stage.test.ts +++ b/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations-multi-stage.test.ts @@ -69,7 +69,7 @@ describe('PreAggregationsMultiStage', () => { testMeas: { type: 'countDistinct', - sql: \`\${createdAtDay}\` + sql: \`\${createdAtDay}\` } }, @@ -188,7 +188,8 @@ describe('PreAggregationsMultiStage', () => { order: [{ id: 'visitors.createdAt' }], - preAggregationsSchema: '' + preAggregationsSchema: '', + cubestoreSupportMultistage: true }); const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription(); @@ -231,7 +232,8 @@ describe('PreAggregationsMultiStage', () => { order: [{ id: 'visitors.source' }], - preAggregationsSchema: '' + preAggregationsSchema: '', + cubestoreSupportMultistage: true }); const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription(); @@ -262,7 +264,8 @@ describe('PreAggregationsMultiStage', () => { order: [{ id: 'visitors.source' }], - preAggregationsSchema: '' + preAggregationsSchema: '', + cubestoreSupportMultistage: true }); const preAggregationsDescription: any = query.preAggregations?.preAggregationsDescription(); diff --git a/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations.test.ts b/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations.test.ts index bf603e2995947..81ea1daee1e3e 100644 --- a/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations.test.ts +++ b/packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations.test.ts @@ -1922,6 +1922,7 @@ describe('PreAggregations', () => { }, { id: 'visitors.source' }], + cubestoreSupportMultistage: getEnv("nativeSqlPlanner") }); const queryAndParams = query.buildSqlAndParams(); @@ -1999,6 +2000,7 @@ describe('PreAggregations', () => { }, { id: 'visitors.source' }], + cubestoreSupportMultistage: getEnv("nativeSqlPlanner") }); const queryAndParams = query.buildSqlAndParams(); diff --git a/packages/cubejs-testing-drivers/fixtures/athena.json b/packages/cubejs-testing-drivers/fixtures/athena.json index 4cf55c8379909..dbead6812cdbd 100644 --- a/packages/cubejs-testing-drivers/fixtures/athena.json +++ b/packages/cubejs-testing-drivers/fixtures/athena.json @@ -190,9 +190,6 @@ "querying custom granularities ECommerce: count by three_months_by_march + dimension", "querying custom granularities (with preaggregation) ECommerce: totalQuantity by half_year + no dimension", "querying custom granularities (with preaggregation) ECommerce: totalQuantity by half_year + dimension", - "pre-aggregations Customers: running total without time dimension", - "querying BigECommerce: totalProfitYearAgo", - "SQL API: post-aggregate percentage of total", "SQL API: Simple Rollup", "SQL API: Complex Rollup", "SQL API: Nested Rollup", @@ -201,7 +198,6 @@ "SQL API: Nested Rollup with aliases", "SQL API: Nested Rollup over asterisk", "SQL API: Extended nested Rollup over asterisk", - "SQL API: Timeshift measure from cube", "SQL API: SQL push down push to cube quoted alias", "querying BigECommerce: rolling window YTD (month + week)", "querying BigECommerce: rolling window YTD (month + week + no gran)", diff --git a/packages/cubejs-testing-drivers/fixtures/postgres.json b/packages/cubejs-testing-drivers/fixtures/postgres.json index b65d9c53f8f14..c9e0811537e40 100644 --- a/packages/cubejs-testing-drivers/fixtures/postgres.json +++ b/packages/cubejs-testing-drivers/fixtures/postgres.json @@ -175,9 +175,7 @@ "querying ECommerce: total quantity, avg discount, total sales, total profit by product + order + total -- noisy test", "querying custom granularities (with preaggregation) ECommerce: totalQuantity by half_year + no dimension", "querying custom granularities (with preaggregation) ECommerce: totalQuantity by half_year + dimension", - "pre-aggregations Customers: running total without time dimension", - "querying BigECommerce: totalProfitYearAgo", - "SQL API: post-aggregate percentage of total", + "SQL API: Simple Rollup", "SQL API: Complex Rollup", "SQL API: Rollup with aliases", @@ -186,7 +184,6 @@ "SQL API: Nested Rollup with aliases", "SQL API: Nested Rollup over asterisk", "SQL API: Extended nested Rollup over asterisk", - "SQL API: Timeshift measure from cube", "SQL API: SQL push down push to cube quoted alias", "---- Different results comparing to baseQuery version. Need to investigate ----", diff --git a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/base_query_options.rs b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/base_query_options.rs index da2f3286d9bf0..2777ff560cc69 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/base_query_options.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/base_query_options.rs @@ -66,6 +66,8 @@ pub struct BaseQueryOptionsStatic { pub pre_aggregation_query: Option, #[serde(rename = "totalQuery")] pub total_query: Option, + #[serde(rename = "cubestoreSupportMultistage")] + pub cubestore_support_multistage: Option, } #[nativebridge::native_bridge(BaseQueryOptionsStatic)] diff --git a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs index c812c57e3cdca..ee5db813f8ea7 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs @@ -29,13 +29,15 @@ impl MatchState { pub struct PreAggregationOptimizer { query_tools: Rc, + allow_multi_stage: bool, used_pre_aggregations: HashMap<(String, String), Rc>, } impl PreAggregationOptimizer { - pub fn new(query_tools: Rc) -> Self { + pub fn new(query_tools: Rc, allow_multi_stage: bool) -> Self { Self { query_tools, + allow_multi_stage, used_pre_aggregations: HashMap::new(), } } @@ -96,7 +98,10 @@ impl PreAggregationOptimizer { query: &FullKeyAggregateQuery, pre_aggregation: &Rc, ) -> Result>, CubeError> { - if !query.multistage_members.is_empty() { + if !self.allow_multi_stage && !query.multistage_members.is_empty() { + return Ok(None); + } + if self.allow_multi_stage && !query.multistage_members.is_empty() { return self .try_rewrite_full_key_aggregate_query_with_multi_stages(query, pre_aggregation); } diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/base_query.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/base_query.rs index c719d09569ccf..ee4184a2e67d9 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/base_query.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/base_query.rs @@ -20,6 +20,7 @@ pub struct BaseQuery { context: NativeContextHolder, query_tools: Rc, request: Rc, + cubestore_support_multistage: bool, } impl BaseQuery { @@ -27,6 +28,10 @@ impl BaseQuery { context: NativeContextHolder, options: Rc, ) -> Result { + let cubestore_support_multistage = options + .static_data() + .cubestore_support_multistage + .unwrap_or(false); let query_tools = QueryTools::try_new( options.cube_evaluator()?, options.base_tools()?, @@ -41,6 +46,7 @@ impl BaseQuery { context, query_tools, request, + cubestore_support_multistage, }) } @@ -142,8 +148,10 @@ impl BaseQuery { plan: Rc, ) -> Result<(Rc, Vec>), CubeError> { let result = if !self.request.is_pre_aggregation_query() { - let mut pre_aggregation_optimizer = - PreAggregationOptimizer::new(self.query_tools.clone()); + let mut pre_aggregation_optimizer = PreAggregationOptimizer::new( + self.query_tools.clone(), + self.cubestore_support_multistage, + ); if let Some(result) = pre_aggregation_optimizer.try_optimize(plan.clone())? { if pre_aggregation_optimizer.get_used_pre_aggregations().len() == 1 { ( From 3f16a39c27ac7da2d5671031cb1745e0053b4a42 Mon Sep 17 00:00:00 2001 From: Konstantin Burkalev Date: Fri, 11 Jul 2025 19:06:47 +0300 Subject: [PATCH 3/5] fix(tesseract): Fix infinite loops during calendar time dimension processing (#9772) * fix serialization as interval is now optional for granularity * fix the infinite loop eval of calendar time shifts * fix time shifts for cases when they are defined on the pk * add tests for common queries of calendar td Also restructured tests * fix recursion for time shifts plain values * prepare tests for pk time shift skipped for as not supported by tesseract * cargo fmt --- .../integration/postgres/calendars.test.ts | 628 +++++++++++------- rust/cubeorchestrator/src/transport.rs | 3 +- .../src/physical_plan_builder/builder.rs | 4 +- .../sql_evaluator/symbols/dimension_symbol.rs | 59 +- 4 files changed, 414 insertions(+), 280 deletions(-) diff --git a/packages/cubejs-schema-compiler/test/integration/postgres/calendars.test.ts b/packages/cubejs-schema-compiler/test/integration/postgres/calendars.test.ts index 21292548cf4de..ba2f99d4aa878 100644 --- a/packages/cubejs-schema-compiler/test/integration/postgres/calendars.test.ts +++ b/packages/cubejs-schema-compiler/test/integration/postgres/calendars.test.ts @@ -211,6 +211,39 @@ cubes: type: time primary_key: true + granularities: + - name: year + sql: "{CUBE}.retail_year_begin_date" + + - name: quarter + sql: "{CUBE}.retail_quarter_year" + +# - name: month +# sql: "{CUBE}.retail_month_begin_date" + + - name: week + sql: "{CUBE}.retail_week_begin_date" + + # Casually defining custom granularities should also work. + # While maybe not very sound from a business standpoint, + # such definition should be allowed in this data model + - name: fortnight + interval: 2 week + origin: "2025-01-01" + + time_shift: + - interval: 1 month + type: prior + sql: "{CUBE}.retail_date_prev_month" + + - interval: 1 quarter + type: prior + sql: "{CUBE}.retail_date_prev_quarter" + + - interval: 1 year + type: prior + sql: "{CUBE}.retail_date_prev_year" + ##### Retail Dates #### - name: retail_date sql: retail_date @@ -305,149 +338,87 @@ cubes: ); } - it('Count by retail year', async () => runQueryTest({ - measures: ['calendar_orders.count'], - timeDimensions: [{ - dimension: 'custom_calendar.retail_date', - granularity: 'year', - dateRange: ['2025-02-02', '2026-02-01'] - }], - order: [{ id: 'custom_calendar.retail_date' }] - }, [ - { - calendar_orders__count: '37', - custom_calendar__retail_date_year: '2025-02-02T00:00:00.000Z', - } - ])); - - it('Count by retail month', async () => runQueryTest({ - measures: ['calendar_orders.count'], - timeDimensions: [{ - dimension: 'custom_calendar.retail_date', - granularity: 'month', - dateRange: ['2025-02-02', '2026-02-01'] - }], - order: [{ id: 'custom_calendar.retail_date' }] - }, [ - { - calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-02-01T00:00:00.000Z', - }, - { - calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-03-01T00:00:00.000Z', - }, - { - calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-04-01T00:00:00.000Z', - }, - { - calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-05-01T00:00:00.000Z', - }, - { - calendar_orders__count: '4', - custom_calendar__retail_date_month: '2025-06-01T00:00:00.000Z', - }, - { - calendar_orders__count: '4', - custom_calendar__retail_date_month: '2025-07-01T00:00:00.000Z', - }, - { - calendar_orders__count: '4', - custom_calendar__retail_date_month: '2025-08-01T00:00:00.000Z', - }, - { - calendar_orders__count: '4', - custom_calendar__retail_date_month: '2025-09-01T00:00:00.000Z', - }, - { - calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-10-01T00:00:00.000Z', - }, - { - calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-11-01T00:00:00.000Z', - }, - { - calendar_orders__count: '3', - custom_calendar__retail_date_month: '2025-12-01T00:00:00.000Z', - }, - ])); - - it('Count by retail week', async () => runQueryTest({ - measures: ['calendar_orders.count'], - timeDimensions: [{ - dimension: 'custom_calendar.retail_date', - granularity: 'week', - dateRange: ['2025-02-02', '2025-04-01'] - }], - order: [{ id: 'custom_calendar.retail_date' }] - }, [ - { - calendar_orders__count: '1', - custom_calendar__retail_date_week: '2025-02-02T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - custom_calendar__retail_date_week: '2025-02-09T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - custom_calendar__retail_date_week: '2025-02-16T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - custom_calendar__retail_date_week: '2025-02-23T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - custom_calendar__retail_date_week: '2025-03-09T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - custom_calendar__retail_date_week: '2025-03-16T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - custom_calendar__retail_date_week: '2025-03-30T00:00:00.000Z', - }, - ])); - - it('Count by fortnight custom granularity', async () => runQueryTest({ - measures: ['calendar_orders.count'], - timeDimensions: [{ - dimension: 'custom_calendar.retail_date', - granularity: 'fortnight', - dateRange: ['2025-02-02', '2025-04-01'] - }], - order: [{ id: 'custom_calendar.retail_date' }] - }, [ - { - calendar_orders__count: '1', - custom_calendar__retail_date_fortnight: '2025-01-29T00:00:00.000Z', // Notice it starts on 2025-01-29, not 2025-02-01 - }, - { - calendar_orders__count: '2', - custom_calendar__retail_date_fortnight: '2025-02-12T00:00:00.000Z', - }, - { - calendar_orders__count: '2', - custom_calendar__retail_date_fortnight: '2025-02-26T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - custom_calendar__retail_date_fortnight: '2025-03-12T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - custom_calendar__retail_date_fortnight: '2025-03-26T00:00:00.000Z', - }, - ])); + describe('Common queries to calendar cube', () => { + it('Value of time-shift custom granularity non-pk time dimension', async () => runQueryTest({ + dimensions: ['custom_calendar.retail_date'], + timeDimensions: [{ + dimension: 'custom_calendar.retail_date', + dateRange: ['2025-02-02', '2025-02-06'] + }], + order: [{ id: 'custom_calendar.retail_date' }] + }, [ + { + custom_calendar__retail_date: '2025-02-02T00:00:00.000Z', + }, + { + custom_calendar__retail_date: '2025-02-03T00:00:00.000Z', + }, + { + custom_calendar__retail_date: '2025-02-04T00:00:00.000Z', + }, + { + custom_calendar__retail_date: '2025-02-05T00:00:00.000Z', + }, + { + custom_calendar__retail_date: '2025-02-06T00:00:00.000Z', + }, + ])); - describe('Time-shifts', () => { - it('Count shifted by retail year (custom shift + custom granularity)', async () => runQueryTest({ - measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_y'], + it('Year granularity of time-shift custom granularity non-pk time dimension', async () => runQueryTest({ + timeDimensions: [{ + dimension: 'custom_calendar.retail_date', + granularity: 'year', + dateRange: ['2025-02-02', '2025-02-06'] + }], + order: [{ id: 'custom_calendar.retail_date' }] + }, [ + { + custom_calendar__retail_date_year: '2025-02-02T00:00:00.000Z', + }, + ])); + + it('Value of time-shift custom granularity pk time dimension', async () => runQueryTest({ + dimensions: ['custom_calendar.date_val'], + timeDimensions: [{ + dimension: 'custom_calendar.date_val', + dateRange: ['2025-02-02', '2025-02-06'] + }], + order: [{ id: 'custom_calendar.date_val' }] + }, [ + { + custom_calendar__date_val: '2025-02-02T00:00:00.000Z', + }, + { + custom_calendar__date_val: '2025-02-03T00:00:00.000Z', + }, + { + custom_calendar__date_val: '2025-02-04T00:00:00.000Z', + }, + { + custom_calendar__date_val: '2025-02-05T00:00:00.000Z', + }, + { + custom_calendar__date_val: '2025-02-06T00:00:00.000Z', + }, + ])); + + it('Year granularity of time-shift custom granularity pk time dimension', async () => runQueryTest({ + timeDimensions: [{ + dimension: 'custom_calendar.date_val', + granularity: 'year', + dateRange: ['2025-02-02', '2025-02-06'] + }], + order: [{ id: 'custom_calendar.date_val' }] + }, [ + { + custom_calendar__date_val_year: '2025-02-02T00:00:00.000Z', + }, + ])); + }); + + describe('Custom granularities', () => { + it('Count by retail year', async () => runQueryTest({ + measures: ['calendar_orders.count'], timeDimensions: [{ dimension: 'custom_calendar.retail_date', granularity: 'year', @@ -457,13 +428,12 @@ cubes: }, [ { calendar_orders__count: '37', - calendar_orders__count_shifted_calendar_y: '39', custom_calendar__retail_date_year: '2025-02-02T00:00:00.000Z', - }, + } ])); - it('Count shifted by retail month (custom shift common granularity)', async () => runQueryTest({ - measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_m'], + it('Count by retail month', async () => runQueryTest({ + measures: ['calendar_orders.count'], timeDimensions: [{ dimension: 'custom_calendar.retail_date', granularity: 'month', @@ -473,190 +443,360 @@ cubes: }, [ { calendar_orders__count: '3', - calendar_orders__count_shifted_calendar_m: '3', custom_calendar__retail_date_month: '2025-02-01T00:00:00.000Z', }, { calendar_orders__count: '3', - calendar_orders__count_shifted_calendar_m: '4', custom_calendar__retail_date_month: '2025-03-01T00:00:00.000Z', }, { calendar_orders__count: '3', - calendar_orders__count_shifted_calendar_m: '2', custom_calendar__retail_date_month: '2025-04-01T00:00:00.000Z', }, { calendar_orders__count: '3', - calendar_orders__count_shifted_calendar_m: '2', custom_calendar__retail_date_month: '2025-05-01T00:00:00.000Z', }, { calendar_orders__count: '4', - calendar_orders__count_shifted_calendar_m: '3', custom_calendar__retail_date_month: '2025-06-01T00:00:00.000Z', }, { calendar_orders__count: '4', - calendar_orders__count_shifted_calendar_m: '4', custom_calendar__retail_date_month: '2025-07-01T00:00:00.000Z', }, { calendar_orders__count: '4', - calendar_orders__count_shifted_calendar_m: '4', custom_calendar__retail_date_month: '2025-08-01T00:00:00.000Z', }, { calendar_orders__count: '4', - calendar_orders__count_shifted_calendar_m: '3', custom_calendar__retail_date_month: '2025-09-01T00:00:00.000Z', }, { calendar_orders__count: '3', - calendar_orders__count_shifted_calendar_m: '4', custom_calendar__retail_date_month: '2025-10-01T00:00:00.000Z', }, { calendar_orders__count: '3', - calendar_orders__count_shifted_calendar_m: '3', custom_calendar__retail_date_month: '2025-11-01T00:00:00.000Z', }, { calendar_orders__count: '3', - calendar_orders__count_shifted_calendar_m: '3', custom_calendar__retail_date_month: '2025-12-01T00:00:00.000Z', }, ])); - it('Count shifted by retail week (common shift custom granularity)', async () => runQueryTest({ - measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_w'], + it('Count by retail week', async () => runQueryTest({ + measures: ['calendar_orders.count'], timeDimensions: [{ dimension: 'custom_calendar.retail_date', granularity: 'week', - dateRange: ['2025-02-02', '2026-02-01'] + dateRange: ['2025-02-02', '2025-04-01'] }], order: [{ id: 'custom_calendar.retail_date' }] }, [ { calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-02-09T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-02-16T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-02-23T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-03-16T00:00:00.000Z', + custom_calendar__retail_date_week: '2025-02-02T00:00:00.000Z', }, { calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-04-06T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-04-13T00:00:00.000Z', + custom_calendar__retail_date_week: '2025-02-09T00:00:00.000Z', }, { calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-05-11T00:00:00.000Z', + custom_calendar__retail_date_week: '2025-02-16T00:00:00.000Z', }, { calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-05-18T00:00:00.000Z', + custom_calendar__retail_date_week: '2025-02-23T00:00:00.000Z', }, { calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-06-08T00:00:00.000Z', + custom_calendar__retail_date_week: '2025-03-09T00:00:00.000Z', }, { calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-06-15T00:00:00.000Z', + custom_calendar__retail_date_week: '2025-03-16T00:00:00.000Z', }, { calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-06-22T00:00:00.000Z', + custom_calendar__retail_date_week: '2025-03-30T00:00:00.000Z', }, + ])); + + it('Count by fortnight custom granularity', async () => runQueryTest({ + measures: ['calendar_orders.count'], + timeDimensions: [{ + dimension: 'custom_calendar.retail_date', + granularity: 'fortnight', + dateRange: ['2025-02-02', '2025-04-01'] + }], + order: [{ id: 'custom_calendar.retail_date' }] + }, [ { calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-06-29T00:00:00.000Z', + custom_calendar__retail_date_fortnight: '2025-01-29T00:00:00.000Z', // Notice it starts on 2025-01-29, not 2025-02-01 }, { calendar_orders__count: '2', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-07-20T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '2', - custom_calendar__retail_date_week: '2025-07-27T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-08-03T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-08-10T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-08-17T00:00:00.000Z', + custom_calendar__retail_date_fortnight: '2025-02-12T00:00:00.000Z', }, { calendar_orders__count: '2', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-09-07T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '2', - custom_calendar__retail_date_week: '2025-09-14T00:00:00.000Z', + custom_calendar__retail_date_fortnight: '2025-02-26T00:00:00.000Z', }, { calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-10-12T00:00:00.000Z', + custom_calendar__retail_date_fortnight: '2025-03-12T00:00:00.000Z', }, { calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-10-19T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-11-23T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-11-30T00:00:00.000Z', - }, - { - calendar_orders__count: '1', - calendar_orders__count_shifted_calendar_w: '1', - custom_calendar__retail_date_week: '2025-12-21T00:00:00.000Z', + custom_calendar__retail_date_fortnight: '2025-03-26T00:00:00.000Z', }, ])); }); + + describe('Time-shifts', () => { + describe('Non-PK dimension time-shifts', () => { + it('Count shifted by retail year (custom shift + custom granularity)', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_y'], + timeDimensions: [{ + dimension: 'custom_calendar.retail_date', + granularity: 'year', + dateRange: ['2025-02-02', '2026-02-01'] + }], + order: [{ id: 'custom_calendar.retail_date' }] + }, [ + { + calendar_orders__count: '37', + calendar_orders__count_shifted_calendar_y: '39', + custom_calendar__retail_date_year: '2025-02-02T00:00:00.000Z', + }, + ])); + + it('Count shifted by retail month (custom shift + common granularity)', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_m'], + timeDimensions: [{ + dimension: 'custom_calendar.retail_date', + granularity: 'month', + dateRange: ['2025-02-02', '2026-02-01'] + }], + order: [{ id: 'custom_calendar.retail_date' }] + }, [ + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__retail_date_month: '2025-02-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '4', + custom_calendar__retail_date_month: '2025-03-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '2', + custom_calendar__retail_date_month: '2025-04-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '2', + custom_calendar__retail_date_month: '2025-05-01T00:00:00.000Z', + }, + { + calendar_orders__count: '4', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__retail_date_month: '2025-06-01T00:00:00.000Z', + }, + { + calendar_orders__count: '4', + calendar_orders__count_shifted_calendar_m: '4', + custom_calendar__retail_date_month: '2025-07-01T00:00:00.000Z', + }, + { + calendar_orders__count: '4', + calendar_orders__count_shifted_calendar_m: '4', + custom_calendar__retail_date_month: '2025-08-01T00:00:00.000Z', + }, + { + calendar_orders__count: '4', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__retail_date_month: '2025-09-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '4', + custom_calendar__retail_date_month: '2025-10-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__retail_date_month: '2025-11-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__retail_date_month: '2025-12-01T00:00:00.000Z', + }, + ])); + + it('Count shifted by retail week (common shift + custom granularity)', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_w'], + timeDimensions: [{ + dimension: 'custom_calendar.retail_date', + granularity: 'week', + dateRange: ['2025-02-02', '2025-04-12'] + }], + order: [{ id: 'custom_calendar.retail_date' }] + }, [ + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-02-09T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-02-16T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-02-23T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-03-16T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__retail_date_week: '2025-04-06T00:00:00.000Z', + }, + ])); + }); + + describe('PK dimension time-shifts', () => { + it.skip('Count shifted by retail year (custom shift + custom granularity)1', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_y'], + timeDimensions: [{ + dimension: 'custom_calendar.date_val', + granularity: 'year', + dateRange: ['2025-02-02', '2026-02-01'] + }], + order: [{ id: 'custom_calendar.date_val' }] + }, [ + { + calendar_orders__count: '37', + calendar_orders__count_shifted_calendar_y: '39', + custom_calendar__date_val_year: '2025-02-02T00:00:00.000Z', + }, + ])); + + it.skip('Count shifted by retail month (custom shift + common granularity)', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_m'], + timeDimensions: [{ + dimension: 'custom_calendar.date_val', + granularity: 'month', + dateRange: ['2025-02-02', '2026-02-01'] + }], + order: [{ id: 'custom_calendar.date_val' }] + }, [ + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__date_val_month: '2025-02-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '4', + custom_calendar__date_val_month: '2025-03-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '2', + custom_calendar__date_val_month: '2025-04-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '2', + custom_calendar__date_val_month: '2025-05-01T00:00:00.000Z', + }, + { + calendar_orders__count: '4', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__date_val_month: '2025-06-01T00:00:00.000Z', + }, + { + calendar_orders__count: '4', + calendar_orders__count_shifted_calendar_m: '4', + custom_calendar__date_val_month: '2025-07-01T00:00:00.000Z', + }, + { + calendar_orders__count: '4', + calendar_orders__count_shifted_calendar_m: '4', + custom_calendar__date_val_month: '2025-08-01T00:00:00.000Z', + }, + { + calendar_orders__count: '4', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__date_val_month: '2025-09-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '4', + custom_calendar__date_val_month: '2025-10-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__date_val_month: '2025-11-01T00:00:00.000Z', + }, + { + calendar_orders__count: '3', + calendar_orders__count_shifted_calendar_m: '3', + custom_calendar__date_val_month: '2025-12-01T00:00:00.000Z', + }, + ])); + + it.skip('Count shifted by retail week (common shift + custom granularity)', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_w'], + timeDimensions: [{ + dimension: 'custom_calendar.date_val', + granularity: 'week', + dateRange: ['2025-02-02', '2026-02-01'] + }], + order: [{ id: 'custom_calendar.date_val' }] + }, [ + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__date_val_week: '2025-02-09T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__date_val_week: '2025-02-16T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__date_val_week: '2025-02-23T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__date_val_week: '2025-03-16T00:00:00.000Z', + }, + { + calendar_orders__count: '1', + calendar_orders__count_shifted_calendar_w: '1', + custom_calendar__date_val_week: '2025-04-06T00:00:00.000Z', + }, + ])); + }); + }); }); diff --git a/rust/cubeorchestrator/src/transport.rs b/rust/cubeorchestrator/src/transport.rs index 90901cbcb5160..f262c3ae9243a 100644 --- a/rust/cubeorchestrator/src/transport.rs +++ b/rust/cubeorchestrator/src/transport.rs @@ -159,7 +159,8 @@ pub type MembersMap = HashMap; pub struct GranularityMeta { pub name: String, pub title: String, - pub interval: String, + #[serde(skip_serializing_if = "Option::is_none")] + pub interval: Option, #[serde(skip_serializing_if = "Option::is_none")] pub offset: Option, #[serde(skip_serializing_if = "Option::is_none")] diff --git a/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs b/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs index 0d739f697e215..d585a7f98b4ab 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs @@ -47,10 +47,10 @@ impl PhysicalPlanBuilderContext { dimension.calendar_time_shift_for_interval(&shift.interval) { return Either::Right((dim_key.clone(), cts.clone())); - } else if let Some(calendar_pk) = dimension.time_shift_pk() { + } else if let Some(calendar_pk) = dimension.time_shift_pk_full_name() { let mut shift = shift.clone(); shift.interval = shift.interval.inverse(); - return Either::Left((calendar_pk.full_name(), shift.clone())); + return Either::Left((calendar_pk, shift.clone())); } } Either::Left((key.clone(), shift.clone())) diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/symbols/dimension_symbol.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/symbols/dimension_symbol.rs index f9e35b6cbe85a..6d15a6a0f4db0 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/symbols/dimension_symbol.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/symbols/dimension_symbol.rs @@ -42,7 +42,10 @@ pub struct DimensionSymbol { is_reference: bool, // Symbol is a direct reference to another symbol without any calculations is_view: bool, time_shift: Vec, - time_shift_pk: Option>, + time_shift_pk_full_name: Option, + is_self_time_shift_pk: bool, // If the dimension itself is a primary key and has time shifts, + // we can not reevaluate itself again while processing time shifts + // to avoid infinite recursion. So we raise this flag instead. } impl DimensionSymbol { @@ -57,7 +60,8 @@ impl DimensionSymbol { case: Option, definition: Rc, time_shift: Vec, - time_shift_pk: Option>, + time_shift_pk_full_name: Option, + is_self_time_shift_pk: bool, ) -> Rc { Rc::new(Self { cube_name, @@ -70,7 +74,8 @@ impl DimensionSymbol { case, is_view, time_shift, - time_shift_pk, + time_shift_pk_full_name, + is_self_time_shift_pk, }) } @@ -112,8 +117,8 @@ impl DimensionSymbol { &self.time_shift } - pub fn time_shift_pk(&self) -> Option> { - self.time_shift_pk.clone() + pub fn time_shift_pk_full_name(&self) -> Option { + self.time_shift_pk_full_name.clone() } pub fn full_name(&self) -> String { @@ -234,8 +239,10 @@ impl DimensionSymbol { .iter() .find(|shift| shift.interval == *interval) { - if let Some(pk) = &self.time_shift_pk { - return Some((pk.full_name(), ts.clone())); + if let Some(pk) = &self.time_shift_pk_full_name { + return Some((pk.clone(), ts.clone())); + } else if self.is_self_time_shift_pk { + return Some((self.full_name(), ts.clone())); } } None @@ -383,6 +390,7 @@ impl SymbolFactory for DimensionSymbolFactory { let cube = cube_evaluator.cube_from_path(cube_name.clone())?; let is_view = cube.static_data().is_view.unwrap_or(false); let is_calendar = cube.static_data().is_calendar.unwrap_or(false); + let mut is_self_time_shift_pk = false; // If the cube is a calendar, we need to find the primary key member // so that we can use it for time shifts processing. @@ -395,33 +403,17 @@ impl SymbolFactory for DimensionSymbolFactory { .unwrap_or_else(|| vec![]); if pk_members.iter().any(|pk| **pk == name) { - // To avoid evaluation loop. - None - } else { - let pk_member = pk_members - .into_iter() - .map(|primary_key| -> Result<_, CubeError> { - let key_dimension_name = format!("{}.{}", cube_name, primary_key); - let pk_member = compiler.add_dimension_evaluator(key_dimension_name)?; - - Ok(pk_member) - }) - .collect::, _>>()? - .into_iter() - .filter(|pk_member| { - if let Ok(pk_dimension) = pk_member.as_dimension() { - // TODO: What if calendar cube is joined via non-time dimension? - if pk_dimension.dimension_type() == "time" { - return true; - } - } - false - }) - .collect::>() - .first() - .cloned(); - pk_member + is_self_time_shift_pk = true; + } + + if pk_members.len() > 1 { + return Err(CubeError::user(format!( + "Cube '{}' has multiple primary keys, but only one is allowed for calendar cubes", + cube_name + ))); } + + pk_members.first().map(|pk| format!("{}.{}", cube_name, pk)) } else { None }; @@ -450,6 +442,7 @@ impl SymbolFactory for DimensionSymbolFactory { definition, time_shift, time_shift_pk, + is_self_time_shift_pk, ))) } } From e033aaf34af65192f981b942d834e33b1e61b851 Mon Sep 17 00:00:00 2001 From: Konstantin Burkalev Date: Mon, 14 Jul 2025 16:25:07 +0300 Subject: [PATCH 4/5] feat(tesseract): Introduce named multistage time shifts for use with calendars (#9773) * extend cube validator to support named timeshifts * Initial support for named time shifts * Resolve conficts * fix Evaluator to support named time shifts * update measure symbol to support named time shifts * cargo clippy * update snapshots * add tests for named time shifts --- .../src/compiler/CubeEvaluator.ts | 15 +-- .../src/compiler/CubeValidator.ts | 25 +++-- .../integration/postgres/calendars.test.ts | 92 +++++++++++++++++++ .../unit/__snapshots__/schema.test.ts.snap | 7 +- .../test/unit/fixtures/calendar_orders.yml | 7 ++ .../test/unit/fixtures/custom_calendar.js | 3 +- .../test/unit/fixtures/custom_calendar.yml | 3 +- .../src/cube_bridge/measure_definition.rs | 3 +- .../src/cube_bridge/timeshift_definition.rs | 5 +- .../src/logical_plan/multistage/common.rs | 8 +- .../logical_plan/multistage/leaf_measure.rs | 8 +- .../src/physical_plan_builder/builder.rs | 26 ++++-- .../planners/multi_stage/applied_state.rs | 45 ++++++++- .../multi_stage/multi_stage_query_planner.rs | 2 +- .../sql_evaluator/sql_nodes/time_shift.rs | 2 +- .../sql_evaluator/symbols/dimension_symbol.rs | 55 ++++++++--- .../sql_evaluator/symbols/measure_symbol.rs | 58 +++++++++--- 17 files changed, 297 insertions(+), 67 deletions(-) diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts b/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts index b1321762061ff..e18bd9eb1e5d3 100644 --- a/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts +++ b/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts @@ -28,15 +28,17 @@ export type DimensionDefinition = { }; export type TimeShiftDefinition = { - timeDimension?: (...args: Array) => ToString, - interval: string, - type: 'next' | 'prior', + timeDimension?: (...args: Array) => ToString; + name?: string; + interval?: string; + type?: 'next' | 'prior'; }; export type TimeShiftDefinitionReference = { - timeDimension?: string, - interval: string, - type: 'next' | 'prior', + timeDimension?: string; + name?: string; + interval?: string; + type?: 'next' | 'prior'; }; export type MeasureDefinition = { @@ -393,6 +395,7 @@ export class CubeEvaluator extends CubeSymbols { } if (member.timeShift) { member.timeShiftReferences = member.timeShift.map((s): TimeShiftDefinitionReference => ({ + name: s.name, interval: s.interval, type: s.type, ...(typeof s.timeDimension === 'function' diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts b/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts index 9ca271d51b4bb..86ad93f29da20 100644 --- a/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts +++ b/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts @@ -576,9 +576,12 @@ const timeShiftItemRequired = Joi.object({ const timeShiftItemOptional = Joi.object({ timeDimension: Joi.func(), // not required - interval: regexTimeInterval.required(), - type: Joi.string().valid('next', 'prior').required(), -}); + interval: regexTimeInterval, + name: identifier, + type: Joi.string().valid('next', 'prior'), +}) + .xor('name', 'interval') + .and('interval', 'type'); const MeasuresSchema = Joi.object().pattern(identifierRegex, Joi.alternatives().conditional(Joi.ref('.multiStage'), [ { @@ -623,6 +626,16 @@ const MeasuresSchema = Joi.object().pattern(identifierRegex, Joi.alternatives(). ] )); +const CalendarTimeShiftItem = Joi.object({ + name: identifier, + interval: regexTimeInterval, + type: Joi.string().valid('next', 'prior'), + sql: Joi.func().required(), +}) + .or('name', 'interval') + .with('interval', 'type') + .with('type', 'interval'); + const DimensionsSchema = Joi.object().pattern(identifierRegex, Joi.alternatives().try( inherit(BaseDimensionWithoutSubQuery, { case: Joi.object().keys({ @@ -667,11 +680,7 @@ const DimensionsSchema = Joi.object().pattern(identifierRegex, Joi.alternatives( inherit(BaseDimensionWithoutSubQuery, { type: Joi.any().valid('time').required(), sql: Joi.func().required(), - timeShift: Joi.array().items(Joi.object({ - interval: regexTimeInterval.required(), - type: Joi.string().valid('next', 'prior').required(), - sql: Joi.func().required(), - })), + timeShift: Joi.array().items(CalendarTimeShiftItem), }) )); diff --git a/packages/cubejs-schema-compiler/test/integration/postgres/calendars.test.ts b/packages/cubejs-schema-compiler/test/integration/postgres/calendars.test.ts index ba2f99d4aa878..8e7ca506a4166 100644 --- a/packages/cubejs-schema-compiler/test/integration/postgres/calendars.test.ts +++ b/packages/cubejs-schema-compiler/test/integration/postgres/calendars.test.ts @@ -73,6 +73,20 @@ cubes: - interval: 1 year type: prior + - name: count_shifted_y_named + type: number + multi_stage: true + sql: "{count}" + time_shift: + - name: one_year + + - name: count_shifted_y1d_named + type: number + multi_stage: true + sql: "{count}" + time_shift: + - name: one_year_and_one_day + - name: count_shifted_calendar_m type: number multi_stage: true @@ -244,6 +258,12 @@ cubes: type: prior sql: "{CUBE}.retail_date_prev_year" + - name: one_year + sql: "{CUBE}.retail_date_prev_year" + + - name: one_year_and_one_day + sql: "({CUBE}.retail_date_prev_year + interval '1 day')" + ##### Retail Dates #### - name: retail_date sql: retail_date @@ -282,6 +302,12 @@ cubes: type: prior sql: "{CUBE}.retail_date_prev_year" + - name: one_year + sql: "{CUBE}.retail_date_prev_year" + + - name: one_year_and_one_day + sql: "({CUBE}.retail_date_prev_year + interval '1 day')" + - name: retail_year sql: "{CUBE}.retail_year_name" type: string @@ -576,6 +602,22 @@ cubes: }, ])); + it('Count shifted by retail year (custom named shift + custom granularity)', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_y_named'], + timeDimensions: [{ + dimension: 'custom_calendar.retail_date', + granularity: 'year', + dateRange: ['2025-02-02', '2026-02-01'] + }], + order: [{ id: 'custom_calendar.retail_date' }] + }, [ + { + calendar_orders__count: '37', + calendar_orders__count_shifted_y_named: '39', + custom_calendar__retail_date_year: '2025-02-02T00:00:00.000Z', + }, + ])); + it('Count shifted by retail month (custom shift + common granularity)', async () => runQueryTest({ measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_m'], timeDimensions: [{ @@ -677,6 +719,23 @@ cubes: custom_calendar__retail_date_week: '2025-04-06T00:00:00.000Z', }, ])); + + it('Count shifted by retail year and another custom calendar year (2 custom named shifts + custom granularity)', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_y_named', 'calendar_orders.count_shifted_y1d_named'], + timeDimensions: [{ + dimension: 'custom_calendar.retail_date', + granularity: 'year', + dateRange: ['2025-02-02', '2026-02-01'] + }], + order: [{ id: 'custom_calendar.retail_date' }] + }, [ + { + calendar_orders__count: '37', + calendar_orders__count_shifted_y_named: '39', + calendar_orders__count_shifted_y1d_named: '39', + custom_calendar__retail_date_year: '2025-02-02T00:00:00.000Z', + }, + ])); }); describe('PK dimension time-shifts', () => { @@ -696,6 +755,22 @@ cubes: }, ])); + it.skip('Count shifted by retail year (custom named shift + custom granularity)1', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_y_named'], + timeDimensions: [{ + dimension: 'custom_calendar.date_val', + granularity: 'year', + dateRange: ['2025-02-02', '2026-02-01'] + }], + order: [{ id: 'custom_calendar.date_val' }] + }, [ + { + calendar_orders__count: '37', + calendar_orders__count_shifted_y_named: '39', + custom_calendar__date_val_year: '2025-02-02T00:00:00.000Z', + }, + ])); + it.skip('Count shifted by retail month (custom shift + common granularity)', async () => runQueryTest({ measures: ['calendar_orders.count', 'calendar_orders.count_shifted_calendar_m'], timeDimensions: [{ @@ -797,6 +872,23 @@ cubes: custom_calendar__date_val_week: '2025-04-06T00:00:00.000Z', }, ])); + + it.skip('Count shifted by retail year and another custom calendar year (2 custom named shifts + custom granularity)', async () => runQueryTest({ + measures: ['calendar_orders.count', 'calendar_orders.count_shifted_y_named', 'calendar_orders.count_shifted_y1d_named'], + timeDimensions: [{ + dimension: 'custom_calendar.date_val', + granularity: 'year', + dateRange: ['2025-02-02', '2026-02-01'] + }], + order: [{ id: 'custom_calendar.date_val' }] + }, [ + { + calendar_orders__count: '37', + calendar_orders__count_shifted_y_named: '39', + calendar_orders__count_shifted_y1d_named: '39', + custom_calendar__date_val_year: '2025-02-02T00:00:00.000Z', + }, + ])); }); }); }); diff --git a/packages/cubejs-schema-compiler/test/unit/__snapshots__/schema.test.ts.snap b/packages/cubejs-schema-compiler/test/unit/__snapshots__/schema.test.ts.snap index 0ffe9c8cc20c4..8debafbcf967c 100644 --- a/packages/cubejs-schema-compiler/test/unit/__snapshots__/schema.test.ts.snap +++ b/packages/cubejs-schema-compiler/test/unit/__snapshots__/schema.test.ts.snap @@ -87,9 +87,8 @@ Object { "type": "prior", }, Object { - "interval": "1 year", + "name": "retail_date_prev_year", "sql": [Function], - "type": "prior", }, Object { "interval": "2 year", @@ -273,9 +272,8 @@ Object { "type": "prior", }, Object { - "interval": "1 year", + "name": "retail_date_prev_year", "sql": [Function], - "type": "prior", }, Object { "interval": "2 year", @@ -1894,6 +1892,7 @@ Object { "timeShiftReferences": Array [ Object { "interval": "1 year", + "name": undefined, "timeDimension": "createdAt", "type": "prior", }, diff --git a/packages/cubejs-schema-compiler/test/unit/fixtures/calendar_orders.yml b/packages/cubejs-schema-compiler/test/unit/fixtures/calendar_orders.yml index db039a67552cc..c0ffd1e03c45f 100644 --- a/packages/cubejs-schema-compiler/test/unit/fixtures/calendar_orders.yml +++ b/packages/cubejs-schema-compiler/test/unit/fixtures/calendar_orders.yml @@ -46,6 +46,13 @@ cubes: interval: 1 year type: prior + - name: count_shifted_named + type: count + multi_stage: true + sql: "{count}" + time_shift: + - name: retail_date_prev_year + - name: completed_count type: count filters: diff --git a/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.js b/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.js index 78f434a20fdfe..693557871c234 100644 --- a/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.js +++ b/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.js @@ -41,8 +41,7 @@ cube(`custom_calendar_js`, { sql: `{CUBE.retail_date_prev_month}`, }, { - interval: '1 year', - type: 'prior', + name: 'retail_date_prev_year', sql: `{CUBE.retail_date_prev_year}`, }, { diff --git a/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.yml b/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.yml index aa0a2271a8629..14bc0ebdcc03e 100644 --- a/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.yml +++ b/packages/cubejs-schema-compiler/test/unit/fixtures/custom_calendar.yml @@ -45,8 +45,7 @@ cubes: type: prior sql: "{CUBE.retail_date_prev_month}" - - interval: 1 year - type: prior + - name: retail_date_prev_year sql: "{CUBE.retail_date_prev_year}" # All needed intervals should be defined explicitly diff --git a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/measure_definition.rs b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/measure_definition.rs index ee1c8a0f19acb..bc0e581ee01d8 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/measure_definition.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/measure_definition.rs @@ -15,7 +15,8 @@ use std::rc::Rc; #[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)] pub struct TimeShiftReference { - pub interval: String, + pub interval: Option, + pub name: Option, #[serde(rename = "type")] pub shift_type: Option, #[serde(rename = "timeDimension")] diff --git a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/timeshift_definition.rs b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/timeshift_definition.rs index 1f507831188c9..f51081ac7ee15 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/timeshift_definition.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/cube_bridge/timeshift_definition.rs @@ -11,9 +11,10 @@ use std::rc::Rc; #[derive(Deserialize, Serialize, Clone, Debug, PartialEq, Eq, Hash)] pub struct TimeShiftDefinitionStatic { - pub interval: String, + pub interval: Option, #[serde(rename = "type")] - pub timeshift_type: String, + pub timeshift_type: Option, + pub name: Option, } #[nativebridge::native_bridge(TimeShiftDefinitionStatic)] diff --git a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/common.rs b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/common.rs index 5ca1ddd776f6a..b3eaa47b31531 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/common.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/common.rs @@ -58,7 +58,13 @@ impl PrettyPrint for MultiStageAppliedState { &format!( "- {}: {}", time_shift.dimension.full_name(), - time_shift.interval.to_sql() + if let Some(interval) = &time_shift.interval { + interval.to_sql() + } else if let Some(name) = &time_shift.name { + format!("{} (named)", name.to_string()) + } else { + "None".to_string() + } ), &details_state, ); diff --git a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/leaf_measure.rs b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/leaf_measure.rs index 214ab412fb8d8..fe454c2c03f37 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/leaf_measure.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/logical_plan/multistage/leaf_measure.rs @@ -30,7 +30,13 @@ impl PrettyPrint for MultiStageLeafMeasure { &format!( "- {}: {}", time_shift.dimension.full_name(), - time_shift.interval.to_sql() + if let Some(interval) = &time_shift.interval { + interval.to_sql() + } else if let Some(name) = &time_shift.name { + format!("{} (named)", name.to_string()) + } else { + "None".to_string() + } ), &details_state, ); diff --git a/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs b/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs index d585a7f98b4ab..29c7c3aa2b178 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/physical_plan_builder/builder.rs @@ -43,14 +43,24 @@ impl PhysicalPlanBuilderContext { .iter() .partition_map(|(key, shift)| { if let Ok(dimension) = shift.dimension.as_dimension() { - if let Some((dim_key, cts)) = - dimension.calendar_time_shift_for_interval(&shift.interval) - { - return Either::Right((dim_key.clone(), cts.clone())); - } else if let Some(calendar_pk) = dimension.time_shift_pk_full_name() { - let mut shift = shift.clone(); - shift.interval = shift.interval.inverse(); - return Either::Left((calendar_pk, shift.clone())); + if let Some(dim_shift_name) = &shift.name { + if let Some((dim_key, cts)) = + dimension.calendar_time_shift_for_named_interval(dim_shift_name) + { + return Either::Right((dim_key.clone(), cts.clone())); + } else if let Some(_calendar_pk) = dimension.time_shift_pk_full_name() { + // TODO: Handle case when named shift is not found + } + } else if let Some(dim_shift_interval) = &shift.interval { + if let Some((dim_key, cts)) = + dimension.calendar_time_shift_for_interval(dim_shift_interval) + { + return Either::Right((dim_key.clone(), cts.clone())); + } else if let Some(calendar_pk) = dimension.time_shift_pk_full_name() { + let mut shift = shift.clone(); + shift.interval = Some(dim_shift_interval.inverse()); + return Either::Left((calendar_pk, shift.clone())); + } } } Either::Left((key.clone(), shift.clone())) diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/applied_state.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/applied_state.rs index 8ccbec0c29b68..f13f01576a17f 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/applied_state.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/applied_state.rs @@ -2,6 +2,7 @@ use crate::plan::{FilterGroup, FilterItem}; use crate::planner::filter::FilterOperator; use crate::planner::sql_evaluator::{DimensionTimeShift, MeasureTimeShifts, MemberSymbol}; use crate::planner::{BaseDimension, BaseMember, BaseTimeDimension}; +use cubenativeutils::CubeError; use itertools::Itertools; use std::cmp::PartialEq; use std::collections::HashMap; @@ -72,15 +73,25 @@ impl MultiStageAppliedState { .collect_vec(); } - pub fn add_time_shifts(&mut self, time_shifts: MeasureTimeShifts) { + pub fn add_time_shifts(&mut self, time_shifts: MeasureTimeShifts) -> Result<(), CubeError> { let resolved_shifts = match time_shifts { MeasureTimeShifts::Dimensions(dimensions) => dimensions, MeasureTimeShifts::Common(interval) => self .all_time_members() .into_iter() .map(|m| DimensionTimeShift { - interval: interval.clone(), + interval: Some(interval.clone()), dimension: m, + name: None, + }) + .collect_vec(), + MeasureTimeShifts::Named(named_shift) => self + .all_time_members() + .into_iter() + .map(|m| DimensionTimeShift { + interval: None, + dimension: m, + name: Some(named_shift.clone()), }) .collect_vec(), }; @@ -90,13 +101,41 @@ impl MultiStageAppliedState { .dimensions_shifts .get_mut(&ts.dimension.full_name()) { - exists.interval += ts.interval; + if let Some(interval) = exists.interval.clone() { + if let Some(new_interval) = ts.interval { + exists.interval = Some(interval + new_interval); + } else { + return Err(CubeError::internal(format!( + "Cannot use both named ({}) and interval ({}) shifts for the same dimension: {}.", + ts.name.clone().unwrap_or("-".to_string()), + interval.to_sql(), + ts.dimension.full_name(), + ))); + } + } else if let Some(named_shift) = exists.name.clone() { + return if let Some(new_interval) = ts.interval { + Err(CubeError::internal(format!( + "Cannot use both named ({}) and interval ({}) shifts for the same dimension: {}.", + named_shift, + new_interval.to_sql(), + ts.dimension.full_name(), + ))) + } else { + Err(CubeError::internal(format!( + "Cannot use more than one named shifts ({}, {}) for the same dimension: {}.", + ts.name.clone().unwrap_or("-".to_string()), + named_shift, + ts.dimension.full_name(), + ))) + }; + } } else { self.time_shifts .dimensions_shifts .insert(ts.dimension.full_name(), ts); } } + Ok(()) } pub fn time_shifts(&self) -> &TimeShiftState { diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/multi_stage_query_planner.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/multi_stage_query_planner.rs index aac6c384b39b5..df2bb46baa155 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/multi_stage_query_planner.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/planners/multi_stage/multi_stage_query_planner.rs @@ -225,7 +225,7 @@ impl MultiStageQueryPlanner { new_state.add_dimensions(dimensions_to_add); } if let Some(time_shift) = multi_stage_member.time_shift() { - new_state.add_time_shifts(time_shift.clone()); + new_state.add_time_shifts(time_shift.clone())?; } if state.has_filters_for_member(&member_name) { new_state.remove_filter_for_member(&member_name); diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/sql_nodes/time_shift.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/sql_nodes/time_shift.rs index 2f30043a0df38..c3b806276199e 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/sql_nodes/time_shift.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/sql_nodes/time_shift.rs @@ -43,7 +43,7 @@ impl SqlNode for TimeShiftSqlNode { MemberSymbol::Dimension(ev) => { if !ev.is_reference() && ev.dimension_type() == "time" { if let Some(shift) = self.shifts.dimensions_shifts.get(&ev.full_name()) { - let shift = shift.interval.to_sql(); + let shift = shift.interval.clone().unwrap().to_sql(); // Common time shifts should always have an interval let res = templates.add_timestamp_interval(input, shift)?; format!("({})", res) } else { diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/symbols/dimension_symbol.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/symbols/dimension_symbol.rs index 6d15a6a0f4db0..dacbe81fd7a0f 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/symbols/dimension_symbol.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/symbols/dimension_symbol.rs @@ -27,7 +27,8 @@ pub struct DimensionCaseDefinition { #[derive(Clone)] pub struct CalendarDimensionTimeShift { - pub interval: SqlInterval, + pub interval: Option, + pub name: Option, pub sql: Option>, } @@ -234,11 +235,31 @@ impl DimensionSymbol { &self, interval: &SqlInterval, ) -> Option<(String, CalendarDimensionTimeShift)> { - if let Some(ts) = self - .time_shift - .iter() - .find(|shift| shift.interval == *interval) - { + if let Some(ts) = self.time_shift.iter().find(|shift| { + if let Some(s_i) = &shift.interval { + s_i == interval + } else { + false + } + }) { + if let Some(pk) = &self.time_shift_pk_full_name() { + return Some((pk.clone(), ts.clone())); + } + } + None + } + + pub fn calendar_time_shift_for_named_interval( + &self, + interval_name: &String, + ) -> Option<(String, CalendarDimensionTimeShift)> { + if let Some(ts) = self.time_shift.iter().find(|shift| { + if let Some(s_n) = &shift.name { + s_n == interval_name + } else { + false + } + }) { if let Some(pk) = &self.time_shift_pk_full_name { return Some((pk.clone(), ts.clone())); } else if self.is_self_time_shift_pk { @@ -369,18 +390,28 @@ impl SymbolFactory for DimensionSymbolFactory { time_shift .iter() .map(|item| -> Result<_, CubeError> { - let interval = item.static_data().interval.parse::()?; - let interval = if item.static_data().timeshift_type == "next" { - -interval - } else { - interval + let interval = match &item.static_data().interval { + Some(raw) => { + let mut iv = raw.parse::()?; + if item.static_data().timeshift_type.as_deref() == Some("next") { + iv = -iv; + } + + Some(iv) + } + None => None, }; + let name = item.static_data().name.clone(); let sql = if let Some(sql) = item.sql()? { Some(compiler.compile_sql_call(&cube_name, sql)?) } else { None }; - Ok(CalendarDimensionTimeShift { interval, sql }) + Ok(CalendarDimensionTimeShift { + interval, + name, + sql, + }) }) .collect::, _>>()? } else { diff --git a/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/symbols/measure_symbol.rs b/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/symbols/measure_symbol.rs index 0f49e175cb153..be71028fc369a 100644 --- a/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/symbols/measure_symbol.rs +++ b/rust/cubesqlplanner/cubesqlplanner/src/planner/sql_evaluator/symbols/measure_symbol.rs @@ -38,13 +38,16 @@ impl MeasureOrderBy { #[derive(Clone, Debug)] pub struct DimensionTimeShift { - pub interval: SqlInterval, + pub interval: Option, + pub name: Option, pub dimension: Rc, } impl PartialEq for DimensionTimeShift { fn eq(&self, other: &Self) -> bool { - self.interval == other.interval && self.dimension.full_name() == other.dimension.full_name() + self.interval == other.interval + && self.dimension.full_name() == other.dimension.full_name() + && self.name == other.name } } @@ -54,6 +57,7 @@ impl Eq for DimensionTimeShift {} pub enum MeasureTimeShifts { Dimensions(Vec), Common(SqlInterval), + Named(String), } #[derive(Clone)] @@ -566,20 +570,26 @@ impl SymbolFactory for MeasureSymbolFactory { { let mut shifts: HashMap = HashMap::new(); let mut common_shift = None; + let mut named_shift = None; for shift_ref in time_shift_references.iter() { - let interval = shift_ref.interval.parse::()?; - let interval = - if shift_ref.shift_type.as_ref().unwrap_or(&format!("prior")) == "next" { - -interval - } else { - interval - }; + let interval = match &shift_ref.interval { + Some(raw) => { + let mut iv = raw.parse::()?; + if shift_ref.shift_type.as_deref().unwrap_or("prior") == "next" { + iv = -iv; + } + + Some(iv) + } + None => None, + }; + let name = shift_ref.name.clone(); if let Some(time_dimension) = &shift_ref.time_dimension { let dimension = compiler.add_dimension_evaluator(time_dimension.clone())?; let dimension = find_owned_by_cube_child(&dimension)?; let dimension_name = dimension.full_name(); if let Some(exists) = shifts.get(&dimension_name) { - if exists.interval != interval { + if exists.interval != interval || exists.name != name { return Err(CubeError::user(format!( "Different time shifts for one dimension {} not allowed", dimension_name @@ -590,15 +600,26 @@ impl SymbolFactory for MeasureSymbolFactory { dimension_name, DimensionTimeShift { interval: interval.clone(), + name: name.clone(), dimension: dimension.clone(), }, ); }; + } else if let Some(name) = &shift_ref.name { + if named_shift.is_none() { + named_shift = Some(name.clone()); + } else { + if named_shift != Some(name.clone()) { + return Err(CubeError::user(format!( + "Measure can contain only one named time_shift (without time_dimension).", + ))); + } + } } else { if common_shift.is_none() { - common_shift = Some(interval); + common_shift = interval; } else { - if common_shift != Some(interval) { + if common_shift != interval { return Err(CubeError::user(format!( "Measure can contain only one common time_shift (without time_dimension).", ))); @@ -606,12 +627,19 @@ impl SymbolFactory for MeasureSymbolFactory { } } } - if common_shift.is_some() && !shifts.is_empty() { + + if (common_shift.is_some() || named_shift.is_some()) && !shifts.is_empty() { return Err(CubeError::user(format!( "Measure cannot mix common time_shifts (without time_dimension) with dimension-specific ones.", ))); - } else if common_shift.is_some() { - Some(MeasureTimeShifts::Common(common_shift.unwrap())) + } else if common_shift.is_some() && named_shift.is_some() { + return Err(CubeError::user(format!( + "Measure cannot mix common unnamed and named time_shifts.", + ))); + } else if let Some(cs) = common_shift { + Some(MeasureTimeShifts::Common(cs)) + } else if let Some(ns) = named_shift { + Some(MeasureTimeShifts::Named(ns)) } else { Some(MeasureTimeShifts::Dimensions( shifts.into_values().collect_vec(), From f1d27359b049784c403977e3649b8ce91d3d8ab4 Mon Sep 17 00:00:00 2001 From: Konstantin Burkalev Date: Mon, 14 Jul 2025 19:57:10 +0300 Subject: [PATCH 5/5] v1.3.37 --- CHANGELOG.md | 10 ++++ lerna.json | 2 +- packages/cubejs-api-gateway/CHANGELOG.md | 4 ++ packages/cubejs-api-gateway/package.json | 8 +-- packages/cubejs-athena-driver/CHANGELOG.md | 4 ++ packages/cubejs-athena-driver/package.json | 10 ++-- packages/cubejs-backend-cloud/CHANGELOG.md | 4 ++ packages/cubejs-backend-cloud/package.json | 6 +- packages/cubejs-backend-maven/CHANGELOG.md | 4 ++ packages/cubejs-backend-maven/package.json | 6 +- packages/cubejs-backend-native/CHANGELOG.md | 4 ++ packages/cubejs-backend-native/package.json | 8 +-- packages/cubejs-backend-shared/CHANGELOG.md | 4 ++ packages/cubejs-backend-shared/package.json | 4 +- packages/cubejs-base-driver/CHANGELOG.md | 4 ++ packages/cubejs-base-driver/package.json | 6 +- packages/cubejs-bigquery-driver/CHANGELOG.md | 4 ++ packages/cubejs-bigquery-driver/package.json | 8 +-- packages/cubejs-cli/CHANGELOG.md | 4 ++ packages/cubejs-cli/package.json | 12 ++-- .../cubejs-clickhouse-driver/CHANGELOG.md | 4 ++ .../cubejs-clickhouse-driver/package.json | 10 ++-- packages/cubejs-client-core/CHANGELOG.md | 4 ++ packages/cubejs-client-core/package.json | 4 +- packages/cubejs-client-dx/CHANGELOG.md | 4 ++ packages/cubejs-client-dx/package.json | 2 +- packages/cubejs-client-ngx/CHANGELOG.md | 4 ++ packages/cubejs-client-ngx/package.json | 2 +- packages/cubejs-client-react/CHANGELOG.md | 4 ++ packages/cubejs-client-react/package.json | 4 +- packages/cubejs-client-vue/CHANGELOG.md | 4 ++ packages/cubejs-client-vue/package.json | 4 +- packages/cubejs-client-vue3/CHANGELOG.md | 4 ++ packages/cubejs-client-vue3/package.json | 4 +- .../cubejs-client-ws-transport/CHANGELOG.md | 4 ++ .../cubejs-client-ws-transport/package.json | 6 +- packages/cubejs-crate-driver/CHANGELOG.md | 4 ++ packages/cubejs-crate-driver/package.json | 10 ++-- packages/cubejs-cubestore-driver/CHANGELOG.md | 4 ++ packages/cubejs-cubestore-driver/package.json | 12 ++-- .../CHANGELOG.md | 4 ++ .../package.json | 12 ++-- .../cubejs-dbt-schema-extension/CHANGELOG.md | 4 ++ .../cubejs-dbt-schema-extension/package.json | 8 +-- packages/cubejs-docker/CHANGELOG.md | 4 ++ packages/cubejs-docker/package.json | 60 +++++++++---------- packages/cubejs-dremio-driver/CHANGELOG.md | 4 ++ packages/cubejs-dremio-driver/package.json | 12 ++-- packages/cubejs-druid-driver/CHANGELOG.md | 4 ++ packages/cubejs-druid-driver/package.json | 10 ++-- packages/cubejs-duckdb-driver/CHANGELOG.md | 4 ++ packages/cubejs-duckdb-driver/package.json | 12 ++-- .../cubejs-elasticsearch-driver/CHANGELOG.md | 4 ++ .../cubejs-elasticsearch-driver/package.json | 8 +-- packages/cubejs-firebolt-driver/CHANGELOG.md | 4 ++ packages/cubejs-firebolt-driver/package.json | 12 ++-- packages/cubejs-hive-driver/CHANGELOG.md | 4 ++ packages/cubejs-hive-driver/package.json | 8 +-- packages/cubejs-jdbc-driver/CHANGELOG.md | 4 ++ packages/cubejs-jdbc-driver/package.json | 8 +-- packages/cubejs-ksql-driver/CHANGELOG.md | 4 ++ packages/cubejs-ksql-driver/package.json | 10 ++-- packages/cubejs-linter/CHANGELOG.md | 4 ++ packages/cubejs-linter/package.json | 2 +- .../cubejs-materialize-driver/CHANGELOG.md | 4 ++ .../cubejs-materialize-driver/package.json | 12 ++-- packages/cubejs-mongobi-driver/CHANGELOG.md | 4 ++ packages/cubejs-mongobi-driver/package.json | 8 +-- packages/cubejs-mssql-driver/CHANGELOG.md | 4 ++ packages/cubejs-mssql-driver/package.json | 6 +- .../CHANGELOG.md | 4 ++ .../package.json | 8 +-- packages/cubejs-mysql-driver/CHANGELOG.md | 4 ++ packages/cubejs-mysql-driver/package.json | 10 ++-- packages/cubejs-oracle-driver/CHANGELOG.md | 4 ++ packages/cubejs-oracle-driver/package.json | 4 +- packages/cubejs-pinot-driver/CHANGELOG.md | 4 ++ packages/cubejs-pinot-driver/package.json | 10 ++-- packages/cubejs-playground/CHANGELOG.md | 4 ++ packages/cubejs-playground/package.json | 6 +- packages/cubejs-postgres-driver/CHANGELOG.md | 4 ++ packages/cubejs-postgres-driver/package.json | 10 ++-- packages/cubejs-prestodb-driver/CHANGELOG.md | 4 ++ packages/cubejs-prestodb-driver/package.json | 8 +-- .../cubejs-query-orchestrator/CHANGELOG.md | 4 ++ .../cubejs-query-orchestrator/package.json | 10 ++-- packages/cubejs-questdb-driver/CHANGELOG.md | 4 ++ packages/cubejs-questdb-driver/package.json | 12 ++-- packages/cubejs-redshift-driver/CHANGELOG.md | 4 ++ packages/cubejs-redshift-driver/package.json | 10 ++-- packages/cubejs-schema-compiler/CHANGELOG.md | 10 ++++ packages/cubejs-schema-compiler/package.json | 10 ++-- packages/cubejs-server-core/CHANGELOG.md | 4 ++ packages/cubejs-server-core/package.json | 22 +++---- packages/cubejs-server/CHANGELOG.md | 4 ++ packages/cubejs-server/package.json | 14 ++--- packages/cubejs-snowflake-driver/CHANGELOG.md | 4 ++ packages/cubejs-snowflake-driver/package.json | 8 +-- packages/cubejs-sqlite-driver/CHANGELOG.md | 4 ++ packages/cubejs-sqlite-driver/package.json | 8 +-- packages/cubejs-templates/CHANGELOG.md | 4 ++ packages/cubejs-templates/package.json | 6 +- packages/cubejs-testing-drivers/CHANGELOG.md | 4 ++ packages/cubejs-testing-drivers/package.json | 36 +++++------ packages/cubejs-testing-shared/CHANGELOG.md | 4 ++ packages/cubejs-testing-shared/package.json | 10 ++-- packages/cubejs-testing/CHANGELOG.md | 4 ++ packages/cubejs-testing/package.json | 22 +++---- packages/cubejs-trino-driver/CHANGELOG.md | 4 ++ packages/cubejs-trino-driver/package.json | 12 ++-- packages/cubejs-vertica-driver/CHANGELOG.md | 4 ++ packages/cubejs-vertica-driver/package.json | 12 ++-- rust/cubesql/CHANGELOG.md | 4 ++ rust/cubesql/package.json | 2 +- rust/cubestore/CHANGELOG.md | 4 ++ rust/cubestore/package.json | 6 +- 116 files changed, 530 insertions(+), 286 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a860147d2b04..a60a6149c595e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +### Bug Fixes + +- **tesseract:** Fix infinite loops during calendar time dimension processing ([#9772](https://github.com/cube-js/cube/issues/9772)) ([3f16a39](https://github.com/cube-js/cube/commit/3f16a39c27ac7da2d5671031cb1745e0053b4a42)) + +### Features + +- **tesseract:** Introduce named multistage time shifts for use with calendars ([#9773](https://github.com/cube-js/cube/issues/9773)) ([e033aaf](https://github.com/cube-js/cube/commit/e033aaf34af65192f981b942d834e33b1e61b851)) + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) ### Bug Fixes diff --git a/lerna.json b/lerna.json index 5d809158c880b..333ff9c2fc436 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.3.36", + "version": "1.3.37", "npmClient": "yarn", "command": { "bootstrap": { diff --git a/packages/cubejs-api-gateway/CHANGELOG.md b/packages/cubejs-api-gateway/CHANGELOG.md index 5718757a9d70b..3f7e936a52d71 100644 --- a/packages/cubejs-api-gateway/CHANGELOG.md +++ b/packages/cubejs-api-gateway/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/api-gateway + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/api-gateway diff --git a/packages/cubejs-api-gateway/package.json b/packages/cubejs-api-gateway/package.json index 4ffa74c944dab..eac8701ab9a1f 100644 --- a/packages/cubejs-api-gateway/package.json +++ b/packages/cubejs-api-gateway/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/api-gateway", "description": "Cube.js API Gateway", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,8 +27,8 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/native": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/native": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "@ungap/structured-clone": "^0.3.4", "assert-never": "^1.4.0", "body-parser": "^1.19.0", @@ -51,7 +51,7 @@ "uuid": "^8.3.2" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/express": "^4.17.21", "@types/jest": "^29", "@types/jsonwebtoken": "^9.0.2", diff --git a/packages/cubejs-athena-driver/CHANGELOG.md b/packages/cubejs-athena-driver/CHANGELOG.md index f5bf4116442f5..bc3ef0ffc7d1d 100644 --- a/packages/cubejs-athena-driver/CHANGELOG.md +++ b/packages/cubejs-athena-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/athena-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/athena-driver diff --git a/packages/cubejs-athena-driver/package.json b/packages/cubejs-athena-driver/package.json index 707d18c38e1fa..4e99c121087f8 100644 --- a/packages/cubejs-athena-driver/package.json +++ b/packages/cubejs-athena-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/athena-driver", "description": "Cube.js Athena database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -29,13 +29,13 @@ "types": "dist/src/index.d.ts", "dependencies": { "@aws-sdk/client-athena": "^3.22.0", - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "sqlstring": "^2.3.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/testing-shared": "1.3.37", "@types/ramda": "^0.27.40", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-backend-cloud/CHANGELOG.md b/packages/cubejs-backend-cloud/CHANGELOG.md index 19aeddeb9e8d0..88e17de77986d 100644 --- a/packages/cubejs-backend-cloud/CHANGELOG.md +++ b/packages/cubejs-backend-cloud/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/cloud + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/cloud diff --git a/packages/cubejs-backend-cloud/package.json b/packages/cubejs-backend-cloud/package.json index acbc63d38f6bb..60cb4e319baac 100644 --- a/packages/cubejs-backend-cloud/package.json +++ b/packages/cubejs-backend-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/cloud", - "version": "1.3.36", + "version": "1.3.37", "description": "Cube Cloud package", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -25,7 +25,7 @@ "devDependencies": { "@babel/core": "^7.24.5", "@babel/preset-env": "^7.24.5", - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/fs-extra": "^9.0.8", "@types/jest": "^29", "jest": "^29", @@ -33,7 +33,7 @@ }, "dependencies": { "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/shared": "1.3.37", "chokidar": "^3.5.1", "env-var": "^6.3.0", "form-data": "^4.0.0", diff --git a/packages/cubejs-backend-maven/CHANGELOG.md b/packages/cubejs-backend-maven/CHANGELOG.md index 1d55762b86235..d4f2f66eb2e79 100644 --- a/packages/cubejs-backend-maven/CHANGELOG.md +++ b/packages/cubejs-backend-maven/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/maven + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/maven diff --git a/packages/cubejs-backend-maven/package.json b/packages/cubejs-backend-maven/package.json index 8add63fb8e3b1..03b88f25e2339 100644 --- a/packages/cubejs-backend-maven/package.json +++ b/packages/cubejs-backend-maven/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/maven", "description": "Cube.js Maven Wrapper for java dependencies downloading", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "license": "Apache-2.0", "repository": { "type": "git", @@ -31,12 +31,12 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/shared": "1.3.37", "source-map-support": "^0.5.19", "xmlbuilder2": "^2.4.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/jest": "^29", "@types/node": "^20", "jest": "^29", diff --git a/packages/cubejs-backend-native/CHANGELOG.md b/packages/cubejs-backend-native/CHANGELOG.md index 8963cb7916fc3..32b66f00831b2 100644 --- a/packages/cubejs-backend-native/CHANGELOG.md +++ b/packages/cubejs-backend-native/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/native + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) ### Bug Fixes diff --git a/packages/cubejs-backend-native/package.json b/packages/cubejs-backend-native/package.json index ff6fe4969d1e0..41e1bed5f4db5 100644 --- a/packages/cubejs-backend-native/package.json +++ b/packages/cubejs-backend-native/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/native", - "version": "1.3.36", + "version": "1.3.37", "author": "Cube Dev, Inc.", "description": "Native module for Cube.js (binding to Rust codebase)", "main": "dist/js/index.js", @@ -34,7 +34,7 @@ "dist/js" ], "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/jest": "^29", "@types/node": "^20", "cargo-cp-artifact": "^0.1.9", @@ -44,8 +44,8 @@ "uuid": "^8.3.2" }, "dependencies": { - "@cubejs-backend/cubesql": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/cubesql": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "@cubejs-infra/post-installer": "^0.0.7" }, "resources": { diff --git a/packages/cubejs-backend-shared/CHANGELOG.md b/packages/cubejs-backend-shared/CHANGELOG.md index fb4fb4a7f4d52..eacfd1d75b2ed 100644 --- a/packages/cubejs-backend-shared/CHANGELOG.md +++ b/packages/cubejs-backend-shared/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/shared + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) ### Features diff --git a/packages/cubejs-backend-shared/package.json b/packages/cubejs-backend-shared/package.json index fed473f56bc88..d385c82e3c67d 100644 --- a/packages/cubejs-backend-shared/package.json +++ b/packages/cubejs-backend-shared/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/shared", - "version": "1.3.36", + "version": "1.3.37", "description": "Shared code for Cube.js backend packages", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -22,7 +22,7 @@ "author": "Cube Dev, Inc.", "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/bytes": "^3.1.5", "@types/cli-progress": "^3.9.1", "@types/decompress": "^4.2.7", diff --git a/packages/cubejs-base-driver/CHANGELOG.md b/packages/cubejs-base-driver/CHANGELOG.md index d3b530984024f..cb51883f0da03 100644 --- a/packages/cubejs-base-driver/CHANGELOG.md +++ b/packages/cubejs-base-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/base-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/base-driver diff --git a/packages/cubejs-base-driver/package.json b/packages/cubejs-base-driver/package.json index 279545ba7ff00..19a5dadd0de61 100644 --- a/packages/cubejs-base-driver/package.json +++ b/packages/cubejs-base-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/base-driver", "description": "Cube.js Base Driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -33,11 +33,11 @@ "@aws-sdk/s3-request-presigner": "^3.49.0", "@azure/identity": "^4.4.1", "@azure/storage-blob": "^12.9.0", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/shared": "1.3.37", "@google-cloud/storage": "^7.13.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/jest": "^29", "@types/node": "^20", "jest": "^29", diff --git a/packages/cubejs-bigquery-driver/CHANGELOG.md b/packages/cubejs-bigquery-driver/CHANGELOG.md index 07a84a336a956..26b44f09a2f7d 100644 --- a/packages/cubejs-bigquery-driver/CHANGELOG.md +++ b/packages/cubejs-bigquery-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/bigquery-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/bigquery-driver diff --git a/packages/cubejs-bigquery-driver/package.json b/packages/cubejs-bigquery-driver/package.json index 31272717e0348..fcbd52ed8d5ab 100644 --- a/packages/cubejs-bigquery-driver/package.json +++ b/packages/cubejs-bigquery-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/bigquery-driver", "description": "Cube.js BigQuery database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -28,15 +28,15 @@ "main": "index.js", "types": "dist/src/index.d.ts", "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/shared": "1.3.37", "@google-cloud/bigquery": "^7.7.0", "@google-cloud/storage": "^7.13.0", "ramda": "^0.27.2" }, "devDependencies": { - "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-backend/testing-shared": "1.3.37", "@types/big.js": "^6.2.2", "@types/dedent": "^0.7.0", "@types/jest": "^29", diff --git a/packages/cubejs-cli/CHANGELOG.md b/packages/cubejs-cli/CHANGELOG.md index bf7db283f89c3..e67cd106e84e9 100644 --- a/packages/cubejs-cli/CHANGELOG.md +++ b/packages/cubejs-cli/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package cubejs-cli + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package cubejs-cli diff --git a/packages/cubejs-cli/package.json b/packages/cubejs-cli/package.json index 7b0373107812d..3593fd5a903df 100644 --- a/packages/cubejs-cli/package.json +++ b/packages/cubejs-cli/package.json @@ -2,7 +2,7 @@ "name": "cubejs-cli", "description": "Cube.js Command Line Interface", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -30,10 +30,10 @@ "LICENSE" ], "dependencies": { - "@cubejs-backend/cloud": "1.3.36", + "@cubejs-backend/cloud": "1.3.37", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "chalk": "^2.4.2", "cli-progress": "^3.10", "commander": "^2.19.0", @@ -50,8 +50,8 @@ "colors": "1.4.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/server": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/server": "1.3.37", "@oclif/command": "^1.8.0", "@types/cli-progress": "^3.8.0", "@types/cross-spawn": "^6.0.2", diff --git a/packages/cubejs-clickhouse-driver/CHANGELOG.md b/packages/cubejs-clickhouse-driver/CHANGELOG.md index b1b13e2e85b49..504409fbc34ab 100644 --- a/packages/cubejs-clickhouse-driver/CHANGELOG.md +++ b/packages/cubejs-clickhouse-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/clickhouse-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/clickhouse-driver diff --git a/packages/cubejs-clickhouse-driver/package.json b/packages/cubejs-clickhouse-driver/package.json index c551cdbe636b8..34d63878451d6 100644 --- a/packages/cubejs-clickhouse-driver/package.json +++ b/packages/cubejs-clickhouse-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/clickhouse-driver", "description": "Cube.js ClickHouse database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -28,16 +28,16 @@ }, "dependencies": { "@clickhouse/client": "^1.7.0", - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "moment": "^2.24.0", "sqlstring": "^2.3.1", "uuid": "^8.3.2" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/testing-shared": "1.3.37", "@types/jest": "^29", "jest": "^29", "typescript": "~5.2.2" diff --git a/packages/cubejs-client-core/CHANGELOG.md b/packages/cubejs-client-core/CHANGELOG.md index 6701583d09f7a..afbdea63ea13c 100644 --- a/packages/cubejs-client-core/CHANGELOG.md +++ b/packages/cubejs-client-core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-client/core + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-client/core diff --git a/packages/cubejs-client-core/package.json b/packages/cubejs-client-core/package.json index 057e4d21e9265..701d76b36dcf1 100644 --- a/packages/cubejs-client-core/package.json +++ b/packages/cubejs-client-core/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/core", - "version": "1.3.36", + "version": "1.3.37", "engines": {}, "repository": { "type": "git", @@ -38,7 +38,7 @@ ], "license": "MIT", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/jest": "^29", "@types/moment-range": "^4.0.0", "@types/ramda": "^0.27.34", diff --git a/packages/cubejs-client-dx/CHANGELOG.md b/packages/cubejs-client-dx/CHANGELOG.md index 5909f6d331611..5e40cc0805c35 100644 --- a/packages/cubejs-client-dx/CHANGELOG.md +++ b/packages/cubejs-client-dx/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-client/dx + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-client/dx diff --git a/packages/cubejs-client-dx/package.json b/packages/cubejs-client-dx/package.json index 508b6f4746369..869173ca9c684 100644 --- a/packages/cubejs-client-dx/package.json +++ b/packages/cubejs-client-dx/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/dx", - "version": "1.3.36", + "version": "1.3.37", "engines": {}, "repository": { "type": "git", diff --git a/packages/cubejs-client-ngx/CHANGELOG.md b/packages/cubejs-client-ngx/CHANGELOG.md index 05dc7b424880c..711d4b6617eb2 100644 --- a/packages/cubejs-client-ngx/CHANGELOG.md +++ b/packages/cubejs-client-ngx/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-client/ngx + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-client/ngx diff --git a/packages/cubejs-client-ngx/package.json b/packages/cubejs-client-ngx/package.json index 8b49c32940eec..3d4919af81fb3 100644 --- a/packages/cubejs-client-ngx/package.json +++ b/packages/cubejs-client-ngx/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/ngx", - "version": "1.3.36", + "version": "1.3.37", "author": "Cube Dev, Inc.", "engines": {}, "repository": { diff --git a/packages/cubejs-client-react/CHANGELOG.md b/packages/cubejs-client-react/CHANGELOG.md index 5d7f0b6985e82..7ebc655a18381 100644 --- a/packages/cubejs-client-react/CHANGELOG.md +++ b/packages/cubejs-client-react/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-client/react + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-client/react diff --git a/packages/cubejs-client-react/package.json b/packages/cubejs-client-react/package.json index 147beaeffc21d..05f73531f9ad8 100644 --- a/packages/cubejs-client-react/package.json +++ b/packages/cubejs-client-react/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/react", - "version": "1.3.36", + "version": "1.3.37", "author": "Cube Dev, Inc.", "license": "MIT", "engines": {}, @@ -24,7 +24,7 @@ ], "dependencies": { "@babel/runtime": "^7.1.2", - "@cubejs-client/core": "1.3.36", + "@cubejs-client/core": "1.3.37", "core-js": "^3.6.5", "ramda": "^0.27.2" }, diff --git a/packages/cubejs-client-vue/CHANGELOG.md b/packages/cubejs-client-vue/CHANGELOG.md index bdc36e01e0353..78be4e3bb468e 100644 --- a/packages/cubejs-client-vue/CHANGELOG.md +++ b/packages/cubejs-client-vue/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube.js/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-client/vue + ## [1.3.36](https://github.com/cube-js/cube.js/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-client/vue diff --git a/packages/cubejs-client-vue/package.json b/packages/cubejs-client-vue/package.json index 372b32dd4761e..8081ccd26525b 100644 --- a/packages/cubejs-client-vue/package.json +++ b/packages/cubejs-client-vue/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/vue", - "version": "1.3.36", + "version": "1.3.37", "engines": {}, "repository": { "type": "git", @@ -28,7 +28,7 @@ "src" ], "dependencies": { - "@cubejs-client/core": "1.3.36", + "@cubejs-client/core": "1.3.37", "core-js": "^3.6.5", "ramda": "^0.27.2" }, diff --git a/packages/cubejs-client-vue3/CHANGELOG.md b/packages/cubejs-client-vue3/CHANGELOG.md index 477477d952677..ed4e096926095 100644 --- a/packages/cubejs-client-vue3/CHANGELOG.md +++ b/packages/cubejs-client-vue3/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube.js/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-client/vue3 + ## [1.3.36](https://github.com/cube-js/cube.js/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-client/vue3 diff --git a/packages/cubejs-client-vue3/package.json b/packages/cubejs-client-vue3/package.json index 56f01dc60038b..3267f86296e04 100644 --- a/packages/cubejs-client-vue3/package.json +++ b/packages/cubejs-client-vue3/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/vue3", - "version": "1.3.36", + "version": "1.3.37", "engines": {}, "repository": { "type": "git", @@ -28,7 +28,7 @@ "src" ], "dependencies": { - "@cubejs-client/core": "1.3.36", + "@cubejs-client/core": "1.3.37", "@vue/compiler-sfc": "^3.0.11", "core-js": "^3.6.5", "flush-promises": "^1.0.2", diff --git a/packages/cubejs-client-ws-transport/CHANGELOG.md b/packages/cubejs-client-ws-transport/CHANGELOG.md index 7619b21dcc886..71dafcbca1955 100644 --- a/packages/cubejs-client-ws-transport/CHANGELOG.md +++ b/packages/cubejs-client-ws-transport/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-client/ws-transport + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-client/ws-transport diff --git a/packages/cubejs-client-ws-transport/package.json b/packages/cubejs-client-ws-transport/package.json index 586055ec8ee02..8f422849b1007 100644 --- a/packages/cubejs-client-ws-transport/package.json +++ b/packages/cubejs-client-ws-transport/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-client/ws-transport", - "version": "1.3.36", + "version": "1.3.37", "engines": {}, "repository": { "type": "git", @@ -20,7 +20,7 @@ }, "dependencies": { "@babel/runtime": "^7.1.2", - "@cubejs-client/core": "1.3.36", + "@cubejs-client/core": "1.3.37", "core-js": "^3.6.5", "isomorphic-ws": "^4.0.1", "ws": "^7.3.1" @@ -33,7 +33,7 @@ "@babel/core": "^7.3.3", "@babel/preset-env": "^7.3.1", "@babel/preset-typescript": "^7.12.1", - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/ws": "^7.2.9", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-crate-driver/CHANGELOG.md b/packages/cubejs-crate-driver/CHANGELOG.md index 3ebcda4391269..15b94f5dba385 100644 --- a/packages/cubejs-crate-driver/CHANGELOG.md +++ b/packages/cubejs-crate-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/crate-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/crate-driver diff --git a/packages/cubejs-crate-driver/package.json b/packages/cubejs-crate-driver/package.json index 5b021b2bfad0b..210b7d798dca2 100644 --- a/packages/cubejs-crate-driver/package.json +++ b/packages/cubejs-crate-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/crate-driver", "description": "Cube.js Crate database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -28,14 +28,14 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/postgres-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/postgres-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "pg": "^8.7.1" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/testing-shared": "1.3.37", "testcontainers": "^10.28.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-cubestore-driver/CHANGELOG.md b/packages/cubejs-cubestore-driver/CHANGELOG.md index d8b6bfc53260a..2434991fead4f 100644 --- a/packages/cubejs-cubestore-driver/CHANGELOG.md +++ b/packages/cubejs-cubestore-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/cubestore-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/cubestore-driver diff --git a/packages/cubejs-cubestore-driver/package.json b/packages/cubejs-cubestore-driver/package.json index 15efdadfda5f4..f5e7ff8300b58 100644 --- a/packages/cubejs-cubestore-driver/package.json +++ b/packages/cubejs-cubestore-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/cubestore-driver", "description": "Cube Store driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -26,10 +26,10 @@ "lint:fix": "eslint --fix src/*.ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/cubestore": "1.3.36", - "@cubejs-backend/native": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/cubestore": "1.3.37", + "@cubejs-backend/native": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "csv-write-stream": "^2.0.0", "flatbuffers": "23.3.3", "fs-extra": "^9.1.0", @@ -41,7 +41,7 @@ "ws": "^7.4.3" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/csv-write-stream": "^2.0.0", "@types/generic-pool": "^3.8.2", "@types/jest": "^29", diff --git a/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md b/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md index b9c83ed1b7a29..96e652ad8eff7 100644 --- a/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md +++ b/packages/cubejs-databricks-jdbc-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/databricks-jdbc-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/databricks-jdbc-driver diff --git a/packages/cubejs-databricks-jdbc-driver/package.json b/packages/cubejs-databricks-jdbc-driver/package.json index 6a134890a2342..8243d4e6bd42b 100644 --- a/packages/cubejs-databricks-jdbc-driver/package.json +++ b/packages/cubejs-databricks-jdbc-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/databricks-jdbc-driver", "description": "Cube.js Databricks database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "license": "Apache-2.0", "repository": { "type": "git", @@ -30,17 +30,17 @@ "bin" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/jdbc-driver": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/jdbc-driver": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "node-fetch": "^2.6.1", "ramda": "^0.27.2", "source-map-support": "^0.5.19", "uuid": "^8.3.2" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/generic-pool": "^3.8.2", "@types/jest": "^29", "@types/node": "^20", diff --git a/packages/cubejs-dbt-schema-extension/CHANGELOG.md b/packages/cubejs-dbt-schema-extension/CHANGELOG.md index bc231972187ee..d91b786c71371 100644 --- a/packages/cubejs-dbt-schema-extension/CHANGELOG.md +++ b/packages/cubejs-dbt-schema-extension/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/dbt-schema-extension + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/dbt-schema-extension diff --git a/packages/cubejs-dbt-schema-extension/package.json b/packages/cubejs-dbt-schema-extension/package.json index d784146dd9fc2..3c3c2dcf9c319 100644 --- a/packages/cubejs-dbt-schema-extension/package.json +++ b/packages/cubejs-dbt-schema-extension/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/dbt-schema-extension", "description": "Cube.js dbt Schema Extension", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,14 +25,14 @@ "lint:fix": "eslint --fix src/* --ext .ts,.js" }, "dependencies": { - "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/schema-compiler": "1.3.37", "fs-extra": "^9.1.0", "inflection": "^1.12.0", "node-fetch": "^2.6.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/testing": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/testing": "1.3.37", "@types/generic-pool": "^3.8.2", "@types/jest": "^29", "jest": "^29", diff --git a/packages/cubejs-docker/CHANGELOG.md b/packages/cubejs-docker/CHANGELOG.md index b29bbbd28910f..ade31ed003704 100644 --- a/packages/cubejs-docker/CHANGELOG.md +++ b/packages/cubejs-docker/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/docker + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/docker diff --git a/packages/cubejs-docker/package.json b/packages/cubejs-docker/package.json index 645d969d35d7e..cc532745854ef 100644 --- a/packages/cubejs-docker/package.json +++ b/packages/cubejs-docker/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/docker", - "version": "1.3.36", + "version": "1.3.37", "description": "Cube.js In Docker (virtual package)", "author": "Cube Dev, Inc.", "license": "Apache-2.0", @@ -9,35 +9,35 @@ "node": "^14.0.0 || ^16.0.0 || >=17.0.0" }, "dependencies": { - "@cubejs-backend/athena-driver": "1.3.36", - "@cubejs-backend/bigquery-driver": "1.3.36", - "@cubejs-backend/clickhouse-driver": "1.3.36", - "@cubejs-backend/crate-driver": "1.3.36", - "@cubejs-backend/databricks-jdbc-driver": "1.3.36", - "@cubejs-backend/dbt-schema-extension": "1.3.36", - "@cubejs-backend/dremio-driver": "1.3.36", - "@cubejs-backend/druid-driver": "1.3.36", - "@cubejs-backend/duckdb-driver": "1.3.36", - "@cubejs-backend/elasticsearch-driver": "1.3.36", - "@cubejs-backend/firebolt-driver": "1.3.36", - "@cubejs-backend/hive-driver": "1.3.36", - "@cubejs-backend/ksql-driver": "1.3.36", - "@cubejs-backend/materialize-driver": "1.3.36", - "@cubejs-backend/mongobi-driver": "1.3.36", - "@cubejs-backend/mssql-driver": "1.3.36", - "@cubejs-backend/mysql-driver": "1.3.36", - "@cubejs-backend/oracle-driver": "1.3.36", - "@cubejs-backend/pinot-driver": "1.3.36", - "@cubejs-backend/postgres-driver": "1.3.36", - "@cubejs-backend/prestodb-driver": "1.3.36", - "@cubejs-backend/questdb-driver": "1.3.36", - "@cubejs-backend/redshift-driver": "1.3.36", - "@cubejs-backend/server": "1.3.36", - "@cubejs-backend/snowflake-driver": "1.3.36", - "@cubejs-backend/sqlite-driver": "1.3.36", - "@cubejs-backend/trino-driver": "1.3.36", - "@cubejs-backend/vertica-driver": "1.3.36", - "cubejs-cli": "1.3.36", + "@cubejs-backend/athena-driver": "1.3.37", + "@cubejs-backend/bigquery-driver": "1.3.37", + "@cubejs-backend/clickhouse-driver": "1.3.37", + "@cubejs-backend/crate-driver": "1.3.37", + "@cubejs-backend/databricks-jdbc-driver": "1.3.37", + "@cubejs-backend/dbt-schema-extension": "1.3.37", + "@cubejs-backend/dremio-driver": "1.3.37", + "@cubejs-backend/druid-driver": "1.3.37", + "@cubejs-backend/duckdb-driver": "1.3.37", + "@cubejs-backend/elasticsearch-driver": "1.3.37", + "@cubejs-backend/firebolt-driver": "1.3.37", + "@cubejs-backend/hive-driver": "1.3.37", + "@cubejs-backend/ksql-driver": "1.3.37", + "@cubejs-backend/materialize-driver": "1.3.37", + "@cubejs-backend/mongobi-driver": "1.3.37", + "@cubejs-backend/mssql-driver": "1.3.37", + "@cubejs-backend/mysql-driver": "1.3.37", + "@cubejs-backend/oracle-driver": "1.3.37", + "@cubejs-backend/pinot-driver": "1.3.37", + "@cubejs-backend/postgres-driver": "1.3.37", + "@cubejs-backend/prestodb-driver": "1.3.37", + "@cubejs-backend/questdb-driver": "1.3.37", + "@cubejs-backend/redshift-driver": "1.3.37", + "@cubejs-backend/server": "1.3.37", + "@cubejs-backend/snowflake-driver": "1.3.37", + "@cubejs-backend/sqlite-driver": "1.3.37", + "@cubejs-backend/trino-driver": "1.3.37", + "@cubejs-backend/vertica-driver": "1.3.37", + "cubejs-cli": "1.3.37", "typescript": "~5.2.2" }, "resolutions": { diff --git a/packages/cubejs-dremio-driver/CHANGELOG.md b/packages/cubejs-dremio-driver/CHANGELOG.md index 31482949d908a..3853220339d67 100644 --- a/packages/cubejs-dremio-driver/CHANGELOG.md +++ b/packages/cubejs-dremio-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/dremio-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/dremio-driver diff --git a/packages/cubejs-dremio-driver/package.json b/packages/cubejs-dremio-driver/package.json index ecabb0779e665..c0cd3b9431671 100644 --- a/packages/cubejs-dremio-driver/package.json +++ b/packages/cubejs-dremio-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/dremio-driver", "description": "Cube.js Dremio driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -22,15 +22,15 @@ "lint:fix": "eslint driver/*.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "axios": "^1.8.3", "sqlstring": "^2.3.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/testing-shared": "1.3.37", "jest": "^29" }, "license": "Apache-2.0", diff --git a/packages/cubejs-druid-driver/CHANGELOG.md b/packages/cubejs-druid-driver/CHANGELOG.md index c3a5d5b05eab7..0081080fd7ea0 100644 --- a/packages/cubejs-druid-driver/CHANGELOG.md +++ b/packages/cubejs-druid-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/druid-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/druid-driver diff --git a/packages/cubejs-druid-driver/package.json b/packages/cubejs-druid-driver/package.json index 7ae136868b995..cdb4c14e5c53c 100644 --- a/packages/cubejs-druid-driver/package.json +++ b/packages/cubejs-druid-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/druid-driver", "description": "Cube.js Druid database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "license": "Apache-2.0", "repository": { "type": "git", @@ -28,13 +28,13 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "axios": "^1.8.3" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/generic-pool": "^3.8.2", "@types/jest": "^29", "@types/node": "^20", diff --git a/packages/cubejs-duckdb-driver/CHANGELOG.md b/packages/cubejs-duckdb-driver/CHANGELOG.md index f5ccc2c8357a0..28ea2f889e385 100644 --- a/packages/cubejs-duckdb-driver/CHANGELOG.md +++ b/packages/cubejs-duckdb-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/duckdb-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/duckdb-driver diff --git a/packages/cubejs-duckdb-driver/package.json b/packages/cubejs-duckdb-driver/package.json index 52ece38c4c2fa..357ca879fd569 100644 --- a/packages/cubejs-duckdb-driver/package.json +++ b/packages/cubejs-duckdb-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/duckdb-driver", "description": "Cube DuckDB database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,15 +27,15 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "duckdb": "^1.3.1" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/testing-shared": "1.3.37", "@types/jest": "^29", "@types/node": "^20", "jest": "^29", diff --git a/packages/cubejs-elasticsearch-driver/CHANGELOG.md b/packages/cubejs-elasticsearch-driver/CHANGELOG.md index 6cf54adb529ce..4dae6df5d0706 100644 --- a/packages/cubejs-elasticsearch-driver/CHANGELOG.md +++ b/packages/cubejs-elasticsearch-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/elasticsearch-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/elasticsearch-driver diff --git a/packages/cubejs-elasticsearch-driver/package.json b/packages/cubejs-elasticsearch-driver/package.json index ba9020d3e6c2e..b8998167bd281 100644 --- a/packages/cubejs-elasticsearch-driver/package.json +++ b/packages/cubejs-elasticsearch-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/elasticsearch-driver", "description": "Cube.js elasticsearch database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -23,14 +23,14 @@ "driver" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "@elastic/elasticsearch": "7.12.0", "sqlstring": "^2.3.1" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/jest": "^29", "jest": "^29", "testcontainers": "^10.28.0" diff --git a/packages/cubejs-firebolt-driver/CHANGELOG.md b/packages/cubejs-firebolt-driver/CHANGELOG.md index 56d7389a01efa..181d117ce27b7 100644 --- a/packages/cubejs-firebolt-driver/CHANGELOG.md +++ b/packages/cubejs-firebolt-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/firebolt-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/firebolt-driver diff --git a/packages/cubejs-firebolt-driver/package.json b/packages/cubejs-firebolt-driver/package.json index 80d9de8d894b3..e74209953ae2a 100644 --- a/packages/cubejs-firebolt-driver/package.json +++ b/packages/cubejs-firebolt-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/firebolt-driver", "description": "Cube.js Firebolt database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -28,15 +28,15 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "firebolt-sdk": "1.10.0" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/testing-shared": "1.3.37", "typescript": "~5.2.2" }, "publishConfig": { diff --git a/packages/cubejs-hive-driver/CHANGELOG.md b/packages/cubejs-hive-driver/CHANGELOG.md index 8b23732744d50..1e20a459e6f13 100644 --- a/packages/cubejs-hive-driver/CHANGELOG.md +++ b/packages/cubejs-hive-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/hive-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/hive-driver diff --git a/packages/cubejs-hive-driver/package.json b/packages/cubejs-hive-driver/package.json index 63631605b008d..91423dc51a9ab 100644 --- a/packages/cubejs-hive-driver/package.json +++ b/packages/cubejs-hive-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/hive-driver", "description": "Cube.js Hive database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -17,8 +17,8 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "generic-pool": "^3.8.2", "jshs2": "^0.4.4", "sasl-plain": "^0.1.0", @@ -28,7 +28,7 @@ }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36" + "@cubejs-backend/linter": "1.3.37" }, "publishConfig": { "access": "public" diff --git a/packages/cubejs-jdbc-driver/CHANGELOG.md b/packages/cubejs-jdbc-driver/CHANGELOG.md index cea26c583598d..ffa86aa36fbea 100644 --- a/packages/cubejs-jdbc-driver/CHANGELOG.md +++ b/packages/cubejs-jdbc-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/jdbc-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/jdbc-driver diff --git a/packages/cubejs-jdbc-driver/package.json b/packages/cubejs-jdbc-driver/package.json index 83ca50e4bde98..8200b15b54353 100644 --- a/packages/cubejs-jdbc-driver/package.json +++ b/packages/cubejs-jdbc-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/jdbc-driver", "description": "Cube.js JDBC database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,9 +25,9 @@ "index.js" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", "@cubejs-backend/node-java-maven": "^0.1.3", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/shared": "1.3.37", "generic-pool": "^3.8.2", "sqlstring": "^2.3.0" }, @@ -43,7 +43,7 @@ "testEnvironment": "node" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/generic-pool": "^3.8.2", "@types/node": "^20", "@types/sqlstring": "^2.3.0", diff --git a/packages/cubejs-ksql-driver/CHANGELOG.md b/packages/cubejs-ksql-driver/CHANGELOG.md index 8c60f381a8c3f..400e78da23315 100644 --- a/packages/cubejs-ksql-driver/CHANGELOG.md +++ b/packages/cubejs-ksql-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/ksql-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/ksql-driver diff --git a/packages/cubejs-ksql-driver/package.json b/packages/cubejs-ksql-driver/package.json index 50b1a4f42ed93..bdd1148dc30e5 100644 --- a/packages/cubejs-ksql-driver/package.json +++ b/packages/cubejs-ksql-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/ksql-driver", "description": "Cube.js ksql database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,9 +25,9 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "async-mutex": "0.3.2", "axios": "^1.8.3", "kafkajs": "^2.2.3", @@ -41,7 +41,7 @@ "extends": "../cubejs-linter" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "typescript": "~5.2.2" } } diff --git a/packages/cubejs-linter/CHANGELOG.md b/packages/cubejs-linter/CHANGELOG.md index 13a41ddfefcc0..a343a0a0c5094 100644 --- a/packages/cubejs-linter/CHANGELOG.md +++ b/packages/cubejs-linter/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/linter + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/linter diff --git a/packages/cubejs-linter/package.json b/packages/cubejs-linter/package.json index d9ffc7230df33..ee6d72fc73815 100644 --- a/packages/cubejs-linter/package.json +++ b/packages/cubejs-linter/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/linter", "description": "Cube.js ESLint (virtual package) for linting code", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", diff --git a/packages/cubejs-materialize-driver/CHANGELOG.md b/packages/cubejs-materialize-driver/CHANGELOG.md index 7f291574d8e63..707ad1235512c 100644 --- a/packages/cubejs-materialize-driver/CHANGELOG.md +++ b/packages/cubejs-materialize-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/materialize-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/materialize-driver diff --git a/packages/cubejs-materialize-driver/package.json b/packages/cubejs-materialize-driver/package.json index fa61c4ad02558..97295093b209e 100644 --- a/packages/cubejs-materialize-driver/package.json +++ b/packages/cubejs-materialize-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/materialize-driver", "description": "Cube.js Materialize database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,17 +27,17 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/postgres-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/postgres-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "@types/pg": "^8.6.0", "pg": "^8.6.0", "semver": "^7.6.3" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/testing": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/testing": "1.3.37", "typescript": "~5.2.2" }, "publishConfig": { diff --git a/packages/cubejs-mongobi-driver/CHANGELOG.md b/packages/cubejs-mongobi-driver/CHANGELOG.md index 8f70f6f1cb271..d59e183b2bdd1 100644 --- a/packages/cubejs-mongobi-driver/CHANGELOG.md +++ b/packages/cubejs-mongobi-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/mongobi-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/mongobi-driver diff --git a/packages/cubejs-mongobi-driver/package.json b/packages/cubejs-mongobi-driver/package.json index 051d35548c3f0..847b02d77fa72 100644 --- a/packages/cubejs-mongobi-driver/package.json +++ b/packages/cubejs-mongobi-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/mongobi-driver", "description": "Cube.js MongoBI driver", "author": "krunalsabnis@gmail.com", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,8 +27,8 @@ "integration:mongobi": "jest dist/test" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "@types/node": "^20", "generic-pool": "^3.8.2", "moment": "^2.29.1", @@ -39,7 +39,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/generic-pool": "^3.8.2", "testcontainers": "^10.28.0", "typescript": "~5.2.2" diff --git a/packages/cubejs-mssql-driver/CHANGELOG.md b/packages/cubejs-mssql-driver/CHANGELOG.md index c7b7a3a957386..4fdf89eb05851 100644 --- a/packages/cubejs-mssql-driver/CHANGELOG.md +++ b/packages/cubejs-mssql-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/mssql-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/mssql-driver diff --git a/packages/cubejs-mssql-driver/package.json b/packages/cubejs-mssql-driver/package.json index cdfd452bdecdf..76cf1155ad455 100644 --- a/packages/cubejs-mssql-driver/package.json +++ b/packages/cubejs-mssql-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/mssql-driver", "description": "Cube.js MS SQL database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,8 +25,8 @@ "lint:fix": "eslint --fix src/* --ext .ts,.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "mssql": "^11.0.1" }, "devDependencies": { diff --git a/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md b/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md index dce9c83f0c77a..1ad63f8f9d695 100644 --- a/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md +++ b/packages/cubejs-mysql-aurora-serverless-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/mysql-aurora-serverless-driver diff --git a/packages/cubejs-mysql-aurora-serverless-driver/package.json b/packages/cubejs-mysql-aurora-serverless-driver/package.json index 599b800e89ff1..0abc6db0aef62 100644 --- a/packages/cubejs-mysql-aurora-serverless-driver/package.json +++ b/packages/cubejs-mysql-aurora-serverless-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/mysql-aurora-serverless-driver", "description": "Cube.js Aurora Serverless Mysql database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -21,14 +21,14 @@ "lint": "eslint driver/*.js test/*.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "@types/mysql": "^2.15.15", "aws-sdk": "^2.787.0", "data-api-client": "^1.1.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/data-api-client": "^1.2.1", "@types/jest": "^29", "jest": "^29", diff --git a/packages/cubejs-mysql-driver/CHANGELOG.md b/packages/cubejs-mysql-driver/CHANGELOG.md index 1b4ab364825e9..64092f4c53244 100644 --- a/packages/cubejs-mysql-driver/CHANGELOG.md +++ b/packages/cubejs-mysql-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/mysql-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/mysql-driver diff --git a/packages/cubejs-mysql-driver/package.json b/packages/cubejs-mysql-driver/package.json index caa3e7dd169df..a45b78736a7c7 100644 --- a/packages/cubejs-mysql-driver/package.json +++ b/packages/cubejs-mysql-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/mysql-driver", "description": "Cube.js Mysql database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,14 +27,14 @@ "lint:fix": "eslint --fix src/* test/* --ext .ts,.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "generic-pool": "^3.8.2", "mysql": "^2.18.1" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/testing-shared": "1.3.37", "@types/generic-pool": "^3.8.2", "@types/jest": "^29", "@types/mysql": "^2.15.21", diff --git a/packages/cubejs-oracle-driver/CHANGELOG.md b/packages/cubejs-oracle-driver/CHANGELOG.md index 5b3e2af6c9767..ac2d6cf9baf25 100644 --- a/packages/cubejs-oracle-driver/CHANGELOG.md +++ b/packages/cubejs-oracle-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/oracle-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/oracle-driver diff --git a/packages/cubejs-oracle-driver/package.json b/packages/cubejs-oracle-driver/package.json index cbcfa04a0e74b..877505c174848 100644 --- a/packages/cubejs-oracle-driver/package.json +++ b/packages/cubejs-oracle-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/oracle-driver", "description": "Cube.js oracle database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -13,7 +13,7 @@ }, "main": "driver/OracleDriver.js", "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", "ramda": "^0.27.0" }, "optionalDependencies": { diff --git a/packages/cubejs-pinot-driver/CHANGELOG.md b/packages/cubejs-pinot-driver/CHANGELOG.md index da502a8dfe501..d40b421162125 100644 --- a/packages/cubejs-pinot-driver/CHANGELOG.md +++ b/packages/cubejs-pinot-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/pinot-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/pinot-driver diff --git a/packages/cubejs-pinot-driver/package.json b/packages/cubejs-pinot-driver/package.json index 85b2d33177cb2..83c5ddb8adf79 100644 --- a/packages/cubejs-pinot-driver/package.json +++ b/packages/cubejs-pinot-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/pinot-driver", "description": "Cube.js Pinot database driver", "author": "Julian Ronsse, InTheMemory, Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,9 +27,9 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "node-fetch": "^2.6.1", "ramda": "^0.27.2", "sqlstring": "^2.3.3" @@ -39,7 +39,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/jest": "^29", "jest": "^29", "should": "^13.2.3", diff --git a/packages/cubejs-playground/CHANGELOG.md b/packages/cubejs-playground/CHANGELOG.md index 9c49968fc206e..30241d66c86f1 100644 --- a/packages/cubejs-playground/CHANGELOG.md +++ b/packages/cubejs-playground/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-client/playground + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-client/playground diff --git a/packages/cubejs-playground/package.json b/packages/cubejs-playground/package.json index 9bdee5982bb37..2c07ad11f3cc4 100644 --- a/packages/cubejs-playground/package.json +++ b/packages/cubejs-playground/package.json @@ -1,7 +1,7 @@ { "name": "@cubejs-client/playground", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "engines": {}, "repository": { "type": "git", @@ -68,8 +68,8 @@ "@ant-design/compatible": "^1.0.1", "@ant-design/icons": "^5.3.5", "@cube-dev/ui-kit": "0.52.3", - "@cubejs-client/core": "1.3.36", - "@cubejs-client/react": "1.3.36", + "@cubejs-client/core": "1.3.37", + "@cubejs-client/react": "1.3.37", "@types/flexsearch": "^0.7.3", "@types/node": "^20", "@types/react": "^18.3.4", diff --git a/packages/cubejs-postgres-driver/CHANGELOG.md b/packages/cubejs-postgres-driver/CHANGELOG.md index 48f1e395e6618..49655b9c8e7b4 100644 --- a/packages/cubejs-postgres-driver/CHANGELOG.md +++ b/packages/cubejs-postgres-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/postgres-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/postgres-driver diff --git a/packages/cubejs-postgres-driver/package.json b/packages/cubejs-postgres-driver/package.json index 39fb48874c4c5..aa7ac111c2296 100644 --- a/packages/cubejs-postgres-driver/package.json +++ b/packages/cubejs-postgres-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/postgres-driver", "description": "Cube.js Postgres database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,8 +27,8 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "@types/pg": "^8.6.0", "@types/pg-query-stream": "^1.0.3", "moment": "^2.24.0", @@ -37,8 +37,8 @@ }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/testing-shared": "1.3.37", "testcontainers": "^10.28.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-prestodb-driver/CHANGELOG.md b/packages/cubejs-prestodb-driver/CHANGELOG.md index 83cda01da14fe..f89e0f8fd80ff 100644 --- a/packages/cubejs-prestodb-driver/CHANGELOG.md +++ b/packages/cubejs-prestodb-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/prestodb-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/prestodb-driver diff --git a/packages/cubejs-prestodb-driver/package.json b/packages/cubejs-prestodb-driver/package.json index 5612cea29c3a9..7f97cf9effe2d 100644 --- a/packages/cubejs-prestodb-driver/package.json +++ b/packages/cubejs-prestodb-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/prestodb-driver", "description": "Cube.js Presto database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,8 +27,8 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "presto-client": "^1.1.0", "ramda": "^0.27.0", "sqlstring": "^2.3.1" @@ -38,7 +38,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/jest": "^29", "jest": "^29", "should": "^13.2.3", diff --git a/packages/cubejs-query-orchestrator/CHANGELOG.md b/packages/cubejs-query-orchestrator/CHANGELOG.md index 0c7efad1a17b7..4fc84f37e2695 100644 --- a/packages/cubejs-query-orchestrator/CHANGELOG.md +++ b/packages/cubejs-query-orchestrator/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/query-orchestrator + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/query-orchestrator diff --git a/packages/cubejs-query-orchestrator/package.json b/packages/cubejs-query-orchestrator/package.json index 2671532670eed..1177273b01a67 100644 --- a/packages/cubejs-query-orchestrator/package.json +++ b/packages/cubejs-query-orchestrator/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/query-orchestrator", "description": "Cube.js Query Orchestrator and Cache", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -29,16 +29,16 @@ "dist/src/*" ], "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/cubestore-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/cubestore-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "csv-write-stream": "^2.0.0", "generic-pool": "^3.8.2", "lru-cache": "^11.1.0", "ramda": "^0.27.2" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/generic-pool": "^3.8.2", "@types/jest": "^29", "@types/node": "^20", diff --git a/packages/cubejs-questdb-driver/CHANGELOG.md b/packages/cubejs-questdb-driver/CHANGELOG.md index 5b7acf9e0165e..37f17552b2c7b 100644 --- a/packages/cubejs-questdb-driver/CHANGELOG.md +++ b/packages/cubejs-questdb-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/questdb-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/questdb-driver diff --git a/packages/cubejs-questdb-driver/package.json b/packages/cubejs-questdb-driver/package.json index fe459659384ef..c35cd1a2953bb 100644 --- a/packages/cubejs-questdb-driver/package.json +++ b/packages/cubejs-questdb-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/questdb-driver", "description": "Cube.js QuestDB database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,9 +27,9 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "@types/pg": "^8.6.0", "moment": "^2.24.0", "pg": "^8.7.0", @@ -37,8 +37,8 @@ }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/testing-shared": "1.3.37", "testcontainers": "^10.28.0", "typescript": "~5.2.2" }, diff --git a/packages/cubejs-redshift-driver/CHANGELOG.md b/packages/cubejs-redshift-driver/CHANGELOG.md index 3bb3b64438513..7fc5cb4b46a24 100644 --- a/packages/cubejs-redshift-driver/CHANGELOG.md +++ b/packages/cubejs-redshift-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/redshift-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/redshift-driver diff --git a/packages/cubejs-redshift-driver/package.json b/packages/cubejs-redshift-driver/package.json index b63b5e041bb8f..5825ddc82d98f 100644 --- a/packages/cubejs-redshift-driver/package.json +++ b/packages/cubejs-redshift-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/redshift-driver", "description": "Cube.js Redshift database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,13 +25,13 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/postgres-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36" + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/postgres-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "typescript": "~5.2.2" }, "publishConfig": { diff --git a/packages/cubejs-schema-compiler/CHANGELOG.md b/packages/cubejs-schema-compiler/CHANGELOG.md index 8de808cc2198e..54069a5059e8a 100644 --- a/packages/cubejs-schema-compiler/CHANGELOG.md +++ b/packages/cubejs-schema-compiler/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +### Bug Fixes + +- **tesseract:** Fix infinite loops during calendar time dimension processing ([#9772](https://github.com/cube-js/cube/issues/9772)) ([3f16a39](https://github.com/cube-js/cube/commit/3f16a39c27ac7da2d5671031cb1745e0053b4a42)) + +### Features + +- **tesseract:** Introduce named multistage time shifts for use with calendars ([#9773](https://github.com/cube-js/cube/issues/9773)) ([e033aaf](https://github.com/cube-js/cube/commit/e033aaf34af65192f981b942d834e33b1e61b851)) + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) ### Features diff --git a/packages/cubejs-schema-compiler/package.json b/packages/cubejs-schema-compiler/package.json index 83da04b9213e7..ae739f7426c75 100644 --- a/packages/cubejs-schema-compiler/package.json +++ b/packages/cubejs-schema-compiler/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/schema-compiler", "description": "Cube schema compiler", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -40,8 +40,8 @@ "@babel/standalone": "^7.24", "@babel/traverse": "^7.24", "@babel/types": "^7.24", - "@cubejs-backend/native": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/native": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "antlr4ts": "0.5.0-alpha.4", "camelcase": "^6.2.0", "cron-parser": "^4.9.0", @@ -60,8 +60,8 @@ }, "devDependencies": { "@clickhouse/client": "^1.7.0", - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/query-orchestrator": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/query-orchestrator": "1.3.37", "@types/babel__code-frame": "^7.0.6", "@types/babel__generator": "^7.6.8", "@types/babel__traverse": "^7.20.5", diff --git a/packages/cubejs-server-core/CHANGELOG.md b/packages/cubejs-server-core/CHANGELOG.md index 6057a060e1da6..9d75b23401b12 100644 --- a/packages/cubejs-server-core/CHANGELOG.md +++ b/packages/cubejs-server-core/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/server-core + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/server-core diff --git a/packages/cubejs-server-core/package.json b/packages/cubejs-server-core/package.json index c66287841ef7d..6ca1a48e60fd5 100644 --- a/packages/cubejs-server-core/package.json +++ b/packages/cubejs-server-core/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/server-core", "description": "Cube.js base component to wire all backend components together", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -29,14 +29,14 @@ "unit": "jest --runInBand --forceExit --coverage dist/test" }, "dependencies": { - "@cubejs-backend/api-gateway": "1.3.36", - "@cubejs-backend/cloud": "1.3.36", + "@cubejs-backend/api-gateway": "1.3.37", + "@cubejs-backend/cloud": "1.3.37", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/native": "1.3.36", - "@cubejs-backend/query-orchestrator": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", - "@cubejs-backend/templates": "1.3.36", + "@cubejs-backend/native": "1.3.37", + "@cubejs-backend/query-orchestrator": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", + "@cubejs-backend/templates": "1.3.37", "codesandbox-import-utils": "^2.1.12", "cross-spawn": "^7.0.1", "fs-extra": "^8.1.0", @@ -59,9 +59,9 @@ "ws": "^7.5.3" }, "devDependencies": { - "@cubejs-backend/cubestore-driver": "1.3.36", - "@cubejs-backend/linter": "1.3.36", - "@cubejs-client/playground": "1.3.36", + "@cubejs-backend/cubestore-driver": "1.3.37", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-client/playground": "1.3.37", "@types/cross-spawn": "^6.0.2", "@types/express": "^4.17.21", "@types/fs-extra": "^9.0.8", diff --git a/packages/cubejs-server/CHANGELOG.md b/packages/cubejs-server/CHANGELOG.md index 2b195c9fd6946..70189fadae7d3 100644 --- a/packages/cubejs-server/CHANGELOG.md +++ b/packages/cubejs-server/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/server + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/server diff --git a/packages/cubejs-server/package.json b/packages/cubejs-server/package.json index 0bb999b4b4c6b..5456b98199e96 100644 --- a/packages/cubejs-server/package.json +++ b/packages/cubejs-server/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/server", "description": "Cube.js all-in-one server", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "types": "index.d.ts", "repository": { "type": "git", @@ -40,11 +40,11 @@ "jest:shapshot": "jest --updateSnapshot test" }, "dependencies": { - "@cubejs-backend/cubestore-driver": "1.3.36", + "@cubejs-backend/cubestore-driver": "1.3.37", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/native": "1.3.36", - "@cubejs-backend/server-core": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/native": "1.3.37", + "@cubejs-backend/server-core": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "@oclif/color": "^1.0.0", "@oclif/command": "^1.8.13", "@oclif/config": "^1.18.2", @@ -61,8 +61,8 @@ "ws": "^7.1.2" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/query-orchestrator": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/query-orchestrator": "1.3.37", "@oclif/dev-cli": "^1.23.1", "@types/body-parser": "^1.19.0", "@types/cors": "^2.8.8", diff --git a/packages/cubejs-snowflake-driver/CHANGELOG.md b/packages/cubejs-snowflake-driver/CHANGELOG.md index dc51d489eba96..93ed79df59f13 100644 --- a/packages/cubejs-snowflake-driver/CHANGELOG.md +++ b/packages/cubejs-snowflake-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/snowflake-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/snowflake-driver diff --git a/packages/cubejs-snowflake-driver/package.json b/packages/cubejs-snowflake-driver/package.json index 1af696e828604..401d415ebf61c 100644 --- a/packages/cubejs-snowflake-driver/package.json +++ b/packages/cubejs-snowflake-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/snowflake-driver", "description": "Cube.js Snowflake database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -25,8 +25,8 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "date-fns-timezone": "^0.1.4", "snowflake-sdk": "^2.0.3" }, @@ -38,7 +38,7 @@ "extends": "../cubejs-linter" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "typescript": "~5.2.2" } } diff --git a/packages/cubejs-sqlite-driver/CHANGELOG.md b/packages/cubejs-sqlite-driver/CHANGELOG.md index 522b579048b6e..ca7c09d9a78b1 100644 --- a/packages/cubejs-sqlite-driver/CHANGELOG.md +++ b/packages/cubejs-sqlite-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/sqlite-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/sqlite-driver diff --git a/packages/cubejs-sqlite-driver/package.json b/packages/cubejs-sqlite-driver/package.json index 5fe1564a30ce5..81ad8d2520fec 100644 --- a/packages/cubejs-sqlite-driver/package.json +++ b/packages/cubejs-sqlite-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/sqlite-driver", "description": "Cube.js Sqlite database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -17,13 +17,13 @@ "lint": "eslint **/*.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "sqlite3": "^5.1.7" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36" + "@cubejs-backend/linter": "1.3.37" }, "publishConfig": { "access": "public" diff --git a/packages/cubejs-templates/CHANGELOG.md b/packages/cubejs-templates/CHANGELOG.md index 61145dd48bf5b..191ce1ade4330 100644 --- a/packages/cubejs-templates/CHANGELOG.md +++ b/packages/cubejs-templates/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/templates + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/templates diff --git a/packages/cubejs-templates/package.json b/packages/cubejs-templates/package.json index e4fe559f8fe20..4ea535246e111 100644 --- a/packages/cubejs-templates/package.json +++ b/packages/cubejs-templates/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/templates", - "version": "1.3.36", + "version": "1.3.37", "description": "Cube.js Templates helpers", "author": "Cube Dev, Inc.", "license": "Apache-2.0", @@ -26,7 +26,7 @@ "extends": "../cubejs-linter" }, "dependencies": { - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/shared": "1.3.37", "cross-spawn": "^7.0.3", "decompress": "^4.2.1", "decompress-targz": "^4.1.1", @@ -36,7 +36,7 @@ "source-map-support": "^0.5.19" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "typescript": "~5.2.2" } } diff --git a/packages/cubejs-testing-drivers/CHANGELOG.md b/packages/cubejs-testing-drivers/CHANGELOG.md index 2fdb209d565cf..c1260d83cf701 100644 --- a/packages/cubejs-testing-drivers/CHANGELOG.md +++ b/packages/cubejs-testing-drivers/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/testing-drivers + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) ### Features diff --git a/packages/cubejs-testing-drivers/package.json b/packages/cubejs-testing-drivers/package.json index 1730f8ca6d26c..f8d303ec56a1e 100644 --- a/packages/cubejs-testing-drivers/package.json +++ b/packages/cubejs-testing-drivers/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/testing-drivers", - "version": "1.3.36", + "version": "1.3.37", "description": "Cube.js drivers test suite", "author": "Cube Dev, Inc.", "license": "MIT", @@ -66,24 +66,24 @@ "dist/src" ], "dependencies": { - "@cubejs-backend/athena-driver": "1.3.36", - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/bigquery-driver": "1.3.36", - "@cubejs-backend/clickhouse-driver": "1.3.36", - "@cubejs-backend/cubestore-driver": "1.3.36", - "@cubejs-backend/databricks-jdbc-driver": "1.3.36", + "@cubejs-backend/athena-driver": "1.3.37", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/bigquery-driver": "1.3.37", + "@cubejs-backend/clickhouse-driver": "1.3.37", + "@cubejs-backend/cubestore-driver": "1.3.37", + "@cubejs-backend/databricks-jdbc-driver": "1.3.37", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/mssql-driver": "1.3.36", - "@cubejs-backend/mysql-driver": "1.3.36", - "@cubejs-backend/postgres-driver": "1.3.36", - "@cubejs-backend/query-orchestrator": "1.3.36", - "@cubejs-backend/server-core": "1.3.36", - "@cubejs-backend/shared": "1.3.36", - "@cubejs-backend/snowflake-driver": "1.3.36", - "@cubejs-backend/testing-shared": "1.3.36", - "@cubejs-client/core": "1.3.36", - "@cubejs-client/ws-transport": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/mssql-driver": "1.3.37", + "@cubejs-backend/mysql-driver": "1.3.37", + "@cubejs-backend/postgres-driver": "1.3.37", + "@cubejs-backend/query-orchestrator": "1.3.37", + "@cubejs-backend/server-core": "1.3.37", + "@cubejs-backend/shared": "1.3.37", + "@cubejs-backend/snowflake-driver": "1.3.37", + "@cubejs-backend/testing-shared": "1.3.37", + "@cubejs-client/core": "1.3.37", + "@cubejs-client/ws-transport": "1.3.37", "@jest/globals": "^29", "@types/jest": "^29", "@types/node": "^20", diff --git a/packages/cubejs-testing-shared/CHANGELOG.md b/packages/cubejs-testing-shared/CHANGELOG.md index 751cdf68e2549..76d0cff691f01 100644 --- a/packages/cubejs-testing-shared/CHANGELOG.md +++ b/packages/cubejs-testing-shared/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/testing-shared + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/testing-shared diff --git a/packages/cubejs-testing-shared/package.json b/packages/cubejs-testing-shared/package.json index af86acb8b3704..47b898931a8a7 100644 --- a/packages/cubejs-testing-shared/package.json +++ b/packages/cubejs-testing-shared/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/testing-shared", - "version": "1.3.36", + "version": "1.3.37", "description": "Cube.js Testing Helpers", "author": "Cube Dev, Inc.", "license": "Apache-2.0", @@ -21,16 +21,16 @@ ], "dependencies": { "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/query-orchestrator": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/query-orchestrator": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "@testcontainers/kafka": "~10.28.0", "dedent": "^0.7.0", "node-fetch": "^2.6.7", "testcontainers": "^10.28.0" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@jest/globals": "^29", "@types/dedent": "^0.7.0", "@types/jest": "^29", diff --git a/packages/cubejs-testing/CHANGELOG.md b/packages/cubejs-testing/CHANGELOG.md index 75af443b317bb..d0d6ae7957b70 100644 --- a/packages/cubejs-testing/CHANGELOG.md +++ b/packages/cubejs-testing/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/testing + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/testing diff --git a/packages/cubejs-testing/package.json b/packages/cubejs-testing/package.json index a94c8d3fe128a..24a55ddf48f54 100644 --- a/packages/cubejs-testing/package.json +++ b/packages/cubejs-testing/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/testing", - "version": "1.3.36", + "version": "1.3.37", "description": "Cube.js e2e tests", "author": "Cube Dev, Inc.", "license": "Apache-2.0", @@ -94,15 +94,15 @@ "birdbox-fixtures" ], "dependencies": { - "@cubejs-backend/cubestore-driver": "1.3.36", + "@cubejs-backend/cubestore-driver": "1.3.37", "@cubejs-backend/dotenv": "^9.0.2", - "@cubejs-backend/ksql-driver": "1.3.36", - "@cubejs-backend/postgres-driver": "1.3.36", - "@cubejs-backend/query-orchestrator": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", - "@cubejs-backend/testing-shared": "1.3.36", - "@cubejs-client/ws-transport": "1.3.36", + "@cubejs-backend/ksql-driver": "1.3.37", + "@cubejs-backend/postgres-driver": "1.3.37", + "@cubejs-backend/query-orchestrator": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", + "@cubejs-backend/testing-shared": "1.3.37", + "@cubejs-client/ws-transport": "1.3.37", "dedent": "^0.7.0", "fs-extra": "^8.1.0", "http-proxy": "^1.18.1", @@ -113,8 +113,8 @@ }, "devDependencies": { "@4tw/cypress-drag-drop": "^1.6.0", - "@cubejs-backend/linter": "1.3.36", - "@cubejs-client/core": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-client/core": "1.3.37", "@jest/globals": "^29", "@types/dedent": "^0.7.0", "@types/http-proxy": "^1.17.5", diff --git a/packages/cubejs-trino-driver/CHANGELOG.md b/packages/cubejs-trino-driver/CHANGELOG.md index 4795073ec535d..24925fe8d4e92 100644 --- a/packages/cubejs-trino-driver/CHANGELOG.md +++ b/packages/cubejs-trino-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/trino-driver + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/trino-driver diff --git a/packages/cubejs-trino-driver/package.json b/packages/cubejs-trino-driver/package.json index b1c4725eee7db..3800435ac51fc 100644 --- a/packages/cubejs-trino-driver/package.json +++ b/packages/cubejs-trino-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/trino-driver", "description": "Cube.js Trino database driver", "author": "Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.git", @@ -27,10 +27,10 @@ "lint:fix": "eslint --fix src/* --ext .ts" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/prestodb-driver": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/prestodb-driver": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", + "@cubejs-backend/shared": "1.3.37", "node-fetch": "^2.6.1", "presto-client": "^1.1.0", "sqlstring": "^2.3.1" @@ -40,7 +40,7 @@ "access": "public" }, "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/jest": "^29", "jest": "^29", "testcontainers": "^10.28.0", diff --git a/packages/cubejs-vertica-driver/CHANGELOG.md b/packages/cubejs-vertica-driver/CHANGELOG.md index 1b66dfda97e2d..25cc3b66d34bc 100644 --- a/packages/cubejs-vertica-driver/CHANGELOG.md +++ b/packages/cubejs-vertica-driver/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube.js/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/vertica-driver + ## [1.3.36](https://github.com/cube-js/cube.js/compare/v1.3.35...v1.3.36) (2025-07-10) **Note:** Version bump only for package @cubejs-backend/vertica-driver diff --git a/packages/cubejs-vertica-driver/package.json b/packages/cubejs-vertica-driver/package.json index 872a40d98806e..a6329b0878c0b 100644 --- a/packages/cubejs-vertica-driver/package.json +++ b/packages/cubejs-vertica-driver/package.json @@ -2,7 +2,7 @@ "name": "@cubejs-backend/vertica-driver", "description": "Cube.js Vertica database driver", "author": "Eduard Karacharov, Tim Brown, Cube Dev, Inc.", - "version": "1.3.36", + "version": "1.3.37", "repository": { "type": "git", "url": "https://github.com/cube-js/cube.js.git", @@ -19,15 +19,15 @@ "lint:fix": "eslint --fix **/*.js" }, "dependencies": { - "@cubejs-backend/base-driver": "1.3.36", - "@cubejs-backend/query-orchestrator": "1.3.36", - "@cubejs-backend/schema-compiler": "1.3.36", + "@cubejs-backend/base-driver": "1.3.37", + "@cubejs-backend/query-orchestrator": "1.3.37", + "@cubejs-backend/schema-compiler": "1.3.37", "vertica-nodejs": "^1.0.3" }, "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", - "@cubejs-backend/testing-shared": "1.3.36", + "@cubejs-backend/linter": "1.3.37", + "@cubejs-backend/testing-shared": "1.3.37", "@types/jest": "^29", "jest": "^29", "testcontainers": "^10.28.0" diff --git a/rust/cubesql/CHANGELOG.md b/rust/cubesql/CHANGELOG.md index 50bb4fab819f2..e11ac00544f51 100644 --- a/rust/cubesql/CHANGELOG.md +++ b/rust/cubesql/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/cubesql + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) ### Bug Fixes diff --git a/rust/cubesql/package.json b/rust/cubesql/package.json index 26f4f71f7d64b..e6a23e425f1b1 100644 --- a/rust/cubesql/package.json +++ b/rust/cubesql/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/cubesql", - "version": "1.3.36", + "version": "1.3.37", "description": "SQL API for Cube as proxy over MySQL protocol.", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" diff --git a/rust/cubestore/CHANGELOG.md b/rust/cubestore/CHANGELOG.md index 51069fc1ec952..e91b238549b4a 100644 --- a/rust/cubestore/CHANGELOG.md +++ b/rust/cubestore/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.3.37](https://github.com/cube-js/cube/compare/v1.3.36...v1.3.37) (2025-07-14) + +**Note:** Version bump only for package @cubejs-backend/cubestore + ## [1.3.36](https://github.com/cube-js/cube/compare/v1.3.35...v1.3.36) (2025-07-10) ### Bug Fixes diff --git a/rust/cubestore/package.json b/rust/cubestore/package.json index 4065735931a25..131eb250c3622 100644 --- a/rust/cubestore/package.json +++ b/rust/cubestore/package.json @@ -1,6 +1,6 @@ { "name": "@cubejs-backend/cubestore", - "version": "1.3.36", + "version": "1.3.37", "description": "Cube.js pre-aggregation storage layer.", "main": "dist/src/index.js", "typings": "dist/src/index.d.ts", @@ -27,7 +27,7 @@ "author": "Cube Dev, Inc.", "license": "Apache-2.0", "devDependencies": { - "@cubejs-backend/linter": "1.3.36", + "@cubejs-backend/linter": "1.3.37", "@types/jest": "^27", "@types/node": "^18", "jest": "^27", @@ -37,7 +37,7 @@ "access": "public" }, "dependencies": { - "@cubejs-backend/shared": "1.3.36", + "@cubejs-backend/shared": "1.3.37", "@octokit/core": "^3.2.5", "source-map-support": "^0.5.19" }, pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy