From 660c0a2511e25bb63981538488db326e56deee0a Mon Sep 17 00:00:00 2001 From: Dmitry Patsura Date: Mon, 29 Jun 2026 16:49:36 +0200 Subject: [PATCH 1/3] =?UTF-8?q?fix(tesseract):=20Reject=20pre-agg=20when?= =?UTF-8?q?=20a=20measure=20is=20multiplied=20only=20in=20t=E2=80=A6=20(#1?= =?UTF-8?q?1173)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The native pre-aggregation matcher only rejected multiplied measures when the query itself was multiplied, so a query for an unmultiplied measure (e.g. `orders.total_qty`) wrongly matched a pre-aggregation that multiplies it by grouping on a joined cube's dimension — the stored value differs. This ports the JS planner's #9541 rejection. --- .../optimizers/pre_aggregation/optimizer.rs | 47 +++++++++- .../src/planner/multi_fact_join_groups.rs | 93 ++++++++++++++++++- .../cube_bridge/base_query_options.rs | 25 +++-- .../cube_bridge/mock_case_switch_item.rs | 1 - .../cube_bridge/mock_cube_definition.rs | 1 - .../cube_bridge/mock_dimension_definition.rs | 1 - .../cube_bridge/mock_evaluator.rs | 1 - .../cube_bridge/mock_expression_struct.rs | 1 - .../mock_granularity_definition.rs | 1 - .../cube_bridge/mock_join_definition.rs | 1 - .../cube_bridge/mock_join_item.rs | 1 - .../cube_bridge/mock_join_item_definition.rs | 1 - .../cube_bridge/mock_measure_definition.rs | 1 - .../mock_member_expression_definition.rs | 1 - .../cube_bridge/mock_multi_stage_filter.rs | 1 - .../cube_bridge/mock_multi_stage_grain.rs | 1 - .../mock_pre_aggregation_description.rs | 1 - .../cube_bridge/mock_pre_aggregation_obj.rs | 1 - .../mock_pre_aggregation_time_dimension.rs | 1 - .../cube_bridge/mock_segment_definition.rs | 1 - .../cube_bridge/mock_subquery_join.rs | 1 - .../cube_bridge/mock_timeshift_definition.rs | 1 - .../mock_view_filter_definition.rs | 1 - .../pre_aggregations/multi_fact.rs | 42 +++++++++ ...ed_measure_rejects_multiplied_pre_agg.snap | 7 ++ 25 files changed, 197 insertions(+), 37 deletions(-) create mode 100644 rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/pre_aggregations/snapshots/cubesqlplanner__tests__integration__pre_aggregations__multi_fact__unmultiplied_measure_rejects_multiplied_pre_agg.snap diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs index c7f652b4bf2bf..239de72bcb5c6 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/logical_plan/optimizers/pre_aggregation/optimizer.rs @@ -2,6 +2,7 @@ use super::PreAggregationsCompiler; use super::*; use crate::logical_plan::visitor::{LogicalPlanRewriter, NodeRewriteResult}; use crate::logical_plan::*; +use crate::planner::collectors::has_multi_stage_members; use crate::planner::filter::FilterItem; use crate::planner::filter::FilterOp; use crate::planner::join_hints::JoinHints; @@ -509,15 +510,57 @@ impl PreAggregationOptimizer { pre_aggregation, match_state == MatchState::Partial, )?; - if matched.is_none() { + let Some(matched_measures) = matched else { return Ok(None); + }; + + // Even when the query itself has no multiplied measures, a measure that + // is multiplied in the pre-aggregation (because the pre-agg groups by a + // multiplier dimension) stores a different value than the query expects, + // so the pre-aggregation can't serve it. + let pre_aggr_multiplied = pre_aggregation + .multi_fact_join_groups + .multiplied_measures()?; + if matched_measures + .iter() + .any(|m| pre_aggr_multiplied.contains(m)) + { + let query_has_multi_stage = + all_measures + .iter() + .try_fold(false, |acc, m| -> Result { + Ok(acc || has_multi_stage_members(m, false)?) + })?; + if !query_has_multi_stage { + let has_filters = !filters.dimensions_filters.is_empty() + || !filters.time_dimensions_filters.is_empty() + || !filters.segments.is_empty(); + let query_has_multiplied = if has_filters { + MultiFactJoinGroups::try_new( + self.query_tools.clone(), + MeasuresJoinHints::builder(&JoinHints::new()) + .add_dimensions(&schema.dimensions) + .add_dimensions(&schema.time_dimensions) + .add_filters(&filters.dimensions_filters) + .add_filters(&filters.time_dimensions_filters) + .add_filters(&filters.segments) + .build(&all_measures)?, + )? + .has_multiplied_measures()? + } else { + query_groups.has_multiplied_measures()? + }; + if !query_has_multiplied { + return Ok(None); + } + } } if !self.are_join_paths_matching(schema, &all_measures, &query_groups, pre_aggregation)? { return Ok(None); } - Ok(matched) + Ok(Some(matched_measures)) } fn query_join_groups( diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/planner/multi_fact_join_groups.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/planner/multi_fact_join_groups.rs index 9323c5e882b01..6231c9cb26457 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/planner/multi_fact_join_groups.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/planner/multi_fact_join_groups.rs @@ -11,7 +11,7 @@ use crate::planner::JoinTree; use crate::planner::MemberSymbol; use cubenativeutils::CubeError; use itertools::Itertools; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use std::rc::Rc; /// A single measure paired with the complete set of join hints it @@ -284,6 +284,25 @@ impl MultiFactJoinGroups { Ok(false) } + /// Full names of the (leaf) measures that are multiplied — i.e. sit below a + /// one-to-many join — in these join groups. Like `has_multiplied_measures`, + /// but returns the concrete measures so callers can compare the + /// multiplicativity of a measure between two different groupings (e.g. the + /// query vs a pre-aggregation). + pub fn multiplied_measures(&self) -> Result, CubeError> { + let mut result = HashSet::new(); + for (join, measures) in self.groups.iter() { + for measure in measures.iter() { + for item in collect_multiplied_measures(measure, join)? { + if item.multiplied { + result.insert(item.measure.full_name()); + } + } + } + } + Ok(result) + } + pub fn groups(&self) -> &[(Rc, Vec>)] { &self.groups } @@ -447,6 +466,78 @@ mod tests { assert!(!groups.has_multiplied_measures().unwrap()); } + #[test] + fn test_multiplied_measures_one_side_measure() -> Result<(), CubeError> { + // `customers` is the `one` side of a one_to_many join to `orders`. + // Grouping `customers.count` by an `orders` dimension multiplies it, + // so its full name is returned. + let schema = MockSchema::from_yaml_file("common/multi_fact.yaml"); + let ctx = TestContext::new(schema)?; + + let customers_count = ctx.create_symbol("customers.count")?; + let orders_status = ctx.create_symbol("orders.status")?; + + let hints = MeasuresJoinHints::builder(&JoinHints::new()) + .add_dimensions(&[orders_status]) + .build(&[customers_count])?; + + let groups = MultiFactJoinGroups::try_new(ctx.query_tools().clone(), hints)?; + + assert_eq!( + groups.multiplied_measures()?, + HashSet::from(["customers.count".to_string()]) + ); + Ok(()) + } + + #[test] + fn test_multiplied_measures_many_side_measure() -> Result<(), CubeError> { + // `orders` is the `many` side, so joining the `customers` dimension + // does not multiply order rows: `orders.count` is not multiplied and + // the set is empty. + let schema = MockSchema::from_yaml_file("common/multi_fact.yaml"); + let ctx = TestContext::new(schema)?; + + let orders_count = ctx.create_symbol("orders.count")?; + let customers_name = ctx.create_symbol("customers.name")?; + + let hints = MeasuresJoinHints::builder(&JoinHints::new()) + .add_dimensions(&[customers_name]) + .build(&[orders_count])?; + + let groups = MultiFactJoinGroups::try_new(ctx.query_tools().clone(), hints)?; + + assert!(groups.multiplied_measures()?.is_empty()); + Ok(()) + } + + #[test] + fn test_multiplied_measures_multi_fact_mixed() -> Result<(), CubeError> { + // Multi-fact query grouped by an `orders` dimension: `customers.count` + // is multiplied (one side), `orders.count` is not (many side). Only the + // multiplied measure is returned — discriminating per-measure where the + // boolean `has_multiplied_measures()` cannot. + let schema = MockSchema::from_yaml_file("common/multi_fact.yaml"); + let ctx = TestContext::new(schema)?; + + let customers_count = ctx.create_symbol("customers.count")?; + let orders_count = ctx.create_symbol("orders.count")?; + let orders_status = ctx.create_symbol("orders.status")?; + + let hints = MeasuresJoinHints::builder(&JoinHints::new()) + .add_dimensions(&[orders_status]) + .build(&[customers_count, orders_count])?; + + let groups = MultiFactJoinGroups::try_new(ctx.query_tools().clone(), hints)?; + + assert!(groups.has_multiplied_measures()?); + assert_eq!( + groups.multiplied_measures()?, + HashSet::from(["customers.count".to_string()]) + ); + Ok(()) + } + #[test] fn test_multi_fact_two_groups() { let schema = MockSchema::from_yaml_file("common/multi_fact.yaml"); diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/base_query_options.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/base_query_options.rs index 092de5bff1982..3b091aadea29a 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/base_query_options.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/base_query_options.rs @@ -5,21 +5,18 @@ use std::rc::Rc; use cubenativeutils::CubeError; use typed_builder::TypedBuilder; -use crate::{ - cube_bridge::{ - base_query_options::{ - BaseQueryOptions, BaseQueryOptionsStatic, FilterItem, FilterValue, MaskedMemberItem, - OrderByItem, TimeDimension, - }, - base_tools::BaseTools, - evaluator::CubeEvaluator, - join_graph::JoinGraph, - join_hints::JoinHintItem, - options_member::OptionsMember, - security_context::SecurityContext, - subquery_join::SubqueryJoin, +use crate::cube_bridge::{ + base_query_options::{ + BaseQueryOptions, BaseQueryOptionsStatic, FilterItem, FilterValue, MaskedMemberItem, + OrderByItem, TimeDimension, }, - impl_static_data, + base_tools::BaseTools, + evaluator::CubeEvaluator, + join_graph::JoinGraph, + join_hints::JoinHintItem, + options_member::OptionsMember, + security_context::SecurityContext, + subquery_join::SubqueryJoin, }; /// Mock implementation of BaseQueryOptions for testing diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_case_switch_item.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_case_switch_item.rs index 709d29d233334..425e7599e0a0d 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_case_switch_item.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_case_switch_item.rs @@ -1,6 +1,5 @@ use crate::cube_bridge::case_switch_item::{CaseSwitchItem, CaseSwitchItemStatic}; use crate::cube_bridge::member_sql::MemberSql; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::MockMemberSql; use cubenativeutils::CubeError; use std::any::Any; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_cube_definition.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_cube_definition.rs index be8b7734bfcd3..740b2fb56635b 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_cube_definition.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_cube_definition.rs @@ -1,7 +1,6 @@ use crate::cube_bridge::cube_definition::{CubeDefinition, CubeDefinitionStatic}; use crate::cube_bridge::member_sql::MemberSql; use crate::cube_bridge::view_filter_definition::ViewFilterDefinition; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::{ MockJoinItemDefinition, MockMemberSql, MockViewFilterDefinition, }; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_dimension_definition.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_dimension_definition.rs index 068de8dd93862..7d0508afff40d 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_dimension_definition.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_dimension_definition.rs @@ -4,7 +4,6 @@ use crate::cube_bridge::geo_item::GeoItem; use crate::cube_bridge::member_sql::MemberSql; use crate::cube_bridge::multi_stage_filter::MultiStageFilterReferences; use crate::cube_bridge::timeshift_definition::TimeShiftDefinition; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::yaml::dimension::YamlDimensionDefinition; use crate::test_fixtures::cube_bridge::{ MockGeoItem, MockMemberSql, MockMultiStageFilterReferences, MockTimeShiftDefinition, diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_evaluator.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_evaluator.rs index ffd4d8e1e3fcd..2dfab35ef0b40 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_evaluator.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_evaluator.rs @@ -6,7 +6,6 @@ use crate::cube_bridge::measure_definition::MeasureDefinition; use crate::cube_bridge::member_sql::MemberSql; use crate::cube_bridge::pre_aggregation_description::PreAggregationDescription; use crate::cube_bridge::segment_definition::SegmentDefinition; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::mock_schema::MockSchema; use crate::test_fixtures::cube_bridge::{mock_compiled, MockJoinGraph}; use cubenativeutils::CubeError; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_expression_struct.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_expression_struct.rs index e31e136ed25fe..0c38400b3b13f 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_expression_struct.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_expression_struct.rs @@ -1,6 +1,5 @@ use crate::cube_bridge::member_expression::{ExpressionStruct, ExpressionStructStatic}; use crate::cube_bridge::struct_with_sql_member::StructWithSqlMember; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::MockStructWithSqlMember; use cubenativeutils::CubeError; use std::any::Any; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_granularity_definition.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_granularity_definition.rs index 43763e0d573c6..8fd31f7374922 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_granularity_definition.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_granularity_definition.rs @@ -2,7 +2,6 @@ use crate::cube_bridge::granularity_definition::{ GranularityDefinition, GranularityDefinitionStatic, }; use crate::cube_bridge::member_sql::MemberSql; -use crate::impl_static_data; use cubenativeutils::CubeError; use std::any::Any; use std::rc::Rc; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_join_definition.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_join_definition.rs index 118d2aa49c922..f70605bdddf7d 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_join_definition.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_join_definition.rs @@ -1,6 +1,5 @@ use crate::cube_bridge::join_definition::{JoinDefinition, JoinDefinitionStatic}; use crate::cube_bridge::join_item::JoinItem; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::MockJoinItem; use cubenativeutils::CubeError; use std::any::Any; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_join_item.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_join_item.rs index 5ee6e85c78a02..3510257237c44 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_join_item.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_join_item.rs @@ -1,6 +1,5 @@ use crate::cube_bridge::join_item::{JoinItem, JoinItemStatic}; use crate::cube_bridge::join_item_definition::JoinItemDefinition; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::MockJoinItemDefinition; use cubenativeutils::CubeError; use std::any::Any; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_join_item_definition.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_join_item_definition.rs index b207ebefa7c7a..a59c4abec029c 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_join_item_definition.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_join_item_definition.rs @@ -1,6 +1,5 @@ use crate::cube_bridge::join_item_definition::{JoinItemDefinition, JoinItemDefinitionStatic}; use crate::cube_bridge::member_sql::MemberSql; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::MockMemberSql; use cubenativeutils::CubeError; use std::any::Any; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_measure_definition.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_measure_definition.rs index 5e9ef880c22bc..5f771db983589 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_measure_definition.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_measure_definition.rs @@ -7,7 +7,6 @@ use crate::cube_bridge::member_sql::MemberSql; use crate::cube_bridge::multi_stage_filter::MultiStageFilterReferences; use crate::cube_bridge::multi_stage_grain::MultiStageGrainReferences; use crate::cube_bridge::struct_with_sql_member::StructWithSqlMember; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::yaml::measure::YamlMeasureDefinition; use crate::test_fixtures::cube_bridge::{ MockMemberOrderBy, MockMemberSql, MockMultiStageFilterReferences, diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_member_expression_definition.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_member_expression_definition.rs index a8fc5875d4ddc..e52ba62bf0a58 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_member_expression_definition.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_member_expression_definition.rs @@ -1,7 +1,6 @@ use crate::cube_bridge::member_expression::{ MemberExpressionDefinition, MemberExpressionDefinitionStatic, MemberExpressionExpressionDef, }; -use crate::impl_static_data; use cubenativeutils::CubeError; use std::any::Any; use std::rc::Rc; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_multi_stage_filter.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_multi_stage_filter.rs index ea9d5fe27f93d..9961d43af2216 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_multi_stage_filter.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_multi_stage_filter.rs @@ -2,7 +2,6 @@ use crate::cube_bridge::base_query_options::FilterItem as NativeFilterItem; use crate::cube_bridge::multi_stage_filter::{ MultiStageFilterReferences, MultiStageFilterReferencesStatic, }; -use crate::impl_static_data; use std::any::Any; use std::rc::Rc; use typed_builder::TypedBuilder; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_multi_stage_grain.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_multi_stage_grain.rs index f04081b2687a5..84758f95ce9e8 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_multi_stage_grain.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_multi_stage_grain.rs @@ -1,7 +1,6 @@ use crate::cube_bridge::multi_stage_grain::{ MultiStageGrainReferences, MultiStageGrainReferencesStatic, }; -use crate::impl_static_data; use std::any::Any; use std::rc::Rc; use typed_builder::TypedBuilder; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_pre_aggregation_description.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_pre_aggregation_description.rs index e6ace18588807..872a184db31fa 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_pre_aggregation_description.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_pre_aggregation_description.rs @@ -3,7 +3,6 @@ use crate::cube_bridge::pre_aggregation_description::{ PreAggregationDescription, PreAggregationDescriptionStatic, }; use crate::cube_bridge::pre_aggregation_time_dimension::PreAggregationTimeDimension; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::mock_pre_aggregation_time_dimension::MockPreAggregationTimeDimension; use cubenativeutils::CubeError; use std::any::Any; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_pre_aggregation_obj.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_pre_aggregation_obj.rs index 814e146107963..4e8b2cf9333f2 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_pre_aggregation_obj.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_pre_aggregation_obj.rs @@ -1,5 +1,4 @@ use crate::cube_bridge::pre_aggregation_obj::{PreAggregationObj, PreAggregationObjStatic}; -use crate::impl_static_data; use std::any::Any; use std::rc::Rc; use typed_builder::TypedBuilder; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_pre_aggregation_time_dimension.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_pre_aggregation_time_dimension.rs index 0b71aeff014f2..12cf8aed31166 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_pre_aggregation_time_dimension.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_pre_aggregation_time_dimension.rs @@ -2,7 +2,6 @@ use crate::cube_bridge::member_sql::MemberSql; use crate::cube_bridge::pre_aggregation_time_dimension::{ PreAggregationTimeDimension, PreAggregationTimeDimensionStatic, }; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::MockMemberSql; use cubenativeutils::CubeError; use std::any::Any; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_segment_definition.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_segment_definition.rs index c309365194098..d5f0f2b7f4edb 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_segment_definition.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_segment_definition.rs @@ -1,6 +1,5 @@ use crate::cube_bridge::member_sql::MemberSql; use crate::cube_bridge::segment_definition::{SegmentDefinition, SegmentDefinitionStatic}; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::yaml::segment::YamlSegmentDefinition; use crate::test_fixtures::cube_bridge::MockMemberSql; use cubenativeutils::CubeError; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_subquery_join.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_subquery_join.rs index 90974e9165bb2..9f90bcb8ed45f 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_subquery_join.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_subquery_join.rs @@ -1,6 +1,5 @@ use crate::cube_bridge::member_expression::MemberExpressionDefinition; use crate::cube_bridge::subquery_join::{SubqueryJoin, SubqueryJoinStatic}; -use crate::impl_static_data; use cubenativeutils::CubeError; use std::any::Any; use std::rc::Rc; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_timeshift_definition.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_timeshift_definition.rs index aaef5ad685e83..07fad6fc3854a 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_timeshift_definition.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_timeshift_definition.rs @@ -1,6 +1,5 @@ use crate::cube_bridge::member_sql::MemberSql; use crate::cube_bridge::timeshift_definition::{TimeShiftDefinition, TimeShiftDefinitionStatic}; -use crate::impl_static_data; use crate::test_fixtures::cube_bridge::yaml::timeshift::YamlTimeShiftDefinition; use crate::test_fixtures::cube_bridge::MockMemberSql; use cubenativeutils::CubeError; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_view_filter_definition.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_view_filter_definition.rs index 552b95b4b16c9..8b305d9ca382c 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_view_filter_definition.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/test_fixtures/cube_bridge/mock_view_filter_definition.rs @@ -1,7 +1,6 @@ use crate::cube_bridge::view_filter_definition::{ ViewFilterDefinition, ViewFilterDefinitionStatic, }; -use crate::impl_static_data; use std::any::Any; use std::rc::Rc; use typed_builder::TypedBuilder; diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/pre_aggregations/multi_fact.rs b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/pre_aggregations/multi_fact.rs index c9ff8fbc71b3d..3e191ba25e137 100644 --- a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/pre_aggregations/multi_fact.rs +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/pre_aggregations/multi_fact.rs @@ -304,6 +304,48 @@ async fn test_regular_plus_two_multiplied_separate_pre_aggs() { } } +#[tokio::test(flavor = "multi_thread")] +async fn test_unmultiplied_measure_rejects_multiplied_pre_agg( +) -> Result<(), cubenativeutils::CubeError> { + // Regression for b07edca: a query for an unmultiplied measure must not match + // a pre-agg that multiplies it. `orders_by_addr_street` groups `orders.count` + // by `addresses.street`, and the orders → customers → addresses path crosses + // a one_to_many join, so `orders.count` is multiplied there and stores a + // different value. A plain `orders.count` query (no addresses.street) must + // fall back to the unmultiplied `orders_totals`, not roll up the multiplied + // pre-agg. + let schema = MockSchema::from_yaml_file("common/integration_multi_fact_pre_aggs.yaml") + .only_pre_aggregations(&["orders_totals", "orders_by_addr_street"]); + let ctx = TestContext::new(schema)?; + + let query = indoc! {" + measures: + - orders.count + "}; + + let (_sql, pre_aggrs) = ctx.build_sql_with_used_pre_aggregations(query)?; + + let names: Vec<&str> = pre_aggrs.iter().map(|u| u.name().as_str()).collect(); + + assert_eq!( + pre_aggrs.len(), + 1, + "Expected exactly one pre-aggregation usage; got {:?}", + names + ); + assert_eq!( + pre_aggrs[0].name(), + "orders_totals", + "Expected unmultiplied orders_totals; multiplied orders_by_addr_street must be rejected; got {:?}", + names + ); + + if let Some(result) = ctx.try_execute(query, SEED).await { + insta::assert_snapshot!(result); + } + Ok(()) +} + // --- Filtered variants --- // Each test below uses the same query shape as its non-filtered counterpart // above but adds a filter on customers.name (not in projection) to verify diff --git a/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/pre_aggregations/snapshots/cubesqlplanner__tests__integration__pre_aggregations__multi_fact__unmultiplied_measure_rejects_multiplied_pre_agg.snap b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/pre_aggregations/snapshots/cubesqlplanner__tests__integration__pre_aggregations__multi_fact__unmultiplied_measure_rejects_multiplied_pre_agg.snap new file mode 100644 index 0000000000000..27f1872201a27 --- /dev/null +++ b/rust/cube/cubesqlplanner/cubesqlplanner/src/tests/integration/pre_aggregations/snapshots/cubesqlplanner__tests__integration__pre_aggregations__multi_fact__unmultiplied_measure_rejects_multiplied_pre_agg.snap @@ -0,0 +1,7 @@ +--- +source: cubesqlplanner/cubesqlplanner/src/tests/integration/pre_aggregations/multi_fact.rs +expression: result +--- +orders__count +------------- +8 From dc7fba933de93eac6c4fb31571ca3ddb3800b582 Mon Sep 17 00:00:00 2001 From: waralexrom <108349432+waralexrom@users.noreply.github.com> Date: Mon, 29 Jun 2026 18:01:29 +0200 Subject: [PATCH 2/3] perf(cubestore): worker-side group-by-limit hash-aggregate trim (#11144) --- rust/cubestore/.gitignore | 3 + rust/cubestore/Cargo.lock | 60 +- .../cubestore-sql-tests/src/tests.rs | 295 +++++++ rust/cubestore/cubestore/src/config/mod.rs | 72 +- .../group_by_limit_aggregate_stream.rs | 286 +++++++ .../group_by_limit_aggregate/mod.rs | 735 ++++++++++++++++++ .../cubestore/src/queryplanner/mod.rs | 1 + .../distributed_partial_aggregate.rs | 283 +++++-- .../src/queryplanner/optimizations/mod.rs | 39 +- .../cubestore/src/queryplanner/planning.rs | 93 ++- .../src/queryplanner/pretty_printers.rs | 11 + .../src/queryplanner/query_executor.rs | 13 +- rust/cubestore/cubestore/src/sql/mod.rs | 13 +- 13 files changed, 1773 insertions(+), 131 deletions(-) create mode 100644 rust/cubestore/cubestore/src/queryplanner/group_by_limit_aggregate/group_by_limit_aggregate_stream.rs create mode 100644 rust/cubestore/cubestore/src/queryplanner/group_by_limit_aggregate/mod.rs diff --git a/rust/cubestore/.gitignore b/rust/cubestore/.gitignore index 66d0436bd8f34..64f8a320fdced 100644 --- a/rust/cubestore/.gitignore +++ b/rust/cubestore/.gitignore @@ -10,3 +10,6 @@ cubestore/target cubesql/target cubestore-sql-tests/data/** cubestore/db-tmp +# RocksDB scratch dirs left by metastore unit tests (run from the crate root) +/cubestore/test-*-local/ +/cubestore/test-*-upstream/ diff --git a/rust/cubestore/Cargo.lock b/rust/cubestore/Cargo.lock index ecc797ed0081b..024a95de3afa0 100644 --- a/rust/cubestore/Cargo.lock +++ b/rust/cubestore/Cargo.lock @@ -1758,7 +1758,7 @@ checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] name = "datafusion" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "arrow-ipc", @@ -1811,7 +1811,7 @@ dependencies = [ [[package]] name = "datafusion-catalog" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "async-trait", @@ -1830,7 +1830,7 @@ dependencies = [ [[package]] name = "datafusion-catalog-listing" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "async-trait", @@ -1851,7 +1851,7 @@ dependencies = [ [[package]] name = "datafusion-common" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "ahash 0.8.11", "arrow", @@ -1874,7 +1874,7 @@ dependencies = [ [[package]] name = "datafusion-common-runtime" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "log", "tokio", @@ -1883,7 +1883,7 @@ dependencies = [ [[package]] name = "datafusion-datasource" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "async-compression 0.4.17", @@ -1916,12 +1916,12 @@ dependencies = [ [[package]] name = "datafusion-doc" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" [[package]] name = "datafusion-execution" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "dashmap", @@ -1941,7 +1941,7 @@ dependencies = [ [[package]] name = "datafusion-expr" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "chrono", @@ -1961,7 +1961,7 @@ dependencies = [ [[package]] name = "datafusion-expr-common" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "datafusion-common", @@ -1973,7 +1973,7 @@ dependencies = [ [[package]] name = "datafusion-functions" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "arrow-buffer", @@ -2001,7 +2001,7 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "ahash 0.8.11", "arrow", @@ -2021,7 +2021,7 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate-common" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "ahash 0.8.11", "arrow", @@ -2033,7 +2033,7 @@ dependencies = [ [[package]] name = "datafusion-functions-nested" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "arrow-ord", @@ -2053,7 +2053,7 @@ dependencies = [ [[package]] name = "datafusion-functions-table" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "async-trait", @@ -2068,7 +2068,7 @@ dependencies = [ [[package]] name = "datafusion-functions-window" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "datafusion-common", "datafusion-doc", @@ -2084,7 +2084,7 @@ dependencies = [ [[package]] name = "datafusion-functions-window-common" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "datafusion-common", "datafusion-physical-expr-common", @@ -2093,7 +2093,7 @@ dependencies = [ [[package]] name = "datafusion-macros" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "datafusion-expr", "quote", @@ -2103,7 +2103,7 @@ dependencies = [ [[package]] name = "datafusion-optimizer" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "chrono", @@ -2121,7 +2121,7 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "ahash 0.8.11", "arrow", @@ -2142,7 +2142,7 @@ dependencies = [ [[package]] name = "datafusion-physical-expr-common" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "ahash 0.8.11", "arrow", @@ -2155,7 +2155,7 @@ dependencies = [ [[package]] name = "datafusion-physical-optimizer" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "datafusion-common", @@ -2173,7 +2173,7 @@ dependencies = [ [[package]] name = "datafusion-physical-plan" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "ahash 0.8.11", "arrow", @@ -2205,7 +2205,7 @@ dependencies = [ [[package]] name = "datafusion-proto" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "chrono", @@ -2220,7 +2220,7 @@ dependencies = [ [[package]] name = "datafusion-proto-common" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "datafusion-common", @@ -2230,7 +2230,7 @@ dependencies = [ [[package]] name = "datafusion-sql" version = "46.0.1" -source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#dc9015e290adbeaff1da80c9c052219c50312f77" +source = "git+https://github.com/cube-js/arrow-datafusion?branch=cube-46.0.1#ea204976c12c057d7c315ae13040264258b23131" dependencies = [ "arrow", "bigdecimal 0.4.8", @@ -3676,7 +3676,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" dependencies = [ "cfg-if 1.0.0", - "windows-targets 0.52.4", + "windows-targets 0.48.5", ] [[package]] @@ -4977,7 +4977,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" dependencies = [ "anyhow", - "itertools 0.13.0", + "itertools 0.10.1", "proc-macro2", "quote", "syn 2.0.87", @@ -6815,8 +6815,8 @@ version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cfg-if 1.0.0", - "rand 0.8.5", + "cfg-if 0.1.10", + "rand 0.6.5", "static_assertions", ] diff --git a/rust/cubestore/cubestore-sql-tests/src/tests.rs b/rust/cubestore/cubestore-sql-tests/src/tests.rs index 43e2b02b966fd..d2b4f56e63389 100644 --- a/rust/cubestore/cubestore-sql-tests/src/tests.rs +++ b/rust/cubestore/cubestore-sql-tests/src/tests.rs @@ -155,6 +155,8 @@ pub fn sql_tests(prefix: &str) -> Vec<(&'static str, TestFn)> { t("planning_inplace_aggregate", planning_inplace_aggregate), t("planning_hints", planning_hints), t("planning_inplace_aggregate2", planning_inplace_aggregate2), + t("planning_topk_hash_aggregate", planning_topk_hash_aggregate), + t("topk_hash_aggregate_trim", topk_hash_aggregate_trim), t("topk_large_inputs", topk_large_inputs), t("partitioned_index", partitioned_index), t( @@ -331,6 +333,14 @@ pub fn sql_tests(prefix: &str) -> Vec<(&'static str, TestFn)> { "limit_pushdown_group_nonprefix_order", limit_pushdown_group_nonprefix_order, ), + t( + "limit_pushdown_group_null_appended", + limit_pushdown_group_null_appended, + ), + t( + "limit_pushdown_group_null_order_first", + limit_pushdown_group_null_order_first, + ), t("limit_pushdown_group_order", limit_pushdown_group_order), t( "limit_pushdown_group_where_order", @@ -425,7 +435,11 @@ lazy_static::lazy_static! { "global_aggregate_unique_key_keeps_merge", "limit_pushdown_group_having", "limit_pushdown_group_nonprefix_order", + "limit_pushdown_group_null_appended", + "limit_pushdown_group_null_order_first", "prefilter_chunks_shared_scan", + "planning_topk_hash_aggregate", + "topk_hash_aggregate_trim", ].into_iter().map(ToOwned::to_owned).collect(); } @@ -3244,6 +3258,195 @@ async fn planning_inplace_aggregate(service: Box) -> Result<(), C Ok(()) } +async fn planning_topk_hash_aggregate(service: Box) -> Result<(), CubeError> { + service.exec_query("CREATE SCHEMA s").await?; + service + .exec_query("CREATE TABLE s.Data(url text, day int, hits int)") + .await?; + service + .exec_query("CREATE TABLE s.D3(a int, b int, c int, h int)") + .await?; + + // GROUP BY a non-indexed column -> hash (Linear) partial aggregate; ORDER BY the group + // column with a LIMIT -> the worker partial aggregate is replaced by GroupByLimitAggregate. + let p = service + .plan_query("SELECT day, SUM(hits) FROM s.Data GROUP BY 1 ORDER BY 1 LIMIT 10") + .await?; + let pp = pp_phys_plan_ext(p.worker.as_ref(), &PPOptions::none()); + assert!( + pp.contains("GroupByLimitAggregate, k: 10, factor: 2,"), + "expected GroupByLimitAggregate on the worker, got:\n{}", + pp + ); + + // LIMIT + OFFSET -> k = limit + offset. + let p = service + .plan_query("SELECT day, SUM(hits) FROM s.Data GROUP BY 1 ORDER BY 1 LIMIT 10 OFFSET 5") + .await?; + let pp = pp_phys_plan_ext(p.worker.as_ref(), &PPOptions::none()); + assert!( + pp.contains("GroupByLimitAggregate, k: 15, factor: 2,"), + "expected k=15 (limit+offset), got:\n{}", + pp + ); + + // ORDER BY an aggregate (not a group-by column) -> no trim. + let p = service + .plan_query("SELECT day, SUM(hits) FROM s.Data GROUP BY 1 ORDER BY 2 DESC LIMIT 10") + .await?; + let pp = pp_phys_plan_ext(p.worker.as_ref(), &PPOptions::none()); + assert!( + !pp.contains("GroupByLimitAggregate"), + "did not expect GroupByLimitAggregate when ordering by an aggregate, got:\n{}", + pp + ); + + // No LIMIT -> no trim. + let p = service + .plan_query("SELECT day, SUM(hits) FROM s.Data GROUP BY 1 ORDER BY 1") + .await?; + let pp = pp_phys_plan_ext(p.worker.as_ref(), &PPOptions::none()); + assert!( + !pp.contains("GroupByLimitAggregate"), + "did not expect GroupByLimitAggregate without a limit, got:\n{}", + pp + ); + + // ORDER BY a proper SUBSET of GROUP BY (b out of b, c). The worker cut and the router sort must + // both use the total order T = [b, c]: the worker trim order carries the tie-break column c, and + // the router's global Sort is extended with c so its top-k matches the global top-k by T. + let p = service + .plan_query("SELECT b, c, SUM(h) FROM s.D3 GROUP BY 1, 2 ORDER BY 1 LIMIT 3") + .await?; + let worker_pp = pp_phys_plan_ext(p.worker.as_ref(), &PPOptions::none()); + assert!( + worker_pp.contains("GroupByLimitAggregate, k: 3, factor: 2,") + && worker_pp.contains("(0, SortOptions { descending: false, nulls_first: false })") + && worker_pp.contains("(1, SortOptions { descending: false, nulls_first: true })"), + "expected worker trim order [b, c] totalized, got:\n{}", + worker_pp + ); + let router_pp = pp_phys_plan_ext( + p.router.as_ref(), + &PPOptions { + show_sort_by: true, + ..PPOptions::none() + }, + ); + assert!( + router_pp.contains("b@0") && router_pp.contains("c@1"), + "expected router Sort extended with the tie-break column c, got:\n{}", + router_pp + ); + + // Bare LIMIT (no ORDER BY) on a non-indexed group column: the limit can't ride the index, so the + // worker still trims to the smallest groups by the full group key -- "any k" made deterministic. + // The full group key is the total order, all columns ascending nulls-first. + let p = service + .plan_query("SELECT day, SUM(hits) FROM s.Data GROUP BY 1 LIMIT 10") + .await?; + let pp = pp_phys_plan_ext(p.worker.as_ref(), &PPOptions::none()); + assert!( + pp.contains("GroupByLimitAggregate, k: 10, factor: 2,") + && pp.contains("(0, SortOptions { descending: false, nulls_first: true })"), + "expected GroupByLimitAggregate on a bare LIMIT, got:\n{}", + pp + ); + + // UNION ALL + bare LIMIT: the per-branch trim descriptor must survive the cluster-send pull-up + // over the union so the worker still trims above the union. + service + .exec_query("CREATE TABLE s.Data2(url text, day int, hits int)") + .await?; + let p = service + .plan_query( + "SELECT day, SUM(hits) FROM \ + (SELECT * FROM s.Data UNION ALL SELECT * FROM s.Data2) u GROUP BY 1 LIMIT 10", + ) + .await?; + let pp = pp_phys_plan_ext(p.worker.as_ref(), &PPOptions::none()); + assert!( + pp.contains("GroupByLimitAggregate, k: 10, factor: 2,") && pp.contains("Union"), + "expected GroupByLimitAggregate over the Union, got:\n{}", + pp + ); + + Ok(()) +} + +async fn topk_hash_aggregate_trim(service: Box) -> Result<(), CubeError> { + service.exec_query("CREATE SCHEMA s").await?; + service + .exec_query("CREATE TABLE s.Data(a int, b int, hits int)") + .await?; + // 12 distinct (a, b) groups, each with two rows so partial aggregation actually groups. + // With k=3 and factor=2 the trim activates (g=12 > 6) but the result must match a full + // top-k. ORDER BY a (a proper subset of GROUP BY a, b) exercises totalization: the worker + // breaks ties on a by b so the router still receives every needed partial state. + service + .exec_query( + "INSERT INTO s.Data(a, b, hits) VALUES \ + (1,1,10),(1,1,5),(1,2,1),(1,2,2),\ + (2,1,7),(2,1,3),(2,2,4),(2,2,6),\ + (3,1,8),(3,1,2),(3,2,9),(3,2,1),\ + (4,1,1),(4,1,1),(4,2,1),(4,2,1),\ + (5,1,1),(5,1,1),(5,2,1),(5,2,1),\ + (6,1,1),(6,1,1),(6,2,1),(6,2,1)", + ) + .await?; + + // ORDER BY a, b LIMIT 3 (ascending): smallest three groups by (a, b). + let r = service + .exec_query("SELECT a, b, SUM(hits) FROM s.Data GROUP BY 1, 2 ORDER BY 1, 2 LIMIT 3") + .await?; + assert_eq!(to_rows(&r), rows(&[(1, 1, 15), (1, 2, 3), (2, 1, 10)])); + + // ORDER BY a, b DESC LIMIT 3: largest three groups by (a, b). + let r = service + .exec_query( + "SELECT a, b, SUM(hits) FROM s.Data GROUP BY 1, 2 ORDER BY 1 DESC, 2 DESC LIMIT 3", + ) + .await?; + assert_eq!(to_rows(&r), rows(&[(6, 2, 2), (6, 1, 2), (5, 2, 2)])); + + // ORDER BY a only (a proper subset of GROUP BY a, b), LIMIT 2. The selected group SET is + // deterministic (both groups of a=1), but the intra-tie row order is not, so assert as a set. + // Each returned group must carry its complete sum regardless of cross-worker tie-breaking, + // which is what totalization (append b to the cut order) guarantees. + let r = service + .exec_query("SELECT a, b, SUM(hits) FROM s.Data GROUP BY 1, 2 ORDER BY 1 LIMIT 2") + .await?; + let got = to_rows(&r); + assert_eq!(got.len(), 2, "expected 2 rows, got: {:?}", got); + for expected in rows(&[(1, 1, 15), (1, 2, 3)]) { + assert!( + got.contains(&expected), + "missing {:?} in {:?}", + expected, + got + ); + } + + // Bare LIMIT 3 (no ORDER BY): the trim orders by the full group key, so "any 3" resolves to the + // 3 smallest by (a, b). The result order is unspecified, but the group SET and each group's full + // sum must be exact -- the latter guards against undercounting a group split across workers. + let r = service + .exec_query("SELECT a, b, SUM(hits) FROM s.Data GROUP BY 1, 2 LIMIT 3") + .await?; + let got = to_rows(&r); + assert_eq!(got.len(), 3, "expected 3 rows, got: {:?}", got); + for expected in rows(&[(1, 1, 15), (1, 2, 3), (2, 1, 10)]) { + assert!( + got.contains(&expected), + "missing {:?} in {:?}", + expected, + got + ); + } + + Ok(()) +} + async fn planning_hints(service: Box) -> Result<(), CubeError> { service.exec_query("CREATE SCHEMA s").await?; service @@ -9156,6 +9359,98 @@ async fn limit_pushdown_group_nonprefix_order( Ok(()) } +/// Multi-column GROUP BY where the appended (non-ORDER-BY) total-order column carries NULLs and the +/// group spans chunks. `GROUP BY b, c` is not the index prefix, so this is the hash trim path; the +/// worker cut and the router select both extend the order with the appended column `c`, and they must +/// agree on its NULL placement or the NULL group's partial states get dropped across chunks +/// (undercount). The NULL group's membership is fixed by `b` (uniquely smallest), so the assertion +/// does not depend on the tie order -- only on the sum being fully combined across all three chunks. +async fn limit_pushdown_group_null_appended(service: Box) -> Result<(), CubeError> { + service.exec_query("CREATE SCHEMA s").await?; + service + .exec_query("CREATE TABLE s.nag (a int, b int, c int, val int) INDEX bidx (a, b, c)") + .await?; + // Three chunks. The (b = 1, c = NULL) group appears in every chunk, so it spans all three and + // its sum must combine to 1110. Five distinct (b, c) groups so the trim engages (5 > factor*k). + service + .exec_query( + "INSERT INTO s.nag (a, b, c, val) VALUES \ + (1, 1, NULL, 10), (1, 2, 20, 1), (1, 3, 30, 1), (1, 4, 40, 1), (1, 5, 50, 1)", + ) + .await?; + service + .exec_query( + "INSERT INTO s.nag (a, b, c, val) VALUES \ + (1, 1, NULL, 100), (1, 2, 20, 1), (1, 3, 30, 1), (1, 4, 40, 1), (1, 5, 50, 1)", + ) + .await?; + service + .exec_query( + "INSERT INTO s.nag (a, b, c, val) VALUES \ + (1, 1, NULL, 1000), (1, 2, 20, 1), (1, 3, 30, 1), (1, 4, 40, 1), (1, 5, 50, 1)", + ) + .await?; + + // Smallest b is the NULL-c group; its sum must combine across all three chunks. + let r = service + .exec_query("SELECT b, c, sum(val) FROM s.nag GROUP BY b, c ORDER BY b LIMIT 1") + .await?; + assert_eq!( + to_rows(&r), + vec![vec![ + TableValue::Int(1), + TableValue::Null, + TableValue::Int(1110), + ]] + ); + Ok(()) +} + +/// Explicit `NULLS FIRST` on the ORDER BY column, contradicting the ASC default null placement. The +/// NULL group must be the single smallest under the query's own order, so `LIMIT 1` must return it. +/// `GROUP BY b` (b not the index prefix) routes through the hash trim path; the worker cut and the +/// router select must both rank the NULL group first, or the worker trims it away and the query +/// silently returns the wrong group. Pins that the total order honors the query's NULL placement +/// rather than deriving it from the sort direction alone. +async fn limit_pushdown_group_null_order_first( + service: Box, +) -> Result<(), CubeError> { + service.exec_query("CREATE SCHEMA s").await?; + service + .exec_query("CREATE TABLE s.nf (a int, b int, val int) INDEX bidx (a, b)") + .await?; + // Three chunks; the NULL-b group appears in each (under a different `a`), so it spans all three + // and its sum must combine to 1110. Five distinct b groups so the trim engages (5 > factor*k). + service + .exec_query( + "INSERT INTO s.nf (a, b, val) VALUES \ + (1, NULL, 10), (1, 2, 1), (1, 3, 1), (1, 4, 1), (1, 5, 1)", + ) + .await?; + service + .exec_query( + "INSERT INTO s.nf (a, b, val) VALUES \ + (2, NULL, 100), (2, 2, 1), (2, 3, 1), (2, 4, 1), (2, 5, 1)", + ) + .await?; + service + .exec_query( + "INSERT INTO s.nf (a, b, val) VALUES \ + (3, NULL, 1000), (3, 2, 1), (3, 3, 1), (3, 4, 1), (3, 5, 1)", + ) + .await?; + + // ASC NULLS FIRST: the NULL group ranks first, so LIMIT 1 must return it with its combined sum. + let r = service + .exec_query("SELECT b, sum(val) FROM s.nf GROUP BY b ORDER BY b ASC NULLS FIRST LIMIT 1") + .await?; + assert_eq!( + to_rows(&r), + vec![vec![TableValue::Null, TableValue::Int(1110)]] + ); + Ok(()) +} + async fn limit_pushdown_group_order(service: Box) -> Result<(), CubeError> { service.exec_query("CREATE SCHEMA foo").await?; diff --git a/rust/cubestore/cubestore/src/config/mod.rs b/rust/cubestore/cubestore/src/config/mod.rs index 5cba4c1222959..56604434c0a95 100644 --- a/rust/cubestore/cubestore/src/config/mod.rs +++ b/rust/cubestore/cubestore/src/config/mod.rs @@ -585,6 +585,20 @@ pub trait ConfigObj: DIService { /// streaming split never drops rows (the first child is the low catch-all, the last /// the high one), and the legacy per-chunk path performed no such metadata check. fn repartition_check_overlapping_children(&self) -> bool; + /// Factor `f` controlling when the worker-side partial hash aggregate trims its output to the + /// top-k groups. Trimming happens only when the number of local groups exceeds `f * k`, where + /// `k = limit + offset`. `0` disables the optimization. + fn group_by_limit_factor(&self) -> usize; + + /// When the worker group-by-limit hash trim is active, controls where the worker's hash table + /// lives: `false` (default) coalesces the partial aggregate's input to one partition (one hash + /// table per worker, "over merge"); `true` keeps the raw multi-partition input so it runs per + /// partition ("under merge"). + fn group_by_limit_per_partition(&self) -> bool; + + /// Replace the sort-preserving merge feeding a grouped Linear (hash) aggregate with a plain + /// partition coalesce (the hash aggregate ignores input order, so the per-row merge is wasted). + fn coalesce_under_hash_aggregate(&self) -> bool; fn allow_decimal128(&self) -> bool; @@ -745,6 +759,9 @@ pub struct ConfigObjImpl { pub repartition_merge_max_input_files: usize, pub repartition_merge_max_rows: u64, pub repartition_check_overlapping_children: bool, + pub group_by_limit_factor: usize, + pub group_by_limit_per_partition: bool, + pub coalesce_under_hash_aggregate: bool, pub allow_decimal128: bool, pub enable_remove_orphaned_remote_files: bool, pub enable_startup_warmup: bool, @@ -1087,6 +1104,18 @@ impl ConfigObj for ConfigObjImpl { self.repartition_check_overlapping_children } + fn group_by_limit_factor(&self) -> usize { + self.group_by_limit_factor + } + + fn group_by_limit_per_partition(&self) -> bool { + self.group_by_limit_per_partition + } + + fn coalesce_under_hash_aggregate(&self) -> bool { + self.coalesce_under_hash_aggregate + } + fn allow_decimal128(&self) -> bool { self.allow_decimal128 } @@ -1273,6 +1302,13 @@ fn env_bool(name: &str, default: bool) -> bool { .unwrap_or(default) } +/// Lenient boolean env read for opt-in toggles: only `1`/`true` enable it, anything else (including a +/// typo) is treated as off. Unlike [`env_bool`] it never panics -- a malformed value on a +/// performance flag must not take a node down on startup. +fn env_flag(name: &str) -> bool { + env::var(name).map_or(false, |v| v == "true" || v == "1") +} + pub fn env_parse(name: &str, default: T) -> T where T: FromStr, @@ -1281,6 +1317,30 @@ where env_optparse(name).unwrap_or(default) } +/// Lenient numeric env read for opt-in performance toggles: an unparseable value logs a warning and +/// falls back to the default instead of panicking, so a typo can't take a node down on startup. +pub fn env_parse_lenient(name: &str, default: T) -> T +where + T: FromStr, + T::Err: Display, +{ + match env::var(name) { + Ok(v) => match v.parse::() { + Ok(n) => n, + Err(e) => { + log::warn!( + "Ignoring environment variable '{}' with '{}' value: {}; using default", + name, + v, + e + ); + default + } + }, + Err(_) => default, + } +} + pub fn env_parse_duration(name: &str, default: T, max: Option, min: Option) -> T where T: FromStr + PartialOrd + Display, @@ -1783,6 +1843,9 @@ impl Config { "CUBESTORE_REPARTITION_CHECK_OVERLAPPING_CHILDREN", false, ), + group_by_limit_factor: env_parse_lenient("CUBESTORE_GROUP_BY_LIMIT_FACTOR", 0), + group_by_limit_per_partition: env_flag("CUBESTORE_GROUP_BY_LIMIT_PER_PARTITION"), + coalesce_under_hash_aggregate: env_flag("CUBESTORE_COALESCE_UNDER_HASH_AGGREGATE"), allow_decimal128: env_bool("CUBESTORE_ALLOW_DECIMAL128", false), enable_remove_orphaned_remote_files: env_bool( "CUBESTORE_ENABLE_REMOVE_ORPHANED_REMOTE_FILES", @@ -2039,6 +2102,9 @@ impl Config { repartition_merge_max_input_files: 50, repartition_merge_max_rows: 4_000_000, repartition_check_overlapping_children: false, + group_by_limit_factor: 2, + group_by_limit_per_partition: false, + coalesce_under_hash_aggregate: false, allow_decimal128: false, enable_remove_orphaned_remote_files: false, enable_startup_warmup: true, @@ -2734,10 +2800,6 @@ impl Config { self.injector .register_typed_with_default::(async move |i| { - let push_partial_aggregate_below_merge = i - .get_service_typed::() - .await - .push_partial_aggregate_below_merge_enabled(); QueryExecutorImpl::new( i.get_service_typed::() .await @@ -2745,7 +2807,7 @@ impl Config { .clone(), i.get_service_typed().await, i.get_service_typed().await, - push_partial_aggregate_below_merge, + i.get_service_typed::().await, ) }) .await; diff --git a/rust/cubestore/cubestore/src/queryplanner/group_by_limit_aggregate/group_by_limit_aggregate_stream.rs b/rust/cubestore/cubestore/src/queryplanner/group_by_limit_aggregate/group_by_limit_aggregate_stream.rs new file mode 100644 index 0000000000000..707b55e889359 --- /dev/null +++ b/rust/cubestore/cubestore/src/queryplanner/group_by_limit_aggregate/group_by_limit_aggregate_stream.rs @@ -0,0 +1,286 @@ +use datafusion::arrow::array::{ArrayRef, AsArray, RecordBatch}; +use datafusion::arrow::compute::{lexsort_to_indices, take, SortColumn, SortOptions}; +use datafusion::arrow::datatypes::SchemaRef; +use datafusion::dfschema::internal_err; +use datafusion::error::Result as DFResult; +use datafusion::execution::{RecordBatchStream, TaskContext}; +use datafusion::logical_expr::{EmitTo, GroupsAccumulator}; +use datafusion::physical_expr::GroupsAccumulatorAdapter; +use datafusion::physical_plan::aggregates::group_values::{new_group_values, GroupValues}; +use datafusion::physical_plan::aggregates::order::GroupOrdering; +use datafusion::physical_plan::aggregates::PhysicalGroupBy; +use datafusion::physical_plan::udaf::AggregateFunctionExpr; +use datafusion::physical_plan::{ExecutionPlan, PhysicalExpr, SendableRecordBatchStream}; +use futures::ready; +use futures::stream::{Stream, StreamExt}; +use std::sync::Arc; +use std::task::{Context, Poll}; + +use super::GroupByLimitAggregateExec; + +enum ExecutionState { + ReadingInput, + ProducingOutput(RecordBatch), + Done, +} + +pub(crate) struct GroupByLimitAggregateStream { + schema: SchemaRef, + input: SendableRecordBatchStream, + aggregate_arguments: Vec>>, + filter_expressions: Vec>>, + group_by: PhysicalGroupBy, + batch_size: usize, + exec_state: ExecutionState, + input_done: bool, + accumulators: Vec>, + group_values: Box, + current_group_indices: Vec, + k: usize, + factor: usize, + order: Vec<(usize, SortOptions)>, +} + +impl GroupByLimitAggregateStream { + pub fn new( + agg: &GroupByLimitAggregateExec, + context: Arc, + partition: usize, + ) -> DFResult { + let agg_schema = Arc::clone(&agg.schema()); + let agg_group_by = agg.group_expr().clone(); + let agg_filter_expr = agg.filter_expr().to_vec(); + + let batch_size = context.session_config().batch_size(); + let input = agg.input().execute(partition, Arc::clone(&context))?; + + let aggregate_arguments = aggregate_expressions(agg.aggr_expr())?; + + let accumulators: Vec<_> = agg + .aggr_expr() + .iter() + .map(create_group_accumulator) + .collect::>()?; + + let group_schema = agg_group_by.group_schema(&agg.input().schema())?; + let group_values = new_group_values(group_schema, &GroupOrdering::None)?; + + Ok(GroupByLimitAggregateStream { + schema: agg_schema, + input, + aggregate_arguments, + filter_expressions: agg_filter_expr, + group_by: agg_group_by, + batch_size, + exec_state: ExecutionState::ReadingInput, + input_done: false, + accumulators, + group_values, + current_group_indices: Vec::with_capacity(batch_size), + k: agg.k(), + factor: agg.factor(), + order: agg.order().to_vec(), + }) + } +} + +impl Stream for GroupByLimitAggregateStream { + type Item = DFResult; + + fn poll_next( + mut self: std::pin::Pin<&mut Self>, + cx: &mut Context<'_>, + ) -> Poll> { + loop { + match &self.exec_state { + ExecutionState::ReadingInput => match ready!(self.input.poll_next_unpin(cx)) { + Some(Ok(batch)) => { + if let Err(e) = self.group_aggregate_batch(batch) { + return Poll::Ready(Some(Err(e))); + } + } + Some(Err(e)) => return Poll::Ready(Some(Err(e))), + // Input exhausted: emit the whole group table at once, then trim to top-k. + None => { + self.input_done = true; + match self.emit_all_trimmed() { + Ok(Some(batch)) => { + self.exec_state = ExecutionState::ProducingOutput(batch) + } + Ok(None) => self.exec_state = ExecutionState::Done, + Err(e) => return Poll::Ready(Some(Err(e))), + } + } + }, + + ExecutionState::ProducingOutput(batch) => { + let batch = batch.clone(); + let size = self.batch_size; + let (next_state, output) = if batch.num_rows() <= size { + (ExecutionState::Done, batch) + } else { + let remaining = batch.slice(size, batch.num_rows() - size); + let output = batch.slice(0, size); + (ExecutionState::ProducingOutput(remaining), output) + }; + self.exec_state = next_state; + return Poll::Ready(Some(Ok(output))); + } + + ExecutionState::Done => return Poll::Ready(None), + } + } + } +} + +impl RecordBatchStream for GroupByLimitAggregateStream { + fn schema(&self) -> SchemaRef { + Arc::clone(&self.schema) + } +} + +impl GroupByLimitAggregateStream { + fn group_aggregate_batch(&mut self, batch: RecordBatch) -> DFResult<()> { + let group_by_values = evaluate_group_by(&self.group_by, &batch)?; + let input_values = evaluate_many(&self.aggregate_arguments, &batch)?; + let filter_values = evaluate_optional(&self.filter_expressions, &batch)?; + + // Grouping sets are rejected by try_new_from_partial, so there is exactly one group value. + debug_assert_eq!(group_by_values.len(), 1, "Exactly 1 group value required"); + self.group_values + .intern(&group_by_values[0], &mut self.current_group_indices)?; + let group_indices = &self.current_group_indices; + let total_num_groups = self.group_values.len(); + + for ((acc, values), opt_filter) in self + .accumulators + .iter_mut() + .zip(input_values.iter()) + .zip(filter_values.iter()) + { + let opt_filter = opt_filter.as_ref().map(|filter| filter.as_boolean()); + acc.update_batch(values, group_indices, opt_filter, total_num_groups)?; + } + Ok(()) + } + + /// Build the partial-state batch for all groups, then keep only the `k` smallest by the total + /// order when the number of groups exceeds `factor * k`. + fn emit_all_trimmed(&mut self) -> DFResult> { + if self.group_values.is_empty() { + return Ok(None); + } + let mut columns = self.group_values.emit(EmitTo::All)?; + for acc in &mut self.accumulators { + columns.extend(acc.state(EmitTo::All)?); + } + let batch = RecordBatch::try_new(Arc::clone(&self.schema), columns)?; + Ok(Some(self.trim_top_k(batch)?)) + } + + fn trim_top_k(&self, batch: RecordBatch) -> DFResult { + let g = batch.num_rows(); + // `factor == 0` means "no trimming" (mirrors the guard in `statistics`); the exec is only + // built with `factor > 0` today, so this is defensive. + if self.k == 0 || self.factor == 0 || g <= self.factor.saturating_mul(self.k) { + return Ok(batch); + } + let sort_columns: Vec = self + .order + .iter() + .map(|(idx, options)| SortColumn { + values: Arc::clone(batch.column(*idx)), + options: Some(*options), + }) + .collect(); + let indices = lexsort_to_indices(&sort_columns, Some(self.k))?; + let columns = batch + .columns() + .iter() + .map(|c| take(c.as_ref(), &indices, None)) + .collect::, _>>()?; + Ok(RecordBatch::try_new(batch.schema(), columns)?) + } +} + +/// Partial-aggregate argument expressions, one vec per aggregate. Mirrors DataFusion's private +/// `aggregate_expressions` for `AggregateMode::Partial` only — the Final-mode column offset that +/// DataFusion's version takes is not needed here, so it is omitted. +fn aggregate_expressions( + aggr_expr: &[Arc], +) -> DFResult>>> { + Ok(aggr_expr + .iter() + .map(|agg| { + let mut result = agg.expressions(); + if let Some(ordering_req) = agg.order_bys() { + result.extend(ordering_req.iter().map(|item| Arc::clone(&item.expr))); + } + result + }) + .collect()) +} + +fn create_group_accumulator( + agg_expr: &Arc, +) -> DFResult> { + if agg_expr.groups_accumulator_supported() { + agg_expr.create_groups_accumulator() + } else { + let agg_expr_captured = Arc::clone(agg_expr); + let factory = move || agg_expr_captured.create_accumulator(); + Ok(Box::new(GroupsAccumulatorAdapter::new(factory))) + } +} + +fn evaluate(expr: &[Arc], batch: &RecordBatch) -> DFResult> { + expr.iter() + .map(|expr| { + expr.evaluate(batch) + .and_then(|v| v.into_array(batch.num_rows())) + }) + .collect() +} + +fn evaluate_many( + expr: &[Vec>], + batch: &RecordBatch, +) -> DFResult>> { + expr.iter().map(|expr| evaluate(expr, batch)).collect() +} + +fn evaluate_optional( + expr: &[Option>], + batch: &RecordBatch, +) -> DFResult>> { + expr.iter() + .map(|expr| { + expr.as_ref() + .map(|expr| { + expr.evaluate(batch) + .and_then(|v| v.into_array(batch.num_rows())) + }) + .transpose() + }) + .collect() +} + +fn evaluate_group_by( + group_by: &PhysicalGroupBy, + batch: &RecordBatch, +) -> DFResult>> { + let exprs: Vec = group_by + .expr() + .iter() + .map(|(expr, _)| { + let value = expr.evaluate(batch)?; + value.into_array(batch.num_rows()) + }) + .collect::>>()?; + + if !group_by.is_single() { + return internal_err!("GroupByLimitAggregate does not support grouping sets"); + } + + Ok(vec![exprs]) +} diff --git a/rust/cubestore/cubestore/src/queryplanner/group_by_limit_aggregate/mod.rs b/rust/cubestore/cubestore/src/queryplanner/group_by_limit_aggregate/mod.rs new file mode 100644 index 0000000000000..bd5a937239bc9 --- /dev/null +++ b/rust/cubestore/cubestore/src/queryplanner/group_by_limit_aggregate/mod.rs @@ -0,0 +1,735 @@ +mod group_by_limit_aggregate_stream; + +use datafusion::arrow::compute::SortOptions; +use datafusion::arrow::datatypes::SchemaRef; +use datafusion::common::stats::Precision; +use datafusion::common::Statistics; +use datafusion::error::Result as DFResult; +use datafusion::execution::TaskContext; +use datafusion::physical_expr::aggregate::AggregateFunctionExpr; +use datafusion::physical_expr::{Distribution, LexRequirement}; +use datafusion::physical_plan::execution_plan::CardinalityEffect; +use datafusion::physical_plan::metrics::MetricsSet; +use datafusion::physical_plan::{aggregates::*, InputOrderMode}; +use datafusion::physical_plan::{ + DisplayAs, DisplayFormatType, ExecutionPlan, ExecutionPlanProperties, PhysicalExpr, + PlanProperties, SendableRecordBatchStream, +}; +use std::any::Any; +use std::fmt::Debug; +use std::sync::Arc; + +/// Worker-side partial hash aggregate that trims its output to the top-k groups by a total order, +/// so far fewer partial-state rows cross the network to the router's Final aggregate. +/// +/// This is a custom copy of DataFusion's partial hash aggregate (it reuses DF's `GroupValues` and +/// `GroupsAccumulator` building blocks but owns the consume/emit loop), so the only change required +/// in the DataFusion fork is making `new_group_values` public. The aggregation builds the whole +/// group table and, at the single final emit, keeps only the `k` smallest groups by `order` when +/// the number of groups exceeds `factor * k`; otherwise it emits all groups unchanged. +/// +/// `order` is a TOTAL order over groups (ORDER BY columns followed by the remaining group-by +/// columns), expressed as `(partial-output column index, sort options)`. A total order is required +/// for correctness: the same group key can live on multiple workers, and a consistent cut across +/// workers guarantees every partial state the router selects reaches it. +#[derive(Debug, Clone)] +pub struct GroupByLimitAggregateExec { + group_by: PhysicalGroupBy, + aggr_expr: Vec>, + filter_expr: Vec>>, + pub input: Arc, + /// Partial-aggregate output schema (group columns followed by accumulator state columns). + schema: SchemaRef, + input_schema: SchemaRef, + cache: PlanProperties, + /// Fetch count, `k = limit + offset`. + k: usize, + /// Only trim when the number of local groups exceeds `factor * k`. + factor: usize, + /// Total order over the partial output columns. + order: Vec<(usize, SortOptions)>, +} + +impl GroupByLimitAggregateExec { + /// Build a `GroupByLimitAggregateExec` from a partial hash `AggregateExec`, or `None` if it is not a + /// single-group-by partial aggregate (grouping sets and non-partial modes are not supported). + pub fn try_new_from_partial( + aggregate: &AggregateExec, + k: usize, + factor: usize, + order: Vec<(usize, SortOptions)>, + ) -> Option { + if *aggregate.mode() != AggregateMode::Partial { + return None; + } + // Sorted-prefix aggregates are handled by InlineAggregateExec; this targets the hash path. + if matches!(aggregate.input_order_mode(), InputOrderMode::Sorted) { + return None; + } + let group_by = aggregate.group_expr().clone(); + if !group_by.is_single() { + return None; + } + // A global aggregate (no GROUP BY) has zero group columns. `GroupValues` can't be built over + // an empty schema -- `intern` indexes column 0 and panics -- and such aggregates need no + // trimming, so leave them to DataFusion. + if group_by.expr().is_empty() { + return None; + } + let input = aggregate.input().clone(); + // A partial aggregate preserves its input's partitioning (it runs once per input partition). + // Derive the output partitioning from the input rather than copying the wrapped aggregate's + // cached value, which can be stale: a later pass may swap our input for one with a different + // partition count via `with_new_children` without the cache following, and a too-low count + // makes the parent coalesce read only some partitions and silently drop the rest. + let cache = aggregate + .cache() + .clone() + .with_partitioning(input.output_partitioning().clone()); + Some(Self { + group_by, + aggr_expr: aggregate.aggr_expr().to_vec(), + filter_expr: aggregate.filter_expr().to_vec(), + input, + schema: aggregate.schema().clone(), + input_schema: aggregate.input_schema().clone(), + cache, + k, + factor, + order, + }) + } + + pub fn k(&self) -> usize { + self.k + } + + pub fn factor(&self) -> usize { + self.factor + } + + pub fn order(&self) -> &[(usize, SortOptions)] { + &self.order + } + + pub fn aggr_expr(&self) -> &[Arc] { + &self.aggr_expr + } + + pub fn filter_expr(&self) -> &[Option>] { + &self.filter_expr + } + + pub fn input(&self) -> &Arc { + &self.input + } + + pub fn group_expr(&self) -> &PhysicalGroupBy { + &self.group_by + } +} + +impl DisplayAs for GroupByLimitAggregateExec { + fn fmt_as(&self, t: DisplayFormatType, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match t { + DisplayFormatType::Default | DisplayFormatType::Verbose => { + write!( + f, + "GroupByLimitAggregateExec: k={}, factor={}, order={:?}", + self.k, self.factor, self.order + )?; + } + } + Ok(()) + } +} + +impl ExecutionPlan for GroupByLimitAggregateExec { + fn name(&self) -> &'static str { + "GroupByLimitAggregateExec" + } + + fn as_any(&self) -> &dyn Any { + self + } + + fn properties(&self) -> &PlanProperties { + &self.cache + } + + fn required_input_distribution(&self) -> Vec { + vec![Distribution::UnspecifiedDistribution] + } + + fn required_input_ordering(&self) -> Vec> { + vec![None] + } + + fn maintains_input_order(&self) -> Vec { + vec![false] + } + + fn children(&self) -> Vec<&Arc> { + vec![&self.input] + } + + fn with_new_children( + self: Arc, + children: Vec>, + ) -> DFResult> { + let input = children[0].clone(); + // Track the (possibly changed) input's partitioning; a partial aggregate preserves it. + let cache = self + .cache + .clone() + .with_partitioning(input.output_partitioning().clone()); + Ok(Arc::new(Self { + group_by: self.group_by.clone(), + aggr_expr: self.aggr_expr.clone(), + filter_expr: self.filter_expr.clone(), + input, + schema: self.schema.clone(), + input_schema: self.input_schema.clone(), + cache, + k: self.k, + factor: self.factor, + order: self.order.clone(), + })) + } + + fn execute( + &self, + partition: usize, + context: Arc, + ) -> DFResult { + let stream = group_by_limit_aggregate_stream::GroupByLimitAggregateStream::new( + self, context, partition, + )?; + Ok(Box::pin(stream)) + } + + fn metrics(&self) -> Option { + None + } + + fn statistics(&self) -> DFResult { + // The trim keeps at most `factor * k` groups per output partition, so the output is bounded + // by that and by the input row count. Report it (inexact) instead of Absent, which makes + // downstream planners bail. `factor` is always > 0 here (this exec is only built when + // trimming is enabled), but guard anyway. + let input_rows = self.input.statistics()?.num_rows; + let num_rows = if self.factor == 0 { + input_rows + } else { + let parts = self.cache.output_partitioning().partition_count().max(1); + let cap = self.factor.saturating_mul(self.k).saturating_mul(parts); + match input_rows { + Precision::Exact(n) | Precision::Inexact(n) => Precision::Inexact(n.min(cap)), + Precision::Absent => Precision::Inexact(cap), + } + }; + Ok(Statistics { + num_rows, + column_statistics: Statistics::unknown_column(&self.schema), + total_byte_size: Precision::Absent, + }) + } + + fn cardinality_effect(&self) -> CardinalityEffect { + CardinalityEffect::LowerEqual + } +} + +#[cfg(test)] +mod tests { + use super::*; + use datafusion::arrow::array::{Array, Int64Array, RecordBatch, StringArray}; + use datafusion::arrow::datatypes::{DataType, Field, Schema, SchemaRef}; + use datafusion::functions_aggregate::sum::sum_udaf; + use datafusion::physical_expr::aggregate::AggregateExprBuilder; + use datafusion::physical_expr::expressions::col; + use datafusion::physical_plan::{collect, ExecutionPlanProperties}; + use datafusion_datasource::memory::MemorySourceConfig; + use datafusion_datasource::source::DataSourceExec; + use std::collections::HashSet; + + fn input_schema() -> SchemaRef { + Arc::new(Schema::new(vec![ + Field::new("g0", DataType::Utf8, true), + Field::new("g1", DataType::Int64, true), + Field::new("v", DataType::Int64, false), + ])) + } + + /// `n` distinct (g0, g1) combos, each emitted twice in two different batches; every 7th combo + /// uses a NULL g1 to exercise null grouping. `v = 1` for every row, so the correct result is `n` + /// groups with `sum(v) = 2` each. + fn make_batches(n: usize, batch_rows: usize) -> Vec { + let schema = input_schema(); + let mut g0: Vec> = Vec::new(); + let mut g1: Vec> = Vec::new(); + for pass in 0..2 { + // Reverse one pass so the same combo lands in a different batch than the other pass. + let iter: Box> = if pass == 0 { + Box::new(0..n) + } else { + Box::new((0..n).rev()) + }; + for i in iter { + // g0 is unique per combo, so each (g0, g1) pair is distinct regardless of g1; g1 + // carries NULLs to exercise null grouping in the multi-column GroupValues path. + g0.push(Some(format!("a{}", i))); + g1.push(if i % 7 == 0 { + None + } else { + Some((i % 100) as i64) + }); + } + } + let total = g0.len(); + let mut batches = Vec::new(); + let mut start = 0; + while start < total { + let end = (start + batch_rows).min(total); + let s = StringArray::from(g0[start..end].to_vec()); + let l = Int64Array::from(g1[start..end].to_vec()); + let v = Int64Array::from(vec![1i64; end - start]); + batches.push( + RecordBatch::try_new(schema.clone(), vec![Arc::new(s), Arc::new(l), Arc::new(v)]) + .unwrap(), + ); + start = end; + } + batches + } + + fn partial_aggregate(input: Arc) -> AggregateExec { + let schema = input.schema(); + let group_by = PhysicalGroupBy::new_single(vec![ + (col("g0", &schema).unwrap(), "g0".to_string()), + (col("g1", &schema).unwrap(), "g1".to_string()), + ]); + let sum = AggregateExprBuilder::new(sum_udaf(), vec![col("v", &schema).unwrap()]) + .schema(schema.clone()) + .alias("sum_v") + .build() + .unwrap(); + AggregateExec::try_new( + AggregateMode::Partial, + group_by, + vec![Arc::new(sum)], + vec![None], + input, + schema, + ) + .unwrap() + } + + fn distinct_group_rows(batches: &[RecordBatch]) -> usize { + let mut seen: HashSet<(Option, Option)> = HashSet::new(); + for b in batches { + let g0 = b.column(0).as_any().downcast_ref::().unwrap(); + let g1 = b.column(1).as_any().downcast_ref::().unwrap(); + for r in 0..b.num_rows() { + let k0 = if g0.is_null(r) { + None + } else { + Some(g0.value(r).to_string()) + }; + let k1 = if g1.is_null(r) { + None + } else { + Some(g1.value(r)) + }; + seen.insert((k0, k1)); + } + } + seen.len() + } + + /// The no-trim (`k = 0`) partial path must group exactly like DataFusion's stock partial: every + /// distinct group present in the input must appear exactly once in the partial output, across + /// many input batches and an output larger than `batch_size`. Reproduces the multi-batch + /// undercount seen when routing the full hash aggregate through this exec. + #[tokio::test] + async fn no_trim_partial_emits_every_group() { + let n = 20_000; + let batches = make_batches(n, 4096); + let expected_groups = distinct_group_rows(&batches); + assert_eq!(expected_groups, n, "test setup: combos must be distinct"); + + let source = MemorySourceConfig::try_new(&vec![batches], input_schema(), None).unwrap(); + let input: Arc = Arc::new(DataSourceExec::new(Arc::new(source))); + let partial = partial_aggregate(input); + + let exec = GroupByLimitAggregateExec::try_new_from_partial(&partial, 0, 0, Vec::new()) + .expect("partial hash aggregate should be wrappable"); + + let ctx = Arc::new(TaskContext::default()); + let out = collect(Arc::new(exec), ctx).await.unwrap(); + + let total_rows: usize = out.iter().map(|b| b.num_rows()).sum(); + let distinct = distinct_group_rows(&out); + assert_eq!( + distinct, n, + "exec emitted {distinct} distinct groups, expected {n}" + ); + assert_eq!( + total_rows, n, + "exec emitted {total_rows} partial rows for {n} distinct groups (duplicate group keys in partial output)" + ); + } + + /// Our partial output fed into DataFusion's `Final` aggregate (as the router does) must still + /// yield every group. Reproduces the distributed undercount end-to-end without the cluster. + #[tokio::test] + async fn no_trim_partial_then_final_emits_every_group() { + let n = 20_000; + let batches = make_batches(n, 4096); + + let source = MemorySourceConfig::try_new(&vec![batches], input_schema(), None).unwrap(); + let input: Arc = Arc::new(DataSourceExec::new(Arc::new(source))); + let partial = partial_aggregate(input); + let aggr_expr = partial.aggr_expr().to_vec(); + + let exec: Arc = Arc::new( + GroupByLimitAggregateExec::try_new_from_partial(&partial, 0, 0, Vec::new()).unwrap(), + ); + + let partial_schema = exec.schema(); + let final_group_by = PhysicalGroupBy::new_single(vec![ + (col("g0", &partial_schema).unwrap(), "g0".to_string()), + (col("g1", &partial_schema).unwrap(), "g1".to_string()), + ]); + let final_agg = AggregateExec::try_new( + AggregateMode::Final, + final_group_by, + aggr_expr, + vec![None], + exec, + partial_schema, + ) + .unwrap(); + + let ctx = Arc::new(TaskContext::default()); + let out = collect(Arc::new(final_agg), ctx).await.unwrap(); + + let total_rows: usize = out.iter().map(|b| b.num_rows()).sum(); + let distinct = distinct_group_rows(&out); + assert_eq!( + distinct, n, + "final emitted {distinct} distinct groups, expected {n}" + ); + assert_eq!( + total_rows, n, + "final emitted {total_rows} rows, expected {n}" + ); + } + + /// A partial aggregate preserves its input's partitioning. If our exec keeps a stale + /// single-partition `cache` after `with_new_children` swaps in a multi-partition input, the + /// parent `CoalescePartitions` executes only partition 0 and silently drops the rest -- the + /// distributed undercount we hit on real data. Build the exec over a 1-partition input (so its + /// cache says 1), re-child it onto a 3-partition input, and require both the reported + /// partitioning and the aggregated rows to reflect all 3 partitions. + #[tokio::test] + async fn output_partitioning_follows_rechilded_input() { + use datafusion::physical_plan::coalesce_partitions::CoalescePartitionsExec; + + let n = 5_000; + let one_part = + MemorySourceConfig::try_new(&vec![make_batches(n, 4096)], input_schema(), None) + .unwrap(); + let one_input: Arc = Arc::new(DataSourceExec::new(Arc::new(one_part))); + let partial = partial_aggregate(one_input); + let aggr_expr = partial.aggr_expr().to_vec(); + let exec: Arc = Arc::new( + GroupByLimitAggregateExec::try_new_from_partial(&partial, 0, 0, Vec::new()).unwrap(), + ); + assert_eq!(exec.output_partitioning().partition_count(), 1); + + // Re-child onto a 3-partition input (same schema), as a later physical-plan pass would. + let three_parts: Vec> = (0..3).map(|_| make_batches(n, 4096)).collect(); + let three = MemorySourceConfig::try_new(&three_parts, input_schema(), None).unwrap(); + let three_input: Arc = Arc::new(DataSourceExec::new(Arc::new(three))); + let exec3 = exec.with_new_children(vec![three_input]).unwrap(); + assert_eq!( + exec3.output_partitioning().partition_count(), + 3, + "exec must report its re-childed input's partition count, not a stale 1" + ); + + // End-to-end: coalesce + final must see every partition's rows. + let coalesced: Arc = Arc::new(CoalescePartitionsExec::new(exec3)); + let pschema = coalesced.schema(); + let final_gb = PhysicalGroupBy::new_single(vec![ + (col("g0", &pschema).unwrap(), "g0".to_string()), + (col("g1", &pschema).unwrap(), "g1".to_string()), + ]); + let final_agg = AggregateExec::try_new( + AggregateMode::Final, + final_gb, + aggr_expr, + vec![None], + coalesced, + pschema, + ) + .unwrap(); + let out = collect(Arc::new(final_agg), Arc::new(TaskContext::default())) + .await + .unwrap(); + let distinct = distinct_group_rows(&out); + let total_v: i64 = out + .iter() + .map(|b| { + let s = b.column(2).as_any().downcast_ref::().unwrap(); + (0..s.len()).map(|i| s.value(i)).sum::() + }) + .sum(); + assert_eq!( + distinct, n, + "all {n} groups must survive across 3 partitions" + ); + // make_batches emits each combo twice; 3 partitions -> 6 rows per group. + assert_eq!( + total_v as usize, + 6 * n, + "all rows from all 3 partitions must be aggregated" + ); + } + + /// Real-data shape: a high-cardinality `Float64` group column (like `contrib`) at ~400k groups, + /// fed partial -> final. Floats route through the same multi-column `GroupValues` as strings, but + /// at this scale across many input batches; reproduces (or rules out) the on-cluster undercount. + #[tokio::test] + async fn no_trim_float_high_cardinality_partial_then_final() { + use datafusion::arrow::array::Float64Array; + + let n: usize = 410_000; + let batch_rows = 8192; + let schema = Arc::new(Schema::new(vec![ + Field::new("f", DataType::Float64, true), + Field::new("g", DataType::Utf8, true), + Field::new("v", DataType::Int64, false), + ])); + + // n distinct (f, g) combos, each twice (forward + reversed pass) so duplicates land in + // different batches; every 9th combo carries NULL f. + let mut f: Vec> = Vec::new(); + let mut g: Vec> = Vec::new(); + for pass in 0..2 { + let iter: Box> = if pass == 0 { + Box::new(0..n) + } else { + Box::new((0..n).rev()) + }; + for i in iter { + f.push(if i % 9 == 0 { + None + } else { + Some(i as f64 * 0.01) + }); + g.push(Some(format!("g{}", i))); + } + } + let total = f.len(); + let mut batches = Vec::new(); + let mut start = 0; + while start < total { + let end = (start + batch_rows).min(total); + batches.push( + RecordBatch::try_new( + schema.clone(), + vec![ + Arc::new(Float64Array::from(f[start..end].to_vec())), + Arc::new(StringArray::from(g[start..end].to_vec())), + Arc::new(Int64Array::from(vec![1i64; end - start])), + ], + ) + .unwrap(), + ); + start = end; + } + + let source = MemorySourceConfig::try_new(&vec![batches], schema.clone(), None).unwrap(); + let input: Arc = Arc::new(DataSourceExec::new(Arc::new(source))); + let group_by = PhysicalGroupBy::new_single(vec![ + (col("f", &schema).unwrap(), "f".to_string()), + (col("g", &schema).unwrap(), "g".to_string()), + ]); + let sum = AggregateExprBuilder::new(sum_udaf(), vec![col("v", &schema).unwrap()]) + .schema(schema.clone()) + .alias("sum_v") + .build() + .unwrap(); + let partial = AggregateExec::try_new( + AggregateMode::Partial, + group_by, + vec![Arc::new(sum)], + vec![None], + input, + schema.clone(), + ) + .unwrap(); + let aggr_expr = partial.aggr_expr().to_vec(); + + let exec: Arc = Arc::new( + GroupByLimitAggregateExec::try_new_from_partial(&partial, 0, 0, Vec::new()).unwrap(), + ); + let partial_schema = exec.schema(); + let final_group_by = PhysicalGroupBy::new_single(vec![ + (col("f", &partial_schema).unwrap(), "f".to_string()), + (col("g", &partial_schema).unwrap(), "g".to_string()), + ]); + let final_agg = AggregateExec::try_new( + AggregateMode::Final, + final_group_by, + aggr_expr, + vec![None], + exec, + partial_schema, + ) + .unwrap(); + + let ctx = Arc::new(TaskContext::default()); + let out = collect(Arc::new(final_agg), ctx).await.unwrap(); + let total_rows: usize = out.iter().map(|b| b.num_rows()).sum(); + assert_eq!( + total_rows, n, + "final emitted {total_rows} rows, expected {n}" + ); + } + + /// The worker serializes each partial-output batch to the router with Arrow IPC + /// (`StreamWriter`). Our exec emits slices of one big `emit(All)` batch (offset > 0), so the IPC + /// roundtrip must preserve every group of every sliced batch. Reproduces the distributed + /// undercount, which the in-process tests miss because they never serialize. + #[tokio::test] + async fn ipc_roundtrip_of_sliced_output_preserves_every_group() { + use datafusion::arrow::ipc::reader::StreamReader; + use datafusion::arrow::ipc::writer::StreamWriter; + use std::io::Cursor; + + let n = 20_000; + let batches = make_batches(n, 4096); + let source = MemorySourceConfig::try_new(&vec![batches], input_schema(), None).unwrap(); + let input: Arc = Arc::new(DataSourceExec::new(Arc::new(source))); + let partial = partial_aggregate(input); + let exec: Arc = Arc::new( + GroupByLimitAggregateExec::try_new_from_partial(&partial, 0, 0, Vec::new()).unwrap(), + ); + let schema = exec.schema(); + + let ctx = Arc::new(TaskContext::default()); + let out = collect(Arc::clone(&exec), ctx).await.unwrap(); + assert!( + out.len() > 1, + "test must exercise multiple sliced output batches" + ); + + let mut roundtripped = Vec::new(); + for batch in &out { + let mut buf = Vec::new(); + { + let mut w = StreamWriter::try_new(Cursor::new(&mut buf), &schema).unwrap(); + w.write(batch).unwrap(); + w.finish().unwrap(); + } + let mut r = StreamReader::try_new(Cursor::new(buf), None).unwrap(); + roundtripped.push(r.next().unwrap().unwrap()); + } + + let distinct = distinct_group_rows(&roundtripped); + assert_eq!( + distinct, n, + "after IPC roundtrip of sliced batches, {distinct} distinct groups survived, expected {n}" + ); + } + + /// A global aggregate (no GROUP BY) has zero group columns; wrapping it would build a + /// `GroupValues` over an empty schema and panic on `intern`. `try_new_from_partial` must decline + /// it so the full hash routing leaves global aggregates to DataFusion. + #[tokio::test] + async fn global_aggregate_is_not_wrapped() { + let batches = make_batches(100, 64); + let source = MemorySourceConfig::try_new(&vec![batches], input_schema(), None).unwrap(); + let input: Arc = Arc::new(DataSourceExec::new(Arc::new(source))); + let schema = input.schema(); + + let sum = AggregateExprBuilder::new(sum_udaf(), vec![col("v", &schema).unwrap()]) + .schema(schema.clone()) + .alias("sum_v") + .build() + .unwrap(); + let global = AggregateExec::try_new( + AggregateMode::Partial, + PhysicalGroupBy::new_single(vec![]), + vec![Arc::new(sum)], + vec![None], + input, + schema, + ) + .unwrap(); + + assert!( + GroupByLimitAggregateExec::try_new_from_partial(&global, 0, 0, Vec::new()).is_none(), + "global aggregate (no group columns) must not be wrapped" + ); + } + + /// Mirror the distributed worker shape: a multi-partition scan, our exec running once per + /// partition, then `CoalescePartitions` and the `Final` aggregate. Every group must survive even + /// though the same key appears in several partitions' partial outputs. + #[tokio::test] + async fn no_trim_multi_partition_then_final_emits_every_group() { + use datafusion::physical_plan::coalesce_partitions::CoalescePartitionsExec; + + let n = 20_000; + // Same n combos in each of 4 partitions -> heavy cross-partition group overlap. + let partitions: Vec> = (0..4).map(|_| make_batches(n, 4096)).collect(); + + let source = MemorySourceConfig::try_new(&partitions, input_schema(), None).unwrap(); + let input: Arc = Arc::new(DataSourceExec::new(Arc::new(source))); + let partial = partial_aggregate(input); + let aggr_expr = partial.aggr_expr().to_vec(); + + let exec: Arc = Arc::new( + GroupByLimitAggregateExec::try_new_from_partial(&partial, 0, 0, Vec::new()).unwrap(), + ); + assert_eq!( + exec.output_partitioning().partition_count(), + 4, + "exec should preserve the input's partition count" + ); + let coalesced: Arc = Arc::new(CoalescePartitionsExec::new(exec)); + + let partial_schema = coalesced.schema(); + let final_group_by = PhysicalGroupBy::new_single(vec![ + (col("g0", &partial_schema).unwrap(), "g0".to_string()), + (col("g1", &partial_schema).unwrap(), "g1".to_string()), + ]); + let final_agg = AggregateExec::try_new( + AggregateMode::Final, + final_group_by, + aggr_expr, + vec![None], + coalesced, + partial_schema, + ) + .unwrap(); + + let ctx = Arc::new(TaskContext::default()); + let out = collect(Arc::new(final_agg), ctx).await.unwrap(); + + let total_rows: usize = out.iter().map(|b| b.num_rows()).sum(); + let distinct = distinct_group_rows(&out); + assert_eq!( + distinct, n, + "final emitted {distinct} distinct groups, expected {n}" + ); + assert_eq!( + total_rows, n, + "final emitted {total_rows} rows, expected {n}" + ); + } +} diff --git a/rust/cubestore/cubestore/src/queryplanner/mod.rs b/rust/cubestore/cubestore/src/queryplanner/mod.rs index c4d4742312e4d..c02929c32cf88 100644 --- a/rust/cubestore/cubestore/src/queryplanner/mod.rs +++ b/rust/cubestore/cubestore/src/queryplanner/mod.rs @@ -10,6 +10,7 @@ use datafusion_datasource::memory::MemorySourceConfig; use datafusion_datasource::source::DataSourceExec; pub use planning::PlanningMeta; mod check_memory; +mod group_by_limit_aggregate; pub mod physical_plan_flags; pub mod pretty_printers; mod projection_above_limit; diff --git a/rust/cubestore/cubestore/src/queryplanner/optimizations/distributed_partial_aggregate.rs b/rust/cubestore/cubestore/src/queryplanner/optimizations/distributed_partial_aggregate.rs index 5246b1878f132..e936671706bce 100644 --- a/rust/cubestore/cubestore/src/queryplanner/optimizations/distributed_partial_aggregate.rs +++ b/rust/cubestore/cubestore/src/queryplanner/optimizations/distributed_partial_aggregate.rs @@ -1,5 +1,6 @@ use crate::cluster::WorkerPlanningParams; use crate::queryplanner::check_memory::CheckMemoryExec; +use crate::queryplanner::group_by_limit_aggregate::GroupByLimitAggregateExec; use crate::queryplanner::inline_aggregate::{InlineAggregateExec, InlineAggregateMode}; use crate::queryplanner::planning::WorkerExec; use crate::queryplanner::query_executor::ClusterSendExec; @@ -130,30 +131,31 @@ pub fn push_aggregate_to_workers( )?)) } -/// A global (no GROUP BY) aggregate doesn't use the input ordering, but the scan still merges -/// its partitions with a SortPreservingMergeExec when the index has a sort key (e.g. picked -/// from the filters for partition pruning). Replace such merges under the aggregate with plain -/// partition coalescing: the per-row key comparisons are pure waste there, and particularly -/// bad when the filters above make the merge keys constant, turning every comparison into a -/// full-length tie. +/// A Linear aggregate doesn't use input ordering, but the scan still merges its partitions with a +/// SortPreservingMergeExec when the index has a sort key (e.g. picked from the filters for partition +/// pruning). Replace such merges under the aggregate with plain partition coalescing: the per-row +/// key comparisons are pure waste there, and particularly bad when the leading sort columns are +/// constant (low-cardinality / NULL-heavy), turning every comparison into a full-length tie. /// -/// Restricted to aggregates without group expressions: those hold a single accumulator set per -/// partition even when later optimizations make them run per partition. A grouped hash -/// aggregate over unmerged partitions could end up with a hash table per partition, -/// multiplying its memory by the partition count. +/// Always applied to global (no GROUP BY) aggregates. A grouped hash aggregate is equally safe -- +/// CoalescePartitions still yields a single output partition, hence one hash table and no +/// per-partition memory blowup -- but it is gated behind `coalesce_grouped_hash` while the win is +/// validated. pub fn drop_sort_merge_under_global_aggregate( p: Arc, + coalesce_grouped_hash: bool, ) -> Result, DataFusionError> { let Some(agg) = p.as_any().downcast_ref::() else { return Ok(p); }; - if !matches!(agg.input_order_mode(), InputOrderMode::Linear) - || !agg.group_expr().expr().is_empty() - { + if !matches!(agg.input_order_mode(), InputOrderMode::Linear) { + return Ok(p); + } + if !agg.group_expr().expr().is_empty() && !coalesce_grouped_hash { return Ok(p); } - // Order-sensitive aggregates (first_value, array_agg(ORDER BY), ...) stay Linear with an - // empty GROUP BY but still need their input ordered + // Order-sensitive aggregates (first_value, array_agg(ORDER BY), ...) stay Linear but still + // require their input ordered -- leave their merge in place. if agg.required_input_ordering()[0].is_some() { return Ok(p); } @@ -286,13 +288,24 @@ pub fn push_sorted_partial_aggregate_below_merge( /// key) would drop partial states of tied groups. pub fn push_worker_sort_and_limit( p: Arc, + group_by_limit_factor: usize, + group_by_limit_per_partition: bool, ) -> Result, DataFusionError> { - // Worker side: wrap the partial aggregate with a per-partition bounded sort. + // Worker side: bound the partial aggregate's output. A hash aggregate uses the trimming top-k + // when factor > 0, otherwise (and for the sorted/inline aggregate, whose group count is unknown) + // it is bounded with a per-partition Sort(fetch). `resort_worker_subtree` returns None only when + // there is no locatable partial aggregate, leaving the plan as planned. if let Some(w) = p.as_any().downcast_ref::() { let Some((cols, fetch)) = w.worker_sort_and_limit.clone() else { return Ok(p); }; - let Some(new_input) = resort_worker_subtree(&w.input, &cols, fetch) else { + let Some((new_input, _is_hash)) = resort_worker_subtree( + &w.input, + &cols, + fetch, + group_by_limit_factor, + group_by_limit_per_partition, + ) else { return Ok(p); }; return Ok(Arc::new(WorkerExec::new( @@ -307,10 +320,8 @@ pub fn push_worker_sort_and_limit( ))); } - // Router side: rebuild the final aggregate over a sort-preserving merge in `worker_order`, and - // reorder the (optimization-only) worker subtree to match. Same keys are adjacent in - // `worker_order`, so the sorted final combines them; its output is `worker_order`-sorted (whose - // prefix is the query's ORDER BY), so the limit above stays correct. + // Router side: combine the workers' top-k with a hash final aggregate, then re-apply the top-k + // sort by `worker_order` (the total order T). let Some(final_agg) = FinalAggregateInfo::extract(&p) else { return Ok(p); }; @@ -324,23 +335,64 @@ pub fn push_worker_sort_and_limit( let Some((cols, fetch)) = cs.worker_sort_and_limit.clone() else { return Ok(p); }; - let Some(new_worker_subtree) = resort_worker_subtree(&cs.input_for_optimizations, &cols, fetch) - else { + // `resort_worker_subtree` reports `is_hash` from the same descent it already does, so we don't + // walk to the partial aggregate twice. The hash aggregate emits unordered trimmed groups + // (combined by a hash final + re-sort); the sorted/inline aggregate emits bounded sorted streams + // (combined by a sort-preserving merge + sorted final). + let Some((new_worker_subtree, is_hash)) = resort_worker_subtree( + &cs.input_for_optimizations, + &cols, + fetch, + group_by_limit_factor, + group_by_limit_per_partition, + ) else { return Ok(p); }; let new_cs: Arc = Arc::new(cs.with_changed_schema(new_worker_subtree, cs.required_input_ordering.clone())); let worker_order = worker_ordering(&final_agg.group_expr, &cols)?; - let merged: Arc = - Arc::new(SortPreservingMergeExec::new(worker_order, new_cs)); - Ok(Arc::new(AggregateExec::try_new( - AggregateMode::Final, - final_agg.group_expr, - final_agg.aggr_expr, - final_agg.filter_expr, - merged, - final_agg.input_schema, - )?)) + + if is_hash { + // Hash final over coalesced (unordered) streams, then re-apply the top-k sort by the total + // order T. The Sort(fetch) is required even for a bare LIMIT: it keeps the k smallest by T -- + // exactly the groups every worker kept and fully combined here -- where a plain limit could + // take a group only one worker kept (undercounted). The coalesce drains the workers in + // parallel. + let coalesced: Arc = Arc::new(CoalescePartitionsExec::new(new_cs)); + let final_hash: Arc = Arc::new(AggregateExec::try_new( + AggregateMode::Final, + final_agg.group_expr, + final_agg.aggr_expr, + final_agg.filter_expr, + coalesced, + final_agg.input_schema, + )?); + Ok(Arc::new( + SortExec::new(worker_order, final_hash).with_fetch(Some(fetch)), + )) + } else { + // Sorted final over a sort-preserving merge in worker_order: equal keys are adjacent so the + // sorted final combines them, and its output stays worker_order-sorted (whose prefix is the + // query's ORDER BY), so the query's limit above stays correct -- no extra Sort needed. + let merged: Arc = + Arc::new(SortPreservingMergeExec::new(worker_order, new_cs)); + Ok(Arc::new(AggregateExec::try_new( + AggregateMode::Final, + final_agg.group_expr, + final_agg.aggr_expr, + final_agg.filter_expr, + merged, + final_agg.input_schema, + )?)) + } +} + +/// The `SortOptions` a `worker_sort_and_limit` descriptor entry `(asc, nulls_first)` maps to. +fn descriptor_sort_options(asc: bool, nulls_first: bool) -> SortOptions { + SortOptions { + descending: !asc, + nulls_first, + } } /// Builds the `worker_order` LexOrdering over an aggregate's group columns from the descriptor. @@ -356,51 +408,123 @@ fn worker_ordering( })?; exprs.push(PhysicalSortExpr { expr: Arc::new(Column::new(name, *idx)), - options: SortOptions { - descending: !asc, - nulls_first: *nulls_first, - }, + options: descriptor_sort_options(*asc, *nulls_first), }); } Ok(LexOrdering::new(exprs)) } -/// Rebuilds a worker subtree as `SortPreservingMerge(worker_order) <- Sort(worker_order, fetch, per -/// partition) <- partial`. Returns `None` for an unrecognized or already-rewritten subtree, which -/// keeps [push_worker_sort_and_limit] idempotent. +/// Rebuilds a worker subtree to bound its output to the top `fetch` groups by the total order in +/// `cols`. Two shapes: +/// - hash (`AggregateExec`) with `factor > 0`: `CoalescePartitions <- GroupByLimitAggregate` -- +/// trim during aggregation, emitted unsorted for the router's hash final. +/// - sorted/inline, and hash with `factor == 0`: +/// `SortPreservingMerge(T) <- Sort(T, fetch, per partition) <- PartialAggregate` -- bound each +/// partition with a sort. For hash this is the pre-trim behavior, kept as the `factor == 0` +/// fallback so disabling the trim still bounds the worker rather than leaving it unbounded. /// -/// The per-partition `Sort` does the bounding (a bounded heap, O(fetch) memory); the merge above it -/// carries no fetch. Because this pass runs last, `replace_suboptimal_merge_sorts` has already run -/// and won't push the query's row limit into the merge -- which would cut the merged stream of -/// (still uncombined) partial rows by rows and undercount groups split across partitions. +/// Returns `None` for an unrecognized subtree (no locatable partial aggregate), otherwise the +/// rebuilt subtree paired with `is_hash` (true for the hash path) so the caller doesn't have to +/// walk down to the partial aggregate a second time to decide the router shape. fn resort_worker_subtree( worker_subtree: &Arc, cols: &[(usize, bool, bool)], fetch: usize, -) -> Option> { + group_by_limit_factor: usize, + group_by_limit_per_partition: bool, +) -> Option<(Arc, bool)> { let partial = locate_partial_aggregate(worker_subtree)?; - let schema = partial.schema(); - let mut exprs = Vec::with_capacity(cols.len()); - for (idx, asc, nulls_first) in cols { - let field = schema.fields().get(*idx)?; - exprs.push(PhysicalSortExpr { - expr: Arc::new(Column::new(field.name(), *idx)), - options: SortOptions { - descending: !asc, - nulls_first: *nulls_first, + + // Hash path: trim during aggregation, emit unsorted for the router's hash final. Engaged only + // when factor > 0; with it off, the hash aggregate falls through to the sorted-bounding path + // below (a per-partition Sort(fetch) + merge), which is the pre-trim behavior -- so disabling + // the trim bounds the worker exactly as before, not leaving it unbounded. + if partial.as_any().is::() && group_by_limit_factor > 0 { + // CUBESTORE_GROUP_BY_LIMIT_PER_PARTITION decides where the worker's hash table lives: + // - off (default): coalesce the aggregate's input to a single partition, so the worker + // builds ONE hash table over the merged partitions ("over merge"). Peak memory ~k, no + // intra-worker parallelism on the aggregation. + // - on: keep the raw multi-partition input, so the aggregate runs once per partition + // ("under merge"): N parallel hash tables -- more parallelism, peak ~N*k. The trim keeps + // each per-partition output to ~factor*k, and the global top-k argument (full group key) + // guarantees a surviving group stays within every partition's local top-k. + let partial = if group_by_limit_per_partition { + partial + } else { + partial + .as_any() + .downcast_ref::() + .and_then(|agg| { + if agg.input().output_partitioning().partition_count() <= 1 { + return None; + } + let merged: Arc = + Arc::new(CoalescePartitionsExec::new(agg.input().clone())); + partial.clone().with_new_children(vec![merged]).ok() + }) + .unwrap_or(partial) + }; + + let order: Vec<(usize, SortOptions)> = cols + .iter() + .map(|(idx, asc, nulls_first)| (*idx, descriptor_sort_options(*asc, *nulls_first))) + .collect(); + let trimmed: Arc = match partial.as_any().downcast_ref::() + { + Some(agg) => match GroupByLimitAggregateExec::try_new_from_partial( + agg, + fetch, + group_by_limit_factor, + order, + ) { + Some(e) => Arc::new(e), + None => partial, }, - }); + None => partial, + }; + + // Emit the trimmed top-k unsorted, coalesced to one stream for the ClusterSend. The router + // hash-combines and re-applies the top-k sort, so no worker-side sort/merge holds the whole + // result. Under "over merge" the trimmed agg is already single-partition and this coalesce is + // a passthrough; under "under merge" it drains the per-partition aggregates concurrently. + return Some((Arc::new(CoalescePartitionsExec::new(trimmed)), true)); } - let worker_order = LexOrdering::new(exprs); + + // Sorted/inline path (and the factor == 0 fallback for hash aggregates): bound each partition + // with Sort(fetch) and merge in the total order. The per-partition `fetch` is sound because the + // key is the full group key: a globally top-`fetch` group stays within every partition's first + // `fetch`, so the router's sorted final still sees all its partial states (see this function's + // doc and the module note on the total order). + let worker_order = lex_ordering_from_cols(cols, &partial.schema())?; let per_partition_sort: Arc = Arc::new( SortExec::new(worker_order.clone(), partial) .with_fetch(Some(fetch)) .with_preserve_partitioning(true), ); - Some(Arc::new(SortPreservingMergeExec::new( - worker_order, - per_partition_sort, - ))) + Some(( + Arc::new(SortPreservingMergeExec::new( + worker_order, + per_partition_sort, + )), + false, + )) +} + +/// Build a `LexOrdering` over the partial aggregate's group columns from the descriptor (indices +/// into the partial output schema). Returns `None` if a column index is out of range. +fn lex_ordering_from_cols( + cols: &[(usize, bool, bool)], + schema: &datafusion::arrow::datatypes::SchemaRef, +) -> Option { + let mut exprs = Vec::with_capacity(cols.len()); + for (idx, asc, nulls_first) in cols { + let field = schema.fields().get(*idx)?; + exprs.push(PhysicalSortExpr { + expr: Arc::new(Column::new(field.name(), *idx)), + options: descriptor_sort_options(*asc, *nulls_first), + }); + } + Some(LexOrdering::new(exprs)) } /// The group/aggregate state of either an `InlineAggregateExec` or a plain `AggregateExec`, when in @@ -1310,7 +1434,7 @@ mod tests { ); let original = global_sum_aggregate(filter); - let rewritten = drop_sort_merge_under_global_aggregate(original.clone()).unwrap(); + let rewritten = drop_sort_merge_under_global_aggregate(original.clone(), false).unwrap(); let agg = rewritten.as_any().downcast_ref::().unwrap(); let filter = agg @@ -1365,7 +1489,7 @@ mod tests { .required_input_ordering()[0] .is_some()); - let rewritten = drop_sort_merge_under_global_aggregate(original.clone()).unwrap(); + let rewritten = drop_sort_merge_under_global_aggregate(original.clone(), false).unwrap(); assert!(Arc::ptr_eq(&rewritten, &original)); } @@ -1398,10 +1522,41 @@ mod tests { InputOrderMode::Linear )); - let rewritten = drop_sort_merge_under_global_aggregate(original.clone()).unwrap(); + let rewritten = drop_sort_merge_under_global_aggregate(original.clone(), false).unwrap(); assert!(Arc::ptr_eq(&rewritten, &original)); } + /// With the flag on, the same grouped hash aggregate's under-scan merge is replaced by plain + /// partition coalescing (single output partition -> one hash table), dropping the useless sort. + #[test] + fn coalesces_sort_merge_under_grouped_hash_aggregate_when_enabled() { + let schema = Arc::new(Schema::new(vec![ + Field::new("k", DataType::Int64, false), + Field::new("g", DataType::Int64, false), + Field::new("v", DataType::Int64, false), + ])); + let batch = RecordBatch::try_new( + schema.clone(), + vec![ + Arc::new(Int64Array::from(vec![1, 2])), + Arc::new(Int64Array::from(vec![5, 4])), + Arc::new(Int64Array::from(vec![10, 20])), + ], + ) + .unwrap(); + let source = sorted_source(&schema, vec![vec![batch.clone()], vec![batch]]); + let original = sum_aggregate(AggregateMode::Partial, "g", merge_by_k(source)); + + let rewritten = drop_sort_merge_under_global_aggregate(original.clone(), true).unwrap(); + // The aggregate stays grouped, but its input merge becomes a plain CoalescePartitionsExec + // (still a single output partition -> one hash table). + assert!(!Arc::ptr_eq(&rewritten, &original)); + assert!(rewritten.as_any().is::()); + assert!(rewritten.children()[0] + .as_any() + .is::()); + } + fn global_sum_aggregate(input: Arc) -> Arc { let schema = input.schema(); let sum = AggregateExprBuilder::new(sum_udaf(), vec![col("v", &schema).unwrap()]) @@ -1446,7 +1601,7 @@ mod tests { let source = two_partition_source(&schema); let original = sum_aggregate(AggregateMode::Partial, "k", merge_by_k(source)); - let rewritten = drop_sort_merge_under_global_aggregate(original.clone()).unwrap(); + let rewritten = drop_sort_merge_under_global_aggregate(original.clone(), false).unwrap(); assert!(Arc::ptr_eq(&rewritten, &original)); } diff --git a/rust/cubestore/cubestore/src/queryplanner/optimizations/mod.rs b/rust/cubestore/cubestore/src/queryplanner/optimizations/mod.rs index edf902b44d3e5..d85248e617399 100644 --- a/rust/cubestore/cubestore/src/queryplanner/optimizations/mod.rs +++ b/rust/cubestore/cubestore/src/queryplanner/optimizations/mod.rs @@ -43,6 +43,8 @@ pub struct CubeQueryPlanner { serialized_plan: Arc, memory_handler: Arc, data_loaded_size: Option>, + group_by_limit_factor: usize, + group_by_limit_per_partition: bool, } impl CubeQueryPlanner { @@ -50,6 +52,8 @@ impl CubeQueryPlanner { cluster: Arc, serialized_plan: Arc, memory_handler: Arc, + group_by_limit_factor: usize, + group_by_limit_per_partition: bool, ) -> CubeQueryPlanner { CubeQueryPlanner { cluster: Some(cluster), @@ -57,6 +61,8 @@ impl CubeQueryPlanner { serialized_plan, memory_handler, data_loaded_size: None, + group_by_limit_factor, + group_by_limit_per_partition, } } @@ -65,6 +71,8 @@ impl CubeQueryPlanner { worker_planning_params: WorkerPlanningParams, memory_handler: Arc, data_loaded_size: Option>, + group_by_limit_factor: usize, + group_by_limit_per_partition: bool, ) -> CubeQueryPlanner { CubeQueryPlanner { serialized_plan, @@ -72,6 +80,8 @@ impl CubeQueryPlanner { worker_partition_count: Some(worker_planning_params), memory_handler, data_loaded_size, + group_by_limit_factor, + group_by_limit_per_partition, } } } @@ -104,6 +114,8 @@ impl QueryPlanner for CubeQueryPlanner { self.memory_handler.clone(), self.data_loaded_size.clone(), ctx_state.config().options(), + self.group_by_limit_factor, + self.group_by_limit_per_partition, ); result } @@ -112,12 +124,17 @@ impl QueryPlanner for CubeQueryPlanner { #[derive(Debug)] pub struct PreOptimizeRule { push_partial_aggregate_below_merge: bool, + coalesce_under_hash_aggregate: bool, } impl PreOptimizeRule { - pub fn new(push_partial_aggregate_below_merge: bool) -> Self { + pub fn new( + push_partial_aggregate_below_merge: bool, + coalesce_under_hash_aggregate: bool, + ) -> Self { Self { push_partial_aggregate_below_merge, + coalesce_under_hash_aggregate, } } } @@ -128,7 +145,11 @@ impl PhysicalOptimizerRule for PreOptimizeRule { plan: Arc, _config: &ConfigOptions, ) -> datafusion::common::Result> { - pre_optimize_physical_plan(plan, self.push_partial_aggregate_below_merge) + pre_optimize_physical_plan( + plan, + self.push_partial_aggregate_below_merge, + self.coalesce_under_hash_aggregate, + ) } fn name(&self) -> &str { @@ -143,6 +164,7 @@ impl PhysicalOptimizerRule for PreOptimizeRule { fn pre_optimize_physical_plan( p: Arc, push_partial_aggregate_below_merge: bool, + coalesce_under_hash_aggregate: bool, ) -> Result, DataFusionError> { let p = rewrite_physical_plan(p, &mut |p| push_aggregate_to_workers(p))?; @@ -158,8 +180,11 @@ fn pre_optimize_physical_plan( p }; - // Global (no GROUP BY) aggregates don't need their input merged in the sort order - let p = rewrite_physical_plan(p, &mut |p| drop_sort_merge_under_global_aggregate(p))?; + // Global (no GROUP BY) aggregates -- and, when enabled, grouped hash aggregates -- don't need + // their input merged in the sort order. + let p = rewrite_physical_plan(p, &mut |p| { + drop_sort_merge_under_global_aggregate(p, coalesce_under_hash_aggregate) + })?; // Replace sorted AggregateExec with InlineAggregateExec for better performance let p = rewrite_physical_plan(p, &mut |p| replace_with_inline_aggregate(p))?; @@ -173,6 +198,8 @@ fn finalize_physical_plan( memory_handler: Arc, data_loaded_size: Option>, config: &ConfigOptions, + group_by_limit_factor: usize, + group_by_limit_per_partition: bool, ) -> Result, DataFusionError> { let p = rewrite_physical_plan(p, &mut |p| add_check_memory_exec(p, memory_handler.clone()))?; log::trace!( @@ -201,7 +228,9 @@ fn finalize_physical_plan( // Last: bound worker memory for ORDER BY LIMIT that isn't an index prefix. Runs // after replace_suboptimal_merge_sorts so it doesn't push the query's row limit into the // worker merge we add (which would cut uncombined partial rows and undercount). - let p = rewrite_physical_plan(p, &mut |p| push_worker_sort_and_limit(p))?; + let p = rewrite_physical_plan(p, &mut |p| { + push_worker_sort_and_limit(p, group_by_limit_factor, group_by_limit_per_partition) + })?; log::trace!( "Rewrote physical plan by push_worker_sort_and_limit:\n{}", pp_phys_plan_ext(p.as_ref(), &PPOptions::show_nonmeta()) diff --git a/rust/cubestore/cubestore/src/queryplanner/planning.rs b/rust/cubestore/cubestore/src/queryplanner/planning.rs index 616aa4a6c31c3..6763a0089f4f2 100644 --- a/rust/cubestore/cubestore/src/queryplanner/planning.rs +++ b/rust/cubestore/cubestore/src/queryplanner/planning.rs @@ -618,7 +618,7 @@ impl PlanRewriter for CollectConstraints { }) } LogicalPlan::Sort(Sort { expr, input, .. }) => { - let (names, _) = sort_to_column_names(expr, input); + let (names, _, _) = sort_to_column_names(expr, input); if !names.is_empty() { Some(current_context.update_order_col_names(names)) @@ -740,13 +740,26 @@ fn get_original_name(may_be_alias: &String, input: &LogicalPlan) -> String { } } -fn sort_to_column_names(sort_exprs: &Vec, input: &LogicalPlan) -> (Vec, bool) { +/// Returns the ORDER BY column names, whether the (uniform) direction is ascending, and the +/// per-column `nulls_first` (parallel to the names). Empty names signals an unusable sort (a +/// non-column expr or mixed asc/desc). The real `nulls_first` is carried through so the worker +/// top-k cut honors the query's explicit `NULLS FIRST/LAST` instead of re-deriving it from the +/// sort direction (which would disagree with the router select and drop groups at the limit). +fn sort_to_column_names( + sort_exprs: &Vec, + input: &LogicalPlan, +) -> (Vec, bool, Vec) { let mut res = Vec::new(); + let mut nulls_first = Vec::new(); let mut has_desc = false; let mut has_asc = false; for sexpr in sort_exprs.iter() { match sexpr { - SortExpr { expr, asc, .. } => { + SortExpr { + expr, + asc, + nulls_first: nf, + } => { if *asc { has_asc = true; } else { @@ -755,18 +768,19 @@ fn sort_to_column_names(sort_exprs: &Vec, input: &LogicalPlan) -> (Vec match expr { Expr::Column(c) => { res.push(get_original_name(&c.name, input)); + nulls_first.push(*nf); } _ => { - return (Vec::new(), true); + return (Vec::new(), true, Vec::new()); } } } } } if has_asc && has_desc { - (Vec::new(), true) + (Vec::new(), true, Vec::new()) } else { - (res, has_asc) + (res, has_asc, nulls_first) } } @@ -840,6 +854,9 @@ struct ChooseIndexContext { limit: Option, sort: Option>, sort_is_asc: bool, + /// Per-column `nulls_first` for the ORDER BY, parallel to [sort]. Carries the query's explicit + /// (or default) NULL placement so the worker top-k cut matches the router select. + sort_nulls_first: Vec, single_value_filtered_cols: HashSet, /// Group-by key column names of the nearest aggregate above the scan, when all of them are /// plain columns. Lets a `GROUP BY ... LIMIT` without `ORDER BY` push the limit to workers. @@ -864,10 +881,16 @@ impl ChooseIndexContext { ..self.clone() } } - fn update_sort(&self, names: Vec, sort_is_asc: bool) -> Self { + fn update_sort( + &self, + names: Vec, + sort_is_asc: bool, + sort_nulls_first: Vec, + ) -> Self { Self { sort: Some(names), sort_is_asc, + sort_nulls_first, ..self.clone() } } @@ -979,10 +1002,10 @@ impl PlanRewriter for ChooseIndex<'_> { expr, input, fetch, .. }) => { let base = fetch.as_ref().map(|f| context.update_limit(Some(*f))); - let (names, sort_is_asc) = sort_to_column_names(expr, input); + let (names, sort_is_asc, sort_nulls_first) = sort_to_column_names(expr, input); let base = base.as_ref().unwrap_or(context); Some(if !names.is_empty() { - base.update_sort(names, sort_is_asc) + base.update_sort(names, sort_is_asc, sort_nulls_first) } else { base.mark_unusable_sort() }) @@ -1143,24 +1166,37 @@ impl ChooseIndex<'_> { return None; } let limit = ctx.limit?; - let sort = ctx.sort.as_ref().filter(|s| !s.is_empty())?; let group_by = ctx.group_by.as_ref().filter(|g| !g.is_empty())?; - // Every ORDER BY column must be a group-by column; map it to its group-key position. + // Every ORDER BY column must be a group-by column; map it to its group-key position. A bare + // LIMIT (no ORDER BY) leaves the prefix empty, so the total order is the full group key in + // group-by order -- "any n groups" becomes "the n smallest by group key", still valid. let mut cols: Vec<(usize, bool, bool)> = Vec::with_capacity(group_by.len()); let mut used = vec![false; group_by.len()]; - for name in sort { - let idx = group_by.iter().position(|g| g == name)?; - if used[idx] { - continue; + if let Some(sort) = ctx.sort.as_ref().filter(|s| !s.is_empty()) { + for (i, name) in sort.iter().enumerate() { + let idx = group_by.iter().position(|g| g == name)?; + if used[idx] { + continue; + } + used[idx] = true; + // Honor the query's explicit NULL placement; fall back to the asc-derived default + // only if it wasn't captured (it always is, alongside the name). + let nulls_first = ctx + .sort_nulls_first + .get(i) + .copied() + .unwrap_or(!ctx.sort_is_asc); + cols.push((idx, ctx.sort_is_asc, nulls_first)); } - used[idx] = true; - cols.push((idx, ctx.sort_is_asc, !ctx.sort_is_asc)); } - // Extend with the remaining group keys to make it a total order on the full group key. + // Extend with the remaining group keys to make it a total order on the full group key. Their + // NULL placement is arbitrary (these columns are not in the query's ORDER BY); use ascending + // nulls-first for a deterministic order. The worker cut and the router select both derive + // from this one descriptor, so they agree on the total order by construction. for (idx, is_used) in used.iter().enumerate() { if !is_used { - cols.push((idx, true, false)); + cols.push((idx, true, true)); } } Some((cols, limit)) @@ -1839,6 +1875,7 @@ fn pull_up_cluster_send(mut p: LogicalPlan) -> Result Result Result { let lsend; diff --git a/rust/cubestore/cubestore/src/queryplanner/pretty_printers.rs b/rust/cubestore/cubestore/src/queryplanner/pretty_printers.rs index 63d386add4951..3b50620742de7 100644 --- a/rust/cubestore/cubestore/src/queryplanner/pretty_printers.rs +++ b/rust/cubestore/cubestore/src/queryplanner/pretty_printers.rs @@ -28,6 +28,7 @@ use std::sync::Arc; use crate::queryplanner::check_memory::CheckMemoryExec; use crate::queryplanner::filter_by_key_range::FilterByKeyRangeExec; +use crate::queryplanner::group_by_limit_aggregate::GroupByLimitAggregateExec; use crate::queryplanner::inline_aggregate::{InlineAggregateExec, InlineAggregateMode}; use crate::queryplanner::merge_sort::LastRowByUniqueKeyExec; use crate::queryplanner::panic::{PanicWorkerExec, PanicWorkerNode}; @@ -617,6 +618,16 @@ fn pp_phys_plan_indented(p: &dyn ExecutionPlan, indent: usize, o: &PPOptions, ou if let Some(limit) = agg.limit() { *out += &format!(", limit: {}", limit) } + } else if let Some(agg) = a.downcast_ref::() { + *out += &format!( + "GroupByLimitAggregate, k: {}, factor: {}, order: {:?}", + agg.k(), + agg.factor(), + agg.order() + ); + if o.show_aggregations { + *out += &format!(", aggs: {:?}", agg.aggr_expr()) + } } else if let Some(l) = a.downcast_ref::() { *out += &format!("LocalLimit, n: {}", l.fetch()); } else if let Some(l) = a.downcast_ref::() { diff --git a/rust/cubestore/cubestore/src/queryplanner/query_executor.rs b/rust/cubestore/cubestore/src/queryplanner/query_executor.rs index 528f268f7048f..dc24a43b322e8 100644 --- a/rust/cubestore/cubestore/src/queryplanner/query_executor.rs +++ b/rust/cubestore/cubestore/src/queryplanner/query_executor.rs @@ -226,7 +226,7 @@ pub struct QueryExecutorImpl { metadata_cache_factory: Arc, parquet_metadata_cache: Arc, memory_handler: Arc, - push_partial_aggregate_below_merge: bool, + config: Arc, } crate::di_service!(QueryExecutorImpl, [QueryExecutor]); @@ -547,13 +547,13 @@ impl QueryExecutorImpl { metadata_cache_factory: Arc, parquet_metadata_cache: Arc, memory_handler: Arc, - push_partial_aggregate_below_merge: bool, + config: Arc, ) -> Arc { Arc::new(QueryExecutorImpl { metadata_cache_factory, parquet_metadata_cache, memory_handler, - push_partial_aggregate_below_merge, + config, }) } @@ -567,6 +567,8 @@ impl QueryExecutorImpl { cluster, serialized_plan, self.memory_handler.clone(), + self.config.group_by_limit_factor(), + self.config.group_by_limit_per_partition(), )) } @@ -582,6 +584,8 @@ impl QueryExecutorImpl { worker_planning_params, self.memory_handler.clone(), data_loaded_size.clone(), + self.config.group_by_limit_factor(), + self.config.group_by_limit_per_partition(), )) } @@ -603,7 +607,8 @@ impl QueryExecutorImpl { vec![ // Cube rules Arc::new(PreOptimizeRule::new( - self.push_partial_aggregate_below_merge, + self.config.push_partial_aggregate_below_merge_enabled(), + self.config.coalesce_under_hash_aggregate(), )), // DF rules without EnforceDistribution. We do need to keep EnforceSorting. Arc::new(OutputRequirements::new_add_mode()), diff --git a/rust/cubestore/cubestore/src/sql/mod.rs b/rust/cubestore/cubestore/src/sql/mod.rs index 472465ade9279..0df582c153e82 100644 --- a/rust/cubestore/cubestore/src/sql/mod.rs +++ b/rust/cubestore/cubestore/src/sql/mod.rs @@ -6487,7 +6487,9 @@ mod tests { } } - // Test 4: ORDER BY 1 DESC with LIMIT on non-prefix column + // Test 4: ORDER BY DESC + LIMIT on a non-prefix column, grouped by a + // non-prefix column (hash aggregate). The hash path bounds the worker + // output with the trimming aggregate, not a Sort. { let result = service .exec_query( @@ -6503,9 +6505,14 @@ mod tests { TableValue::String(s) => s.clone(), _ => panic!("expected string"), }; + // Pin that the trim is actually configured to bound (fetch k=2, + // factor>0), not merely that the node is present -- a factor of 0 + // would leave it a passthrough and reintroduce the memory pressure + // this path exists to avoid. assert!( - worker_plan.contains("Sort, fetch: 2"), - "Worker should have Sort with fetch=2 for DESC. Plan: {}", + worker_plan.contains("GroupByLimitAggregate, k: 2, factor: 2"), + "Hash-aggregate worker should bound output with a configured \ + GroupByLimitAggregate (k=2, factor=2). Plan: {}", worker_plan ); } From 9da8e076897071f204711456b92ff69150547d9c Mon Sep 17 00:00:00 2001 From: Dmitry Patsura Date: Mon, 29 Jun 2026 20:05:23 +0200 Subject: [PATCH 3/3] feat(oracle-driver): Improvements & fixes, fix #10834 (#11174) --- .github/workflows/drivers-tests.yml | 3 + .../driver/OracleDriver.js | 189 +- packages/cubejs-oracle-driver/package.json | 4 + .../src/adapter/OracleQuery.ts | 81 + .../test/unit/oracle-query.test.ts | 23 +- .../fixtures/oracle.json | 248 + packages/cubejs-testing-drivers/package.json | 6 +- .../src/helpers/runEnvironment.ts | 7 + .../src/tests/testConnection.ts | 12 +- .../__snapshots__/oracle-full.test.ts.snap | 16134 ++++++++++++++++ .../test/oracle-core.test.ts | 3 + .../test/oracle-driver.test.ts | 3 + .../test/oracle-full.test.ts | 6 + packages/cubejs-testing/package.json | 2 - .../__snapshots__/smoke-oracle.test.ts.snap | 9 - .../cubejs-testing/test/smoke-oracle.test.ts | 49 - yarn.lock | 38 +- 17 files changed, 16678 insertions(+), 139 deletions(-) create mode 100644 packages/cubejs-testing-drivers/fixtures/oracle.json create mode 100644 packages/cubejs-testing-drivers/test/__snapshots__/oracle-full.test.ts.snap create mode 100644 packages/cubejs-testing-drivers/test/oracle-core.test.ts create mode 100644 packages/cubejs-testing-drivers/test/oracle-driver.test.ts create mode 100644 packages/cubejs-testing-drivers/test/oracle-full.test.ts delete mode 100644 packages/cubejs-testing/test/__snapshots__/smoke-oracle.test.ts.snap delete mode 100644 packages/cubejs-testing/test/smoke-oracle.test.ts diff --git a/.github/workflows/drivers-tests.yml b/.github/workflows/drivers-tests.yml index 46e3b6e4b8a36..8c5825bb1ad91 100644 --- a/.github/workflows/drivers-tests.yml +++ b/.github/workflows/drivers-tests.yml @@ -265,6 +265,7 @@ jobs: - databricks-jdbc-export-bucket-gcs-prefix - mssql - mysql + - oracle - postgres - postgres-pre-agg-credentials - redshift @@ -299,6 +300,8 @@ jobs: use_tesseract_sql_planner: true - database: mssql use_tesseract_sql_planner: true + - database: oracle + use_tesseract_sql_planner: true fail-fast: false steps: diff --git a/packages/cubejs-oracle-driver/driver/OracleDriver.js b/packages/cubejs-oracle-driver/driver/OracleDriver.js index 232282ac54ca9..c2796a12fc538 100644 --- a/packages/cubejs-oracle-driver/driver/OracleDriver.js +++ b/packages/cubejs-oracle-driver/driver/OracleDriver.js @@ -7,11 +7,28 @@ const { getEnv, assertDataSource, + Pool, } = require('@cubejs-backend/shared'); -const { BaseDriver, TableColumn } = require('@cubejs-backend/base-driver'); +const { BaseDriver, TableColumn, createPoolName } = require('@cubejs-backend/base-driver'); const oracledb = require('oracledb'); const { reduce } = require('ramda'); +// Maps Oracle `metaData.dbTypeName` strings to Cube generic types. NUMBER and the +// TIMESTAMP* family are handled separately (scale-based / prefix match) below. +const OracleTypeToGenericType = { + varchar2: 'text', + nvarchar2: 'text', + char: 'text', + nchar: 'text', + clob: 'text', + nclob: 'text', + long: 'text', + binary_float: 'float', + binary_double: 'double', + date: 'timestamp', + 'number': 'decimal', +}; + const sortByKeys = (unordered) => { const ordered = {}; @@ -43,20 +60,11 @@ const reduceCb = (result, i) => { return sortByKeys(result); }; -/** - * Oracle driver class. - */ class OracleDriver extends BaseDriver { - /** - * Returns default concurrency value. - */ static getDefaultConcurrency() { return 2; } - /** - * Class constructor. - */ constructor(config = {}) { super({ testConnectionTimeout: config.testConnectionTimeout, @@ -72,20 +80,51 @@ class OracleDriver extends BaseDriver { this.db.partRows = 100000; this.db.maxRows = 100000; this.db.prefetchRows = 500; + + const { maxPoolSize, pool, ...connectionConfig } = config; + this.config = { user: getEnv('dbUser', { dataSource, preAggregations }), password: getEnv('dbPass', { dataSource, preAggregations }), db: getEnv('dbName', { dataSource, preAggregations }), host: getEnv('dbHost', { dataSource, preAggregations }), port: getEnv('dbPort', { dataSource, preAggregations }) || 1521, - poolMin: 0, - poolMax: - config.maxPoolSize || - getEnv('dbMaxPoolSize', { dataSource, preAggregations }) || - 50, - ...config + ...connectionConfig, }; this.config.connectionString = this.config.connectionString || `${this.config.host}:${this.config.port}/${this.config.db}`; + + const poolName = createPoolName('oracle', dataSource, preAggregations); + this.pool = new Pool(poolName, { + create: async () => { + const connection = await this.db.getConnection(this.config); + await OracleDriver.initConnection(connection); + + return connection; + }, + validate: async (connection) => { + try { + await connection.ping(); + } catch (e) { + this.databasePoolError(e); + return false; + } + + return true; + }, + destroy: (connection) => connection.close(), + }, { + min: 0, + max: + maxPoolSize || + getEnv('dbMaxPoolSize', { dataSource, preAggregations }) || + 50, + evictionRunIntervalMillis: 10000, + softIdleTimeoutMillis: 30000, + idleTimeoutMillis: 30000, + testOnBorrow: true, + acquireTimeoutMillis: 20000, + ...pool, + }); } async tablesSchema() { @@ -110,12 +149,33 @@ class OracleDriver extends BaseDriver { return reduce(reduceCb, {}, data); } - async getConnectionFromPool() { - if (!this.pool) { - this.pool = await this.db.createPool(this.config); - } + /** + * Runs once per pooled session. Aligns the session NLS formats with the ISO-ish + * date strings Cube binds, so implicit string→DATE/TIMESTAMP conversions (e.g. + * the native planner's `CAST(? AS TIMESTAMP)` over a 'YYYY-MM-DD' filter bound) + * parse instead of failing with ORA-01843 under Oracle's default NLS. Explicit + * TO_DATE/TO_TIMESTAMP calls carry their own masks and are unaffected. + * @protected + */ + static async initConnection(connection) { + await connection.execute( + "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD' NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD' NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM'" + ); + } + + /** + * Acquires a connection from the pool, runs `fn`, and always releases the + * connection back to the pool (on both success and failure). + * @protected + */ + async withConnection(fn) { + const connection = await this.pool.acquire(); - return this.pool.getConnection() + try { + return await fn(connection); + } finally { + await this.pool.release(connection); + } } async testConnection() { @@ -127,28 +187,84 @@ class OracleDriver extends BaseDriver { throw new Error('Oracle can not work with table names longer than 128 symbols. ' + `Consider using the 'sqlAlias' attribute in your cube definition for ${quotedTableName}.`); } + return super.createTable(quotedTableName, columns); } - async query(query, values) { - const conn = await this.getConnectionFromPool(); + static normalizeParams(query, values) { + if (!values || values.length === 0) { + return { sql: query, binds: {} }; + } - try { - const res = await conn.execute(query, values || {}); + const binds = {}; + const valueToName = new Map(); + let idx = 0; + let nextName = 0; + + // `:"?"` must be matched as a whole before a lone `?`, so it appears first + // in the alternation; since it starts with `:`, its inner `?` is consumed + // as part of the match and never matched again on its own. + // + // Placeholders carrying the same value share a single named bind. This is + // semantically identical (the same value is bound) and keeps repeated + // expressions textually identical across clauses — required by Oracle, which + // otherwise rejects e.g. a CASE expression in both SELECT and GROUP BY when + // its param renders as two different bind names (ORA-00979). + const sql = query.replace(/:"\?"|\?/g, () => { + const value = values[idx]; + idx += 1; + // A Map distinguishes values by SameValueZero, so 1 and '1' stay separate; + // the raw value works as the key without stringifying. + let name = valueToName.get(value); + if (name === undefined) { + name = `cb_param_${nextName}`; + nextName += 1; + valueToName.set(value, name); + binds[name] = value; + } + return `:${name}`; + }); + + return { sql, binds }; + } + + async query(query, values) { + return this.withConnection(async (conn) => { + const { sql, binds } = OracleDriver.normalizeParams(query, values); + const res = await conn.execute(sql, binds); return res && res.rows; - } catch (e) { - throw (e); - } finally { - try { - await conn.close(); - } catch (e) { - throw e; + }); + } + + static metaDataToColumnTypes(metaData) { + return (metaData || []).map((column) => { + const dbTypeName = (column.dbTypeName || '').toLowerCase(); + let type = 'text'; + + if (dbTypeName.startsWith('timestamp')) { + type = 'timestamp'; + } else { + type = OracleTypeToGenericType[dbTypeName] || 'text'; } - } + + return { name: column.name, type }; + }); + } + + async downloadQueryResults(query, values, _options) { + return this.withConnection(async (conn) => { + const { sql, binds } = OracleDriver.normalizeParams(query, values); + const res = await conn.execute(sql, binds); + return { + rows: (res && res.rows) || [], + types: OracleDriver.metaDataToColumnTypes(res && res.metaData), + }; + }); } - release() { - return this.pool && this.pool.close(); + async release() { + await this.pool.drain(); + await this.pool.clear(); } readOnly() { @@ -156,7 +272,8 @@ class OracleDriver extends BaseDriver { } wrapQueryWithLimit(query) { - query.query = `SELECT * FROM (${query.query}) AS t WHERE ROWNUM <= ${query.limit}`; + // Oracle forbids the `AS` keyword for table/subquery aliases. + query.query = `SELECT * FROM (${query.query}) t WHERE ROWNUM <= ${query.limit}`; } } diff --git a/packages/cubejs-oracle-driver/package.json b/packages/cubejs-oracle-driver/package.json index d061ea00c1101..e13c14c5fcccd 100644 --- a/packages/cubejs-oracle-driver/package.json +++ b/packages/cubejs-oracle-driver/package.json @@ -14,8 +14,12 @@ "main": "driver/OracleDriver.js", "dependencies": { "@cubejs-backend/base-driver": "1.6.64", + "@cubejs-backend/shared": "1.6.64", "ramda": "^0.27.0" }, + "devDependencies": { + "@types/oracledb": "^6.2.3" + }, "optionalDependencies": { "oracledb": "^6.2.0" }, diff --git a/packages/cubejs-schema-compiler/src/adapter/OracleQuery.ts b/packages/cubejs-schema-compiler/src/adapter/OracleQuery.ts index d0417847fe8f2..3100102712619 100644 --- a/packages/cubejs-schema-compiler/src/adapter/OracleQuery.ts +++ b/packages/cubejs-schema-compiler/src/adapter/OracleQuery.ts @@ -11,6 +11,7 @@ const GRANULARITY_VALUE = { minute: 'mm', second: 'ss', month: 'MM', + quarter: 'Q', year: 'YYYY' }; @@ -94,6 +95,7 @@ export class OracleQuery extends BaseQuery { if (!granularity) { return dimension; } + return `TRUNC(${dimension}, '${GRANULARITY_VALUE[granularity]}')`; } @@ -179,6 +181,85 @@ export class OracleQuery extends BaseQuery { return res; } + public dateBin(interval: string, source: string, origin: string): string { + const parsed = parseSqlInterval(interval); + const originTs = `TO_TIMESTAMP('${origin}', 'YYYY-MM-DD"T"HH24:MI:SS.FF3')`; + + const totalMonths = (parsed.year || 0) * 12 + (parsed.quarter || 0) * 3 + (parsed.month || 0); + const totalSeconds = (parsed.week || 0) * 604800 + (parsed.day || 0) * 86400 + + (parsed.hour || 0) * 3600 + (parsed.minute || 0) * 60 + (parsed.second || 0); + + // Pure month-based interval: bin with calendar-accurate month arithmetic. + if (totalMonths > 0 && totalSeconds === 0) { + return `ADD_MONTHS(${originTs}, FLOOR(MONTHS_BETWEEN(${source}, ${originTs}) / ${totalMonths}) * ${totalMonths})`; + } + + // Pure fixed-length interval: bin with second arithmetic. + // (CAST(... AS DATE) - CAST(... AS DATE)) yields a day count; * 86400 → seconds. + if (totalSeconds > 0 && totalMonths === 0) { + const diffSeconds = `(CAST(${source} AS DATE) - CAST(${originTs} AS DATE)) * 86400`; + return `${originTs} + NUMTODSINTERVAL(FLOOR(${diffSeconds} / ${totalSeconds}) * ${totalSeconds}, 'SECOND')`; + } + + throw new UserError(`Mixed month/second intervals are not supported for Oracle custom granularities: ${interval}`); + } + + public seriesSql(timeDimension) { + const values = timeDimension.timeSeries().map( + ([from, to]) => `SELECT '${from}' f, '${to}' t FROM DUAL` + ).join(' UNION ALL '); + return `SELECT TO_TIMESTAMP(dates.f, 'YYYY-MM-DD"T"HH24:MI:SS.FF3') as ${this.escapeColumnName('date_from')}, ` + + `TO_TIMESTAMP(dates.t, 'YYYY-MM-DD"T"HH24:MI:SS.FF3') as ${this.escapeColumnName('date_to')} ` + + `FROM (${values}) dates`; + } + + public sqlTemplates() { + const templates = super.sqlTemplates(); + // Oracle forbids `AS` before a table/subquery alias. + templates.expressions.query_aliased = '{{ query }} {{ quoted_alias }}'; + // Oracle does not support positional GROUP BY — group by expressions. + templates.statements.group_by_exprs = '{{ group_by | map(attribute=\'expr\') | join(\', \') }}'; + // No `AS` before the FROM subquery alias, and Oracle row-limiting syntax. + templates.statements.select = '{% if ctes %} WITH \n' + + '{{ ctes | join(\',\n\') }}\n' + + '{% endif %}' + + 'SELECT {% if distinct %}DISTINCT {% endif %}' + + '{{ select_concat | map(attribute=\'aliased\') | join(\', \') }} {% if from %}\n' + + 'FROM (\n' + + '{{ from | indent(2, true) }}\n' + + ') {{ from_alias }}{% elif from_prepared %}\n' + + 'FROM {{ from_prepared }}' + + '{% endif %}' + + '{% for join in joins %}\n{{ join }}{% endfor %}' + + '{% if filter %}\nWHERE {{ filter }}{% endif %}' + + '{% if group_by %}\nGROUP BY {{ group_by }}{% endif %}' + + '{% if having %}\nHAVING {{ having }}{% endif %}' + + '{% if order_by %}\nORDER BY {{ order_by | map(attribute=\'expr\') | join(\', \') }}{% endif %}' + + '{% if offset is not none %}\nOFFSET {{ offset }} ROWS{% endif %}' + + '{% if limit is not none %}\nFETCH NEXT {{ limit }} ROWS ONLY{% endif %}'; + // Oracle has no `::` cast and no `VALUES` row-constructor table source. Build the + // series with TO_TIMESTAMP + UNION ALL SELECT ... FROM DUAL, and no `AS` before + // the derived-table alias (Oracle forbids it). `seria` items are [from, to] pairs. + templates.statements.time_series_select = 'SELECT TO_TIMESTAMP(dates.f, \'YYYY-MM-DD"T"HH24:MI:SS.FF3\') AS "date_from",\n' + + 'TO_TIMESTAMP(dates.t, \'YYYY-MM-DD"T"HH24:MI:SS.FF3\') AS "date_to" \n' + + 'FROM (\n' + + '{% for time_item in seria %}' + + 'SELECT \'{{ time_item[0] }}\' f, \'{{ time_item[1] }}\' t FROM DUAL' + + '{% if not loop.last %} UNION ALL\n{% endif %}' + + '{% endfor %}' + + ') dates'; + + delete templates.expressions.ilike; + templates.tesseract.ilike = 'LOWER({{ expr }}) {% if negated %}NOT {% endif %}LIKE LOWER({{ pattern }})'; + + // Oracle has no `STRING` type (used by the default in CAST(... AS STRING), + // e.g. the multi-column count() concatenation). CAST to VARCHAR2 requires a + // length, so use the max standard VARCHAR2 size. + templates.types.string = 'VARCHAR2(4000)'; + + return templates; + } + public newFilter(filter) { return new OracleFilter(this, filter); } diff --git a/packages/cubejs-schema-compiler/test/unit/oracle-query.test.ts b/packages/cubejs-schema-compiler/test/unit/oracle-query.test.ts index 307a5cc5400e5..e8c63d596ca67 100644 --- a/packages/cubejs-schema-compiler/test/unit/oracle-query.test.ts +++ b/packages/cubejs-schema-compiler/test/unit/oracle-query.test.ts @@ -119,7 +119,8 @@ describe('OracleQuery', () => { 'visitors.count' ], timeDimensions: [], - timezone: 'UTC' + timezone: 'UTC', + rowLimit: 10000, }); const queryAndParams = query.buildSqlAndParams(); @@ -157,8 +158,9 @@ describe('OracleQuery', () => { expect(sql).not.toMatch(/\bAS\s+q_\d+/i); expect(sql).not.toMatch(/\bas\s+q_\d+/); - // Should have q_0 alias (with space around it, indicating no AS) - expect(sql).toMatch(/\)\s+q_0\s+/); + // Should have q_0 alias (with space around it, indicating no AS). + // The native planner quotes the alias ("q_0"). + expect(sql).toMatch(/\)\s+"?q_0"?/); }); it('does not use AS keyword with multiple rolling window measures (YoY scenario)', async () => { @@ -188,8 +190,8 @@ describe('OracleQuery', () => { expect(sql).not.toMatch(/\bAS\s+q_\d+/i); expect(sql).not.toMatch(/\bas\s+q_\d+/); - // Verify pattern is ) q_X not ) AS q_X - expect(sql).toMatch(/\)\s+q_\d+/); + // Verify pattern is ) q_X not ) AS q_X (the native planner quotes the alias) + expect(sql).toMatch(/\)\s+"?q_\d+"?/); }); it('does not use AS keyword in INNER JOIN subqueries', async () => { @@ -221,7 +223,7 @@ describe('OracleQuery', () => { 'visitors.count' ], timezone: 'UTC', - limit: 100 + rowLimit: 100 }); const queryAndParams = query.buildSqlAndParams(); @@ -247,7 +249,7 @@ describe('OracleQuery', () => { dateRange: ['2020-01-01', '2020-12-31'] }], timezone: 'UTC', - limit: 50 + rowLimit: 50 }); const queryAndParams = query.buildSqlAndParams(); @@ -276,9 +278,10 @@ describe('OracleQuery', () => { const queryAndParams = query.buildSqlAndParams(); const sql = queryAndParams[0]; - // Should have multiple subquery aliases - expect(sql).toMatch(/\)\s+q_0\s+,/); - expect(sql).toMatch(/\)\s+q_1\s+/); + // Should have multiple subquery aliases without AS (the native planner + // quotes the aliases and joins subqueries explicitly rather than with commas). + expect(sql).toMatch(/\)\s+"?q_0"?/); + expect(sql).toMatch(/\)\s+"?q_1"?/); // Should NOT have AS before q_ aliases expect(sql).not.toMatch(/\bAS\s+q_\d+/i); diff --git a/packages/cubejs-testing-drivers/fixtures/oracle.json b/packages/cubejs-testing-drivers/fixtures/oracle.json new file mode 100644 index 0000000000000..39f4adabd7b5a --- /dev/null +++ b/packages/cubejs-testing-drivers/fixtures/oracle.json @@ -0,0 +1,248 @@ +{ + "cube": { + "environment": { + "CUBEJS_API_SECRET": "mysupersecret", + "CUBEJS_CACHE_AND_QUEUE_DRIVER": "cubestore", + "CUBEJS_CUBESTORE_HOST": "store", + "CUBEJS_DB_TYPE": "oracle", + "CUBEJS_DB_HOST": "data", + "CUBEJS_DB_PORT": "1521", + "CUBEJS_DB_NAME": "FREEPDB1", + "CUBEJS_DB_USER": "test", + "CUBEJS_DB_PASS": "test", + "CUBEJS_PG_SQL_PORT": "5656", + "CUBEJS_SQL_USER": "admin", + "CUBEJS_SQL_PASSWORD": "admin_password", + "CUBESQL_SQL_PUSH_DOWN": "true", + "CUBEJS_TESSERACT_SQL_PLANNER": "${DRIVERS_TESTS_CUBEJS_TESSERACT_SQL_PLANNER}", + "CUBEJS_TRANSPILATION_NATIVE": "${DRIVERS_TESTS_CUBEJS_TRANSPILATION_NATIVE}" + }, + "depends_on": ["data"], + "links": ["data"], + "ports" : ["4000", "5656"] + }, + "data": { + "image": "gvenzl/oracle-free:23-slim-faststart", + "environment": { + "ORACLE_PASSWORD": "test", + "APP_USER": "test", + "APP_USER_PASSWORD": "test" + }, + "ports" : ["1521"], + "healthcheck": { + "test": ["CMD", "healthcheck.sh"], + "interval": "10s", + "timeout": "10s", + "retries": 30, + "start_period": "30s" + } + }, + "cast": { + "SELECT_PREFIX": "", + "SELECT_SUFFIX": "", + "DATE_PREFIX": "to_date(", + "DATE_SUFFIX": ", 'YYYY-MM-DD')", + "CREATE_TBL_PREFIX": "CREATE TABLE ", + "CREATE_TBL_SUFFIX": " AS ", + "CREATE_SUB_PREFIX": "", + "CREATE_SUB_SUFFIX": "" + }, + "tables": { + "products": "products", + "customers": "customers", + "ecommerce": "ecommerce", + "bigecommerce": "bigecommerce", + "retailcalendar": "retailcalendar" + }, + "preAggregations": { + "Products": [], + "Customers": [ + { + "name": "RA", + "measures": ["CUBE.count", "CUBE.runningTotal"] + } + ], + "ECommerce": [ + { + "name": "SA", + "dimensions": ["CUBE.productName"], + "measures": [ + "CUBE.totalQuantity", + "CUBE.avgDiscount", + "CUBE.totalSales", + "CUBE.totalProfit" + ] + }, + { + "name": "TA", + "time_dimension": "CUBE.orderDate", + "granularity": "month", + "partition_granularity": "month", + "dimensions": ["CUBE.productName"], + "measures": [ + "CUBE.totalQuantity", + "CUBE.avgDiscount", + "CUBE.totalSales", + "CUBE.totalProfit" + ] + }, + { + "name": "TBuildOnlyHalfYear", + "time_dimension": "CUBE.orderDate", + "granularity": "build_only_half_year", + "partition_granularity": "year", + "dimensions": ["CUBE.productName"], + "measures": [ + "CUBE.totalQuantity" + ] + } + ], + "BigECommerce": [ + { + "name": "TA", + "time_dimension": "CUBE.orderDate", + "granularity": "month", + "partition_granularity": "year", + "dimensions": ["CUBE.productName", "CUBE.id"], + "measures": [ + "CUBE.totalQuantity", + "CUBE.avgDiscount", + "CUBE.totalSales", + "CUBE.totalProfit" + ] + }, + { + "name": "MultiTimeDimForCount", + "time_dimensions": [ + { + "dimension": "CUBE.completedDate", + "granularity": "day" + }, + { + "dimension": "CUBE.orderDate", + "granularity": "day" + } + ], + "partition_granularity": "month", + "measures": [ + "CUBE.count" + ] + }, + { + "name": "CategoryFlat", + "dimensions": ["CUBE.productName", "CUBE.id", "CUBE.category"], + "measures": [ + "CUBE.totalProfit" + ] + } + ] + }, + "skip": [ + "---------------------------------------", + "SKIPPED FOR ORACLE (streaming download not implemented)", + "downloadQueryResults ignores streamImport and always returns rows in memory,", + "so the stream test never gets a rowStream. The memory path IS implemented and tested.", + "---------------------------------------", + "must download query from the data source via stream", + + "---------------------------------------", + "SKIPPED FOR ALL ", + "---------------------------------------", + "querying Products: dimensions -- doesn't work wo ordering", + "querying ECommerce: total quantity, avg discount, total sales, total profit by product + order + total -- rounding in athena", + "querying ECommerce: total quantity, avg discount, total sales, total profit by product + order + total -- noisy test", + + "---------------------------------------", + "Requires Tesseract. ", + "---------------------------------------", + "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 BigECommerce with Retail Calendar: totalCountRetailYearAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo", + "Tesseract: querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo", + "Tesseract: querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo", + "Tesseract: SQL API: Timeshift measure from cube", + "querying BigECommerce: multi-stage group by time dimension", + "querying SwitchSourceTest: simple cross join", + "querying SwitchSourceTest: full cross join", + "querying SwitchSourceTest: filter by switch dimensions", + "querying BigECommerce: SeveralMultiStageMeasures", + "querying BigECommerce: two multi-stage branches sharing one pre-aggregation", + "querying BigECommerce: base measure plus multi-stage over non-partitioned pre-aggregation", + + "---------------------------------------", + "Legacy planner only (native/Tesseract path passes). Multi-level rolling-window", + "queries reference an inner base-table alias from the outer expression-based", + "GROUP BY (Oracle has no positional GROUP BY) -> ORA-00904 out of scope.", + "---------------------------------------", + "querying BigECommerce: time series in rolling window", + "querying BigECommerce: rolling window by 2 day", + "querying BigECommerce: rolling window by 2 week", + "querying BigECommerce: rolling window by 2 month", + "querying BigECommerce: rolling window YTD (month)", + "querying BigECommerce: rolling window YTD (month + week)", + "querying BigECommerce: rolling window YTD (month + week + no gran)", + "querying BigECommerce: rolling window YTD (month + week + day)", + "querying BigECommerce: rolling window YTD (month + week + day + no gran)", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByUnbounded", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByTrailing", + "querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading", + + "---------------------------------------", + "Mixed month + fixed-length custom granularity intervals are not supported on Oracle.", + "---------------------------------------", + "querying custom granularities ECommerce: count by three_months_by_march + no dimension", + "querying custom granularities ECommerce: count by three_months_by_march + dimension", + + "---------------------------------------", + "SQL API push down not yet supported on Oracle (rollups / date_trunc rewrites).", + "---------------------------------------", + "SQL API: post-aggregate percentage of total", + "SQL API: Nested Rollup", + "SQL API: Nested Rollup with aliases", + "SQL API: Rolling Window YTD (year + month + day + date_trunc equal)", + "SQL API: Rolling Window YTD (year + month + day + date_trunc IN)", + "SQL API: SQL push down push to cube quoted alias", + "SQL API: Date/time comparison with date_trunc with SQL push down" + ], + "tesseractSkip": [ + "querying Products: dimensions -- doesn't work wo ordering", + "querying ECommerce: total quantity, avg discount, total sales, total profit by product + order + total -- rounding in athena", + "querying ECommerce: total quantity, avg discount, total sales, total profit by product + order + total -- noisy test", + "querying BigECommerce with Retail Calendar: totalCountRetailMonthAgo", + "querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo", + "SQL API: Timeshift measure from cube", + + "SQL API: Simple Rollup", + "SQL API: Complex Rollup", + "SQL API: Rollup with aliases", + "SQL API: Rollup over exprs", + "SQL API: Nested Rollup", + "SQL API: Nested Rollup with aliases", + "SQL API: Nested Rollup over asterisk", + "SQL API: Extended nested Rollup over asterisk", + "SQL API: SQL push down push to cube quoted alias", + + "---- Rolling window without date range needs generated time series, which", + "---- Oracle does not implement (same as MSSQL). ----", + "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", + + "---- Mixed month + fixed-length custom granularity intervals are not supported on Oracle ----", + "querying custom granularities ECommerce: count by three_months_by_march + no dimension", + "querying custom granularities ECommerce: count by three_months_by_march + dimension", + + "---- CubeSQL can't rewrite this query shape (date_trunc compared to a cast); mysql/mssql skip it too ----", + "SQL API: Date/time comparison with date_trunc with SQL push down", + + "---- Different results comparing to baseQuery version. Need to investigate ----", + "querying BigECommerce: rolling window YTD (month + week)", + "querying BigECommerce: rolling window YTD (month + week + no gran)", + "querying BigECommerce: rolling window YTD without granularity" + ] +} diff --git a/packages/cubejs-testing-drivers/package.json b/packages/cubejs-testing-drivers/package.json index 68ba6c71434ba..c6a77a2656a9b 100644 --- a/packages/cubejs-testing-drivers/package.json +++ b/packages/cubejs-testing-drivers/package.json @@ -46,6 +46,9 @@ "mysql-driver": "yarn test-driver -i dist/test/mysql-driver.test.js", "mysql-core": "yarn test-driver -i dist/test/mysql-core.test.js", "mysql-full": "yarn test-driver -i dist/test/mysql-full.test.js", + "oracle-driver": "yarn test-driver -i dist/test/oracle-driver.test.js", + "oracle-core": "yarn test-driver -i dist/test/oracle-core.test.js", + "oracle-full": "yarn test-driver -i dist/test/oracle-full.test.js", "postgres-driver": "yarn test-driver -i dist/test/postgres-driver.test.js", "postgres-core": "yarn test-driver -i dist/test/postgres-core.test.js", "postgres-full": "yarn test-driver -i dist/test/postgres-full.test.js", @@ -66,7 +69,7 @@ "redshift-core": "yarn test-driver -i dist/test/redshift-core.test.js", "redshift-full": "yarn test-driver -i dist/test/redshift-full.test.js", "redshift-export-bucket-s3-full": "yarn test-driver -i dist/test/redshift-export-bucket-s3-full.test.js", - "update-all-snapshots-local": "yarn run athena-export-bucket-s3-full --mode=local -u; yarn run bigquery-export-bucket-gcs-full --mode=local -u; yarn run clickhouse-full --mode=local -u; yarn run clickhouse-export-bucket-s3-full --mode=local -u; yarn run clickhouse-export-bucket-s3-prefix-full --mode=local -u; yarn run databricks-jdbc-export-bucket-azure-full --mode=local -u; yarn run databricks-jdbc-export-bucket-azure-prefix-full --mode=local -u; yarn run databricks-jdbc-export-bucket-gcs-full --mode=local -u; yarn run databricks-jdbc-export-bucket-gcs-prefix-full --mode=local -u; yarn run databricks-jdbc-export-bucket-s3-full --mode=local -u; yarn run databricks-jdbc-export-bucket-s3-prefix-full --mode=local -u; yarn run databricks-jdbc-full --mode=local -u; yarn run mssql-full --mode=local -u; yarn run mysql-full --mode=local -u; yarn run postgres-full --mode=local -u; yarn run redshift-export-bucket-s3-full --mode=local -u; yarn run redshift-full --mode=local -u; yarn run snowflake-encrypted-pk-full --mode=local -u; yarn run snowflake-export-bucket-azure-full --mode=local -u; yarn run snowflake-export-bucket-azure-prefix-full --mode=local -u; yarn run snowflake-export-bucket-azure-via-storage-integration-full --mode=local -u; yarn run snowflake-export-bucket-gcs-full --mode=local -u; yarn run snowflake-export-bucket-gcs-prefix-full --mode=local -u; yarn run snowflake-export-bucket-s3-full --mode=local -u; yarn run snowflake-export-bucket-s3-via-storage-integration-iam-roles-full --mode=local -u; yarn run snowflake-export-bucket-s3-prefix-full --mode=local -u; yarn run snowflake-export-bucket-azure-prefix-full --mode=local -u; yarn run snowflake-export-bucket-azure-full --mode=local -u; yarn run snowflake-full --mode=local -u", + "update-all-snapshots-local": "yarn run oracle-full --mode=local -u; yarn run athena-export-bucket-s3-full --mode=local -u; yarn run bigquery-export-bucket-gcs-full --mode=local -u; yarn run clickhouse-full --mode=local -u; yarn run clickhouse-export-bucket-s3-full --mode=local -u; yarn run clickhouse-export-bucket-s3-prefix-full --mode=local -u; yarn run databricks-jdbc-export-bucket-azure-full --mode=local -u; yarn run databricks-jdbc-export-bucket-azure-prefix-full --mode=local -u; yarn run databricks-jdbc-export-bucket-gcs-full --mode=local -u; yarn run databricks-jdbc-export-bucket-gcs-prefix-full --mode=local -u; yarn run databricks-jdbc-export-bucket-s3-full --mode=local -u; yarn run databricks-jdbc-export-bucket-s3-prefix-full --mode=local -u; yarn run databricks-jdbc-full --mode=local -u; yarn run mssql-full --mode=local -u; yarn run mysql-full --mode=local -u; yarn run postgres-full --mode=local -u; yarn run redshift-export-bucket-s3-full --mode=local -u; yarn run redshift-full --mode=local -u; yarn run snowflake-encrypted-pk-full --mode=local -u; yarn run snowflake-export-bucket-azure-full --mode=local -u; yarn run snowflake-export-bucket-azure-prefix-full --mode=local -u; yarn run snowflake-export-bucket-azure-via-storage-integration-full --mode=local -u; yarn run snowflake-export-bucket-gcs-full --mode=local -u; yarn run snowflake-export-bucket-gcs-prefix-full --mode=local -u; yarn run snowflake-export-bucket-s3-full --mode=local -u; yarn run snowflake-export-bucket-s3-via-storage-integration-iam-roles-full --mode=local -u; yarn run snowflake-export-bucket-s3-prefix-full --mode=local -u; yarn run snowflake-export-bucket-azure-prefix-full --mode=local -u; yarn run snowflake-export-bucket-azure-full --mode=local -u; yarn run snowflake-full --mode=local -u", "tst": "clear && yarn tsc && yarn bigquery-core" }, "files": [ @@ -83,6 +86,7 @@ "@cubejs-backend/linter": "1.6.64", "@cubejs-backend/mssql-driver": "1.6.64", "@cubejs-backend/mysql-driver": "1.6.64", + "@cubejs-backend/oracle-driver": "1.6.64", "@cubejs-backend/postgres-driver": "1.6.64", "@cubejs-backend/query-orchestrator": "1.6.64", "@cubejs-backend/server-core": "1.6.64", diff --git a/packages/cubejs-testing-drivers/src/helpers/runEnvironment.ts b/packages/cubejs-testing-drivers/src/helpers/runEnvironment.ts index 60ec276b9ac13..3e690be7243b8 100644 --- a/packages/cubejs-testing-drivers/src/helpers/runEnvironment.ts +++ b/packages/cubejs-testing-drivers/src/helpers/runEnvironment.ts @@ -160,6 +160,13 @@ export async function runEnvironment( if (type === 'clickhouse') { compose.withWaitStrategy('data', Wait.forHealthCheck()); } + // Oracle takes noticeably longer to become ready than the global startup + // timeout allows, and it only registers the FREEPDB1 service once fully up, + // so wait on the container HEALTHCHECK (defined in the oracle fixture) with + // an extended timeout before connecting. + if (type === 'oracle') { + compose.withWaitStrategy('data', Wait.forHealthCheck().withStartupTimeout(240 * 1000)); + } const environment = await compose.up(); diff --git a/packages/cubejs-testing-drivers/src/tests/testConnection.ts b/packages/cubejs-testing-drivers/src/tests/testConnection.ts index 9d0900b77f827..a57187cdaf627 100644 --- a/packages/cubejs-testing-drivers/src/tests/testConnection.ts +++ b/packages/cubejs-testing-drivers/src/tests/testConnection.ts @@ -35,7 +35,7 @@ export function testConnection(type: string): void { it(name, test); } } - + beforeAll(async () => { env = await runEnvironment(type, 'driver'); if (env.data) { @@ -44,16 +44,16 @@ export function testConnection(type: string): void { } driver = (await getDriver(type)).source; }); - + afterAll(async () => { await driver.release(); await env.stop(); }); - + execute('must establish a connection', async () => { await driver.testConnection(); }); - + execute('must creates a data source', async () => { query = getCreateQueries(type, 'driver'); await Promise.all(query.map(async (q) => { @@ -122,6 +122,7 @@ export function testConnection(type: string): void { execute('must download query from the data source via memory', async () => { query = getSelectQueries(type, 'driver'); expect(driver.downloadQueryResults).toBeDefined(); + const response = await Promise.all( query.map(async (q) => { const memory = ( @@ -136,6 +137,7 @@ export function testConnection(type: string): void { }; }) ); + expect(response.length).toBe(3); expect(response[0].data.length).toBe(28); expect(response[1].data.length).toBe(41); @@ -145,6 +147,7 @@ export function testConnection(type: string): void { execute('must download query from the data source via stream', async () => { query = getSelectQueries(type, 'driver'); expect(driver.downloadQueryResults).toBeDefined(); + const response = await Promise.all( query.map(async (q) => { const stream = ( @@ -170,6 +173,7 @@ export function testConnection(type: string): void { return { types, data }; }) ); + expect(response.length).toBe(3); expect(response[0].data.length).toBe(28); expect(response[1].data.length).toBe(41); diff --git a/packages/cubejs-testing-drivers/test/__snapshots__/oracle-full.test.ts.snap b/packages/cubejs-testing-drivers/test/__snapshots__/oracle-full.test.ts.snap new file mode 100644 index 0000000000000..521530fd8e12c --- /dev/null +++ b/packages/cubejs-testing-drivers/test/__snapshots__/oracle-full.test.ts.snap @@ -0,0 +1,16134 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: Complex Rollup 1`] = ` +Array [ + Object { + "SUM(ECommerce.count)": "1", + "city": "Detroit", + "orderDate": 2020-01-23T00:00:00.000Z, + "orderId": "CA-2017-145142", + "rowId": 523, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Lorain", + "orderDate": 2020-01-01T00:00:00.000Z, + "orderId": "CA-2017-107503", + "rowId": 849, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Olympia", + "orderDate": 2020-06-17T00:00:00.000Z, + "orderId": "CA-2017-118437", + "rowId": 1013, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Vancouver", + "orderDate": 2020-10-30T00:00:00.000Z, + "orderId": "CA-2017-139661", + "rowId": 1494, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "orderDate": 2020-06-25T00:00:00.000Z, + "orderId": "CA-2017-133648", + "rowId": 1995, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "orderDate": 2020-09-23T00:00:00.000Z, + "orderId": "CA-2017-138422", + "rowId": 2329, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "orderDate": 2020-03-17T00:00:00.000Z, + "orderId": "CA-2017-140949", + "rowId": 2455, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "orderDate": 2020-05-13T00:00:00.000Z, + "orderId": "CA-2017-149048", + "rowId": 2595, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Provo", + "orderDate": 2020-09-17T00:00:00.000Z, + "orderId": "CA-2017-112515", + "rowId": 2655, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "orderDate": 2020-11-28T00:00:00.000Z, + "orderId": "CA-2017-123372", + "rowId": 2661, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Glendale", + "orderDate": 2020-11-12T00:00:00.000Z, + "orderId": "CA-2017-134915", + "rowId": 2952, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "San Francisco", + "orderDate": 2020-10-19T00:00:00.000Z, + "orderId": "CA-2017-131492", + "rowId": 3059, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "San Francisco", + "orderDate": 2020-10-19T00:00:00.000Z, + "orderId": "CA-2017-131492", + "rowId": 3060, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Louisville", + "orderDate": 2020-05-27T00:00:00.000Z, + "orderId": "US-2017-132297", + "rowId": 3083, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Auburn", + "orderDate": 2020-06-11T00:00:00.000Z, + "orderId": "CA-2017-102554", + "rowId": 3448, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Omaha", + "orderDate": 2020-05-29T00:00:00.000Z, + "orderId": "CA-2017-144568", + "rowId": 3717, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Bakersfield", + "orderDate": 2020-09-02T00:00:00.000Z, + "orderId": "CA-2017-123001", + "rowId": 3934, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Philadelphia", + "orderDate": 2020-11-21T00:00:00.000Z, + "orderId": "CA-2017-100811", + "rowId": 4012, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Lafayette", + "orderDate": 2020-12-24T00:00:00.000Z, + "orderId": "CA-2017-124296", + "rowId": 4031, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "orderDate": 2020-05-14T00:00:00.000Z, + "orderId": "CA-2017-115546", + "rowId": 4161, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "orderDate": 2020-11-11T00:00:00.000Z, + "orderId": "CA-2017-120327", + "rowId": 4227, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "orderDate": 2020-11-02T00:00:00.000Z, + "orderId": "CA-2017-143567", + "rowId": 4882, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Detroit", + "orderDate": 2020-09-01T00:00:00.000Z, + "orderId": "CA-2017-145653", + "rowId": 5220, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "orderDate": 2020-12-14T00:00:00.000Z, + "orderId": "CA-2017-147333", + "rowId": 5277, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Los Angeles", + "orderDate": 2020-06-03T00:00:00.000Z, + "orderId": "CA-2017-145772", + "rowId": 6125, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Marion", + "orderDate": 2020-12-01T00:00:00.000Z, + "orderId": "CA-2017-145660", + "rowId": 6205, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Oakland", + "orderDate": 2020-12-02T00:00:00.000Z, + "orderId": "CA-2017-102379", + "rowId": 6272, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Baltimore", + "orderDate": 2020-05-14T00:00:00.000Z, + "orderId": "US-2017-133361", + "rowId": 6459, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Arlington", + "orderDate": 2020-09-08T00:00:00.000Z, + "orderId": "US-2017-124779", + "rowId": 6651, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Houston", + "orderDate": 2020-03-26T00:00:00.000Z, + "orderId": "US-2017-141677", + "rowId": 7174, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "orderDate": 2020-12-04T00:00:00.000Z, + "orderId": "CA-2017-109183", + "rowId": 7293, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "orderDate": 2020-06-10T00:00:00.000Z, + "orderId": "CA-2017-112172", + "rowId": 7310, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Philadelphia", + "orderDate": 2020-04-10T00:00:00.000Z, + "orderId": "CA-2017-135069", + "rowId": 7425, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "orderDate": 2020-12-14T00:00:00.000Z, + "orderId": "CA-2017-151799", + "rowId": 7698, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Lakewood", + "orderDate": 2020-10-12T00:00:00.000Z, + "orderId": "CA-2017-150091", + "rowId": 8425, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Dallas", + "orderDate": 2020-11-06T00:00:00.000Z, + "orderId": "US-2017-119319", + "rowId": 8621, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Decatur", + "orderDate": 2020-02-16T00:00:00.000Z, + "orderId": "CA-2017-163265", + "rowId": 8673, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "orderDate": 2020-06-15T00:00:00.000Z, + "orderId": "CA-2017-119284", + "rowId": 8697, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Morristown", + "orderDate": 2020-09-17T00:00:00.000Z, + "orderId": "CA-2017-126928", + "rowId": 8878, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "orderDate": 2020-12-25T00:00:00.000Z, + "orderId": "CA-2017-105620", + "rowId": 8958, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "orderDate": 2020-11-05T00:00:00.000Z, + "orderId": "CA-2017-102925", + "rowId": 9473, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "orderDate": 2020-06-25T00:00:00.000Z, + "orderId": "CA-2017-116127", + "rowId": 9584, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "orderDate": 2020-11-16T00:00:00.000Z, + "orderId": "CA-2017-160633", + "rowId": 9618, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Bowling", + "orderDate": 2020-11-16T00:00:00.000Z, + "orderId": "CA-2017-160633", + "rowId": 9619, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: Date/time comparison with SQL push down 1`] = ` +Array [ + Object { + "measure(BigECommerce.rollingCountBy2Day)": "12", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: Extended nested Rollup over asterisk 1`] = ` +Array [ + Object { + "SUM(a.count)": "1", + "order": "CA-2017-100811", + "row": 4012, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-102379", + "row": 6272, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-102554", + "row": 3448, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-102925", + "row": 9473, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-105620", + "row": 8958, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-107503", + "row": 849, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-109183", + "row": 7293, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-112172", + "row": 7310, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-112515", + "row": 2655, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-115546", + "row": 4161, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-116127", + "row": 9584, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-118437", + "row": 1013, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-119284", + "row": 8697, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-120327", + "row": 4227, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-123001", + "row": 3934, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-123372", + "row": 2661, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-124296", + "row": 4031, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-126928", + "row": 8878, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-131492", + "row": 3060, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-131492", + "row": 3059, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-133648", + "row": 1995, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-134915", + "row": 2952, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-135069", + "row": 7425, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-138422", + "row": 2329, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-139661", + "row": 1494, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-140949", + "row": 2455, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-143567", + "row": 4882, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-144568", + "row": 3717, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-145142", + "row": 523, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-145653", + "row": 5220, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-145660", + "row": 6205, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-145772", + "row": 6125, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-147333", + "row": 5277, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-149048", + "row": 2595, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-150091", + "row": 8425, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-151799", + "row": 7698, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-160633", + "row": 9619, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-160633", + "row": 9618, + }, + Object { + "SUM(a.count)": "1", + "order": "CA-2017-163265", + "row": 8673, + }, + Object { + "SUM(a.count)": "1", + "order": "US-2017-119319", + "row": 8621, + }, + Object { + "SUM(a.count)": "1", + "order": "US-2017-124779", + "row": 6651, + }, + Object { + "SUM(a.count)": "1", + "order": "US-2017-132297", + "row": 3083, + }, + Object { + "SUM(a.count)": "1", + "order": "US-2017-133361", + "row": 6459, + }, + Object { + "SUM(a.count)": "1", + "order": "US-2017-141677", + "row": 7174, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: NULLS FIRST/LAST SQL push down: nulls_first_last_sql_push_down 1`] = ` +Array [ + Object { + "category": null, + }, + Object { + "category": "Office Supplies", + }, + Object { + "category": "Technology", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: Nested Rollup over asterisk 1`] = ` +Array [ + Object { + "SUM(a.count)": "1", + "date": 2020-01-23T00:00:00.000Z, + "order": "CA-2017-145142", + "row": 523, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-01-01T00:00:00.000Z, + "order": "CA-2017-107503", + "row": 849, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-06-17T00:00:00.000Z, + "order": "CA-2017-118437", + "row": 1013, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-10-30T00:00:00.000Z, + "order": "CA-2017-139661", + "row": 1494, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-06-25T00:00:00.000Z, + "order": "CA-2017-133648", + "row": 1995, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-09-23T00:00:00.000Z, + "order": "CA-2017-138422", + "row": 2329, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-03-17T00:00:00.000Z, + "order": "CA-2017-140949", + "row": 2455, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-05-13T00:00:00.000Z, + "order": "CA-2017-149048", + "row": 2595, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-09-17T00:00:00.000Z, + "order": "CA-2017-112515", + "row": 2655, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-11-28T00:00:00.000Z, + "order": "CA-2017-123372", + "row": 2661, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-11-12T00:00:00.000Z, + "order": "CA-2017-134915", + "row": 2952, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-10-19T00:00:00.000Z, + "order": "CA-2017-131492", + "row": 3059, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-10-19T00:00:00.000Z, + "order": "CA-2017-131492", + "row": 3060, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-05-27T00:00:00.000Z, + "order": "US-2017-132297", + "row": 3083, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-06-11T00:00:00.000Z, + "order": "CA-2017-102554", + "row": 3448, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-05-29T00:00:00.000Z, + "order": "CA-2017-144568", + "row": 3717, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-09-02T00:00:00.000Z, + "order": "CA-2017-123001", + "row": 3934, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-11-21T00:00:00.000Z, + "order": "CA-2017-100811", + "row": 4012, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-12-24T00:00:00.000Z, + "order": "CA-2017-124296", + "row": 4031, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-05-14T00:00:00.000Z, + "order": "CA-2017-115546", + "row": 4161, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-11-11T00:00:00.000Z, + "order": "CA-2017-120327", + "row": 4227, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-11-02T00:00:00.000Z, + "order": "CA-2017-143567", + "row": 4882, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-09-01T00:00:00.000Z, + "order": "CA-2017-145653", + "row": 5220, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-12-14T00:00:00.000Z, + "order": "CA-2017-147333", + "row": 5277, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-06-03T00:00:00.000Z, + "order": "CA-2017-145772", + "row": 6125, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-12-01T00:00:00.000Z, + "order": "CA-2017-145660", + "row": 6205, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-12-02T00:00:00.000Z, + "order": "CA-2017-102379", + "row": 6272, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-05-14T00:00:00.000Z, + "order": "US-2017-133361", + "row": 6459, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-09-08T00:00:00.000Z, + "order": "US-2017-124779", + "row": 6651, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-03-26T00:00:00.000Z, + "order": "US-2017-141677", + "row": 7174, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-12-04T00:00:00.000Z, + "order": "CA-2017-109183", + "row": 7293, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-06-10T00:00:00.000Z, + "order": "CA-2017-112172", + "row": 7310, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-04-10T00:00:00.000Z, + "order": "CA-2017-135069", + "row": 7425, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-12-14T00:00:00.000Z, + "order": "CA-2017-151799", + "row": 7698, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-10-12T00:00:00.000Z, + "order": "CA-2017-150091", + "row": 8425, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-11-06T00:00:00.000Z, + "order": "US-2017-119319", + "row": 8621, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-02-16T00:00:00.000Z, + "order": "CA-2017-163265", + "row": 8673, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-06-15T00:00:00.000Z, + "order": "CA-2017-119284", + "row": 8697, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-09-17T00:00:00.000Z, + "order": "CA-2017-126928", + "row": 8878, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-12-25T00:00:00.000Z, + "order": "CA-2017-105620", + "row": 8958, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-11-05T00:00:00.000Z, + "order": "CA-2017-102925", + "row": 9473, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-06-25T00:00:00.000Z, + "order": "CA-2017-116127", + "row": 9584, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-11-16T00:00:00.000Z, + "order": "CA-2017-160633", + "row": 9618, + }, + Object { + "SUM(a.count)": "1", + "date": 2020-11-16T00:00:00.000Z, + "order": "CA-2017-160633", + "row": 9619, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: Rolling Window YTD (year + month + day + date_trunc IN) 1`] = ` +Array [ + Object { + "orderDateD": 2020-01-01T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-02T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-03T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-04T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-05T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-06T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-07T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-08T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-09T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-10T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-11T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-12T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-13T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-14T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-15T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-16T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-17T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-18T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-19T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-20T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-21T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-22T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-23T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-24T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-25T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-26T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-27T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-28T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-29T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-30T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-31T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-01T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-02T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-03T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-04T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-05T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-06T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-07T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-08T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-09T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-10T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-11T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-12T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-13T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-14T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-15T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-16T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-17T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-18T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-19T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-20T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-21T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-22T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-23T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-24T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-25T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-26T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-27T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-28T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-29T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-01T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-02T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-03T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-04T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-05T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-06T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-07T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-08T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-09T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-10T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-11T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-12T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-13T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-14T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-15T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-16T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-17T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-18T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-19T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-20T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-21T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-22T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-23T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-24T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-25T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-26T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-03-27T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-03-28T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-03-29T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-03-30T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-03-31T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-01T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-02T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-03T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-04T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-05T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-06T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-07T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-08T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-09T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-10T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-11T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-12T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-13T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-14T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-15T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-16T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-17T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-18T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-19T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-20T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-21T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-22T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-23T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-24T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-25T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-26T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-27T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-28T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-29T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-30T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-01T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-02T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-03T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-04T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-05T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-06T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-07T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-08T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-09T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-10T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-11T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-12T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-13T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "7", + }, + Object { + "orderDateD": 2020-05-14T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-15T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-16T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-17T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-18T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-19T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-20T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-21T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-22T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-23T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-24T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-25T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-26T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-27T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "10", + }, + Object { + "orderDateD": 2020-05-28T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "10", + }, + Object { + "orderDateD": 2020-05-29T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "11", + }, + Object { + "orderDateD": 2020-05-30T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "11", + }, + Object { + "orderDateD": 2020-05-31T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "11", + }, + Object { + "orderDateD": 2020-06-01T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "11", + }, + Object { + "orderDateD": 2020-06-02T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "11", + }, + Object { + "orderDateD": 2020-06-03T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-04T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-05T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-06T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-07T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-08T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-09T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-10T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "13", + }, + Object { + "orderDateD": 2020-06-11T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "14", + }, + Object { + "orderDateD": 2020-06-12T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "14", + }, + Object { + "orderDateD": 2020-06-13T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "14", + }, + Object { + "orderDateD": 2020-06-14T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "14", + }, + Object { + "orderDateD": 2020-06-15T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "15", + }, + Object { + "orderDateD": 2020-06-16T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "15", + }, + Object { + "orderDateD": 2020-06-17T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-18T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-19T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-20T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-21T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-22T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-23T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-24T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-25T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-06-26T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-06-27T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-06-28T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-06-29T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-06-30T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-01T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-02T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-03T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-04T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-05T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-06T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-07T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-08T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-09T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-10T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-11T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-12T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-13T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-14T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-15T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-16T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-17T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-18T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-19T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-20T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-21T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-22T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-23T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-24T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-25T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-26T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-27T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-28T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-29T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-30T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-31T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-01T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-02T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-03T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-04T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-05T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-06T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-07T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-08T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-09T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-10T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-11T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-12T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-13T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-14T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-15T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-16T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-17T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-18T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-19T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-20T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-21T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-22T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-23T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-24T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-25T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-26T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-27T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-28T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-29T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-30T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-31T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-09-01T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "19", + }, + Object { + "orderDateD": 2020-09-02T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "20", + }, + Object { + "orderDateD": 2020-09-03T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "20", + }, + Object { + "orderDateD": 2020-09-04T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "20", + }, + Object { + "orderDateD": 2020-09-05T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "20", + }, + Object { + "orderDateD": 2020-09-06T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "20", + }, + Object { + "orderDateD": 2020-09-07T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "20", + }, + Object { + "orderDateD": 2020-09-08T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-09T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-10T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-11T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-12T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-13T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-14T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-15T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-16T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-17T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "23", + }, + Object { + "orderDateD": 2020-09-18T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "23", + }, + Object { + "orderDateD": 2020-09-19T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "23", + }, + Object { + "orderDateD": 2020-09-20T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "23", + }, + Object { + "orderDateD": 2020-09-21T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "23", + }, + Object { + "orderDateD": 2020-09-22T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "23", + }, + Object { + "orderDateD": 2020-09-23T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-24T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-25T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-26T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-27T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-28T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-29T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-30T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-01T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-02T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-03T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-04T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-05T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-06T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-07T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-08T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-09T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-10T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-11T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-12T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-13T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-14T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-15T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-16T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-17T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-18T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-19T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-20T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-21T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-22T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-23T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-24T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-25T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-26T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-27T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-28T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-29T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-30T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "28", + }, + Object { + "orderDateD": 2020-10-31T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "28", + }, + Object { + "orderDateD": 2020-11-01T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "28", + }, + Object { + "orderDateD": 2020-11-02T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "29", + }, + Object { + "orderDateD": 2020-11-03T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "29", + }, + Object { + "orderDateD": 2020-11-04T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "29", + }, + Object { + "orderDateD": 2020-11-05T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "30", + }, + Object { + "orderDateD": 2020-11-06T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "31", + }, + Object { + "orderDateD": 2020-11-07T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "31", + }, + Object { + "orderDateD": 2020-11-08T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "31", + }, + Object { + "orderDateD": 2020-11-09T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "31", + }, + Object { + "orderDateD": 2020-11-10T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "31", + }, + Object { + "orderDateD": 2020-11-11T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "32", + }, + Object { + "orderDateD": 2020-11-12T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "33", + }, + Object { + "orderDateD": 2020-11-13T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "33", + }, + Object { + "orderDateD": 2020-11-14T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "33", + }, + Object { + "orderDateD": 2020-11-15T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "33", + }, + Object { + "orderDateD": 2020-11-16T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "35", + }, + Object { + "orderDateD": 2020-11-17T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "35", + }, + Object { + "orderDateD": 2020-11-18T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "35", + }, + Object { + "orderDateD": 2020-11-19T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "35", + }, + Object { + "orderDateD": 2020-11-20T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "35", + }, + Object { + "orderDateD": 2020-11-21T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-22T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-23T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-24T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-25T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-26T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-27T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-28T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "37", + }, + Object { + "orderDateD": 2020-11-29T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "37", + }, + Object { + "orderDateD": 2020-11-30T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "37", + }, + Object { + "orderDateD": 2020-12-01T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "38", + }, + Object { + "orderDateD": 2020-12-02T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "39", + }, + Object { + "orderDateD": 2020-12-03T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "39", + }, + Object { + "orderDateD": 2020-12-04T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-05T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-06T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-07T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-08T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-09T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-10T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-11T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-12T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-13T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-14T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-15T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-16T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-17T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-18T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-19T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-20T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-21T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-22T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-23T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-24T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "43", + }, + Object { + "orderDateD": 2020-12-25T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, + Object { + "orderDateD": 2020-12-26T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, + Object { + "orderDateD": 2020-12-27T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, + Object { + "orderDateD": 2020-12-28T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, + Object { + "orderDateD": 2020-12-29T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, + Object { + "orderDateD": 2020-12-30T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, + Object { + "orderDateD": 2020-12-31T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: Rolling Window YTD (year + month + day + date_trunc equal) 1`] = ` +Array [ + Object { + "orderDateD": 2020-01-01T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-02T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-03T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-04T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-05T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-06T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-07T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-08T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-09T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-10T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-11T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-12T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-13T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-14T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-15T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-16T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-17T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-18T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-19T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-20T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-21T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-22T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "1", + }, + Object { + "orderDateD": 2020-01-23T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-24T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-25T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-26T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-27T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-28T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-29T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-30T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-01-31T00:00:00.000Z, + "orderDateM": 2020-01-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-01T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-02T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-03T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-04T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-05T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-06T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-07T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-08T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-09T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-10T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-11T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-12T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-13T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-14T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-15T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "2", + }, + Object { + "orderDateD": 2020-02-16T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-17T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-18T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-19T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-20T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-21T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-22T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-23T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-24T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-25T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-26T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-27T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-28T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-02-29T00:00:00.000Z, + "orderDateM": 2020-02-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-01T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-02T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-03T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-04T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-05T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-06T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-07T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-08T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-09T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-10T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-11T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-12T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-13T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-14T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-15T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-16T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "3", + }, + Object { + "orderDateD": 2020-03-17T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-18T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-19T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-20T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-21T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-22T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-23T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-24T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-25T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "4", + }, + Object { + "orderDateD": 2020-03-26T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-03-27T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-03-28T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-03-29T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-03-30T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-03-31T00:00:00.000Z, + "orderDateM": 2020-03-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-01T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-02T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-03T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-04T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-05T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-06T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-07T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-08T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-09T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "5", + }, + Object { + "orderDateD": 2020-04-10T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-11T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-12T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-13T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-14T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-15T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-16T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-17T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-18T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-19T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-20T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-21T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-22T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-23T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-24T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-25T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-26T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-27T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-28T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-29T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-04-30T00:00:00.000Z, + "orderDateM": 2020-04-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-01T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-02T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-03T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-04T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-05T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-06T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-07T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-08T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-09T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-10T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-11T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-12T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "6", + }, + Object { + "orderDateD": 2020-05-13T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "7", + }, + Object { + "orderDateD": 2020-05-14T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-15T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-16T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-17T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-18T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-19T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-20T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-21T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-22T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-23T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-24T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-25T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-26T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "9", + }, + Object { + "orderDateD": 2020-05-27T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "10", + }, + Object { + "orderDateD": 2020-05-28T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "10", + }, + Object { + "orderDateD": 2020-05-29T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "11", + }, + Object { + "orderDateD": 2020-05-30T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "11", + }, + Object { + "orderDateD": 2020-05-31T00:00:00.000Z, + "orderDateM": 2020-05-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "11", + }, + Object { + "orderDateD": 2020-06-01T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "11", + }, + Object { + "orderDateD": 2020-06-02T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "11", + }, + Object { + "orderDateD": 2020-06-03T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-04T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-05T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-06T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-07T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-08T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-09T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "12", + }, + Object { + "orderDateD": 2020-06-10T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "13", + }, + Object { + "orderDateD": 2020-06-11T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "14", + }, + Object { + "orderDateD": 2020-06-12T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "14", + }, + Object { + "orderDateD": 2020-06-13T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "14", + }, + Object { + "orderDateD": 2020-06-14T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "14", + }, + Object { + "orderDateD": 2020-06-15T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "15", + }, + Object { + "orderDateD": 2020-06-16T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "15", + }, + Object { + "orderDateD": 2020-06-17T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-18T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-19T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-20T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-21T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-22T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-23T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-24T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "16", + }, + Object { + "orderDateD": 2020-06-25T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-06-26T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-06-27T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-06-28T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-06-29T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-06-30T00:00:00.000Z, + "orderDateM": 2020-06-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-01T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-02T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-03T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-04T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-05T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-06T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-07T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-08T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-09T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-10T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-11T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-12T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-13T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-14T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-15T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-16T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-17T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-18T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-19T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-20T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-21T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-22T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-23T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-24T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-25T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-26T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-27T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-28T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-29T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-30T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-07-31T00:00:00.000Z, + "orderDateM": 2020-07-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-01T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-02T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-03T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-04T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-05T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-06T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-07T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-08T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-09T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-10T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-11T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-12T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-13T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-14T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-15T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-16T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-17T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-18T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-19T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-20T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-21T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-22T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-23T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-24T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-25T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-26T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-27T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-28T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-29T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-30T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-08-31T00:00:00.000Z, + "orderDateM": 2020-08-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "18", + }, + Object { + "orderDateD": 2020-09-01T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "19", + }, + Object { + "orderDateD": 2020-09-02T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "20", + }, + Object { + "orderDateD": 2020-09-03T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "20", + }, + Object { + "orderDateD": 2020-09-04T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "20", + }, + Object { + "orderDateD": 2020-09-05T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "20", + }, + Object { + "orderDateD": 2020-09-06T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "20", + }, + Object { + "orderDateD": 2020-09-07T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "20", + }, + Object { + "orderDateD": 2020-09-08T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-09T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-10T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-11T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-12T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-13T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-14T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-15T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-16T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "21", + }, + Object { + "orderDateD": 2020-09-17T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "23", + }, + Object { + "orderDateD": 2020-09-18T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "23", + }, + Object { + "orderDateD": 2020-09-19T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "23", + }, + Object { + "orderDateD": 2020-09-20T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "23", + }, + Object { + "orderDateD": 2020-09-21T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "23", + }, + Object { + "orderDateD": 2020-09-22T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "23", + }, + Object { + "orderDateD": 2020-09-23T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-24T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-25T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-26T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-27T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-28T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-29T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-09-30T00:00:00.000Z, + "orderDateM": 2020-09-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-01T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-02T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-03T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-04T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-05T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-06T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-07T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-08T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-09T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-10T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-11T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "24", + }, + Object { + "orderDateD": 2020-10-12T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-13T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-14T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-15T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-16T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-17T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-18T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "25", + }, + Object { + "orderDateD": 2020-10-19T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-20T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-21T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-22T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-23T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-24T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-25T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-26T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-27T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-28T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-29T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "27", + }, + Object { + "orderDateD": 2020-10-30T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "28", + }, + Object { + "orderDateD": 2020-10-31T00:00:00.000Z, + "orderDateM": 2020-10-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "28", + }, + Object { + "orderDateD": 2020-11-01T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "28", + }, + Object { + "orderDateD": 2020-11-02T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "29", + }, + Object { + "orderDateD": 2020-11-03T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "29", + }, + Object { + "orderDateD": 2020-11-04T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "29", + }, + Object { + "orderDateD": 2020-11-05T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "30", + }, + Object { + "orderDateD": 2020-11-06T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "31", + }, + Object { + "orderDateD": 2020-11-07T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "31", + }, + Object { + "orderDateD": 2020-11-08T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "31", + }, + Object { + "orderDateD": 2020-11-09T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "31", + }, + Object { + "orderDateD": 2020-11-10T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "31", + }, + Object { + "orderDateD": 2020-11-11T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "32", + }, + Object { + "orderDateD": 2020-11-12T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "33", + }, + Object { + "orderDateD": 2020-11-13T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "33", + }, + Object { + "orderDateD": 2020-11-14T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "33", + }, + Object { + "orderDateD": 2020-11-15T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "33", + }, + Object { + "orderDateD": 2020-11-16T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "35", + }, + Object { + "orderDateD": 2020-11-17T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "35", + }, + Object { + "orderDateD": 2020-11-18T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "35", + }, + Object { + "orderDateD": 2020-11-19T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "35", + }, + Object { + "orderDateD": 2020-11-20T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "35", + }, + Object { + "orderDateD": 2020-11-21T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-22T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-23T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-24T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-25T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-26T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-27T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "36", + }, + Object { + "orderDateD": 2020-11-28T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "37", + }, + Object { + "orderDateD": 2020-11-29T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "37", + }, + Object { + "orderDateD": 2020-11-30T00:00:00.000Z, + "orderDateM": 2020-11-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "37", + }, + Object { + "orderDateD": 2020-12-01T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "38", + }, + Object { + "orderDateD": 2020-12-02T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "39", + }, + Object { + "orderDateD": 2020-12-03T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "39", + }, + Object { + "orderDateD": 2020-12-04T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-05T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-06T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-07T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-08T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-09T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-10T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-11T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-12T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-13T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "40", + }, + Object { + "orderDateD": 2020-12-14T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-15T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-16T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-17T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-18T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-19T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-20T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-21T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-22T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-23T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "42", + }, + Object { + "orderDateD": 2020-12-24T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "43", + }, + Object { + "orderDateD": 2020-12-25T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, + Object { + "orderDateD": 2020-12-26T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, + Object { + "orderDateD": 2020-12-27T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, + Object { + "orderDateD": 2020-12-28T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, + Object { + "orderDateD": 2020-12-29T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, + Object { + "orderDateD": 2020-12-30T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, + Object { + "orderDateD": 2020-12-31T00:00:00.000Z, + "orderDateM": 2020-12-01T00:00:00.000Z, + "orderDateY": 2020-01-01T00:00:00.000Z, + "rollingCountYTD": "44", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: Rollup over exprs 1`] = ` +Array [ + Object { + "SUM(ECommerce.count)": "1", + "city": "Detroit", + "order": 944.96, + "orderData": 2020-01-23T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Lorain", + "order": 946.792, + "orderData": 2020-01-01T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Olympia", + "order": 1041.06, + "orderData": 2020-06-17T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Vancouver", + "order": 1513.28, + "orderData": 2020-10-30T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": 2017.608, + "orderData": 2020-06-25T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": 2357.704, + "orderData": 2020-09-23T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "order": 2598.2, + "orderData": 2020-03-17T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": 2956.92, + "orderData": 2020-05-13T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "San Francisco", + "order": 3108.736, + "orderData": 2020-10-19T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "San Francisco", + "order": 3120.12, + "orderData": 2020-10-19T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Glendale", + "order": 3179.776, + "orderData": 2020-11-12T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Auburn", + "order": 3455.52, + "orderData": 2020-06-11T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Omaha", + "order": 3764.1, + "orderData": 2020-05-29T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Bakersfield", + "order": 3952.8, + "orderData": 2020-09-02T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Philadelphia", + "order": 4090.592, + "orderData": 2020-11-21T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Louisville", + "order": 4162.94, + "orderData": 2020-05-27T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": 4318.84, + "orderData": 2020-11-11T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Lafayette", + "order": 4496.76, + "orderData": 2020-12-24T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Provo", + "order": 5240.88, + "orderData": 2020-09-17T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "order": 5240.94, + "orderData": 2020-05-14T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": 5366.5, + "orderData": 2020-12-14T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Los Angeles", + "order": 6214.5, + "orderData": 2020-06-03T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Detroit", + "order": 6216.52, + "orderData": 2020-09-01T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Marion", + "order": 6220.424, + "orderData": 2020-12-01T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Baltimore", + "order": 6466.52, + "orderData": 2020-05-14T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": 6620.78, + "orderData": 2020-11-28T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Oakland", + "order": 6631.8, + "orderData": 2020-12-02T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Arlington", + "order": 6742.84, + "orderData": 2020-09-08T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "order": 7338.26, + "orderData": 2020-06-10T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Philadelphia", + "order": 7498.344, + "orderData": 2020-04-10T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": 8591, + "orderData": 2020-12-04T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Dallas", + "order": 8682.12, + "orderData": 2020-11-06T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Decatur", + "order": 8709.736, + "orderData": 2020-02-16T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": 9176.952, + "orderData": 2020-06-15T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": 9198, + "orderData": 2020-12-25T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": 9381.82, + "orderData": 2020-11-02T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "order": 9729.248, + "orderData": 2020-11-05T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Bowling", + "order": 9791.704, + "orderData": 2020-11-16T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Morristown", + "order": 9838, + "orderData": 2020-09-17T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": 10097.96, + "orderData": 2020-12-14T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "order": 10385.568, + "orderData": 2020-06-25T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": 11417.964, + "orderData": 2020-11-16T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Houston", + "order": 11973.92, + "orderData": 2020-03-26T00:00:00.000Z, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Lakewood", + "order": 12734.8, + "orderData": 2020-10-12T00:00:00.000Z, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: Rollup with aliases 1`] = ` +Array [ + Object { + "SUM(ECommerce.count)": "1", + "city": "Detroit", + "order": "CA-2017-145142", + "orderData": 2020-01-23T00:00:00.000Z, + "row": 523, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Lorain", + "order": "CA-2017-107503", + "orderData": 2020-01-01T00:00:00.000Z, + "row": 849, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Olympia", + "order": "CA-2017-118437", + "orderData": 2020-06-17T00:00:00.000Z, + "row": 1013, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Vancouver", + "order": "CA-2017-139661", + "orderData": 2020-10-30T00:00:00.000Z, + "row": 1494, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": "CA-2017-133648", + "orderData": 2020-06-25T00:00:00.000Z, + "row": 1995, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": "CA-2017-138422", + "orderData": 2020-09-23T00:00:00.000Z, + "row": 2329, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "order": "CA-2017-140949", + "orderData": 2020-03-17T00:00:00.000Z, + "row": 2455, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": "CA-2017-149048", + "orderData": 2020-05-13T00:00:00.000Z, + "row": 2595, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Provo", + "order": "CA-2017-112515", + "orderData": 2020-09-17T00:00:00.000Z, + "row": 2655, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": "CA-2017-123372", + "orderData": 2020-11-28T00:00:00.000Z, + "row": 2661, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Glendale", + "order": "CA-2017-134915", + "orderData": 2020-11-12T00:00:00.000Z, + "row": 2952, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "San Francisco", + "order": "CA-2017-131492", + "orderData": 2020-10-19T00:00:00.000Z, + "row": 3059, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "San Francisco", + "order": "CA-2017-131492", + "orderData": 2020-10-19T00:00:00.000Z, + "row": 3060, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Louisville", + "order": "US-2017-132297", + "orderData": 2020-05-27T00:00:00.000Z, + "row": 3083, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Auburn", + "order": "CA-2017-102554", + "orderData": 2020-06-11T00:00:00.000Z, + "row": 3448, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Omaha", + "order": "CA-2017-144568", + "orderData": 2020-05-29T00:00:00.000Z, + "row": 3717, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Bakersfield", + "order": "CA-2017-123001", + "orderData": 2020-09-02T00:00:00.000Z, + "row": 3934, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Philadelphia", + "order": "CA-2017-100811", + "orderData": 2020-11-21T00:00:00.000Z, + "row": 4012, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Lafayette", + "order": "CA-2017-124296", + "orderData": 2020-12-24T00:00:00.000Z, + "row": 4031, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "order": "CA-2017-115546", + "orderData": 2020-05-14T00:00:00.000Z, + "row": 4161, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": "CA-2017-120327", + "orderData": 2020-11-11T00:00:00.000Z, + "row": 4227, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": "CA-2017-143567", + "orderData": 2020-11-02T00:00:00.000Z, + "row": 4882, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Detroit", + "order": "CA-2017-145653", + "orderData": 2020-09-01T00:00:00.000Z, + "row": 5220, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": "CA-2017-147333", + "orderData": 2020-12-14T00:00:00.000Z, + "row": 5277, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Los Angeles", + "order": "CA-2017-145772", + "orderData": 2020-06-03T00:00:00.000Z, + "row": 6125, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Marion", + "order": "CA-2017-145660", + "orderData": 2020-12-01T00:00:00.000Z, + "row": 6205, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Oakland", + "order": "CA-2017-102379", + "orderData": 2020-12-02T00:00:00.000Z, + "row": 6272, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Baltimore", + "order": "US-2017-133361", + "orderData": 2020-05-14T00:00:00.000Z, + "row": 6459, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Arlington", + "order": "US-2017-124779", + "orderData": 2020-09-08T00:00:00.000Z, + "row": 6651, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Houston", + "order": "US-2017-141677", + "orderData": 2020-03-26T00:00:00.000Z, + "row": 7174, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": "CA-2017-109183", + "orderData": 2020-12-04T00:00:00.000Z, + "row": 7293, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "order": "CA-2017-112172", + "orderData": 2020-06-10T00:00:00.000Z, + "row": 7310, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Philadelphia", + "order": "CA-2017-135069", + "orderData": 2020-04-10T00:00:00.000Z, + "row": 7425, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": "CA-2017-151799", + "orderData": 2020-12-14T00:00:00.000Z, + "row": 7698, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Lakewood", + "order": "CA-2017-150091", + "orderData": 2020-10-12T00:00:00.000Z, + "row": 8425, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Dallas", + "order": "US-2017-119319", + "orderData": 2020-11-06T00:00:00.000Z, + "row": 8621, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Decatur", + "order": "CA-2017-163265", + "orderData": 2020-02-16T00:00:00.000Z, + "row": 8673, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": "CA-2017-119284", + "orderData": 2020-06-15T00:00:00.000Z, + "row": 8697, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Morristown", + "order": "CA-2017-126928", + "orderData": 2020-09-17T00:00:00.000Z, + "row": 8878, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": "CA-2017-105620", + "orderData": 2020-12-25T00:00:00.000Z, + "row": 8958, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "order": "CA-2017-102925", + "orderData": 2020-11-05T00:00:00.000Z, + "row": 9473, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "New York City", + "order": "CA-2017-116127", + "orderData": 2020-06-25T00:00:00.000Z, + "row": 9584, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Columbus", + "order": "CA-2017-160633", + "orderData": 2020-11-16T00:00:00.000Z, + "row": 9618, + }, + Object { + "SUM(ECommerce.count)": "1", + "city": "Bowling", + "order": "CA-2017-160633", + "orderData": 2020-11-16T00:00:00.000Z, + "row": 9619, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: Simple Rollup 1`] = ` +Array [ + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-01-23T00:00:00.000Z, + "orderId": "CA-2017-145142", + "rowId": 523, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-01-01T00:00:00.000Z, + "orderId": "CA-2017-107503", + "rowId": 849, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-06-17T00:00:00.000Z, + "orderId": "CA-2017-118437", + "rowId": 1013, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-10-30T00:00:00.000Z, + "orderId": "CA-2017-139661", + "rowId": 1494, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-06-25T00:00:00.000Z, + "orderId": "CA-2017-133648", + "rowId": 1995, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-09-23T00:00:00.000Z, + "orderId": "CA-2017-138422", + "rowId": 2329, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-03-17T00:00:00.000Z, + "orderId": "CA-2017-140949", + "rowId": 2455, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-05-13T00:00:00.000Z, + "orderId": "CA-2017-149048", + "rowId": 2595, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-09-17T00:00:00.000Z, + "orderId": "CA-2017-112515", + "rowId": 2655, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-11-28T00:00:00.000Z, + "orderId": "CA-2017-123372", + "rowId": 2661, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-11-12T00:00:00.000Z, + "orderId": "CA-2017-134915", + "rowId": 2952, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-10-19T00:00:00.000Z, + "orderId": "CA-2017-131492", + "rowId": 3059, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-10-19T00:00:00.000Z, + "orderId": "CA-2017-131492", + "rowId": 3060, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-05-27T00:00:00.000Z, + "orderId": "US-2017-132297", + "rowId": 3083, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-06-11T00:00:00.000Z, + "orderId": "CA-2017-102554", + "rowId": 3448, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-05-29T00:00:00.000Z, + "orderId": "CA-2017-144568", + "rowId": 3717, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-09-02T00:00:00.000Z, + "orderId": "CA-2017-123001", + "rowId": 3934, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-11-21T00:00:00.000Z, + "orderId": "CA-2017-100811", + "rowId": 4012, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-12-24T00:00:00.000Z, + "orderId": "CA-2017-124296", + "rowId": 4031, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-05-14T00:00:00.000Z, + "orderId": "CA-2017-115546", + "rowId": 4161, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-11-11T00:00:00.000Z, + "orderId": "CA-2017-120327", + "rowId": 4227, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-11-02T00:00:00.000Z, + "orderId": "CA-2017-143567", + "rowId": 4882, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-09-01T00:00:00.000Z, + "orderId": "CA-2017-145653", + "rowId": 5220, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-12-14T00:00:00.000Z, + "orderId": "CA-2017-147333", + "rowId": 5277, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-06-03T00:00:00.000Z, + "orderId": "CA-2017-145772", + "rowId": 6125, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-12-01T00:00:00.000Z, + "orderId": "CA-2017-145660", + "rowId": 6205, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-12-02T00:00:00.000Z, + "orderId": "CA-2017-102379", + "rowId": 6272, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-05-14T00:00:00.000Z, + "orderId": "US-2017-133361", + "rowId": 6459, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-09-08T00:00:00.000Z, + "orderId": "US-2017-124779", + "rowId": 6651, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-03-26T00:00:00.000Z, + "orderId": "US-2017-141677", + "rowId": 7174, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-12-04T00:00:00.000Z, + "orderId": "CA-2017-109183", + "rowId": 7293, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-06-10T00:00:00.000Z, + "orderId": "CA-2017-112172", + "rowId": 7310, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-04-10T00:00:00.000Z, + "orderId": "CA-2017-135069", + "rowId": 7425, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-12-14T00:00:00.000Z, + "orderId": "CA-2017-151799", + "rowId": 7698, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-10-12T00:00:00.000Z, + "orderId": "CA-2017-150091", + "rowId": 8425, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-11-06T00:00:00.000Z, + "orderId": "US-2017-119319", + "rowId": 8621, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-02-16T00:00:00.000Z, + "orderId": "CA-2017-163265", + "rowId": 8673, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-06-15T00:00:00.000Z, + "orderId": "CA-2017-119284", + "rowId": 8697, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-09-17T00:00:00.000Z, + "orderId": "CA-2017-126928", + "rowId": 8878, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-12-25T00:00:00.000Z, + "orderId": "CA-2017-105620", + "rowId": 8958, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-11-05T00:00:00.000Z, + "orderId": "CA-2017-102925", + "rowId": 9473, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-06-25T00:00:00.000Z, + "orderId": "CA-2017-116127", + "rowId": 9584, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-11-16T00:00:00.000Z, + "orderId": "CA-2017-160633", + "rowId": 9618, + }, + Object { + "SUM(ECommerce.count)": "1", + "orderDate": 2020-11-16T00:00:00.000Z, + "orderId": "CA-2017-160633", + "rowId": 9619, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: Timeshift measure from cube 1`] = ` +Array [ + Object { + "orderDate": 2020-02-01T00:00:00.000Z, + "totalQuantity": 2, + "totalQuantityPriorMonth": 6, + }, + Object { + "orderDate": 2020-03-01T00:00:00.000Z, + "totalQuantity": 13, + "totalQuantityPriorMonth": 2, + }, + Object { + "orderDate": 2020-04-01T00:00:00.000Z, + "totalQuantity": 3, + "totalQuantityPriorMonth": 13, + }, + Object { + "orderDate": 2020-05-01T00:00:00.000Z, + "totalQuantity": 15, + "totalQuantityPriorMonth": 3, + }, + Object { + "orderDate": 2020-06-01T00:00:00.000Z, + "totalQuantity": 18, + "totalQuantityPriorMonth": 15, + }, + Object { + "orderDate": 2020-10-01T00:00:00.000Z, + "totalQuantity": 11, + "totalQuantityPriorMonth": 27, + }, + Object { + "orderDate": 2020-11-01T00:00:00.000Z, + "totalQuantity": 43, + "totalQuantityPriorMonth": 11, + }, + Object { + "orderDate": 2020-12-01T00:00:00.000Z, + "totalQuantity": 22, + "totalQuantityPriorMonth": 43, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: metabase count cast to float32 from push down: metabase_count_cast_to_float32_from_push_down 1`] = ` +Array [ + Object { + "a0": 41, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: post-aggregate percentage of total 1`] = ` +Array [ + Object { + "SUM(BigECommerce.percentageOfTotalForStatus)": 100, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: powerbi min max push down: powerbi_min_max_push_down 1`] = ` +Array [ + Object { + "a0": 2020-12-25T00:00:00.000Z, + "a1": 2020-01-01T00:00:00.000Z, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: powerbi min max ungrouped flag: powerbi_min_max_ungrouped_flag 1`] = ` +Array [ + Object { + "a0": "39", + "a1": 3.76, + "a2": 2399.96, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: reuse params: reuse_params 1`] = ` +Array [ + Object { + "c0": 2020-01-01T00:00:00.000Z, + "m0": 17372, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver SQL API: ungrouped pre-agg: ungrouped_pre_agg 1`] = ` +Array [ + Object { + "productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "totalSales": null, + }, + Object { + "productName": "Canon PC1080F Personal Copier", + "totalSales": 2399.96, + }, + Object { + "productName": "Logitech di_Novo Edge Keyboard", + "totalSales": 2249.91, + }, + Object { + "productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "totalSales": 2154.9, + }, + Object { + "productName": "Google Nexus 5", + "totalSales": 1979.89, + }, + Object { + "productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "totalSales": 1292.94, + }, + Object { + "productName": "Canon PC1080F Personal Copier", + "totalSales": 1199.98, + }, + Object { + "productName": "Hewlett Packard 610 Color Digital Copier / Printer", + "totalSales": 899.982, + }, + Object { + "productName": "Okidata C610n Printer", + "totalSales": 649, + }, + Object { + "productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "totalSales": 600, + }, + Object { + "productName": "Google Nexus 6", + "totalSales": 539.97, + }, + Object { + "productName": "Google Nexus 7", + "totalSales": 539.97, + }, + Object { + "productName": "Harbour Creations 67200 Series Stacking Chairs", + "totalSales": 498.26, + }, + Object { + "productName": "DMI Eclipse Executive Suite Bookcases", + "totalSales": 400.784, + }, + Object { + "productName": "HTC One", + "totalSales": 239.976, + }, + Object { + "productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "totalSales": 232.88, + }, + Object { + "productName": "Balt Solid Wood Rectangular Table", + "totalSales": 210.98, + }, + Object { + "productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "totalSales": 180.96, + }, + Object { + "productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "totalSales": 179.9, + }, + Object { + "productName": "Harbour Creations 67200 Series Stacking Chairs", + "totalSales": 128.124, + }, + Object { + "productName": "Harbour Creations 67200 Series Stacking Chairs", + "totalSales": 113.888, + }, + Object { + "productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "totalSales": 86.352, + }, + Object { + "productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "totalSales": 71.6, + }, + Object { + "productName": "Linden 10 Round Wall Clock, Black", + "totalSales": 48.896, + }, + Object { + "productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "totalSales": 45.92, + }, + Object { + "productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "totalSales": 45.92, + }, + Object { + "productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "totalSales": 44.75, + }, + Object { + "productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "totalSales": 44.75, + }, + Object { + "productName": "Recycled Eldon Regeneration Jumbo File", + "totalSales": 39.296, + }, + Object { + "productName": "Linden 10 Round Wall Clock, Black", + "totalSales": 36.672, + }, + Object { + "productName": "Linden 10 Round Wall Clock, Black", + "totalSales": 30.56, + }, + Object { + "productName": "Linden 10 Round Wall Clock, Black", + "totalSales": 30.56, + }, + Object { + "productName": "Anderson Hickey Conga Table Tops & Accessories", + "totalSales": 24.368, + }, + Object { + "productName": "Plymouth Boxed Rubber Bands by Plymouth", + "totalSales": 23.55, + }, + Object { + "productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "totalSales": 18.368, + }, + Object { + "productName": "Wausau Papers Astrobrights Colored Envelopes", + "totalSales": 14.352, + }, + Object { + "productName": "Plymouth Boxed Rubber Bands by Plymouth", + "totalSales": 14.13, + }, + Object { + "productName": "Project Tote Personal File", + "totalSales": 14.03, + }, + Object { + "productName": "Plymouth Boxed Rubber Bands by Plymouth", + "totalSales": 11.304, + }, + Object { + "productName": "Magna Visual Magnetic Picture Hangers", + "totalSales": 9.64, + }, + Object { + "productName": "OIC #2 Pencils, Medium Soft", + "totalSales": 9.4, + }, + Object { + "productName": "Magna Visual Magnetic Picture Hangers", + "totalSales": 7.712, + }, + Object { + "productName": "OIC #2 Pencils, Medium Soft", + "totalSales": 3.76, + }, + Object { + "productName": "OIC #2 Pencils, Medium Soft", + "totalSales": 3.76, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver Tesseract: SQL API: Timeshift measure from cube 1`] = ` +Array [ + Object { + "orderDate": 2020-01-01T00:00:00.000Z, + "totalQuantity": 6, + "totalQuantityPriorMonth": null, + }, + Object { + "orderDate": 2020-02-01T00:00:00.000Z, + "totalQuantity": 2, + "totalQuantityPriorMonth": 6, + }, + Object { + "orderDate": 2020-03-01T00:00:00.000Z, + "totalQuantity": 13, + "totalQuantityPriorMonth": 2, + }, + Object { + "orderDate": 2020-04-01T00:00:00.000Z, + "totalQuantity": 3, + "totalQuantityPriorMonth": 13, + }, + Object { + "orderDate": 2020-05-01T00:00:00.000Z, + "totalQuantity": 15, + "totalQuantityPriorMonth": 3, + }, + Object { + "orderDate": 2020-06-01T00:00:00.000Z, + "totalQuantity": 18, + "totalQuantityPriorMonth": 15, + }, + Object { + "orderDate": 2020-07-01T00:00:00.000Z, + "totalQuantity": null, + "totalQuantityPriorMonth": 18, + }, + Object { + "orderDate": 2020-09-01T00:00:00.000Z, + "totalQuantity": 27, + "totalQuantityPriorMonth": null, + }, + Object { + "orderDate": 2020-10-01T00:00:00.000Z, + "totalQuantity": 11, + "totalQuantityPriorMonth": 27, + }, + Object { + "orderDate": 2020-11-01T00:00:00.000Z, + "totalQuantity": 43, + "totalQuantityPriorMonth": 11, + }, + Object { + "orderDate": 2020-12-01T00:00:00.000Z, + "totalQuantity": 22, + "totalQuantityPriorMonth": 43, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver Tesseract: 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": null, + "BigECommerce.totalCountRetailMonthAgo": 7, + "RetailCalendar.retail_date": "2020-07-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-07-01T00:00:00.000", + }, + Object { + "BigECommerce.count": 6, + "BigECommerce.totalCountRetailMonthAgo": null, + "RetailCalendar.retail_date": "2020-09-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2020-09-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", + }, + Object { + "BigECommerce.count": null, + "BigECommerce.totalCountRetailMonthAgo": 7, + "RetailCalendar.retail_date": "2021-01-01T00:00:00.000", + "RetailCalendar.retail_date.month": "2021-01-01T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver Tesseract: querying BigECommerce with Retail Calendar: totalCountRetailWeekAgo 1`] = ` +Array [ + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailWeekAgo": 1, + "RetailCalendar.retail_date": "2020-02-16T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-02-16T00:00:00.000", + }, + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailWeekAgo": 1, + "RetailCalendar.retail_date": "2020-03-15T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-03-15T00:00:00.000", + }, + 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": 1, + "RetailCalendar.retail_date": "2020-04-05T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-04-05T00:00:00.000", + }, + Object { + "BigECommerce.count": 3, + "BigECommerce.totalCountRetailWeekAgo": 3, + "RetailCalendar.retail_date": "2020-05-10T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-05-10T00:00:00.000", + }, + Object { + "BigECommerce.count": 2, + "BigECommerce.totalCountRetailWeekAgo": 2, + "RetailCalendar.retail_date": "2020-05-24T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-05-24T00:00:00.000", + }, + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailWeekAgo": 1, + "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": 2, + "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": 2, + "BigECommerce.totalCountRetailWeekAgo": 2, + "RetailCalendar.retail_date": "2020-08-30T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-08-30T00:00:00.000", + }, + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailWeekAgo": 1, + "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": 2, + "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": 1, + "RetailCalendar.retail_date": "2020-09-20T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-09-20T00:00:00.000", + }, + Object { + "BigECommerce.count": 1, + "BigECommerce.totalCountRetailWeekAgo": 1, + "RetailCalendar.retail_date": "2020-10-11T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-10-11T00:00:00.000", + }, + Object { + "BigECommerce.count": 2, + "BigECommerce.totalCountRetailWeekAgo": 2, + "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": 1, + "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": 3, + "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": 2, + "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": 3, + "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": 1, + "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": 3, + "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-13T00:00:00.000", + "RetailCalendar.retail_date.week": "2020-12-13T00: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/oracle-driver filtering Customers: contains + dimensions, first 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "AS-10225", + "Customers.customerName": "Customer 3", + }, + Object { + "Customers.customerId": "AW-10840", + "Customers.customerName": "Customer 4", + }, + Object { + "Customers.customerId": "BB-11545", + "Customers.customerName": "Customer 5", + }, + Object { + "Customers.customerId": "BF-11020", + "Customers.customerName": "Customer 6", + }, + Object { + "Customers.customerId": "BF-11170", + "Customers.customerName": "Customer 7", + }, + Object { + "Customers.customerId": "BM-11650", + "Customers.customerName": "Customer 8", + }, + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, + Object { + "Customers.customerId": "CA-12775", + "Customers.customerName": "Customer 11", + }, + Object { + "Customers.customerId": "CC-12475", + "Customers.customerName": "Customer 12", + }, + Object { + "Customers.customerId": "CD-12280", + "Customers.customerName": "Customer 13", + }, + Object { + "Customers.customerId": "CS-12355", + "Customers.customerName": "Customer 14", + }, + Object { + "Customers.customerId": "DB-13405", + "Customers.customerName": "Customer 15", + }, + Object { + "Customers.customerId": "DG-13300", + "Customers.customerName": "Customer 16", + }, + Object { + "Customers.customerId": "DW-13480", + "Customers.customerName": "Customer 17", + }, + Object { + "Customers.customerId": "EM-14140", + "Customers.customerName": "Customer 18", + }, + Object { + "Customers.customerId": "GA-14725", + "Customers.customerName": "Customer 19", + }, + Object { + "Customers.customerId": "GZ-14470", + "Customers.customerName": "Customer 20", + }, + Object { + "Customers.customerId": "HH-15010", + "Customers.customerName": "Customer 21", + }, + Object { + "Customers.customerId": "HK-14890", + "Customers.customerName": "Customer 22", + }, + Object { + "Customers.customerId": "JH-15430", + "Customers.customerName": "Customer 23", + }, + Object { + "Customers.customerId": "JO-15550", + "Customers.customerName": "Customer 24", + }, + Object { + "Customers.customerId": "JS-16030", + "Customers.customerName": "Customer 25", + }, + Object { + "Customers.customerId": "JW-15220", + "Customers.customerName": "Customer 26", + }, + Object { + "Customers.customerId": "KL-16555", + "Customers.customerName": "Customer 27", + }, + Object { + "Customers.customerId": "KN-16705", + "Customers.customerName": "Customer 28", + }, + Object { + "Customers.customerId": "LC-17050", + "Customers.customerName": "Customer 29", + }, + Object { + "Customers.customerId": "LR-16915", + "Customers.customerName": "Customer 30", + }, + Object { + "Customers.customerId": "MC-17605", + "Customers.customerName": "Customer 31", + }, + Object { + "Customers.customerId": "MG-17650", + "Customers.customerName": "Customer 32", + }, + Object { + "Customers.customerId": "ML-17755", + "Customers.customerName": "Customer 33", + }, + Object { + "Customers.customerId": "MM-18280", + "Customers.customerName": "Customer 34", + }, + Object { + "Customers.customerId": "NP-18670", + "Customers.customerName": "Customer 35", + }, + Object { + "Customers.customerId": "PF-19165", + "Customers.customerName": "Customer 36", + }, + Object { + "Customers.customerId": "SB-20185", + "Customers.customerName": "Customer 37", + }, + Object { + "Customers.customerId": "SS-20140", + "Customers.customerName": "Customer 38", + }, + Object { + "Customers.customerId": "TB-21175", + "Customers.customerName": "Customer 39", + }, + Object { + "Customers.customerId": "TS-21205", + "Customers.customerName": "Customer 40", + }, + Object { + "Customers.customerId": "WB-21850", + "Customers.customerName": "Customer 41", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: contains + dimensions, second 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "AS-10225", + "Customers.customerName": "Customer 3", + }, + Object { + "Customers.customerId": "AW-10840", + "Customers.customerName": "Customer 4", + }, + Object { + "Customers.customerId": "BB-11545", + "Customers.customerName": "Customer 5", + }, + Object { + "Customers.customerId": "BF-11020", + "Customers.customerName": "Customer 6", + }, + Object { + "Customers.customerId": "BF-11170", + "Customers.customerName": "Customer 7", + }, + Object { + "Customers.customerId": "BM-11650", + "Customers.customerName": "Customer 8", + }, + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, + Object { + "Customers.customerId": "CA-12775", + "Customers.customerName": "Customer 11", + }, + Object { + "Customers.customerId": "CC-12475", + "Customers.customerName": "Customer 12", + }, + Object { + "Customers.customerId": "CD-12280", + "Customers.customerName": "Customer 13", + }, + Object { + "Customers.customerId": "CS-12355", + "Customers.customerName": "Customer 14", + }, + Object { + "Customers.customerId": "DB-13405", + "Customers.customerName": "Customer 15", + }, + Object { + "Customers.customerId": "DG-13300", + "Customers.customerName": "Customer 16", + }, + Object { + "Customers.customerId": "DW-13480", + "Customers.customerName": "Customer 17", + }, + Object { + "Customers.customerId": "EM-14140", + "Customers.customerName": "Customer 18", + }, + Object { + "Customers.customerId": "GA-14725", + "Customers.customerName": "Customer 19", + }, + Object { + "Customers.customerId": "GZ-14470", + "Customers.customerName": "Customer 20", + }, + Object { + "Customers.customerId": "HH-15010", + "Customers.customerName": "Customer 21", + }, + Object { + "Customers.customerId": "HK-14890", + "Customers.customerName": "Customer 22", + }, + Object { + "Customers.customerId": "JH-15430", + "Customers.customerName": "Customer 23", + }, + Object { + "Customers.customerId": "JO-15550", + "Customers.customerName": "Customer 24", + }, + Object { + "Customers.customerId": "JS-16030", + "Customers.customerName": "Customer 25", + }, + Object { + "Customers.customerId": "JW-15220", + "Customers.customerName": "Customer 26", + }, + Object { + "Customers.customerId": "KL-16555", + "Customers.customerName": "Customer 27", + }, + Object { + "Customers.customerId": "KN-16705", + "Customers.customerName": "Customer 28", + }, + Object { + "Customers.customerId": "LC-17050", + "Customers.customerName": "Customer 29", + }, + Object { + "Customers.customerId": "LR-16915", + "Customers.customerName": "Customer 30", + }, + Object { + "Customers.customerId": "MC-17605", + "Customers.customerName": "Customer 31", + }, + Object { + "Customers.customerId": "MG-17650", + "Customers.customerName": "Customer 32", + }, + Object { + "Customers.customerId": "ML-17755", + "Customers.customerName": "Customer 33", + }, + Object { + "Customers.customerId": "MM-18280", + "Customers.customerName": "Customer 34", + }, + Object { + "Customers.customerId": "NP-18670", + "Customers.customerName": "Customer 35", + }, + Object { + "Customers.customerId": "PF-19165", + "Customers.customerName": "Customer 36", + }, + Object { + "Customers.customerId": "SB-20185", + "Customers.customerName": "Customer 37", + }, + Object { + "Customers.customerId": "SS-20140", + "Customers.customerName": "Customer 38", + }, + Object { + "Customers.customerId": "TB-21175", + "Customers.customerName": "Customer 39", + }, + Object { + "Customers.customerId": "TS-21205", + "Customers.customerName": "Customer 40", + }, + Object { + "Customers.customerId": "WB-21850", + "Customers.customerName": "Customer 41", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: contains + dimensions, third 1`] = `Array []`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: endsWith filter + dimensions, first 1`] = ` +Array [ + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "AW-10840", + "Customers.customerName": "Customer 4", + }, + Object { + "Customers.customerId": "BF-11020", + "Customers.customerName": "Customer 6", + }, + Object { + "Customers.customerId": "BF-11170", + "Customers.customerName": "Customer 7", + }, + Object { + "Customers.customerId": "BM-11650", + "Customers.customerName": "Customer 8", + }, + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, + Object { + "Customers.customerId": "CD-12280", + "Customers.customerName": "Customer 13", + }, + Object { + "Customers.customerId": "DG-13300", + "Customers.customerName": "Customer 16", + }, + Object { + "Customers.customerId": "DW-13480", + "Customers.customerName": "Customer 17", + }, + Object { + "Customers.customerId": "EM-14140", + "Customers.customerName": "Customer 18", + }, + Object { + "Customers.customerId": "GZ-14470", + "Customers.customerName": "Customer 20", + }, + Object { + "Customers.customerId": "HH-15010", + "Customers.customerName": "Customer 21", + }, + Object { + "Customers.customerId": "HK-14890", + "Customers.customerName": "Customer 22", + }, + Object { + "Customers.customerId": "JH-15430", + "Customers.customerName": "Customer 23", + }, + Object { + "Customers.customerId": "JO-15550", + "Customers.customerName": "Customer 24", + }, + Object { + "Customers.customerId": "JS-16030", + "Customers.customerName": "Customer 25", + }, + Object { + "Customers.customerId": "JW-15220", + "Customers.customerName": "Customer 26", + }, + Object { + "Customers.customerId": "LC-17050", + "Customers.customerName": "Customer 29", + }, + Object { + "Customers.customerId": "MG-17650", + "Customers.customerName": "Customer 32", + }, + Object { + "Customers.customerId": "MM-18280", + "Customers.customerName": "Customer 34", + }, + Object { + "Customers.customerId": "NP-18670", + "Customers.customerName": "Customer 35", + }, + Object { + "Customers.customerId": "SS-20140", + "Customers.customerName": "Customer 38", + }, + Object { + "Customers.customerId": "WB-21850", + "Customers.customerName": "Customer 41", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: endsWith filter + dimensions, second 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "AS-10225", + "Customers.customerName": "Customer 3", + }, + Object { + "Customers.customerId": "AW-10840", + "Customers.customerName": "Customer 4", + }, + Object { + "Customers.customerId": "BB-11545", + "Customers.customerName": "Customer 5", + }, + Object { + "Customers.customerId": "BF-11020", + "Customers.customerName": "Customer 6", + }, + Object { + "Customers.customerId": "BF-11170", + "Customers.customerName": "Customer 7", + }, + Object { + "Customers.customerId": "BM-11650", + "Customers.customerName": "Customer 8", + }, + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, + Object { + "Customers.customerId": "CA-12775", + "Customers.customerName": "Customer 11", + }, + Object { + "Customers.customerId": "CC-12475", + "Customers.customerName": "Customer 12", + }, + Object { + "Customers.customerId": "CD-12280", + "Customers.customerName": "Customer 13", + }, + Object { + "Customers.customerId": "CS-12355", + "Customers.customerName": "Customer 14", + }, + Object { + "Customers.customerId": "DB-13405", + "Customers.customerName": "Customer 15", + }, + Object { + "Customers.customerId": "DG-13300", + "Customers.customerName": "Customer 16", + }, + Object { + "Customers.customerId": "DW-13480", + "Customers.customerName": "Customer 17", + }, + Object { + "Customers.customerId": "EM-14140", + "Customers.customerName": "Customer 18", + }, + Object { + "Customers.customerId": "GA-14725", + "Customers.customerName": "Customer 19", + }, + Object { + "Customers.customerId": "GZ-14470", + "Customers.customerName": "Customer 20", + }, + Object { + "Customers.customerId": "HH-15010", + "Customers.customerName": "Customer 21", + }, + Object { + "Customers.customerId": "HK-14890", + "Customers.customerName": "Customer 22", + }, + Object { + "Customers.customerId": "JH-15430", + "Customers.customerName": "Customer 23", + }, + Object { + "Customers.customerId": "JO-15550", + "Customers.customerName": "Customer 24", + }, + Object { + "Customers.customerId": "JS-16030", + "Customers.customerName": "Customer 25", + }, + Object { + "Customers.customerId": "JW-15220", + "Customers.customerName": "Customer 26", + }, + Object { + "Customers.customerId": "KL-16555", + "Customers.customerName": "Customer 27", + }, + Object { + "Customers.customerId": "KN-16705", + "Customers.customerName": "Customer 28", + }, + Object { + "Customers.customerId": "LC-17050", + "Customers.customerName": "Customer 29", + }, + Object { + "Customers.customerId": "LR-16915", + "Customers.customerName": "Customer 30", + }, + Object { + "Customers.customerId": "MC-17605", + "Customers.customerName": "Customer 31", + }, + Object { + "Customers.customerId": "MG-17650", + "Customers.customerName": "Customer 32", + }, + Object { + "Customers.customerId": "ML-17755", + "Customers.customerName": "Customer 33", + }, + Object { + "Customers.customerId": "MM-18280", + "Customers.customerName": "Customer 34", + }, + Object { + "Customers.customerId": "NP-18670", + "Customers.customerName": "Customer 35", + }, + Object { + "Customers.customerId": "PF-19165", + "Customers.customerName": "Customer 36", + }, + Object { + "Customers.customerId": "SB-20185", + "Customers.customerName": "Customer 37", + }, + Object { + "Customers.customerId": "SS-20140", + "Customers.customerName": "Customer 38", + }, + Object { + "Customers.customerId": "TB-21175", + "Customers.customerName": "Customer 39", + }, + Object { + "Customers.customerId": "TS-21205", + "Customers.customerName": "Customer 40", + }, + Object { + "Customers.customerId": "WB-21850", + "Customers.customerName": "Customer 41", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: endsWith filter + dimensions, third 1`] = `Array []`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: notEndsWith filter + dimensions, first 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "AS-10225", + "Customers.customerName": "Customer 3", + }, + Object { + "Customers.customerId": "BB-11545", + "Customers.customerName": "Customer 5", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, + Object { + "Customers.customerId": "CA-12775", + "Customers.customerName": "Customer 11", + }, + Object { + "Customers.customerId": "CC-12475", + "Customers.customerName": "Customer 12", + }, + Object { + "Customers.customerId": "CS-12355", + "Customers.customerName": "Customer 14", + }, + Object { + "Customers.customerId": "DB-13405", + "Customers.customerName": "Customer 15", + }, + Object { + "Customers.customerId": "GA-14725", + "Customers.customerName": "Customer 19", + }, + Object { + "Customers.customerId": "KL-16555", + "Customers.customerName": "Customer 27", + }, + Object { + "Customers.customerId": "KN-16705", + "Customers.customerName": "Customer 28", + }, + Object { + "Customers.customerId": "LR-16915", + "Customers.customerName": "Customer 30", + }, + Object { + "Customers.customerId": "MC-17605", + "Customers.customerName": "Customer 31", + }, + Object { + "Customers.customerId": "ML-17755", + "Customers.customerName": "Customer 33", + }, + Object { + "Customers.customerId": "PF-19165", + "Customers.customerName": "Customer 36", + }, + Object { + "Customers.customerId": "SB-20185", + "Customers.customerName": "Customer 37", + }, + Object { + "Customers.customerId": "TB-21175", + "Customers.customerName": "Customer 39", + }, + Object { + "Customers.customerId": "TS-21205", + "Customers.customerName": "Customer 40", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: notEndsWith filter + dimensions, second 1`] = `Array []`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: notEndsWith filter + dimensions, third 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "AS-10225", + "Customers.customerName": "Customer 3", + }, + Object { + "Customers.customerId": "AW-10840", + "Customers.customerName": "Customer 4", + }, + Object { + "Customers.customerId": "BB-11545", + "Customers.customerName": "Customer 5", + }, + Object { + "Customers.customerId": "BF-11020", + "Customers.customerName": "Customer 6", + }, + Object { + "Customers.customerId": "BF-11170", + "Customers.customerName": "Customer 7", + }, + Object { + "Customers.customerId": "BM-11650", + "Customers.customerName": "Customer 8", + }, + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, + Object { + "Customers.customerId": "CA-12775", + "Customers.customerName": "Customer 11", + }, + Object { + "Customers.customerId": "CC-12475", + "Customers.customerName": "Customer 12", + }, + Object { + "Customers.customerId": "CD-12280", + "Customers.customerName": "Customer 13", + }, + Object { + "Customers.customerId": "CS-12355", + "Customers.customerName": "Customer 14", + }, + Object { + "Customers.customerId": "DB-13405", + "Customers.customerName": "Customer 15", + }, + Object { + "Customers.customerId": "DG-13300", + "Customers.customerName": "Customer 16", + }, + Object { + "Customers.customerId": "DW-13480", + "Customers.customerName": "Customer 17", + }, + Object { + "Customers.customerId": "EM-14140", + "Customers.customerName": "Customer 18", + }, + Object { + "Customers.customerId": "GA-14725", + "Customers.customerName": "Customer 19", + }, + Object { + "Customers.customerId": "GZ-14470", + "Customers.customerName": "Customer 20", + }, + Object { + "Customers.customerId": "HH-15010", + "Customers.customerName": "Customer 21", + }, + Object { + "Customers.customerId": "HK-14890", + "Customers.customerName": "Customer 22", + }, + Object { + "Customers.customerId": "JH-15430", + "Customers.customerName": "Customer 23", + }, + Object { + "Customers.customerId": "JO-15550", + "Customers.customerName": "Customer 24", + }, + Object { + "Customers.customerId": "JS-16030", + "Customers.customerName": "Customer 25", + }, + Object { + "Customers.customerId": "JW-15220", + "Customers.customerName": "Customer 26", + }, + Object { + "Customers.customerId": "KL-16555", + "Customers.customerName": "Customer 27", + }, + Object { + "Customers.customerId": "KN-16705", + "Customers.customerName": "Customer 28", + }, + Object { + "Customers.customerId": "LC-17050", + "Customers.customerName": "Customer 29", + }, + Object { + "Customers.customerId": "LR-16915", + "Customers.customerName": "Customer 30", + }, + Object { + "Customers.customerId": "MC-17605", + "Customers.customerName": "Customer 31", + }, + Object { + "Customers.customerId": "MG-17650", + "Customers.customerName": "Customer 32", + }, + Object { + "Customers.customerId": "ML-17755", + "Customers.customerName": "Customer 33", + }, + Object { + "Customers.customerId": "MM-18280", + "Customers.customerName": "Customer 34", + }, + Object { + "Customers.customerId": "NP-18670", + "Customers.customerName": "Customer 35", + }, + Object { + "Customers.customerId": "PF-19165", + "Customers.customerName": "Customer 36", + }, + Object { + "Customers.customerId": "SB-20185", + "Customers.customerName": "Customer 37", + }, + Object { + "Customers.customerId": "SS-20140", + "Customers.customerName": "Customer 38", + }, + Object { + "Customers.customerId": "TB-21175", + "Customers.customerName": "Customer 39", + }, + Object { + "Customers.customerId": "TS-21205", + "Customers.customerName": "Customer 40", + }, + Object { + "Customers.customerId": "WB-21850", + "Customers.customerName": "Customer 41", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: notStartsWith + dimensions, first 1`] = ` +Array [ + Object { + "Customers.customerId": "BB-11545", + "Customers.customerName": "Customer 5", + }, + Object { + "Customers.customerId": "BF-11020", + "Customers.customerName": "Customer 6", + }, + Object { + "Customers.customerId": "BF-11170", + "Customers.customerName": "Customer 7", + }, + Object { + "Customers.customerId": "BM-11650", + "Customers.customerName": "Customer 8", + }, + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, + Object { + "Customers.customerId": "CA-12775", + "Customers.customerName": "Customer 11", + }, + Object { + "Customers.customerId": "CC-12475", + "Customers.customerName": "Customer 12", + }, + Object { + "Customers.customerId": "CD-12280", + "Customers.customerName": "Customer 13", + }, + Object { + "Customers.customerId": "CS-12355", + "Customers.customerName": "Customer 14", + }, + Object { + "Customers.customerId": "DB-13405", + "Customers.customerName": "Customer 15", + }, + Object { + "Customers.customerId": "DG-13300", + "Customers.customerName": "Customer 16", + }, + Object { + "Customers.customerId": "DW-13480", + "Customers.customerName": "Customer 17", + }, + Object { + "Customers.customerId": "EM-14140", + "Customers.customerName": "Customer 18", + }, + Object { + "Customers.customerId": "GA-14725", + "Customers.customerName": "Customer 19", + }, + Object { + "Customers.customerId": "GZ-14470", + "Customers.customerName": "Customer 20", + }, + Object { + "Customers.customerId": "HH-15010", + "Customers.customerName": "Customer 21", + }, + Object { + "Customers.customerId": "HK-14890", + "Customers.customerName": "Customer 22", + }, + Object { + "Customers.customerId": "JH-15430", + "Customers.customerName": "Customer 23", + }, + Object { + "Customers.customerId": "JO-15550", + "Customers.customerName": "Customer 24", + }, + Object { + "Customers.customerId": "JS-16030", + "Customers.customerName": "Customer 25", + }, + Object { + "Customers.customerId": "JW-15220", + "Customers.customerName": "Customer 26", + }, + Object { + "Customers.customerId": "KL-16555", + "Customers.customerName": "Customer 27", + }, + Object { + "Customers.customerId": "KN-16705", + "Customers.customerName": "Customer 28", + }, + Object { + "Customers.customerId": "LC-17050", + "Customers.customerName": "Customer 29", + }, + Object { + "Customers.customerId": "LR-16915", + "Customers.customerName": "Customer 30", + }, + Object { + "Customers.customerId": "MC-17605", + "Customers.customerName": "Customer 31", + }, + Object { + "Customers.customerId": "MG-17650", + "Customers.customerName": "Customer 32", + }, + Object { + "Customers.customerId": "ML-17755", + "Customers.customerName": "Customer 33", + }, + Object { + "Customers.customerId": "MM-18280", + "Customers.customerName": "Customer 34", + }, + Object { + "Customers.customerId": "NP-18670", + "Customers.customerName": "Customer 35", + }, + Object { + "Customers.customerId": "PF-19165", + "Customers.customerName": "Customer 36", + }, + Object { + "Customers.customerId": "SB-20185", + "Customers.customerName": "Customer 37", + }, + Object { + "Customers.customerId": "SS-20140", + "Customers.customerName": "Customer 38", + }, + Object { + "Customers.customerId": "TB-21175", + "Customers.customerName": "Customer 39", + }, + Object { + "Customers.customerId": "TS-21205", + "Customers.customerName": "Customer 40", + }, + Object { + "Customers.customerId": "WB-21850", + "Customers.customerName": "Customer 41", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: notStartsWith + dimensions, second 1`] = ` +Array [ + Object { + "Customers.customerId": "CA-12775", + "Customers.customerName": "Customer 11", + }, + Object { + "Customers.customerId": "CC-12475", + "Customers.customerName": "Customer 12", + }, + Object { + "Customers.customerId": "CD-12280", + "Customers.customerName": "Customer 13", + }, + Object { + "Customers.customerId": "CS-12355", + "Customers.customerName": "Customer 14", + }, + Object { + "Customers.customerId": "DB-13405", + "Customers.customerName": "Customer 15", + }, + Object { + "Customers.customerId": "DG-13300", + "Customers.customerName": "Customer 16", + }, + Object { + "Customers.customerId": "DW-13480", + "Customers.customerName": "Customer 17", + }, + Object { + "Customers.customerId": "EM-14140", + "Customers.customerName": "Customer 18", + }, + Object { + "Customers.customerId": "GA-14725", + "Customers.customerName": "Customer 19", + }, + Object { + "Customers.customerId": "GZ-14470", + "Customers.customerName": "Customer 20", + }, + Object { + "Customers.customerId": "HH-15010", + "Customers.customerName": "Customer 21", + }, + Object { + "Customers.customerId": "HK-14890", + "Customers.customerName": "Customer 22", + }, + Object { + "Customers.customerId": "JH-15430", + "Customers.customerName": "Customer 23", + }, + Object { + "Customers.customerId": "JO-15550", + "Customers.customerName": "Customer 24", + }, + Object { + "Customers.customerId": "JS-16030", + "Customers.customerName": "Customer 25", + }, + Object { + "Customers.customerId": "JW-15220", + "Customers.customerName": "Customer 26", + }, + Object { + "Customers.customerId": "KL-16555", + "Customers.customerName": "Customer 27", + }, + Object { + "Customers.customerId": "KN-16705", + "Customers.customerName": "Customer 28", + }, + Object { + "Customers.customerId": "LC-17050", + "Customers.customerName": "Customer 29", + }, + Object { + "Customers.customerId": "LR-16915", + "Customers.customerName": "Customer 30", + }, + Object { + "Customers.customerId": "MC-17605", + "Customers.customerName": "Customer 31", + }, + Object { + "Customers.customerId": "MG-17650", + "Customers.customerName": "Customer 32", + }, + Object { + "Customers.customerId": "ML-17755", + "Customers.customerName": "Customer 33", + }, + Object { + "Customers.customerId": "MM-18280", + "Customers.customerName": "Customer 34", + }, + Object { + "Customers.customerId": "NP-18670", + "Customers.customerName": "Customer 35", + }, + Object { + "Customers.customerId": "PF-19165", + "Customers.customerName": "Customer 36", + }, + Object { + "Customers.customerId": "SB-20185", + "Customers.customerName": "Customer 37", + }, + Object { + "Customers.customerId": "SS-20140", + "Customers.customerName": "Customer 38", + }, + Object { + "Customers.customerId": "TB-21175", + "Customers.customerName": "Customer 39", + }, + Object { + "Customers.customerId": "TS-21205", + "Customers.customerName": "Customer 40", + }, + Object { + "Customers.customerId": "WB-21850", + "Customers.customerName": "Customer 41", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: notStartsWith + dimensions, third 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "AS-10225", + "Customers.customerName": "Customer 3", + }, + Object { + "Customers.customerId": "AW-10840", + "Customers.customerName": "Customer 4", + }, + Object { + "Customers.customerId": "BB-11545", + "Customers.customerName": "Customer 5", + }, + Object { + "Customers.customerId": "BF-11020", + "Customers.customerName": "Customer 6", + }, + Object { + "Customers.customerId": "BF-11170", + "Customers.customerName": "Customer 7", + }, + Object { + "Customers.customerId": "BM-11650", + "Customers.customerName": "Customer 8", + }, + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, + Object { + "Customers.customerId": "CA-12775", + "Customers.customerName": "Customer 11", + }, + Object { + "Customers.customerId": "CC-12475", + "Customers.customerName": "Customer 12", + }, + Object { + "Customers.customerId": "CD-12280", + "Customers.customerName": "Customer 13", + }, + Object { + "Customers.customerId": "CS-12355", + "Customers.customerName": "Customer 14", + }, + Object { + "Customers.customerId": "DB-13405", + "Customers.customerName": "Customer 15", + }, + Object { + "Customers.customerId": "DG-13300", + "Customers.customerName": "Customer 16", + }, + Object { + "Customers.customerId": "DW-13480", + "Customers.customerName": "Customer 17", + }, + Object { + "Customers.customerId": "EM-14140", + "Customers.customerName": "Customer 18", + }, + Object { + "Customers.customerId": "GA-14725", + "Customers.customerName": "Customer 19", + }, + Object { + "Customers.customerId": "GZ-14470", + "Customers.customerName": "Customer 20", + }, + Object { + "Customers.customerId": "HH-15010", + "Customers.customerName": "Customer 21", + }, + Object { + "Customers.customerId": "HK-14890", + "Customers.customerName": "Customer 22", + }, + Object { + "Customers.customerId": "JH-15430", + "Customers.customerName": "Customer 23", + }, + Object { + "Customers.customerId": "JO-15550", + "Customers.customerName": "Customer 24", + }, + Object { + "Customers.customerId": "JS-16030", + "Customers.customerName": "Customer 25", + }, + Object { + "Customers.customerId": "JW-15220", + "Customers.customerName": "Customer 26", + }, + Object { + "Customers.customerId": "KL-16555", + "Customers.customerName": "Customer 27", + }, + Object { + "Customers.customerId": "KN-16705", + "Customers.customerName": "Customer 28", + }, + Object { + "Customers.customerId": "LC-17050", + "Customers.customerName": "Customer 29", + }, + Object { + "Customers.customerId": "LR-16915", + "Customers.customerName": "Customer 30", + }, + Object { + "Customers.customerId": "MC-17605", + "Customers.customerName": "Customer 31", + }, + Object { + "Customers.customerId": "MG-17650", + "Customers.customerName": "Customer 32", + }, + Object { + "Customers.customerId": "ML-17755", + "Customers.customerName": "Customer 33", + }, + Object { + "Customers.customerId": "MM-18280", + "Customers.customerName": "Customer 34", + }, + Object { + "Customers.customerId": "NP-18670", + "Customers.customerName": "Customer 35", + }, + Object { + "Customers.customerId": "PF-19165", + "Customers.customerName": "Customer 36", + }, + Object { + "Customers.customerId": "SB-20185", + "Customers.customerName": "Customer 37", + }, + Object { + "Customers.customerId": "SS-20140", + "Customers.customerName": "Customer 38", + }, + Object { + "Customers.customerId": "TB-21175", + "Customers.customerName": "Customer 39", + }, + Object { + "Customers.customerId": "TS-21205", + "Customers.customerName": "Customer 40", + }, + Object { + "Customers.customerId": "WB-21850", + "Customers.customerName": "Customer 41", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: startsWith + dimensions, first 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "AS-10225", + "Customers.customerName": "Customer 3", + }, + Object { + "Customers.customerId": "AW-10840", + "Customers.customerName": "Customer 4", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: startsWith + dimensions, second 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "AS-10225", + "Customers.customerName": "Customer 3", + }, + Object { + "Customers.customerId": "AW-10840", + "Customers.customerName": "Customer 4", + }, + Object { + "Customers.customerId": "BB-11545", + "Customers.customerName": "Customer 5", + }, + Object { + "Customers.customerId": "BF-11020", + "Customers.customerName": "Customer 6", + }, + Object { + "Customers.customerId": "BF-11170", + "Customers.customerName": "Customer 7", + }, + Object { + "Customers.customerId": "BM-11650", + "Customers.customerName": "Customer 8", + }, + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Customers: startsWith + dimensions, third 1`] = `Array []`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering ECommerce: contains dimensions, first 1`] = ` +Array [ + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Detroit", + "ECommerce.customerId": "MC-17605", + "ECommerce.customerName": "Customer 31", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-01-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-145142", + "ECommerce.productName": "Balt Solid Wood Rectangular Table", + "ECommerce.profit": 21.098, + "ECommerce.quantity": 2, + "ECommerce.rowId": 523, + "ECommerce.sales": 210.98, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Anderson Hickey Conga Table Tops & Accessories", + "ECommerce.profit": -3.3506, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3060, + "ECommerce.sales": 24.368, + "ECommerce.subCategory": "Tables", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering ECommerce: contains dimensions, second 1`] = ` +Array [ + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Detroit", + "ECommerce.customerId": "MC-17605", + "ECommerce.customerName": "Customer 31", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-01-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-145142", + "ECommerce.productName": "Balt Solid Wood Rectangular Table", + "ECommerce.profit": 21.098, + "ECommerce.quantity": 2, + "ECommerce.rowId": 523, + "ECommerce.sales": 210.98, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lorain", + "ECommerce.customerId": "GA-14725", + "ECommerce.customerName": "Customer 19", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-107503", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 8.5568, + "ECommerce.quantity": 4, + "ECommerce.rowId": 849, + "ECommerce.sales": 48.896, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Vancouver", + "ECommerce.customerId": "JW-15220", + "ECommerce.customerName": "Customer 26", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-30T00:00:00.000", + "ECommerce.orderId": "CA-2017-139661", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.profit": 3.6632, + "ECommerce.quantity": 2, + "ECommerce.rowId": 1494, + "ECommerce.sales": 9.64, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 10.3904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3059, + "ECommerce.sales": 30.56, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Anderson Hickey Conga Table Tops & Accessories", + "ECommerce.profit": -3.3506, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3060, + "ECommerce.sales": 24.368, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Marion", + "ECommerce.customerId": "MG-17650", + "ECommerce.customerName": "Customer 32", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-145660", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.profit": 1.7352, + "ECommerce.quantity": 2, + "ECommerce.rowId": 6205, + "ECommerce.sales": 7.712, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Philadelphia", + "ECommerce.customerId": "BS-11755", + "ECommerce.customerName": "Customer 10", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-04-10T00:00:00.000", + "ECommerce.orderId": "CA-2017-135069", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 6.4176, + "ECommerce.quantity": 3, + "ECommerce.rowId": 7425, + "ECommerce.sales": 36.672, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Dallas", + "ECommerce.customerId": "LC-17050", + "ECommerce.customerName": "Customer 29", + "ECommerce.discount": 0.6, + "ECommerce.orderDate": "2020-11-06T00:00:00.000", + "ECommerce.orderId": "US-2017-119319", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": -19.864, + "ECommerce.quantity": 5, + "ECommerce.rowId": 8621, + "ECommerce.sales": 30.56, + "ECommerce.subCategory": "Furnishings", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering ECommerce: contains dimensions, third 1`] = `Array []`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering ECommerce: endsWith + dimensions, first 1`] = ` +Array [ + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Marion", + "ECommerce.customerId": "MG-17650", + "ECommerce.customerName": "Customer 32", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-145660", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.profit": 1.7352, + "ECommerce.quantity": 2, + "ECommerce.rowId": 6205, + "ECommerce.sales": 7.712, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "JH-15430", + "ECommerce.customerName": "Customer 23", + "ECommerce.discount": 0.5, + "ECommerce.orderDate": "2020-12-25T00:00:00.000", + "ECommerce.orderId": "CA-2017-105620", + "ECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "ECommerce.profit": -7.2, + "ECommerce.quantity": 2, + "ECommerce.rowId": 8958, + "ECommerce.sales": 120, + "ECommerce.subCategory": "Machines", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering ECommerce: endsWith + dimensions, second 1`] = ` +Array [ + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Detroit", + "ECommerce.customerId": "MC-17605", + "ECommerce.customerName": "Customer 31", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-01-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-145142", + "ECommerce.productName": "Balt Solid Wood Rectangular Table", + "ECommerce.profit": 21.098, + "ECommerce.quantity": 2, + "ECommerce.rowId": 523, + "ECommerce.sales": 210.98, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Vancouver", + "ECommerce.customerId": "JW-15220", + "ECommerce.customerName": "Customer 26", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-30T00:00:00.000", + "ECommerce.orderId": "CA-2017-139661", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.profit": 3.6632, + "ECommerce.quantity": 2, + "ECommerce.rowId": 1494, + "ECommerce.sales": 9.64, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "KN-16705", + "ECommerce.customerName": "Customer 28", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-09-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-138422", + "ECommerce.productName": "Wausau Papers Astrobrights Colored Envelopes", + "ECommerce.profit": 5.2026, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2329, + "ECommerce.sales": 14.352, + "ECommerce.subCategory": "Envelopes", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "DG-13300", + "ECommerce.customerName": "Customer 16", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-11-28T00:00:00.000", + "ECommerce.orderId": "CA-2017-123372", + "ECommerce.productName": "Google Nexus 5", + "ECommerce.profit": 494.9725, + "ECommerce.quantity": 11, + "ECommerce.rowId": 2661, + "ECommerce.sales": 1979.89, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 10.3904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3059, + "ECommerce.sales": 30.56, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Anderson Hickey Conga Table Tops & Accessories", + "ECommerce.profit": -3.3506, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3060, + "ECommerce.sales": 24.368, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Bakersfield", + "ECommerce.customerId": "AW-10840", + "ECommerce.customerName": "Customer 4", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-123001", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 2.726, + "ECommerce.quantity": 5, + "ECommerce.rowId": 3934, + "ECommerce.sales": 9.4, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Philadelphia", + "ECommerce.customerId": "CC-12475", + "ECommerce.customerName": "Customer 12", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-21T00:00:00.000", + "ECommerce.orderId": "CA-2017-100811", + "ECommerce.productName": "Recycled Eldon Regeneration Jumbo File", + "ECommerce.profit": 3.9296, + "ECommerce.quantity": 4, + "ECommerce.rowId": 4012, + "ECommerce.sales": 39.296, + "ECommerce.subCategory": "Storage", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Los Angeles", + "ECommerce.customerId": "SS-20140", + "ECommerce.customerName": "Customer 38", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-03T00:00:00.000", + "ECommerce.orderId": "CA-2017-145772", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "ECommerce.profit": 8.5025, + "ECommerce.quantity": 5, + "ECommerce.rowId": 6125, + "ECommerce.sales": 44.75, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Baltimore", + "ECommerce.customerId": "AJ-10780", + "ECommerce.customerName": "Customer 2", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-14T00:00:00.000", + "ECommerce.orderId": "US-2017-133361", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 1.0904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 6459, + "ECommerce.sales": 3.76, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "New York City", + "ECommerce.customerId": "MM-18280", + "ECommerce.customerName": "Customer 34", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-10T00:00:00.000", + "ECommerce.orderId": "CA-2017-112172", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": 0.7065, + "ECommerce.quantity": 3, + "ECommerce.rowId": 7310, + "ECommerce.sales": 14.13, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lakewood", + "ECommerce.customerId": "NP-18670", + "ECommerce.customerName": "Customer 35", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-12T00:00:00.000", + "ECommerce.orderId": "CA-2017-150091", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.profit": 129.294, + "ECommerce.quantity": 5, + "ECommerce.rowId": 8425, + "ECommerce.sales": 2154.9, + "ECommerce.subCategory": "Bookcases", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering ECommerce: endsWith + dimensions, third 1`] = `Array []`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering ECommerce: startsWith + dimensions, first 1`] = ` +Array [ + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Provo", + "ECommerce.customerId": "AS-10225", + "ECommerce.customerName": "Customer 3", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-112515", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.profit": 77.5764, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2655, + "ECommerce.sales": 1292.94, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Bakersfield", + "ECommerce.customerId": "AW-10840", + "ECommerce.customerName": "Customer 4", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-123001", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 2.726, + "ECommerce.quantity": 5, + "ECommerce.rowId": 3934, + "ECommerce.sales": 9.4, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "New York City", + "ECommerce.customerId": "AH-10465", + "ECommerce.customerName": "Customer 1", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-115546", + "ECommerce.productName": "Google Nexus 7", + "ECommerce.profit": 134.9925, + "ECommerce.quantity": 3, + "ECommerce.rowId": 4161, + "ECommerce.sales": 539.97, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Baltimore", + "ECommerce.customerId": "AJ-10780", + "ECommerce.customerName": "Customer 2", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-14T00:00:00.000", + "ECommerce.orderId": "US-2017-133361", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 1.0904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 6459, + "ECommerce.sales": 3.76, + "ECommerce.subCategory": "Art", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering ECommerce: startsWith + dimensions, second 1`] = ` +Array [ + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BM-11650", + "ECommerce.customerName": "Customer 8", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-13T00:00:00.000", + "ECommerce.orderId": "CA-2017-149048", + "ECommerce.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "ECommerce.profit": 81.432, + "ECommerce.quantity": 2, + "ECommerce.rowId": 2595, + "ECommerce.sales": 180.96, + "ECommerce.subCategory": "Envelopes", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Provo", + "ECommerce.customerId": "AS-10225", + "ECommerce.customerName": "Customer 3", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-112515", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.profit": 77.5764, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2655, + "ECommerce.sales": 1292.94, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Bakersfield", + "ECommerce.customerId": "AW-10840", + "ECommerce.customerName": "Customer 4", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-123001", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 2.726, + "ECommerce.quantity": 5, + "ECommerce.rowId": 3934, + "ECommerce.sales": 9.4, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "New York City", + "ECommerce.customerId": "AH-10465", + "ECommerce.customerName": "Customer 1", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-115546", + "ECommerce.productName": "Google Nexus 7", + "ECommerce.profit": 134.9925, + "ECommerce.quantity": 3, + "ECommerce.rowId": 4161, + "ECommerce.sales": 539.97, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Oakland", + "ECommerce.customerId": "BB-11545", + "ECommerce.customerName": "Customer 5", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-102379", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.profit": 44.975, + "ECommerce.quantity": 5, + "ECommerce.rowId": 6272, + "ECommerce.sales": 179.9, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Baltimore", + "ECommerce.customerId": "AJ-10780", + "ECommerce.customerName": "Customer 2", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-14T00:00:00.000", + "ECommerce.orderId": "US-2017-133361", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 1.0904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 6459, + "ECommerce.sales": 3.76, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Arlington", + "ECommerce.customerId": "BF-11020", + "ECommerce.customerName": "Customer 6", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-09-08T00:00:00.000", + "ECommerce.orderId": "US-2017-124779", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.profit": 15.498, + "ECommerce.quantity": 5, + "ECommerce.rowId": 6651, + "ECommerce.sales": 45.92, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Philadelphia", + "ECommerce.customerId": "BS-11755", + "ECommerce.customerName": "Customer 10", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-04-10T00:00:00.000", + "ECommerce.orderId": "CA-2017-135069", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 6.4176, + "ECommerce.quantity": 3, + "ECommerce.rowId": 7425, + "ECommerce.sales": 36.672, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BF-11170", + "ECommerce.customerName": "Customer 7", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-151799", + "ECommerce.productName": "Canon PC1080F Personal Copier", + "ECommerce.profit": 467.9922, + "ECommerce.quantity": 2, + "ECommerce.rowId": 7698, + "ECommerce.sales": 1199.98, + "ECommerce.subCategory": "Copiers", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BS-11380", + "ECommerce.customerName": "Customer 9", + "ECommerce.discount": 0.4, + "ECommerce.orderDate": "2020-11-16T00:00:00.000", + "ECommerce.orderId": "CA-2017-160633", + "ECommerce.productName": "Hewlett Packard 610 Color Digital Copier / Printer", + "ECommerce.profit": 74.9985, + "ECommerce.quantity": 3, + "ECommerce.rowId": 9618, + "ECommerce.sales": 899.982, + "ECommerce.subCategory": "Copiers", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Bowling", + "ECommerce.customerId": "BS-11380", + "ECommerce.customerName": "Customer 9", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-16T00:00:00.000", + "ECommerce.orderId": "CA-2017-160633", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.profit": 5.397, + "ECommerce.quantity": 3, + "ECommerce.rowId": 9619, + "ECommerce.sales": 86.352, + "ECommerce.subCategory": "Art", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering ECommerce: startsWith + dimensions, third 1`] = `Array []`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Products: contains + dimensions + order, first 1`] = ` +Array [ + Object { + "Products.category": "Furniture", + "Products.productName": "Anderson Hickey Conga Table Tops & Accessories", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Balt Solid Wood Rectangular Table", + "Products.subCategory": "Tables", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Products: contains + dimensions + order, second 1`] = ` +Array [ + Object { + "Products.category": "Furniture", + "Products.productName": "Linden 10 Round Wall Clock, Black", + "Products.subCategory": "Furnishings", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Magna Visual Magnetic Picture Hangers", + "Products.subCategory": "Furnishings", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Anderson Hickey Conga Table Tops & Accessories", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Balt Solid Wood Rectangular Table", + "Products.subCategory": "Tables", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Products: contains + dimensions + order, third 1`] = `Array []`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Products: contains with special chars + dimensions 1`] = `Array []`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Products: endsWith filter + dimensions + order, first 1`] = ` +Array [ + Object { + "Products.category": "Furniture", + "Products.productName": "DMI Eclipse Executive Suite Bookcases", + "Products.subCategory": "Bookcases", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "Products.subCategory": "Bookcases", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Anderson Hickey Conga Table Tops & Accessories", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Balt Solid Wood Rectangular Table", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "Products.subCategory": "Envelopes", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Wausau Papers Astrobrights Colored Envelopes", + "Products.subCategory": "Envelopes", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Logitech di_Novo Edge Keyboard", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "Products.subCategory": "Machines", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Okidata C610n Printer", + "Products.subCategory": "Machines", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Google Nexus 5", + "Products.subCategory": "Phones", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Google Nexus 6", + "Products.subCategory": "Phones", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Google Nexus 7", + "Products.subCategory": "Phones", + }, + Object { + "Products.category": "Technology", + "Products.productName": "HTC One", + "Products.subCategory": "Phones", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Products: endsWith filter + dimensions + order, second 1`] = ` +Array [ + Object { + "Products.category": "Furniture", + "Products.productName": "DMI Eclipse Executive Suite Bookcases", + "Products.subCategory": "Bookcases", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "Products.subCategory": "Bookcases", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Linden 10 Round Wall Clock, Black", + "Products.subCategory": "Furnishings", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Magna Visual Magnetic Picture Hangers", + "Products.subCategory": "Furnishings", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Anderson Hickey Conga Table Tops & Accessories", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Balt Solid Wood Rectangular Table", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "Products.subCategory": "Envelopes", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Wausau Papers Astrobrights Colored Envelopes", + "Products.subCategory": "Envelopes", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Logitech di_Novo Edge Keyboard", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "Products.subCategory": "Machines", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Okidata C610n Printer", + "Products.subCategory": "Machines", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Google Nexus 5", + "Products.subCategory": "Phones", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Google Nexus 6", + "Products.subCategory": "Phones", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Google Nexus 7", + "Products.subCategory": "Phones", + }, + Object { + "Products.category": "Technology", + "Products.productName": "HTC One", + "Products.subCategory": "Phones", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Products: endsWith filter + dimensions + order, third 1`] = `Array []`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Products: startsWith filter + dimensions + order, first 1`] = ` +Array [ + Object { + "Products.category": "Office Supplies", + "Products.productName": "OIC #2 Pencils, Medium Soft", + "Products.subCategory": "Art", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Okidata C610n Printer", + "Products.subCategory": "Machines", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Products: startsWith filter + dimensions + order, second 1`] = ` +Array [ + Object { + "Products.category": "Office Supplies", + "Products.productName": "OIC #2 Pencils, Medium Soft", + "Products.subCategory": "Art", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Okidata C610n Printer", + "Products.subCategory": "Machines", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver filtering Products: startsWith filter + dimensions + order, third 1`] = `Array []`; + +exports[`Queries with the @cubejs-backend/oracle-driver pre-aggregations Customers: running total without time dimension 1`] = ` +Array [ + Object { + "Customers.runningTotal": "41", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-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/oracle-driver querying BigECommerce: SeveralMultiStageMeasures 1`] = ` +Array [ + Object { + "BigECommerce.count": "2", + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.percentageOfTotalForStatus": "100", + "BigECommerce.totalCountRetailMonthAgo": null, + "BigECommerce.totalProfitYearAgo": null, + }, + Object { + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.percentageOfTotalForStatus": "100", + "BigECommerce.totalCountRetailMonthAgo": "2", + "BigECommerce.totalProfitYearAgo": null, + }, + Object { + "BigECommerce.count": "2", + "BigECommerce.orderDate": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "BigECommerce.percentageOfTotalForStatus": "100", + "BigECommerce.totalCountRetailMonthAgo": "1", + "BigECommerce.totalProfitYearAgo": null, + }, + Object { + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-04-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-04-01T00:00:00.000", + "BigECommerce.percentageOfTotalForStatus": "100", + "BigECommerce.totalCountRetailMonthAgo": "2", + "BigECommerce.totalProfitYearAgo": null, + }, + Object { + "BigECommerce.count": "5", + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "BigECommerce.percentageOfTotalForStatus": "100", + "BigECommerce.totalCountRetailMonthAgo": "1", + "BigECommerce.totalProfitYearAgo": null, + }, + Object { + "BigECommerce.count": "7", + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.percentageOfTotalForStatus": "100", + "BigECommerce.totalCountRetailMonthAgo": "5", + "BigECommerce.totalProfitYearAgo": null, + }, + Object { + "BigECommerce.count": null, + "BigECommerce.orderDate": "2020-07-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-07-01T00:00:00.000", + "BigECommerce.percentageOfTotalForStatus": null, + "BigECommerce.totalCountRetailMonthAgo": "7", + "BigECommerce.totalProfitYearAgo": null, + }, + Object { + "BigECommerce.count": "6", + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.percentageOfTotalForStatus": "100", + "BigECommerce.totalCountRetailMonthAgo": null, + "BigECommerce.totalProfitYearAgo": null, + }, + Object { + "BigECommerce.count": "4", + "BigECommerce.orderDate": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "BigECommerce.percentageOfTotalForStatus": "100", + "BigECommerce.totalCountRetailMonthAgo": "6", + "BigECommerce.totalProfitYearAgo": null, + }, + Object { + "BigECommerce.count": "9", + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.percentageOfTotalForStatus": "100", + "BigECommerce.totalCountRetailMonthAgo": "4", + "BigECommerce.totalProfitYearAgo": null, + }, + Object { + "BigECommerce.count": "7", + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.percentageOfTotalForStatus": "100", + "BigECommerce.totalCountRetailMonthAgo": "9", + "BigECommerce.totalProfitYearAgo": null, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: base measure plus multi-stage over non-partitioned pre-aggregation 1`] = ` +Array [ + Object { + "BigECommerce.category": "Technology", + "BigECommerce.productName": "Canon PC1080F Personal Copier", + "BigECommerce.profitInCategory": "2398.8443", + "BigECommerce.totalProfit": "1037.9827", + }, + Object { + "BigECommerce.category": "Technology", + "BigECommerce.productName": "Logitech di_Novo Edge Keyboard", + "BigECommerce.profitInCategory": "2398.8443", + "BigECommerce.totalProfit": "517.4793", + }, + Object { + "BigECommerce.category": "Technology", + "BigECommerce.productName": "Google Nexus 5", + "BigECommerce.profitInCategory": "2398.8443", + "BigECommerce.totalProfit": "494.9725", + }, + Object { + "BigECommerce.category": "Technology", + "BigECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "BigECommerce.profitInCategory": "2398.8443", + "BigECommerce.totalProfit": "218.4", + }, + Object { + "BigECommerce.category": "Furniture", + "BigECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "BigECommerce.profitInCategory": "459.7526", + "BigECommerce.totalProfit": "206.8704", + }, + Object { + "BigECommerce.category": "Furniture", + "BigECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "BigECommerce.profitInCategory": "459.7526", + "BigECommerce.totalProfit": "168.6966", + }, + Object { + "BigECommerce.category": "Technology", + "BigECommerce.productName": "Google Nexus 6", + "BigECommerce.profitInCategory": "2398.8443", + "BigECommerce.totalProfit": "134.9925", + }, + Object { + "BigECommerce.category": "Technology", + "BigECommerce.productName": "Google Nexus 7", + "BigECommerce.profitInCategory": "2398.8443", + "BigECommerce.totalProfit": "134.9925", + }, + Object { + "BigECommerce.category": "Office Supplies", + "BigECommerce.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "BigECommerce.profitInCategory": "192.9558", + "BigECommerce.totalProfit": "81.432", + }, + Object { + "BigECommerce.category": "Technology", + "BigECommerce.productName": "Hewlett Packard 610 Color Digital Copier / Printer", + "BigECommerce.profitInCategory": "2398.8443", + "BigECommerce.totalProfit": "74.9985", + }, + Object { + "BigECommerce.category": "Furniture", + "BigECommerce.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "BigECommerce.profitInCategory": "459.7526", + "BigECommerce.totalProfit": "60.5488", + }, + Object { + "BigECommerce.category": "Office Supplies", + "BigECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "BigECommerce.profitInCategory": "192.9558", + "BigECommerce.totalProfit": "50.372", + }, + Object { + "BigECommerce.category": "Office Supplies", + "BigECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "BigECommerce.profitInCategory": "192.9558", + "BigECommerce.totalProfit": "43.2796", + }, + Object { + "BigECommerce.category": "Technology", + "BigECommerce.productName": "HTC One", + "BigECommerce.profitInCategory": "2398.8443", + "BigECommerce.totalProfit": "26.9973", + }, + Object { + "BigECommerce.category": "Furniture", + "BigECommerce.productName": "Balt Solid Wood Rectangular Table", + "BigECommerce.profitInCategory": "459.7526", + "BigECommerce.totalProfit": "21.098", + }, + Object { + "BigECommerce.category": "Technology", + "BigECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "BigECommerce.profitInCategory": "2398.8443", + "BigECommerce.totalProfit": "13.604", + }, + Object { + "BigECommerce.category": "Technology", + "BigECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "BigECommerce.profitInCategory": "2398.8443", + "BigECommerce.totalProfit": "8.5025", + }, + Object { + "BigECommerce.category": "Technology", + "BigECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "BigECommerce.profitInCategory": "2398.8443", + "BigECommerce.totalProfit": "8.5025", + }, + Object { + "BigECommerce.category": "Furniture", + "BigECommerce.productName": "Linden 10 Round Wall Clock, Black", + "BigECommerce.profitInCategory": "459.7526", + "BigECommerce.totalProfit": "5.5008", + }, + Object { + "BigECommerce.category": "Furniture", + "BigECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "BigECommerce.profitInCategory": "459.7526", + "BigECommerce.totalProfit": "5.3984", + }, + Object { + "BigECommerce.category": "Office Supplies", + "BigECommerce.productName": "Wausau Papers Astrobrights Colored Envelopes", + "BigECommerce.profitInCategory": "192.9558", + "BigECommerce.totalProfit": "5.2026", + }, + Object { + "BigECommerce.category": "Office Supplies", + "BigECommerce.productName": "OIC #2 Pencils, Medium Soft", + "BigECommerce.profitInCategory": "192.9558", + "BigECommerce.totalProfit": "4.9068", + }, + Object { + "BigECommerce.category": "Office Supplies", + "BigECommerce.productName": "Project Tote Personal File", + "BigECommerce.profitInCategory": "192.9558", + "BigECommerce.totalProfit": "4.0687", + }, + Object { + "BigECommerce.category": "Office Supplies", + "BigECommerce.productName": "Recycled Eldon Regeneration Jumbo File", + "BigECommerce.profitInCategory": "192.9558", + "BigECommerce.totalProfit": "3.9296", + }, + Object { + "BigECommerce.category": "Office Supplies", + "BigECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "BigECommerce.profitInCategory": "192.9558", + "BigECommerce.totalProfit": "-0.2355", + }, + Object { + "BigECommerce.category": "Furniture", + "BigECommerce.productName": "Anderson Hickey Conga Table Tops & Accessories", + "BigECommerce.profitInCategory": "459.7526", + "BigECommerce.totalProfit": "-3.3506", + }, + Object { + "BigECommerce.category": "Furniture", + "BigECommerce.productName": "DMI Eclipse Executive Suite Bookcases", + "BigECommerce.profitInCategory": "459.7526", + "BigECommerce.totalProfit": "-5.0098", + }, + Object { + "BigECommerce.category": "Technology", + "BigECommerce.productName": "Okidata C610n Printer", + "BigECommerce.profitInCategory": "2398.8443", + "BigECommerce.totalProfit": "-272.58", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: filtering with possible casts 1`] = ` +Array [ + Object { + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.totalSales": 48.896, + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.totalSales": 232.88, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: multi-stage group by time dimension 1`] = ` +Array [ + Object { + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.quarter": "2020-01-01T00:00:00.000", + "BigECommerce.totalProfit": "29.6548", + "BigECommerce.totalProfitForQuarter": "619.4485", + }, + Object { + "BigECommerce.orderDate": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.quarter": "2020-01-01T00:00:00.000", + "BigECommerce.totalProfit": "6.1992", + "BigECommerce.totalProfitForQuarter": "619.4485", + }, + Object { + "BigECommerce.orderDate": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.quarter": "2020-01-01T00:00:00.000", + "BigECommerce.totalProfit": "583.5945", + "BigECommerce.totalProfitForQuarter": "619.4485", + }, + Object { + "BigECommerce.orderDate": "2020-04-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-04-01T00:00:00.000", + "BigECommerce.orderDate.quarter": "2020-04-01T00:00:00.000", + "BigECommerce.totalProfit": "6.4176", + "BigECommerce.totalProfitForQuarter": "394.3386", + }, + Object { + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.quarter": "2020-04-01T00:00:00.000", + "BigECommerce.totalProfit": "353.6849", + "BigECommerce.totalProfitForQuarter": "394.3386", + }, + Object { + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.quarter": "2020-04-01T00:00:00.000", + "BigECommerce.totalProfit": "34.2361", + "BigECommerce.totalProfitForQuarter": "394.3386", + }, + Object { + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.quarter": "2020-07-01T00:00:00.000", + "BigECommerce.totalProfit": "461.1332", + "BigECommerce.totalProfitForQuarter": "461.1332", + }, + Object { + "BigECommerce.orderDate": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.quarter": "2020-10-01T00:00:00.000", + "BigECommerce.totalProfit": "139.997", + "BigECommerce.totalProfitForQuarter": "1576.6324", + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.quarter": "2020-10-01T00:00:00.000", + "BigECommerce.totalProfit": "1132.6617", + "BigECommerce.totalProfitForQuarter": "1576.6324", + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.quarter": "2020-10-01T00:00:00.000", + "BigECommerce.totalProfit": "303.9737", + "BigECommerce.totalProfitForQuarter": "1576.6324", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: null boolean 1`] = ` +Array [ + Object { + "BigECommerce.returning": null, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: null sum 1`] = ` +Array [ + Object { + "BigECommerce.totalSales": null, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: partitioned pre-agg 1`] = ` +Array [ + Object { + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.productName": "Balt Solid Wood Rectangular Table", + "BigECommerce.totalQuantity": "2", + }, + Object { + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.productName": "Linden 10 Round Wall Clock, Black", + "BigECommerce.totalQuantity": "4", + }, + Object { + "BigECommerce.orderDate": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "BigECommerce.totalQuantity": "2", + }, + Object { + "BigECommerce.orderDate": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "BigECommerce.productName": "Canon PC1080F Personal Copier", + "BigECommerce.totalQuantity": "5", + }, + Object { + "BigECommerce.orderDate": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "BigECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "BigECommerce.totalQuantity": "8", + }, + Object { + "BigECommerce.orderDate": "2020-04-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-04-01T00:00:00.000", + "BigECommerce.productName": "Linden 10 Round Wall Clock, Black", + "BigECommerce.totalQuantity": "3", + }, + Object { + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "BigECommerce.productName": "Google Nexus 6", + "BigECommerce.totalQuantity": "3", + }, + Object { + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "BigECommerce.productName": "Google Nexus 7", + "BigECommerce.totalQuantity": "3", + }, + Object { + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "BigECommerce.productName": "OIC #2 Pencils, Medium Soft", + "BigECommerce.totalQuantity": "2", + }, + Object { + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "BigECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "BigECommerce.totalQuantity": "5", + }, + Object { + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "BigECommerce.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "BigECommerce.totalQuantity": "2", + }, + Object { + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.productName": "DMI Eclipse Executive Suite Bookcases", + "BigECommerce.totalQuantity": "1", + }, + Object { + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.productName": "HTC One", + "BigECommerce.totalQuantity": "3", + }, + Object { + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "BigECommerce.totalQuantity": "5", + }, + Object { + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.productName": "OIC #2 Pencils, Medium Soft", + "BigECommerce.totalQuantity": "2", + }, + Object { + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "BigECommerce.totalQuantity": "6", + }, + Object { + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.productName": "Project Tote Personal File", + "BigECommerce.totalQuantity": "1", + }, + Object { + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "BigECommerce.totalQuantity": "3", + }, + Object { + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "BigECommerce.totalQuantity": "7", + }, + Object { + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "BigECommerce.totalQuantity": "4", + }, + Object { + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.productName": "OIC #2 Pencils, Medium Soft", + "BigECommerce.totalQuantity": "5", + }, + Object { + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "BigECommerce.totalQuantity": "5", + }, + Object { + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.productName": "Wausau Papers Astrobrights Colored Envelopes", + "BigECommerce.totalQuantity": "3", + }, + Object { + "BigECommerce.orderDate": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "BigECommerce.productName": "Anderson Hickey Conga Table Tops & Accessories", + "BigECommerce.totalQuantity": "2", + }, + Object { + "BigECommerce.orderDate": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "BigECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "BigECommerce.totalQuantity": "5", + }, + Object { + "BigECommerce.orderDate": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "BigECommerce.productName": "Linden 10 Round Wall Clock, Black", + "BigECommerce.totalQuantity": "2", + }, + Object { + "BigECommerce.orderDate": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "BigECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "BigECommerce.totalQuantity": "2", + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.productName": "Google Nexus 5", + "BigECommerce.totalQuantity": "11", + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "BigECommerce.totalQuantity": "4", + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.productName": "Hewlett Packard 610 Color Digital Copier / Printer", + "BigECommerce.totalQuantity": "3", + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.productName": "Linden 10 Round Wall Clock, Black", + "BigECommerce.totalQuantity": "5", + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.productName": "Logitech di_Novo Edge Keyboard", + "BigECommerce.totalQuantity": "9", + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "BigECommerce.totalQuantity": "3", + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.productName": "Recycled Eldon Regeneration Jumbo File", + "BigECommerce.totalQuantity": "4", + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "BigECommerce.totalQuantity": "4", + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.productName": "Canon PC1080F Personal Copier", + "BigECommerce.totalQuantity": "2", + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "BigECommerce.totalQuantity": "4", + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "BigECommerce.totalQuantity": "5", + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "BigECommerce.totalQuantity": "2", + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "BigECommerce.totalQuantity": "2", + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.productName": "Okidata C610n Printer", + "BigECommerce.totalQuantity": "2", + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "BigECommerce.totalQuantity": "5", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: partitioned pre-agg with multi time dimension 1`] = ` +Array [ + Object { + "BigECommerce.completedDate": "2020-01-02T00:00:00.000", + "BigECommerce.completedDate.day": "2020-01-02T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-01T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-01-24T00:00:00.000", + "BigECommerce.completedDate.day": "2020-01-24T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-01-23T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-23T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-02-17T00:00:00.000", + "BigECommerce.completedDate.day": "2020-02-17T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-02-16T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-16T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-03-18T00:00:00.000", + "BigECommerce.completedDate.day": "2020-03-18T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-03-17T00:00:00.000", + "BigECommerce.orderDate.day": "2020-03-17T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-03-27T00:00:00.000", + "BigECommerce.completedDate.day": "2020-03-27T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-03-26T00:00:00.000", + "BigECommerce.orderDate.day": "2020-03-26T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-04-11T00:00:00.000", + "BigECommerce.completedDate.day": "2020-04-11T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-04-10T00:00:00.000", + "BigECommerce.orderDate.day": "2020-04-10T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-05-14T00:00:00.000", + "BigECommerce.completedDate.day": "2020-05-14T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-05-13T00:00:00.000", + "BigECommerce.orderDate.day": "2020-05-13T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-05-15T00:00:00.000", + "BigECommerce.completedDate.day": "2020-05-15T00:00:00.000", + "BigECommerce.count": "2", + "BigECommerce.orderDate": "2020-05-14T00:00:00.000", + "BigECommerce.orderDate.day": "2020-05-14T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-05-28T00:00:00.000", + "BigECommerce.completedDate.day": "2020-05-28T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-05-27T00:00:00.000", + "BigECommerce.orderDate.day": "2020-05-27T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-05-30T00:00:00.000", + "BigECommerce.completedDate.day": "2020-05-30T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-05-29T00:00:00.000", + "BigECommerce.orderDate.day": "2020-05-29T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-06-04T00:00:00.000", + "BigECommerce.completedDate.day": "2020-06-04T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-06-03T00:00:00.000", + "BigECommerce.orderDate.day": "2020-06-03T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-06-11T00:00:00.000", + "BigECommerce.completedDate.day": "2020-06-11T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-06-10T00:00:00.000", + "BigECommerce.orderDate.day": "2020-06-10T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-06-12T00:00:00.000", + "BigECommerce.completedDate.day": "2020-06-12T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-06-11T00:00:00.000", + "BigECommerce.orderDate.day": "2020-06-11T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-06-16T00:00:00.000", + "BigECommerce.completedDate.day": "2020-06-16T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-06-15T00:00:00.000", + "BigECommerce.orderDate.day": "2020-06-15T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-06-18T00:00:00.000", + "BigECommerce.completedDate.day": "2020-06-18T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-06-17T00:00:00.000", + "BigECommerce.orderDate.day": "2020-06-17T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-06-26T00:00:00.000", + "BigECommerce.completedDate.day": "2020-06-26T00:00:00.000", + "BigECommerce.count": "2", + "BigECommerce.orderDate": "2020-06-25T00:00:00.000", + "BigECommerce.orderDate.day": "2020-06-25T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-09-02T00:00:00.000", + "BigECommerce.completedDate.day": "2020-09-02T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.day": "2020-09-01T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-09-03T00:00:00.000", + "BigECommerce.completedDate.day": "2020-09-03T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-09-02T00:00:00.000", + "BigECommerce.orderDate.day": "2020-09-02T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-09-09T00:00:00.000", + "BigECommerce.completedDate.day": "2020-09-09T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-09-08T00:00:00.000", + "BigECommerce.orderDate.day": "2020-09-08T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-09-18T00:00:00.000", + "BigECommerce.completedDate.day": "2020-09-18T00:00:00.000", + "BigECommerce.count": "2", + "BigECommerce.orderDate": "2020-09-17T00:00:00.000", + "BigECommerce.orderDate.day": "2020-09-17T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-09-24T00:00:00.000", + "BigECommerce.completedDate.day": "2020-09-24T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-09-23T00:00:00.000", + "BigECommerce.orderDate.day": "2020-09-23T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-10-13T00:00:00.000", + "BigECommerce.completedDate.day": "2020-10-13T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-10-12T00:00:00.000", + "BigECommerce.orderDate.day": "2020-10-12T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-10-20T00:00:00.000", + "BigECommerce.completedDate.day": "2020-10-20T00:00:00.000", + "BigECommerce.count": "2", + "BigECommerce.orderDate": "2020-10-19T00:00:00.000", + "BigECommerce.orderDate.day": "2020-10-19T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-11-01T00:00:00.000", + "BigECommerce.completedDate.day": "2020-11-01T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-10-30T00:00:00.000", + "BigECommerce.orderDate.day": "2020-10-30T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-11-03T00:00:00.000", + "BigECommerce.completedDate.day": "2020-11-03T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-11-02T00:00:00.000", + "BigECommerce.orderDate.day": "2020-11-02T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-11-06T00:00:00.000", + "BigECommerce.completedDate.day": "2020-11-06T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-11-05T00:00:00.000", + "BigECommerce.orderDate.day": "2020-11-05T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-11-07T00:00:00.000", + "BigECommerce.completedDate.day": "2020-11-07T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-11-06T00:00:00.000", + "BigECommerce.orderDate.day": "2020-11-06T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-11-12T00:00:00.000", + "BigECommerce.completedDate.day": "2020-11-12T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-11-11T00:00:00.000", + "BigECommerce.orderDate.day": "2020-11-11T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-11-13T00:00:00.000", + "BigECommerce.completedDate.day": "2020-11-13T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-11-12T00:00:00.000", + "BigECommerce.orderDate.day": "2020-11-12T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-11-17T00:00:00.000", + "BigECommerce.completedDate.day": "2020-11-17T00:00:00.000", + "BigECommerce.count": "2", + "BigECommerce.orderDate": "2020-11-16T00:00:00.000", + "BigECommerce.orderDate.day": "2020-11-16T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-11-22T00:00:00.000", + "BigECommerce.completedDate.day": "2020-11-22T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-11-21T00:00:00.000", + "BigECommerce.orderDate.day": "2020-11-21T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-11-29T00:00:00.000", + "BigECommerce.completedDate.day": "2020-11-29T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-11-28T00:00:00.000", + "BigECommerce.orderDate.day": "2020-11-28T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-12-02T00:00:00.000", + "BigECommerce.completedDate.day": "2020-12-02T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.day": "2020-12-01T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-12-03T00:00:00.000", + "BigECommerce.completedDate.day": "2020-12-03T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-12-02T00:00:00.000", + "BigECommerce.orderDate.day": "2020-12-02T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-12-05T00:00:00.000", + "BigECommerce.completedDate.day": "2020-12-05T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-12-04T00:00:00.000", + "BigECommerce.orderDate.day": "2020-12-04T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-12-15T00:00:00.000", + "BigECommerce.completedDate.day": "2020-12-15T00:00:00.000", + "BigECommerce.count": "2", + "BigECommerce.orderDate": "2020-12-14T00:00:00.000", + "BigECommerce.orderDate.day": "2020-12-14T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-12-25T00:00:00.000", + "BigECommerce.completedDate.day": "2020-12-25T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-12-24T00:00:00.000", + "BigECommerce.orderDate.day": "2020-12-24T00:00:00.000", + }, + Object { + "BigECommerce.completedDate": "2020-12-26T00:00:00.000", + "BigECommerce.completedDate.day": "2020-12-26T00:00:00.000", + "BigECommerce.count": "1", + "BigECommerce.orderDate": "2020-12-25T00:00:00.000", + "BigECommerce.orderDate.day": "2020-12-25T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: rolling window YTD (month + week + day + no gran) 1`] = ` +Array [ + Object { + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2019-12-30T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-02T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-02T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2019-12-30T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-03T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-03T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2019-12-30T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-04T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-04T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2019-12-30T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-05T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-05T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2019-12-30T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-06T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-06T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-07T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-07T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-08T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-08T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-09T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-09T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-10T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-10T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-11T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-11T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-12T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-12T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-13T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-13T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-14T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-14T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-15T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-15T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-16T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-16T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-17T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-17T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-18T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-18T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-19T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-19T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-20T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-20T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-21T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-21T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-22T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-22T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-23T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-23T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-24T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-24T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-25T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-25T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-26T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-26T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-27T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-27T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-28T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-28T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-29T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-29T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-30T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-30T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-31T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-31T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-02T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-02T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-03T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-03T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-04T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-04T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-05T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-05T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-06T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-06T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-07T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-07T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-08T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-08T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-09T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-09T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-10T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-10T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-11T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-11T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-12T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-12T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-13T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-13T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-14T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-14T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-15T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-15T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-16T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-16T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-17T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-17T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-18T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-18T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-19T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-19T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-20T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-20T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-21T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-21T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-22T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-22T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-23T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-23T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-24T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-24T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-25T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-25T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-26T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-26T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-27T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-27T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-28T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-28T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-29T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-29T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.day": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: rolling window YTD (month + week + day) 1`] = ` +Array [ + Object { + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2019-12-30T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-02T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-02T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2019-12-30T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-03T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-03T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2019-12-30T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-04T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-04T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2019-12-30T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-05T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-05T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2019-12-30T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-06T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-06T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-07T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-07T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-08T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-08T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-09T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-09T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-10T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-10T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-11T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-11T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-12T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-12T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-06T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-13T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-13T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-14T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-14T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-15T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-15T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-16T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-16T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-17T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-17T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-18T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-18T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-19T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-19T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-13T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-20T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-20T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-21T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-21T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-22T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-22T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 1, + }, + Object { + "BigECommerce.orderDate": "2020-01-23T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-23T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-24T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-24T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-25T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-25T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-26T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-26T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-20T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-27T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-27T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-28T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-28T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-29T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-29T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-30T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-30T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-01-31T00:00:00.000", + "BigECommerce.orderDate.day": "2020-01-31T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-02T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-02T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-01-27T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-03T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-03T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-04T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-04T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-05T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-05T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-06T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-06T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-07T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-07T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-08T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-08T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-09T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-09T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-03T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-10T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-10T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-11T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-11T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-12T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-12T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-13T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-13T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-14T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-14T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-15T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-15T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-16T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-16T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-10T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-17T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-17T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-18T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-18T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-19T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-19T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-20T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-20T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-21T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-21T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-22T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-22T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-23T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-23T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-17T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-24T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-24T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-25T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-25T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-26T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-26T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-27T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-27T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-28T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-28T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-02-29T00:00:00.000", + "BigECommerce.orderDate.day": "2020-02-29T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.day": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.week": "2020-02-24T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: rolling window YTD (month) 1`] = ` +Array [ + Object { + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.rollingCountYTD": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.rollingCountYTD": 3, + }, + Object { + "BigECommerce.orderDate": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "BigECommerce.rollingCountYTD": 5, + }, + Object { + "BigECommerce.orderDate": "2020-04-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-04-01T00:00:00.000", + "BigECommerce.rollingCountYTD": 6, + }, + Object { + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "BigECommerce.rollingCountYTD": 11, + }, + Object { + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.rollingCountYTD": 18, + }, + Object { + "BigECommerce.orderDate": "2020-07-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-07-01T00:00:00.000", + "BigECommerce.rollingCountYTD": 18, + }, + Object { + "BigECommerce.orderDate": "2020-08-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-08-01T00:00:00.000", + "BigECommerce.rollingCountYTD": 18, + }, + Object { + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.rollingCountYTD": 24, + }, + Object { + "BigECommerce.orderDate": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "BigECommerce.rollingCountYTD": 28, + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.rollingCountYTD": 37, + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.rollingCountYTD": 44, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: rolling window YTD without granularity 1`] = ` +Array [ + Object { + "BigECommerce.rollingCountYTD": 3, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: rolling window by 2 day 1`] = ` +Array [ + Object { + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.rollingCountBy2Day": null, + }, + Object { + "BigECommerce.orderDate": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.rollingCountBy2Day": null, + }, + Object { + "BigECommerce.orderDate": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "BigECommerce.rollingCountBy2Day": null, + }, + Object { + "BigECommerce.orderDate": "2020-04-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-04-01T00:00:00.000", + "BigECommerce.rollingCountBy2Day": null, + }, + Object { + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "BigECommerce.rollingCountBy2Day": null, + }, + Object { + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.rollingCountBy2Day": null, + }, + Object { + "BigECommerce.orderDate": "2020-07-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-07-01T00:00:00.000", + "BigECommerce.rollingCountBy2Day": null, + }, + Object { + "BigECommerce.orderDate": "2020-08-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-08-01T00:00:00.000", + "BigECommerce.rollingCountBy2Day": null, + }, + Object { + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.rollingCountBy2Day": null, + }, + Object { + "BigECommerce.orderDate": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "BigECommerce.rollingCountBy2Day": 1, + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.rollingCountBy2Day": null, + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.rollingCountBy2Day": null, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: rolling window by 2 month 1`] = ` +Array [ + Object { + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.rollingCountBy2Month": 2, + }, + Object { + "BigECommerce.orderDate": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.rollingCountBy2Month": 3, + }, + Object { + "BigECommerce.orderDate": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "BigECommerce.rollingCountBy2Month": 3, + }, + Object { + "BigECommerce.orderDate": "2020-04-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-04-01T00:00:00.000", + "BigECommerce.rollingCountBy2Month": 3, + }, + Object { + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "BigECommerce.rollingCountBy2Month": 6, + }, + Object { + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.rollingCountBy2Month": 12, + }, + Object { + "BigECommerce.orderDate": "2020-07-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-07-01T00:00:00.000", + "BigECommerce.rollingCountBy2Month": 7, + }, + Object { + "BigECommerce.orderDate": "2020-08-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-08-01T00:00:00.000", + "BigECommerce.rollingCountBy2Month": null, + }, + Object { + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.rollingCountBy2Month": 6, + }, + Object { + "BigECommerce.orderDate": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "BigECommerce.rollingCountBy2Month": 10, + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.rollingCountBy2Month": 13, + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.rollingCountBy2Month": 16, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: rolling window by 2 week 1`] = ` +Array [ + Object { + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.rollingCountBy2Week": null, + }, + Object { + "BigECommerce.orderDate": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.rollingCountBy2Week": null, + }, + Object { + "BigECommerce.orderDate": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "BigECommerce.rollingCountBy2Week": null, + }, + Object { + "BigECommerce.orderDate": "2020-04-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-04-01T00:00:00.000", + "BigECommerce.rollingCountBy2Week": null, + }, + Object { + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "BigECommerce.rollingCountBy2Week": null, + }, + Object { + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.rollingCountBy2Week": null, + }, + Object { + "BigECommerce.orderDate": "2020-07-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-07-01T00:00:00.000", + "BigECommerce.rollingCountBy2Week": null, + }, + Object { + "BigECommerce.orderDate": "2020-08-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-08-01T00:00:00.000", + "BigECommerce.rollingCountBy2Week": null, + }, + Object { + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.rollingCountBy2Week": null, + }, + Object { + "BigECommerce.orderDate": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "BigECommerce.rollingCountBy2Week": null, + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.rollingCountBy2Week": null, + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.rollingCountBy2Week": null, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: time series in rolling window 1`] = ` +Array [ + Object { + "BigECommerce.customersCountPrev1Month": null, + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + }, + Object { + "BigECommerce.customersCountPrev1Month": 2, + "BigECommerce.orderDate": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + }, + Object { + "BigECommerce.customersCountPrev1Month": 1, + "BigECommerce.orderDate": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-03-01T00:00:00.000", + }, + Object { + "BigECommerce.customersCountPrev1Month": 2, + "BigECommerce.orderDate": "2020-04-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-04-01T00:00:00.000", + }, + Object { + "BigECommerce.customersCountPrev1Month": 1, + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + }, + Object { + "BigECommerce.customersCountPrev1Month": 5, + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + }, + Object { + "BigECommerce.customersCountPrev1Month": 7, + "BigECommerce.orderDate": "2020-07-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-07-01T00:00:00.000", + }, + Object { + "BigECommerce.customersCountPrev1Month": null, + "BigECommerce.orderDate": "2020-08-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-08-01T00:00:00.000", + }, + Object { + "BigECommerce.customersCountPrev1Month": null, + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + }, + Object { + "BigECommerce.customersCountPrev1Month": 6, + "BigECommerce.orderDate": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-10-01T00:00:00.000", + }, + Object { + "BigECommerce.customersCountPrev1Month": 4, + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + }, + Object { + "BigECommerce.customersCountPrev1Month": 9, + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: totalProfitYearAgo 1`] = `Array []`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying BigECommerce: two multi-stage branches sharing one pre-aggregation 1`] = ` +Array [ + Object { + "BigECommerce.orderDate": "2020-01-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "BigECommerce.totalProfitNoId": "29.6548", + "BigECommerce.totalProfitNoIdPct": "50", + }, + Object { + "BigECommerce.orderDate": "2020-02-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "BigECommerce.totalProfitNoId": "6.1992", + "BigECommerce.totalProfitNoIdPct": "50", + }, + Object { + "BigECommerce.orderDate": "2020-03-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "BigECommerce.totalProfitNoId": "583.5945", + "BigECommerce.totalProfitNoIdPct": "50", + }, + Object { + "BigECommerce.orderDate": "2020-04-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-04-01T00:00:00.000", + "BigECommerce.totalProfitNoId": "6.4176", + "BigECommerce.totalProfitNoIdPct": "50", + }, + Object { + "BigECommerce.orderDate": "2020-05-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "BigECommerce.totalProfitNoId": "353.6849", + "BigECommerce.totalProfitNoIdPct": "50", + }, + Object { + "BigECommerce.orderDate": "2020-06-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "BigECommerce.totalProfitNoId": "34.2361", + "BigECommerce.totalProfitNoIdPct": "50", + }, + Object { + "BigECommerce.orderDate": "2020-09-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "BigECommerce.totalProfitNoId": "461.1332", + "BigECommerce.totalProfitNoIdPct": "50", + }, + Object { + "BigECommerce.orderDate": "2020-10-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "BigECommerce.totalProfitNoId": "139.997", + "BigECommerce.totalProfitNoIdPct": "50", + }, + Object { + "BigECommerce.orderDate": "2020-11-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "BigECommerce.totalProfitNoId": "1132.6617", + "BigECommerce.totalProfitNoIdPct": "50", + }, + Object { + "BigECommerce.orderDate": "2020-12-01T00:00:00.000", + "BigECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "BigECommerce.totalProfitNoId": "303.9737", + "BigECommerce.totalProfitNoIdPct": "50", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying Customers: dimensions + limit 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "AS-10225", + "Customers.customerName": "Customer 3", + }, + Object { + "Customers.customerId": "AW-10840", + "Customers.customerName": "Customer 4", + }, + Object { + "Customers.customerId": "BB-11545", + "Customers.customerName": "Customer 5", + }, + Object { + "Customers.customerId": "BF-11020", + "Customers.customerName": "Customer 6", + }, + Object { + "Customers.customerId": "BF-11170", + "Customers.customerName": "Customer 7", + }, + Object { + "Customers.customerId": "BM-11650", + "Customers.customerName": "Customer 8", + }, + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying Customers: dimensions + order + limit + total + offset 1`] = ` +Array [ + Object { + "Customers.customerId": "GA-14725", + "Customers.customerName": "Customer 19", + }, + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "GZ-14470", + "Customers.customerName": "Customer 20", + }, + Object { + "Customers.customerId": "HH-15010", + "Customers.customerName": "Customer 21", + }, + Object { + "Customers.customerId": "HK-14890", + "Customers.customerName": "Customer 22", + }, + Object { + "Customers.customerId": "JH-15430", + "Customers.customerName": "Customer 23", + }, + Object { + "Customers.customerId": "JO-15550", + "Customers.customerName": "Customer 24", + }, + Object { + "Customers.customerId": "JS-16030", + "Customers.customerName": "Customer 25", + }, + Object { + "Customers.customerId": "JW-15220", + "Customers.customerName": "Customer 26", + }, + Object { + "Customers.customerId": "KL-16555", + "Customers.customerName": "Customer 27", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying Customers: dimensions + order + limit + total 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, + Object { + "Customers.customerId": "CA-12775", + "Customers.customerName": "Customer 11", + }, + Object { + "Customers.customerId": "CC-12475", + "Customers.customerName": "Customer 12", + }, + Object { + "Customers.customerId": "CD-12280", + "Customers.customerName": "Customer 13", + }, + Object { + "Customers.customerId": "CS-12355", + "Customers.customerName": "Customer 14", + }, + Object { + "Customers.customerId": "DB-13405", + "Customers.customerName": "Customer 15", + }, + Object { + "Customers.customerId": "DG-13300", + "Customers.customerName": "Customer 16", + }, + Object { + "Customers.customerId": "DW-13480", + "Customers.customerName": "Customer 17", + }, + Object { + "Customers.customerId": "EM-14140", + "Customers.customerName": "Customer 18", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying Customers: dimensions + order + total + offset 1`] = ` +Array [ + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying Customers: dimensions + order 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "AS-10225", + "Customers.customerName": "Customer 3", + }, + Object { + "Customers.customerId": "AW-10840", + "Customers.customerName": "Customer 4", + }, + Object { + "Customers.customerId": "BB-11545", + "Customers.customerName": "Customer 5", + }, + Object { + "Customers.customerId": "BF-11020", + "Customers.customerName": "Customer 6", + }, + Object { + "Customers.customerId": "BF-11170", + "Customers.customerName": "Customer 7", + }, + Object { + "Customers.customerId": "BM-11650", + "Customers.customerName": "Customer 8", + }, + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, + Object { + "Customers.customerId": "CA-12775", + "Customers.customerName": "Customer 11", + }, + Object { + "Customers.customerId": "CC-12475", + "Customers.customerName": "Customer 12", + }, + Object { + "Customers.customerId": "CD-12280", + "Customers.customerName": "Customer 13", + }, + Object { + "Customers.customerId": "CS-12355", + "Customers.customerName": "Customer 14", + }, + Object { + "Customers.customerId": "DB-13405", + "Customers.customerName": "Customer 15", + }, + Object { + "Customers.customerId": "DG-13300", + "Customers.customerName": "Customer 16", + }, + Object { + "Customers.customerId": "DW-13480", + "Customers.customerName": "Customer 17", + }, + Object { + "Customers.customerId": "EM-14140", + "Customers.customerName": "Customer 18", + }, + Object { + "Customers.customerId": "GA-14725", + "Customers.customerName": "Customer 19", + }, + Object { + "Customers.customerId": "GZ-14470", + "Customers.customerName": "Customer 20", + }, + Object { + "Customers.customerId": "HH-15010", + "Customers.customerName": "Customer 21", + }, + Object { + "Customers.customerId": "HK-14890", + "Customers.customerName": "Customer 22", + }, + Object { + "Customers.customerId": "JH-15430", + "Customers.customerName": "Customer 23", + }, + Object { + "Customers.customerId": "JO-15550", + "Customers.customerName": "Customer 24", + }, + Object { + "Customers.customerId": "JS-16030", + "Customers.customerName": "Customer 25", + }, + Object { + "Customers.customerId": "JW-15220", + "Customers.customerName": "Customer 26", + }, + Object { + "Customers.customerId": "KL-16555", + "Customers.customerName": "Customer 27", + }, + Object { + "Customers.customerId": "KN-16705", + "Customers.customerName": "Customer 28", + }, + Object { + "Customers.customerId": "LC-17050", + "Customers.customerName": "Customer 29", + }, + Object { + "Customers.customerId": "LR-16915", + "Customers.customerName": "Customer 30", + }, + Object { + "Customers.customerId": "MC-17605", + "Customers.customerName": "Customer 31", + }, + Object { + "Customers.customerId": "MG-17650", + "Customers.customerName": "Customer 32", + }, + Object { + "Customers.customerId": "ML-17755", + "Customers.customerName": "Customer 33", + }, + Object { + "Customers.customerId": "MM-18280", + "Customers.customerName": "Customer 34", + }, + Object { + "Customers.customerId": "NP-18670", + "Customers.customerName": "Customer 35", + }, + Object { + "Customers.customerId": "PF-19165", + "Customers.customerName": "Customer 36", + }, + Object { + "Customers.customerId": "SB-20185", + "Customers.customerName": "Customer 37", + }, + Object { + "Customers.customerId": "SS-20140", + "Customers.customerName": "Customer 38", + }, + Object { + "Customers.customerId": "TB-21175", + "Customers.customerName": "Customer 39", + }, + Object { + "Customers.customerId": "TS-21205", + "Customers.customerName": "Customer 40", + }, + Object { + "Customers.customerId": "WB-21850", + "Customers.customerName": "Customer 41", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying Customers: dimensions + total 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "AS-10225", + "Customers.customerName": "Customer 3", + }, + Object { + "Customers.customerId": "AW-10840", + "Customers.customerName": "Customer 4", + }, + Object { + "Customers.customerId": "BB-11545", + "Customers.customerName": "Customer 5", + }, + Object { + "Customers.customerId": "BF-11020", + "Customers.customerName": "Customer 6", + }, + Object { + "Customers.customerId": "BF-11170", + "Customers.customerName": "Customer 7", + }, + Object { + "Customers.customerId": "BM-11650", + "Customers.customerName": "Customer 8", + }, + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, + Object { + "Customers.customerId": "CA-12775", + "Customers.customerName": "Customer 11", + }, + Object { + "Customers.customerId": "CC-12475", + "Customers.customerName": "Customer 12", + }, + Object { + "Customers.customerId": "CD-12280", + "Customers.customerName": "Customer 13", + }, + Object { + "Customers.customerId": "CS-12355", + "Customers.customerName": "Customer 14", + }, + Object { + "Customers.customerId": "DB-13405", + "Customers.customerName": "Customer 15", + }, + Object { + "Customers.customerId": "DG-13300", + "Customers.customerName": "Customer 16", + }, + Object { + "Customers.customerId": "DW-13480", + "Customers.customerName": "Customer 17", + }, + Object { + "Customers.customerId": "EM-14140", + "Customers.customerName": "Customer 18", + }, + Object { + "Customers.customerId": "GA-14725", + "Customers.customerName": "Customer 19", + }, + Object { + "Customers.customerId": "GZ-14470", + "Customers.customerName": "Customer 20", + }, + Object { + "Customers.customerId": "HH-15010", + "Customers.customerName": "Customer 21", + }, + Object { + "Customers.customerId": "HK-14890", + "Customers.customerName": "Customer 22", + }, + Object { + "Customers.customerId": "JH-15430", + "Customers.customerName": "Customer 23", + }, + Object { + "Customers.customerId": "JO-15550", + "Customers.customerName": "Customer 24", + }, + Object { + "Customers.customerId": "JS-16030", + "Customers.customerName": "Customer 25", + }, + Object { + "Customers.customerId": "JW-15220", + "Customers.customerName": "Customer 26", + }, + Object { + "Customers.customerId": "KL-16555", + "Customers.customerName": "Customer 27", + }, + Object { + "Customers.customerId": "KN-16705", + "Customers.customerName": "Customer 28", + }, + Object { + "Customers.customerId": "LC-17050", + "Customers.customerName": "Customer 29", + }, + Object { + "Customers.customerId": "LR-16915", + "Customers.customerName": "Customer 30", + }, + Object { + "Customers.customerId": "MC-17605", + "Customers.customerName": "Customer 31", + }, + Object { + "Customers.customerId": "MG-17650", + "Customers.customerName": "Customer 32", + }, + Object { + "Customers.customerId": "ML-17755", + "Customers.customerName": "Customer 33", + }, + Object { + "Customers.customerId": "MM-18280", + "Customers.customerName": "Customer 34", + }, + Object { + "Customers.customerId": "NP-18670", + "Customers.customerName": "Customer 35", + }, + Object { + "Customers.customerId": "PF-19165", + "Customers.customerName": "Customer 36", + }, + Object { + "Customers.customerId": "SB-20185", + "Customers.customerName": "Customer 37", + }, + Object { + "Customers.customerId": "SS-20140", + "Customers.customerName": "Customer 38", + }, + Object { + "Customers.customerId": "TB-21175", + "Customers.customerName": "Customer 39", + }, + Object { + "Customers.customerId": "TS-21205", + "Customers.customerName": "Customer 40", + }, + Object { + "Customers.customerId": "WB-21850", + "Customers.customerName": "Customer 41", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying Customers: dimensions 1`] = ` +Array [ + Object { + "Customers.customerId": "AH-10465", + "Customers.customerName": "Customer 1", + }, + Object { + "Customers.customerId": "AJ-10780", + "Customers.customerName": "Customer 2", + }, + Object { + "Customers.customerId": "AS-10225", + "Customers.customerName": "Customer 3", + }, + Object { + "Customers.customerId": "AW-10840", + "Customers.customerName": "Customer 4", + }, + Object { + "Customers.customerId": "BB-11545", + "Customers.customerName": "Customer 5", + }, + Object { + "Customers.customerId": "BF-11020", + "Customers.customerName": "Customer 6", + }, + Object { + "Customers.customerId": "BF-11170", + "Customers.customerName": "Customer 7", + }, + Object { + "Customers.customerId": "BM-11650", + "Customers.customerName": "Customer 8", + }, + Object { + "Customers.customerId": "BS-11380", + "Customers.customerName": "Customer 9", + }, + Object { + "Customers.customerId": "BS-11755", + "Customers.customerName": "Customer 10", + }, + Object { + "Customers.customerId": "CA-12775", + "Customers.customerName": "Customer 11", + }, + Object { + "Customers.customerId": "CC-12475", + "Customers.customerName": "Customer 12", + }, + Object { + "Customers.customerId": "CD-12280", + "Customers.customerName": "Customer 13", + }, + Object { + "Customers.customerId": "CS-12355", + "Customers.customerName": "Customer 14", + }, + Object { + "Customers.customerId": "DB-13405", + "Customers.customerName": "Customer 15", + }, + Object { + "Customers.customerId": "DG-13300", + "Customers.customerName": "Customer 16", + }, + Object { + "Customers.customerId": "DW-13480", + "Customers.customerName": "Customer 17", + }, + Object { + "Customers.customerId": "EM-14140", + "Customers.customerName": "Customer 18", + }, + Object { + "Customers.customerId": "GA-14725", + "Customers.customerName": "Customer 19", + }, + Object { + "Customers.customerId": "GZ-14470", + "Customers.customerName": "Customer 20", + }, + Object { + "Customers.customerId": "HH-15010", + "Customers.customerName": "Customer 21", + }, + Object { + "Customers.customerId": "HK-14890", + "Customers.customerName": "Customer 22", + }, + Object { + "Customers.customerId": "JH-15430", + "Customers.customerName": "Customer 23", + }, + Object { + "Customers.customerId": "JO-15550", + "Customers.customerName": "Customer 24", + }, + Object { + "Customers.customerId": "JS-16030", + "Customers.customerName": "Customer 25", + }, + Object { + "Customers.customerId": "JW-15220", + "Customers.customerName": "Customer 26", + }, + Object { + "Customers.customerId": "KL-16555", + "Customers.customerName": "Customer 27", + }, + Object { + "Customers.customerId": "KN-16705", + "Customers.customerName": "Customer 28", + }, + Object { + "Customers.customerId": "LC-17050", + "Customers.customerName": "Customer 29", + }, + Object { + "Customers.customerId": "LR-16915", + "Customers.customerName": "Customer 30", + }, + Object { + "Customers.customerId": "MC-17605", + "Customers.customerName": "Customer 31", + }, + Object { + "Customers.customerId": "MG-17650", + "Customers.customerName": "Customer 32", + }, + Object { + "Customers.customerId": "ML-17755", + "Customers.customerName": "Customer 33", + }, + Object { + "Customers.customerId": "MM-18280", + "Customers.customerName": "Customer 34", + }, + Object { + "Customers.customerId": "NP-18670", + "Customers.customerName": "Customer 35", + }, + Object { + "Customers.customerId": "PF-19165", + "Customers.customerName": "Customer 36", + }, + Object { + "Customers.customerId": "SB-20185", + "Customers.customerName": "Customer 37", + }, + Object { + "Customers.customerId": "SS-20140", + "Customers.customerName": "Customer 38", + }, + Object { + "Customers.customerId": "TB-21175", + "Customers.customerName": "Customer 39", + }, + Object { + "Customers.customerId": "TS-21205", + "Customers.customerName": "Customer 40", + }, + Object { + "Customers.customerId": "WB-21850", + "Customers.customerName": "Customer 41", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying ECommerce: count by cities + order 1`] = ` +Array [ + Object { + "ECommerce.city": "Columbus", + "ECommerce.count": 12, + }, + Object { + "ECommerce.city": "New York City", + "ECommerce.count": 5, + }, + Object { + "ECommerce.city": "Detroit", + "ECommerce.count": 2, + }, + Object { + "ECommerce.city": "Philadelphia", + "ECommerce.count": 2, + }, + Object { + "ECommerce.city": "San Francisco", + "ECommerce.count": 2, + }, + Object { + "ECommerce.city": "Arlington", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Auburn", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Bakersfield", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Baltimore", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Bowling", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Dallas", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Decatur", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Glendale", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Houston", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Lafayette", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Lakewood", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Lorain", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Los Angeles", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Louisville", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Marion", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Morristown", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Oakland", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Olympia", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Omaha", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Provo", + "ECommerce.count": 1, + }, + Object { + "ECommerce.city": "Vancouver", + "ECommerce.count": 1, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying ECommerce: count by month + order with non-UTC timezone (Asia/Kolkata) 1`] = ` +Array [ + Object { + "ECommerce.count": 2, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.month": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-02-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.month": "2020-02-01T00:00:00.000", + }, + Object { + "ECommerce.count": 2, + "ECommerce.customOrderDateNoPreAgg": "2020-03-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.month": "2020-03-01T00:00:00.000", + }, + Object { + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.month": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.count": 5, + "ECommerce.customOrderDateNoPreAgg": "2020-05-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.month": "2020-05-01T00:00:00.000", + }, + Object { + "ECommerce.count": 7, + "ECommerce.customOrderDateNoPreAgg": "2020-06-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.month": "2020-06-01T00:00:00.000", + }, + Object { + "ECommerce.count": 6, + "ECommerce.customOrderDateNoPreAgg": "2020-09-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.month": "2020-09-01T00:00:00.000", + }, + Object { + "ECommerce.count": 4, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.month": "2020-10-01T00:00:00.000", + }, + Object { + "ECommerce.count": 9, + "ECommerce.customOrderDateNoPreAgg": "2020-11-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.month": "2020-11-01T00:00:00.000", + }, + Object { + "ECommerce.count": 7, + "ECommerce.customOrderDateNoPreAgg": "2020-12-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.month": "2020-12-01T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying ECommerce: dimensions + limit 1`] = ` +Array [ + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Detroit", + "ECommerce.customerId": "MC-17605", + "ECommerce.customerName": "Customer 31", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-01-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-145142", + "ECommerce.productName": "Balt Solid Wood Rectangular Table", + "ECommerce.profit": 21.098, + "ECommerce.quantity": 2, + "ECommerce.rowId": 523, + "ECommerce.sales": 210.98, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lorain", + "ECommerce.customerId": "GA-14725", + "ECommerce.customerName": "Customer 19", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-107503", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 8.5568, + "ECommerce.quantity": 4, + "ECommerce.rowId": 849, + "ECommerce.sales": 48.896, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Olympia", + "ECommerce.customerId": "PF-19165", + "ECommerce.customerName": "Customer 36", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-118437", + "ECommerce.productName": "Project Tote Personal File", + "ECommerce.profit": 4.0687, + "ECommerce.quantity": 1, + "ECommerce.rowId": 1013, + "ECommerce.sales": 14.03, + "ECommerce.subCategory": "Storage", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Vancouver", + "ECommerce.customerId": "JW-15220", + "ECommerce.customerName": "Customer 26", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-30T00:00:00.000", + "ECommerce.orderId": "CA-2017-139661", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.profit": 3.6632, + "ECommerce.quantity": 2, + "ECommerce.rowId": 1494, + "ECommerce.sales": 9.64, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "ML-17755", + "ECommerce.customerName": "Customer 33", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-06-25T00:00:00.000", + "ECommerce.orderId": "CA-2017-133648", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": -2.1195, + "ECommerce.quantity": 3, + "ECommerce.rowId": 1995, + "ECommerce.sales": 11.304, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "KN-16705", + "ECommerce.customerName": "Customer 28", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-09-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-138422", + "ECommerce.productName": "Wausau Papers Astrobrights Colored Envelopes", + "ECommerce.profit": 5.2026, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2329, + "ECommerce.sales": 14.352, + "ECommerce.subCategory": "Envelopes", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "New York City", + "ECommerce.customerId": "DB-13405", + "ECommerce.customerName": "Customer 15", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-03-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-140949", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "ECommerce.profit": 13.604, + "ECommerce.quantity": 8, + "ECommerce.rowId": 2455, + "ECommerce.sales": 71.6, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BM-11650", + "ECommerce.customerName": "Customer 8", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-13T00:00:00.000", + "ECommerce.orderId": "CA-2017-149048", + "ECommerce.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "ECommerce.profit": 81.432, + "ECommerce.quantity": 2, + "ECommerce.rowId": 2595, + "ECommerce.sales": 180.96, + "ECommerce.subCategory": "Envelopes", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Provo", + "ECommerce.customerId": "AS-10225", + "ECommerce.customerName": "Customer 3", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-112515", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.profit": 77.5764, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2655, + "ECommerce.sales": 1292.94, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "DG-13300", + "ECommerce.customerName": "Customer 16", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-11-28T00:00:00.000", + "ECommerce.orderId": "CA-2017-123372", + "ECommerce.productName": "Google Nexus 5", + "ECommerce.profit": 494.9725, + "ECommerce.quantity": 11, + "ECommerce.rowId": 2661, + "ECommerce.sales": 1979.89, + "ECommerce.subCategory": "Phones", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying ECommerce: dimensions + order + limit + total + offset 1`] = ` +Array [ + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Glendale", + "ECommerce.customerId": "EM-14140", + "ECommerce.customerName": "Customer 18", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-12T00:00:00.000", + "ECommerce.orderId": "CA-2017-134915", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.profit": 9.9652, + "ECommerce.quantity": 2, + "ECommerce.rowId": 2952, + "ECommerce.sales": 113.888, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 10.3904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3059, + "ECommerce.sales": 30.56, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Anderson Hickey Conga Table Tops & Accessories", + "ECommerce.profit": -3.3506, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3060, + "ECommerce.sales": 24.368, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Louisville", + "ECommerce.customerId": "DW-13480", + "ECommerce.customerName": "Customer 17", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-27T00:00:00.000", + "ECommerce.orderId": "US-2017-132297", + "ECommerce.productName": "Google Nexus 6", + "ECommerce.profit": 134.9925, + "ECommerce.quantity": 3, + "ECommerce.rowId": 3083, + "ECommerce.sales": 539.97, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Auburn", + "ECommerce.customerId": "KN-16705", + "ECommerce.customerName": "Customer 28", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-11T00:00:00.000", + "ECommerce.orderId": "CA-2017-102554", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 1.0904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3448, + "ECommerce.sales": 3.76, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Omaha", + "ECommerce.customerId": "JO-15550", + "ECommerce.customerName": "Customer 24", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-29T00:00:00.000", + "ECommerce.orderId": "CA-2017-144568", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": 1.1775, + "ECommerce.quantity": 5, + "ECommerce.rowId": 3717, + "ECommerce.sales": 23.55, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Bakersfield", + "ECommerce.customerId": "AW-10840", + "ECommerce.customerName": "Customer 4", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-123001", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 2.726, + "ECommerce.quantity": 5, + "ECommerce.rowId": 3934, + "ECommerce.sales": 9.4, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Philadelphia", + "ECommerce.customerId": "CC-12475", + "ECommerce.customerName": "Customer 12", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-21T00:00:00.000", + "ECommerce.orderId": "CA-2017-100811", + "ECommerce.productName": "Recycled Eldon Regeneration Jumbo File", + "ECommerce.profit": 3.9296, + "ECommerce.quantity": 4, + "ECommerce.rowId": 4012, + "ECommerce.sales": 39.296, + "ECommerce.subCategory": "Storage", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lafayette", + "ECommerce.customerId": "CS-12355", + "ECommerce.customerName": "Customer 14", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-24T00:00:00.000", + "ECommerce.orderId": "CA-2017-124296", + "ECommerce.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "ECommerce.profit": 60.5488, + "ECommerce.quantity": 4, + "ECommerce.rowId": 4031, + "ECommerce.sales": 232.88, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "New York City", + "ECommerce.customerId": "AH-10465", + "ECommerce.customerName": "Customer 1", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-115546", + "ECommerce.productName": "Google Nexus 7", + "ECommerce.profit": 134.9925, + "ECommerce.quantity": 3, + "ECommerce.rowId": 4161, + "ECommerce.sales": 539.97, + "ECommerce.subCategory": "Phones", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying ECommerce: dimensions + order + limit + total 1`] = ` +Array [ + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Detroit", + "ECommerce.customerId": "MC-17605", + "ECommerce.customerName": "Customer 31", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-01-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-145142", + "ECommerce.productName": "Balt Solid Wood Rectangular Table", + "ECommerce.profit": 21.098, + "ECommerce.quantity": 2, + "ECommerce.rowId": 523, + "ECommerce.sales": 210.98, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lorain", + "ECommerce.customerId": "GA-14725", + "ECommerce.customerName": "Customer 19", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-107503", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 8.5568, + "ECommerce.quantity": 4, + "ECommerce.rowId": 849, + "ECommerce.sales": 48.896, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Olympia", + "ECommerce.customerId": "PF-19165", + "ECommerce.customerName": "Customer 36", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-118437", + "ECommerce.productName": "Project Tote Personal File", + "ECommerce.profit": 4.0687, + "ECommerce.quantity": 1, + "ECommerce.rowId": 1013, + "ECommerce.sales": 14.03, + "ECommerce.subCategory": "Storage", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Vancouver", + "ECommerce.customerId": "JW-15220", + "ECommerce.customerName": "Customer 26", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-30T00:00:00.000", + "ECommerce.orderId": "CA-2017-139661", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.profit": 3.6632, + "ECommerce.quantity": 2, + "ECommerce.rowId": 1494, + "ECommerce.sales": 9.64, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "ML-17755", + "ECommerce.customerName": "Customer 33", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-06-25T00:00:00.000", + "ECommerce.orderId": "CA-2017-133648", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": -2.1195, + "ECommerce.quantity": 3, + "ECommerce.rowId": 1995, + "ECommerce.sales": 11.304, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "KN-16705", + "ECommerce.customerName": "Customer 28", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-09-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-138422", + "ECommerce.productName": "Wausau Papers Astrobrights Colored Envelopes", + "ECommerce.profit": 5.2026, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2329, + "ECommerce.sales": 14.352, + "ECommerce.subCategory": "Envelopes", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "New York City", + "ECommerce.customerId": "DB-13405", + "ECommerce.customerName": "Customer 15", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-03-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-140949", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "ECommerce.profit": 13.604, + "ECommerce.quantity": 8, + "ECommerce.rowId": 2455, + "ECommerce.sales": 71.6, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BM-11650", + "ECommerce.customerName": "Customer 8", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-13T00:00:00.000", + "ECommerce.orderId": "CA-2017-149048", + "ECommerce.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "ECommerce.profit": 81.432, + "ECommerce.quantity": 2, + "ECommerce.rowId": 2595, + "ECommerce.sales": 180.96, + "ECommerce.subCategory": "Envelopes", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Provo", + "ECommerce.customerId": "AS-10225", + "ECommerce.customerName": "Customer 3", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-112515", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.profit": 77.5764, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2655, + "ECommerce.sales": 1292.94, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "DG-13300", + "ECommerce.customerName": "Customer 16", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-11-28T00:00:00.000", + "ECommerce.orderId": "CA-2017-123372", + "ECommerce.productName": "Google Nexus 5", + "ECommerce.profit": 494.9725, + "ECommerce.quantity": 11, + "ECommerce.rowId": 2661, + "ECommerce.sales": 1979.89, + "ECommerce.subCategory": "Phones", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying ECommerce: dimensions + order + total + offset 1`] = ` +Array [ + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Bowling", + "ECommerce.customerId": "BS-11380", + "ECommerce.customerName": "Customer 9", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-16T00:00:00.000", + "ECommerce.orderId": "CA-2017-160633", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.profit": 5.397, + "ECommerce.quantity": 3, + "ECommerce.rowId": 9619, + "ECommerce.sales": 86.352, + "ECommerce.subCategory": "Art", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying ECommerce: dimensions + order 1`] = ` +Array [ + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Detroit", + "ECommerce.customerId": "MC-17605", + "ECommerce.customerName": "Customer 31", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-01-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-145142", + "ECommerce.productName": "Balt Solid Wood Rectangular Table", + "ECommerce.profit": 21.098, + "ECommerce.quantity": 2, + "ECommerce.rowId": 523, + "ECommerce.sales": 210.98, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lorain", + "ECommerce.customerId": "GA-14725", + "ECommerce.customerName": "Customer 19", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-107503", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 8.5568, + "ECommerce.quantity": 4, + "ECommerce.rowId": 849, + "ECommerce.sales": 48.896, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Olympia", + "ECommerce.customerId": "PF-19165", + "ECommerce.customerName": "Customer 36", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-118437", + "ECommerce.productName": "Project Tote Personal File", + "ECommerce.profit": 4.0687, + "ECommerce.quantity": 1, + "ECommerce.rowId": 1013, + "ECommerce.sales": 14.03, + "ECommerce.subCategory": "Storage", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Vancouver", + "ECommerce.customerId": "JW-15220", + "ECommerce.customerName": "Customer 26", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-30T00:00:00.000", + "ECommerce.orderId": "CA-2017-139661", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.profit": 3.6632, + "ECommerce.quantity": 2, + "ECommerce.rowId": 1494, + "ECommerce.sales": 9.64, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "ML-17755", + "ECommerce.customerName": "Customer 33", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-06-25T00:00:00.000", + "ECommerce.orderId": "CA-2017-133648", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": -2.1195, + "ECommerce.quantity": 3, + "ECommerce.rowId": 1995, + "ECommerce.sales": 11.304, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "KN-16705", + "ECommerce.customerName": "Customer 28", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-09-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-138422", + "ECommerce.productName": "Wausau Papers Astrobrights Colored Envelopes", + "ECommerce.profit": 5.2026, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2329, + "ECommerce.sales": 14.352, + "ECommerce.subCategory": "Envelopes", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "New York City", + "ECommerce.customerId": "DB-13405", + "ECommerce.customerName": "Customer 15", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-03-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-140949", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "ECommerce.profit": 13.604, + "ECommerce.quantity": 8, + "ECommerce.rowId": 2455, + "ECommerce.sales": 71.6, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BM-11650", + "ECommerce.customerName": "Customer 8", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-13T00:00:00.000", + "ECommerce.orderId": "CA-2017-149048", + "ECommerce.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "ECommerce.profit": 81.432, + "ECommerce.quantity": 2, + "ECommerce.rowId": 2595, + "ECommerce.sales": 180.96, + "ECommerce.subCategory": "Envelopes", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Provo", + "ECommerce.customerId": "AS-10225", + "ECommerce.customerName": "Customer 3", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-112515", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.profit": 77.5764, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2655, + "ECommerce.sales": 1292.94, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "DG-13300", + "ECommerce.customerName": "Customer 16", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-11-28T00:00:00.000", + "ECommerce.orderId": "CA-2017-123372", + "ECommerce.productName": "Google Nexus 5", + "ECommerce.profit": 494.9725, + "ECommerce.quantity": 11, + "ECommerce.rowId": 2661, + "ECommerce.sales": 1979.89, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Glendale", + "ECommerce.customerId": "EM-14140", + "ECommerce.customerName": "Customer 18", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-12T00:00:00.000", + "ECommerce.orderId": "CA-2017-134915", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.profit": 9.9652, + "ECommerce.quantity": 2, + "ECommerce.rowId": 2952, + "ECommerce.sales": 113.888, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 10.3904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3059, + "ECommerce.sales": 30.56, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Anderson Hickey Conga Table Tops & Accessories", + "ECommerce.profit": -3.3506, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3060, + "ECommerce.sales": 24.368, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Louisville", + "ECommerce.customerId": "DW-13480", + "ECommerce.customerName": "Customer 17", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-27T00:00:00.000", + "ECommerce.orderId": "US-2017-132297", + "ECommerce.productName": "Google Nexus 6", + "ECommerce.profit": 134.9925, + "ECommerce.quantity": 3, + "ECommerce.rowId": 3083, + "ECommerce.sales": 539.97, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Auburn", + "ECommerce.customerId": "KN-16705", + "ECommerce.customerName": "Customer 28", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-11T00:00:00.000", + "ECommerce.orderId": "CA-2017-102554", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 1.0904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3448, + "ECommerce.sales": 3.76, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Omaha", + "ECommerce.customerId": "JO-15550", + "ECommerce.customerName": "Customer 24", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-29T00:00:00.000", + "ECommerce.orderId": "CA-2017-144568", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": 1.1775, + "ECommerce.quantity": 5, + "ECommerce.rowId": 3717, + "ECommerce.sales": 23.55, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Bakersfield", + "ECommerce.customerId": "AW-10840", + "ECommerce.customerName": "Customer 4", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-123001", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 2.726, + "ECommerce.quantity": 5, + "ECommerce.rowId": 3934, + "ECommerce.sales": 9.4, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Philadelphia", + "ECommerce.customerId": "CC-12475", + "ECommerce.customerName": "Customer 12", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-21T00:00:00.000", + "ECommerce.orderId": "CA-2017-100811", + "ECommerce.productName": "Recycled Eldon Regeneration Jumbo File", + "ECommerce.profit": 3.9296, + "ECommerce.quantity": 4, + "ECommerce.rowId": 4012, + "ECommerce.sales": 39.296, + "ECommerce.subCategory": "Storage", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lafayette", + "ECommerce.customerId": "CS-12355", + "ECommerce.customerName": "Customer 14", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-24T00:00:00.000", + "ECommerce.orderId": "CA-2017-124296", + "ECommerce.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "ECommerce.profit": 60.5488, + "ECommerce.quantity": 4, + "ECommerce.rowId": 4031, + "ECommerce.sales": 232.88, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "New York City", + "ECommerce.customerId": "AH-10465", + "ECommerce.customerName": "Customer 1", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-115546", + "ECommerce.productName": "Google Nexus 7", + "ECommerce.profit": 134.9925, + "ECommerce.quantity": 3, + "ECommerce.rowId": 4161, + "ECommerce.sales": 539.97, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "WB-21850", + "ECommerce.customerName": "Customer 41", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-11-11T00:00:00.000", + "ECommerce.orderId": "CA-2017-120327", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.profit": 21.5824, + "ECommerce.quantity": 4, + "ECommerce.rowId": 4227, + "ECommerce.sales": 45.92, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "TB-21175", + "ECommerce.customerName": "Customer 39", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-11-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-143567", + "ECommerce.productName": "Logitech di_Novo Edge Keyboard", + "ECommerce.profit": 517.4793, + "ECommerce.quantity": 9, + "ECommerce.rowId": 4882, + "ECommerce.sales": 2249.91, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Detroit", + "ECommerce.customerId": "CA-12775", + "ECommerce.customerName": "Customer 11", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-145653", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.profit": 134.5302, + "ECommerce.quantity": 7, + "ECommerce.rowId": 5220, + "ECommerce.sales": 498.26, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "KL-16555", + "ECommerce.customerName": "Customer 27", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-147333", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "ECommerce.profit": 8.5025, + "ECommerce.quantity": 5, + "ECommerce.rowId": 5277, + "ECommerce.sales": 44.75, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Los Angeles", + "ECommerce.customerId": "SS-20140", + "ECommerce.customerName": "Customer 38", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-03T00:00:00.000", + "ECommerce.orderId": "CA-2017-145772", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "ECommerce.profit": 8.5025, + "ECommerce.quantity": 5, + "ECommerce.rowId": 6125, + "ECommerce.sales": 44.75, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Marion", + "ECommerce.customerId": "MG-17650", + "ECommerce.customerName": "Customer 32", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-145660", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.profit": 1.7352, + "ECommerce.quantity": 2, + "ECommerce.rowId": 6205, + "ECommerce.sales": 7.712, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Oakland", + "ECommerce.customerId": "BB-11545", + "ECommerce.customerName": "Customer 5", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-102379", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.profit": 44.975, + "ECommerce.quantity": 5, + "ECommerce.rowId": 6272, + "ECommerce.sales": 179.9, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Baltimore", + "ECommerce.customerId": "AJ-10780", + "ECommerce.customerName": "Customer 2", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-14T00:00:00.000", + "ECommerce.orderId": "US-2017-133361", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 1.0904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 6459, + "ECommerce.sales": 3.76, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Arlington", + "ECommerce.customerId": "BF-11020", + "ECommerce.customerName": "Customer 6", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-09-08T00:00:00.000", + "ECommerce.orderId": "US-2017-124779", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.profit": 15.498, + "ECommerce.quantity": 5, + "ECommerce.rowId": 6651, + "ECommerce.sales": 45.92, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Houston", + "ECommerce.customerId": "HK-14890", + "ECommerce.customerName": "Customer 22", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-03-26T00:00:00.000", + "ECommerce.orderId": "US-2017-141677", + "ECommerce.productName": "Canon PC1080F Personal Copier", + "ECommerce.profit": 569.9905, + "ECommerce.quantity": 5, + "ECommerce.rowId": 7174, + "ECommerce.sales": 2399.96, + "ECommerce.subCategory": "Copiers", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "LR-16915", + "ECommerce.customerName": "Customer 30", + "ECommerce.discount": 0.5, + "ECommerce.orderDate": "2020-12-04T00:00:00.000", + "ECommerce.orderId": "CA-2017-109183", + "ECommerce.productName": "Okidata C610n Printer", + "ECommerce.profit": -272.58, + "ECommerce.quantity": 2, + "ECommerce.rowId": 7293, + "ECommerce.sales": 649, + "ECommerce.subCategory": "Machines", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "New York City", + "ECommerce.customerId": "MM-18280", + "ECommerce.customerName": "Customer 34", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-10T00:00:00.000", + "ECommerce.orderId": "CA-2017-112172", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": 0.7065, + "ECommerce.quantity": 3, + "ECommerce.rowId": 7310, + "ECommerce.sales": 14.13, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Philadelphia", + "ECommerce.customerId": "BS-11755", + "ECommerce.customerName": "Customer 10", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-04-10T00:00:00.000", + "ECommerce.orderId": "CA-2017-135069", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 6.4176, + "ECommerce.quantity": 3, + "ECommerce.rowId": 7425, + "ECommerce.sales": 36.672, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BF-11170", + "ECommerce.customerName": "Customer 7", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-151799", + "ECommerce.productName": "Canon PC1080F Personal Copier", + "ECommerce.profit": 467.9922, + "ECommerce.quantity": 2, + "ECommerce.rowId": 7698, + "ECommerce.sales": 1199.98, + "ECommerce.subCategory": "Copiers", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lakewood", + "ECommerce.customerId": "NP-18670", + "ECommerce.customerName": "Customer 35", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-12T00:00:00.000", + "ECommerce.orderId": "CA-2017-150091", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.profit": 129.294, + "ECommerce.quantity": 5, + "ECommerce.rowId": 8425, + "ECommerce.sales": 2154.9, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Dallas", + "ECommerce.customerId": "LC-17050", + "ECommerce.customerName": "Customer 29", + "ECommerce.discount": 0.6, + "ECommerce.orderDate": "2020-11-06T00:00:00.000", + "ECommerce.orderId": "US-2017-119319", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": -19.864, + "ECommerce.quantity": 5, + "ECommerce.rowId": 8621, + "ECommerce.sales": 30.56, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Decatur", + "ECommerce.customerId": "JS-16030", + "ECommerce.customerName": "Customer 25", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-02-16T00:00:00.000", + "ECommerce.orderId": "CA-2017-163265", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.profit": 6.1992, + "ECommerce.quantity": 2, + "ECommerce.rowId": 8673, + "ECommerce.sales": 18.368, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "TS-21205", + "ECommerce.customerName": "Customer 40", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-06-15T00:00:00.000", + "ECommerce.orderId": "CA-2017-119284", + "ECommerce.productName": "HTC One", + "ECommerce.profit": 26.9973, + "ECommerce.quantity": 3, + "ECommerce.rowId": 8697, + "ECommerce.sales": 239.976, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Morristown", + "ECommerce.customerId": "GZ-14470", + "ECommerce.customerName": "Customer 20", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-126928", + "ECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "ECommerce.profit": 225.6, + "ECommerce.quantity": 4, + "ECommerce.rowId": 8878, + "ECommerce.sales": 480, + "ECommerce.subCategory": "Machines", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "JH-15430", + "ECommerce.customerName": "Customer 23", + "ECommerce.discount": 0.5, + "ECommerce.orderDate": "2020-12-25T00:00:00.000", + "ECommerce.orderId": "CA-2017-105620", + "ECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "ECommerce.profit": -7.2, + "ECommerce.quantity": 2, + "ECommerce.rowId": 8958, + "ECommerce.sales": 120, + "ECommerce.subCategory": "Machines", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "New York City", + "ECommerce.customerId": "CD-12280", + "ECommerce.customerName": "Customer 13", + "ECommerce.discount": 0.1, + "ECommerce.orderDate": "2020-11-05T00:00:00.000", + "ECommerce.orderId": "CA-2017-102925", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.profit": 24.2012, + "ECommerce.quantity": 2, + "ECommerce.rowId": 9473, + "ECommerce.sales": 128.124, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "New York City", + "ECommerce.customerId": "SB-20185", + "ECommerce.customerName": "Customer 37", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-06-25T00:00:00.000", + "ECommerce.orderId": "CA-2017-116127", + "ECommerce.productName": "DMI Eclipse Executive Suite Bookcases", + "ECommerce.profit": -5.0098, + "ECommerce.quantity": 1, + "ECommerce.rowId": 9584, + "ECommerce.sales": 400.784, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BS-11380", + "ECommerce.customerName": "Customer 9", + "ECommerce.discount": 0.4, + "ECommerce.orderDate": "2020-11-16T00:00:00.000", + "ECommerce.orderId": "CA-2017-160633", + "ECommerce.productName": "Hewlett Packard 610 Color Digital Copier / Printer", + "ECommerce.profit": 74.9985, + "ECommerce.quantity": 3, + "ECommerce.rowId": 9618, + "ECommerce.sales": 899.982, + "ECommerce.subCategory": "Copiers", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Bowling", + "ECommerce.customerId": "BS-11380", + "ECommerce.customerName": "Customer 9", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-16T00:00:00.000", + "ECommerce.orderId": "CA-2017-160633", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.profit": 5.397, + "ECommerce.quantity": 3, + "ECommerce.rowId": 9619, + "ECommerce.sales": 86.352, + "ECommerce.subCategory": "Art", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying ECommerce: dimensions + total 1`] = ` +Array [ + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Detroit", + "ECommerce.customerId": "MC-17605", + "ECommerce.customerName": "Customer 31", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-01-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-145142", + "ECommerce.productName": "Balt Solid Wood Rectangular Table", + "ECommerce.profit": 21.098, + "ECommerce.quantity": 2, + "ECommerce.rowId": 523, + "ECommerce.sales": 210.98, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lorain", + "ECommerce.customerId": "GA-14725", + "ECommerce.customerName": "Customer 19", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-107503", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 8.5568, + "ECommerce.quantity": 4, + "ECommerce.rowId": 849, + "ECommerce.sales": 48.896, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Olympia", + "ECommerce.customerId": "PF-19165", + "ECommerce.customerName": "Customer 36", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-118437", + "ECommerce.productName": "Project Tote Personal File", + "ECommerce.profit": 4.0687, + "ECommerce.quantity": 1, + "ECommerce.rowId": 1013, + "ECommerce.sales": 14.03, + "ECommerce.subCategory": "Storage", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Vancouver", + "ECommerce.customerId": "JW-15220", + "ECommerce.customerName": "Customer 26", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-30T00:00:00.000", + "ECommerce.orderId": "CA-2017-139661", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.profit": 3.6632, + "ECommerce.quantity": 2, + "ECommerce.rowId": 1494, + "ECommerce.sales": 9.64, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "ML-17755", + "ECommerce.customerName": "Customer 33", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-06-25T00:00:00.000", + "ECommerce.orderId": "CA-2017-133648", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": -2.1195, + "ECommerce.quantity": 3, + "ECommerce.rowId": 1995, + "ECommerce.sales": 11.304, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "KN-16705", + "ECommerce.customerName": "Customer 28", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-09-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-138422", + "ECommerce.productName": "Wausau Papers Astrobrights Colored Envelopes", + "ECommerce.profit": 5.2026, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2329, + "ECommerce.sales": 14.352, + "ECommerce.subCategory": "Envelopes", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "New York City", + "ECommerce.customerId": "DB-13405", + "ECommerce.customerName": "Customer 15", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-03-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-140949", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "ECommerce.profit": 13.604, + "ECommerce.quantity": 8, + "ECommerce.rowId": 2455, + "ECommerce.sales": 71.6, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BM-11650", + "ECommerce.customerName": "Customer 8", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-13T00:00:00.000", + "ECommerce.orderId": "CA-2017-149048", + "ECommerce.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "ECommerce.profit": 81.432, + "ECommerce.quantity": 2, + "ECommerce.rowId": 2595, + "ECommerce.sales": 180.96, + "ECommerce.subCategory": "Envelopes", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Provo", + "ECommerce.customerId": "AS-10225", + "ECommerce.customerName": "Customer 3", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-112515", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.profit": 77.5764, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2655, + "ECommerce.sales": 1292.94, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "DG-13300", + "ECommerce.customerName": "Customer 16", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-11-28T00:00:00.000", + "ECommerce.orderId": "CA-2017-123372", + "ECommerce.productName": "Google Nexus 5", + "ECommerce.profit": 494.9725, + "ECommerce.quantity": 11, + "ECommerce.rowId": 2661, + "ECommerce.sales": 1979.89, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Glendale", + "ECommerce.customerId": "EM-14140", + "ECommerce.customerName": "Customer 18", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-12T00:00:00.000", + "ECommerce.orderId": "CA-2017-134915", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.profit": 9.9652, + "ECommerce.quantity": 2, + "ECommerce.rowId": 2952, + "ECommerce.sales": 113.888, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 10.3904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3059, + "ECommerce.sales": 30.56, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Anderson Hickey Conga Table Tops & Accessories", + "ECommerce.profit": -3.3506, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3060, + "ECommerce.sales": 24.368, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Louisville", + "ECommerce.customerId": "DW-13480", + "ECommerce.customerName": "Customer 17", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-27T00:00:00.000", + "ECommerce.orderId": "US-2017-132297", + "ECommerce.productName": "Google Nexus 6", + "ECommerce.profit": 134.9925, + "ECommerce.quantity": 3, + "ECommerce.rowId": 3083, + "ECommerce.sales": 539.97, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Auburn", + "ECommerce.customerId": "KN-16705", + "ECommerce.customerName": "Customer 28", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-11T00:00:00.000", + "ECommerce.orderId": "CA-2017-102554", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 1.0904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3448, + "ECommerce.sales": 3.76, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Omaha", + "ECommerce.customerId": "JO-15550", + "ECommerce.customerName": "Customer 24", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-29T00:00:00.000", + "ECommerce.orderId": "CA-2017-144568", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": 1.1775, + "ECommerce.quantity": 5, + "ECommerce.rowId": 3717, + "ECommerce.sales": 23.55, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Bakersfield", + "ECommerce.customerId": "AW-10840", + "ECommerce.customerName": "Customer 4", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-123001", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 2.726, + "ECommerce.quantity": 5, + "ECommerce.rowId": 3934, + "ECommerce.sales": 9.4, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Philadelphia", + "ECommerce.customerId": "CC-12475", + "ECommerce.customerName": "Customer 12", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-21T00:00:00.000", + "ECommerce.orderId": "CA-2017-100811", + "ECommerce.productName": "Recycled Eldon Regeneration Jumbo File", + "ECommerce.profit": 3.9296, + "ECommerce.quantity": 4, + "ECommerce.rowId": 4012, + "ECommerce.sales": 39.296, + "ECommerce.subCategory": "Storage", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lafayette", + "ECommerce.customerId": "CS-12355", + "ECommerce.customerName": "Customer 14", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-24T00:00:00.000", + "ECommerce.orderId": "CA-2017-124296", + "ECommerce.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "ECommerce.profit": 60.5488, + "ECommerce.quantity": 4, + "ECommerce.rowId": 4031, + "ECommerce.sales": 232.88, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "New York City", + "ECommerce.customerId": "AH-10465", + "ECommerce.customerName": "Customer 1", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-115546", + "ECommerce.productName": "Google Nexus 7", + "ECommerce.profit": 134.9925, + "ECommerce.quantity": 3, + "ECommerce.rowId": 4161, + "ECommerce.sales": 539.97, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "WB-21850", + "ECommerce.customerName": "Customer 41", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-11-11T00:00:00.000", + "ECommerce.orderId": "CA-2017-120327", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.profit": 21.5824, + "ECommerce.quantity": 4, + "ECommerce.rowId": 4227, + "ECommerce.sales": 45.92, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "TB-21175", + "ECommerce.customerName": "Customer 39", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-11-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-143567", + "ECommerce.productName": "Logitech di_Novo Edge Keyboard", + "ECommerce.profit": 517.4793, + "ECommerce.quantity": 9, + "ECommerce.rowId": 4882, + "ECommerce.sales": 2249.91, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Detroit", + "ECommerce.customerId": "CA-12775", + "ECommerce.customerName": "Customer 11", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-145653", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.profit": 134.5302, + "ECommerce.quantity": 7, + "ECommerce.rowId": 5220, + "ECommerce.sales": 498.26, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "KL-16555", + "ECommerce.customerName": "Customer 27", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-147333", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "ECommerce.profit": 8.5025, + "ECommerce.quantity": 5, + "ECommerce.rowId": 5277, + "ECommerce.sales": 44.75, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Los Angeles", + "ECommerce.customerId": "SS-20140", + "ECommerce.customerName": "Customer 38", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-03T00:00:00.000", + "ECommerce.orderId": "CA-2017-145772", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "ECommerce.profit": 8.5025, + "ECommerce.quantity": 5, + "ECommerce.rowId": 6125, + "ECommerce.sales": 44.75, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Marion", + "ECommerce.customerId": "MG-17650", + "ECommerce.customerName": "Customer 32", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-145660", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.profit": 1.7352, + "ECommerce.quantity": 2, + "ECommerce.rowId": 6205, + "ECommerce.sales": 7.712, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Oakland", + "ECommerce.customerId": "BB-11545", + "ECommerce.customerName": "Customer 5", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-102379", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.profit": 44.975, + "ECommerce.quantity": 5, + "ECommerce.rowId": 6272, + "ECommerce.sales": 179.9, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Baltimore", + "ECommerce.customerId": "AJ-10780", + "ECommerce.customerName": "Customer 2", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-14T00:00:00.000", + "ECommerce.orderId": "US-2017-133361", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 1.0904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 6459, + "ECommerce.sales": 3.76, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Arlington", + "ECommerce.customerId": "BF-11020", + "ECommerce.customerName": "Customer 6", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-09-08T00:00:00.000", + "ECommerce.orderId": "US-2017-124779", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.profit": 15.498, + "ECommerce.quantity": 5, + "ECommerce.rowId": 6651, + "ECommerce.sales": 45.92, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Houston", + "ECommerce.customerId": "HK-14890", + "ECommerce.customerName": "Customer 22", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-03-26T00:00:00.000", + "ECommerce.orderId": "US-2017-141677", + "ECommerce.productName": "Canon PC1080F Personal Copier", + "ECommerce.profit": 569.9905, + "ECommerce.quantity": 5, + "ECommerce.rowId": 7174, + "ECommerce.sales": 2399.96, + "ECommerce.subCategory": "Copiers", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "LR-16915", + "ECommerce.customerName": "Customer 30", + "ECommerce.discount": 0.5, + "ECommerce.orderDate": "2020-12-04T00:00:00.000", + "ECommerce.orderId": "CA-2017-109183", + "ECommerce.productName": "Okidata C610n Printer", + "ECommerce.profit": -272.58, + "ECommerce.quantity": 2, + "ECommerce.rowId": 7293, + "ECommerce.sales": 649, + "ECommerce.subCategory": "Machines", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "New York City", + "ECommerce.customerId": "MM-18280", + "ECommerce.customerName": "Customer 34", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-10T00:00:00.000", + "ECommerce.orderId": "CA-2017-112172", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": 0.7065, + "ECommerce.quantity": 3, + "ECommerce.rowId": 7310, + "ECommerce.sales": 14.13, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Philadelphia", + "ECommerce.customerId": "BS-11755", + "ECommerce.customerName": "Customer 10", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-04-10T00:00:00.000", + "ECommerce.orderId": "CA-2017-135069", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 6.4176, + "ECommerce.quantity": 3, + "ECommerce.rowId": 7425, + "ECommerce.sales": 36.672, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BF-11170", + "ECommerce.customerName": "Customer 7", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-151799", + "ECommerce.productName": "Canon PC1080F Personal Copier", + "ECommerce.profit": 467.9922, + "ECommerce.quantity": 2, + "ECommerce.rowId": 7698, + "ECommerce.sales": 1199.98, + "ECommerce.subCategory": "Copiers", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lakewood", + "ECommerce.customerId": "NP-18670", + "ECommerce.customerName": "Customer 35", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-12T00:00:00.000", + "ECommerce.orderId": "CA-2017-150091", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.profit": 129.294, + "ECommerce.quantity": 5, + "ECommerce.rowId": 8425, + "ECommerce.sales": 2154.9, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Dallas", + "ECommerce.customerId": "LC-17050", + "ECommerce.customerName": "Customer 29", + "ECommerce.discount": 0.6, + "ECommerce.orderDate": "2020-11-06T00:00:00.000", + "ECommerce.orderId": "US-2017-119319", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": -19.864, + "ECommerce.quantity": 5, + "ECommerce.rowId": 8621, + "ECommerce.sales": 30.56, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Decatur", + "ECommerce.customerId": "JS-16030", + "ECommerce.customerName": "Customer 25", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-02-16T00:00:00.000", + "ECommerce.orderId": "CA-2017-163265", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.profit": 6.1992, + "ECommerce.quantity": 2, + "ECommerce.rowId": 8673, + "ECommerce.sales": 18.368, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "TS-21205", + "ECommerce.customerName": "Customer 40", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-06-15T00:00:00.000", + "ECommerce.orderId": "CA-2017-119284", + "ECommerce.productName": "HTC One", + "ECommerce.profit": 26.9973, + "ECommerce.quantity": 3, + "ECommerce.rowId": 8697, + "ECommerce.sales": 239.976, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Morristown", + "ECommerce.customerId": "GZ-14470", + "ECommerce.customerName": "Customer 20", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-126928", + "ECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "ECommerce.profit": 225.6, + "ECommerce.quantity": 4, + "ECommerce.rowId": 8878, + "ECommerce.sales": 480, + "ECommerce.subCategory": "Machines", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "JH-15430", + "ECommerce.customerName": "Customer 23", + "ECommerce.discount": 0.5, + "ECommerce.orderDate": "2020-12-25T00:00:00.000", + "ECommerce.orderId": "CA-2017-105620", + "ECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "ECommerce.profit": -7.2, + "ECommerce.quantity": 2, + "ECommerce.rowId": 8958, + "ECommerce.sales": 120, + "ECommerce.subCategory": "Machines", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "New York City", + "ECommerce.customerId": "CD-12280", + "ECommerce.customerName": "Customer 13", + "ECommerce.discount": 0.1, + "ECommerce.orderDate": "2020-11-05T00:00:00.000", + "ECommerce.orderId": "CA-2017-102925", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.profit": 24.2012, + "ECommerce.quantity": 2, + "ECommerce.rowId": 9473, + "ECommerce.sales": 128.124, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "New York City", + "ECommerce.customerId": "SB-20185", + "ECommerce.customerName": "Customer 37", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-06-25T00:00:00.000", + "ECommerce.orderId": "CA-2017-116127", + "ECommerce.productName": "DMI Eclipse Executive Suite Bookcases", + "ECommerce.profit": -5.0098, + "ECommerce.quantity": 1, + "ECommerce.rowId": 9584, + "ECommerce.sales": 400.784, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BS-11380", + "ECommerce.customerName": "Customer 9", + "ECommerce.discount": 0.4, + "ECommerce.orderDate": "2020-11-16T00:00:00.000", + "ECommerce.orderId": "CA-2017-160633", + "ECommerce.productName": "Hewlett Packard 610 Color Digital Copier / Printer", + "ECommerce.profit": 74.9985, + "ECommerce.quantity": 3, + "ECommerce.rowId": 9618, + "ECommerce.sales": 899.982, + "ECommerce.subCategory": "Copiers", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Bowling", + "ECommerce.customerId": "BS-11380", + "ECommerce.customerName": "Customer 9", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-16T00:00:00.000", + "ECommerce.orderId": "CA-2017-160633", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.profit": 5.397, + "ECommerce.quantity": 3, + "ECommerce.rowId": 9619, + "ECommerce.sales": 86.352, + "ECommerce.subCategory": "Art", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying ECommerce: dimensions 1`] = ` +Array [ + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Detroit", + "ECommerce.customerId": "MC-17605", + "ECommerce.customerName": "Customer 31", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-01-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-145142", + "ECommerce.productName": "Balt Solid Wood Rectangular Table", + "ECommerce.profit": 21.098, + "ECommerce.quantity": 2, + "ECommerce.rowId": 523, + "ECommerce.sales": 210.98, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lorain", + "ECommerce.customerId": "GA-14725", + "ECommerce.customerName": "Customer 19", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-107503", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 8.5568, + "ECommerce.quantity": 4, + "ECommerce.rowId": 849, + "ECommerce.sales": 48.896, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Olympia", + "ECommerce.customerId": "PF-19165", + "ECommerce.customerName": "Customer 36", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-118437", + "ECommerce.productName": "Project Tote Personal File", + "ECommerce.profit": 4.0687, + "ECommerce.quantity": 1, + "ECommerce.rowId": 1013, + "ECommerce.sales": 14.03, + "ECommerce.subCategory": "Storage", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Vancouver", + "ECommerce.customerId": "JW-15220", + "ECommerce.customerName": "Customer 26", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-30T00:00:00.000", + "ECommerce.orderId": "CA-2017-139661", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.profit": 3.6632, + "ECommerce.quantity": 2, + "ECommerce.rowId": 1494, + "ECommerce.sales": 9.64, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "ML-17755", + "ECommerce.customerName": "Customer 33", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-06-25T00:00:00.000", + "ECommerce.orderId": "CA-2017-133648", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": -2.1195, + "ECommerce.quantity": 3, + "ECommerce.rowId": 1995, + "ECommerce.sales": 11.304, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "KN-16705", + "ECommerce.customerName": "Customer 28", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-09-23T00:00:00.000", + "ECommerce.orderId": "CA-2017-138422", + "ECommerce.productName": "Wausau Papers Astrobrights Colored Envelopes", + "ECommerce.profit": 5.2026, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2329, + "ECommerce.sales": 14.352, + "ECommerce.subCategory": "Envelopes", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "New York City", + "ECommerce.customerId": "DB-13405", + "ECommerce.customerName": "Customer 15", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-03-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-140949", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "ECommerce.profit": 13.604, + "ECommerce.quantity": 8, + "ECommerce.rowId": 2455, + "ECommerce.sales": 71.6, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BM-11650", + "ECommerce.customerName": "Customer 8", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-13T00:00:00.000", + "ECommerce.orderId": "CA-2017-149048", + "ECommerce.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "ECommerce.profit": 81.432, + "ECommerce.quantity": 2, + "ECommerce.rowId": 2595, + "ECommerce.sales": 180.96, + "ECommerce.subCategory": "Envelopes", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Provo", + "ECommerce.customerId": "AS-10225", + "ECommerce.customerName": "Customer 3", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-112515", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.profit": 77.5764, + "ECommerce.quantity": 3, + "ECommerce.rowId": 2655, + "ECommerce.sales": 1292.94, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "DG-13300", + "ECommerce.customerName": "Customer 16", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-11-28T00:00:00.000", + "ECommerce.orderId": "CA-2017-123372", + "ECommerce.productName": "Google Nexus 5", + "ECommerce.profit": 494.9725, + "ECommerce.quantity": 11, + "ECommerce.rowId": 2661, + "ECommerce.sales": 1979.89, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Glendale", + "ECommerce.customerId": "EM-14140", + "ECommerce.customerName": "Customer 18", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-12T00:00:00.000", + "ECommerce.orderId": "CA-2017-134915", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.profit": 9.9652, + "ECommerce.quantity": 2, + "ECommerce.rowId": 2952, + "ECommerce.sales": 113.888, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 10.3904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3059, + "ECommerce.sales": 30.56, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "San Francisco", + "ECommerce.customerId": "HH-15010", + "ECommerce.customerName": "Customer 21", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-10-19T00:00:00.000", + "ECommerce.orderId": "CA-2017-131492", + "ECommerce.productName": "Anderson Hickey Conga Table Tops & Accessories", + "ECommerce.profit": -3.3506, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3060, + "ECommerce.sales": 24.368, + "ECommerce.subCategory": "Tables", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Louisville", + "ECommerce.customerId": "DW-13480", + "ECommerce.customerName": "Customer 17", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-27T00:00:00.000", + "ECommerce.orderId": "US-2017-132297", + "ECommerce.productName": "Google Nexus 6", + "ECommerce.profit": 134.9925, + "ECommerce.quantity": 3, + "ECommerce.rowId": 3083, + "ECommerce.sales": 539.97, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Auburn", + "ECommerce.customerId": "KN-16705", + "ECommerce.customerName": "Customer 28", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-11T00:00:00.000", + "ECommerce.orderId": "CA-2017-102554", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 1.0904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 3448, + "ECommerce.sales": 3.76, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Omaha", + "ECommerce.customerId": "JO-15550", + "ECommerce.customerName": "Customer 24", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-29T00:00:00.000", + "ECommerce.orderId": "CA-2017-144568", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": 1.1775, + "ECommerce.quantity": 5, + "ECommerce.rowId": 3717, + "ECommerce.sales": 23.55, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Bakersfield", + "ECommerce.customerId": "AW-10840", + "ECommerce.customerName": "Customer 4", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-123001", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 2.726, + "ECommerce.quantity": 5, + "ECommerce.rowId": 3934, + "ECommerce.sales": 9.4, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Philadelphia", + "ECommerce.customerId": "CC-12475", + "ECommerce.customerName": "Customer 12", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-21T00:00:00.000", + "ECommerce.orderId": "CA-2017-100811", + "ECommerce.productName": "Recycled Eldon Regeneration Jumbo File", + "ECommerce.profit": 3.9296, + "ECommerce.quantity": 4, + "ECommerce.rowId": 4012, + "ECommerce.sales": 39.296, + "ECommerce.subCategory": "Storage", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lafayette", + "ECommerce.customerId": "CS-12355", + "ECommerce.customerName": "Customer 14", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-24T00:00:00.000", + "ECommerce.orderId": "CA-2017-124296", + "ECommerce.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "ECommerce.profit": 60.5488, + "ECommerce.quantity": 4, + "ECommerce.rowId": 4031, + "ECommerce.sales": 232.88, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "New York City", + "ECommerce.customerId": "AH-10465", + "ECommerce.customerName": "Customer 1", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-115546", + "ECommerce.productName": "Google Nexus 7", + "ECommerce.profit": 134.9925, + "ECommerce.quantity": 3, + "ECommerce.rowId": 4161, + "ECommerce.sales": 539.97, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "WB-21850", + "ECommerce.customerName": "Customer 41", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-11-11T00:00:00.000", + "ECommerce.orderId": "CA-2017-120327", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.profit": 21.5824, + "ECommerce.quantity": 4, + "ECommerce.rowId": 4227, + "ECommerce.sales": 45.92, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "TB-21175", + "ECommerce.customerName": "Customer 39", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-11-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-143567", + "ECommerce.productName": "Logitech di_Novo Edge Keyboard", + "ECommerce.profit": 517.4793, + "ECommerce.quantity": 9, + "ECommerce.rowId": 4882, + "ECommerce.sales": 2249.91, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Detroit", + "ECommerce.customerId": "CA-12775", + "ECommerce.customerName": "Customer 11", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-145653", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.profit": 134.5302, + "ECommerce.quantity": 7, + "ECommerce.rowId": 5220, + "ECommerce.sales": 498.26, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "KL-16555", + "ECommerce.customerName": "Customer 27", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-147333", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "ECommerce.profit": 8.5025, + "ECommerce.quantity": 5, + "ECommerce.rowId": 5277, + "ECommerce.sales": 44.75, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Los Angeles", + "ECommerce.customerId": "SS-20140", + "ECommerce.customerName": "Customer 38", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-03T00:00:00.000", + "ECommerce.orderId": "CA-2017-145772", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "ECommerce.profit": 8.5025, + "ECommerce.quantity": 5, + "ECommerce.rowId": 6125, + "ECommerce.sales": 44.75, + "ECommerce.subCategory": "Accessories", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Marion", + "ECommerce.customerId": "MG-17650", + "ECommerce.customerName": "Customer 32", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderId": "CA-2017-145660", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.profit": 1.7352, + "ECommerce.quantity": 2, + "ECommerce.rowId": 6205, + "ECommerce.sales": 7.712, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Oakland", + "ECommerce.customerId": "BB-11545", + "ECommerce.customerName": "Customer 5", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-02T00:00:00.000", + "ECommerce.orderId": "CA-2017-102379", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.profit": 44.975, + "ECommerce.quantity": 5, + "ECommerce.rowId": 6272, + "ECommerce.sales": 179.9, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Baltimore", + "ECommerce.customerId": "AJ-10780", + "ECommerce.customerName": "Customer 2", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-05-14T00:00:00.000", + "ECommerce.orderId": "US-2017-133361", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.profit": 1.0904, + "ECommerce.quantity": 2, + "ECommerce.rowId": 6459, + "ECommerce.sales": 3.76, + "ECommerce.subCategory": "Art", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Arlington", + "ECommerce.customerId": "BF-11020", + "ECommerce.customerName": "Customer 6", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-09-08T00:00:00.000", + "ECommerce.orderId": "US-2017-124779", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.profit": 15.498, + "ECommerce.quantity": 5, + "ECommerce.rowId": 6651, + "ECommerce.sales": 45.92, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Houston", + "ECommerce.customerId": "HK-14890", + "ECommerce.customerName": "Customer 22", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-03-26T00:00:00.000", + "ECommerce.orderId": "US-2017-141677", + "ECommerce.productName": "Canon PC1080F Personal Copier", + "ECommerce.profit": 569.9905, + "ECommerce.quantity": 5, + "ECommerce.rowId": 7174, + "ECommerce.sales": 2399.96, + "ECommerce.subCategory": "Copiers", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "LR-16915", + "ECommerce.customerName": "Customer 30", + "ECommerce.discount": 0.5, + "ECommerce.orderDate": "2020-12-04T00:00:00.000", + "ECommerce.orderId": "CA-2017-109183", + "ECommerce.productName": "Okidata C610n Printer", + "ECommerce.profit": -272.58, + "ECommerce.quantity": 2, + "ECommerce.rowId": 7293, + "ECommerce.sales": 649, + "ECommerce.subCategory": "Machines", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "New York City", + "ECommerce.customerId": "MM-18280", + "ECommerce.customerName": "Customer 34", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-06-10T00:00:00.000", + "ECommerce.orderId": "CA-2017-112172", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.profit": 0.7065, + "ECommerce.quantity": 3, + "ECommerce.rowId": 7310, + "ECommerce.sales": 14.13, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Philadelphia", + "ECommerce.customerId": "BS-11755", + "ECommerce.customerName": "Customer 10", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-04-10T00:00:00.000", + "ECommerce.orderId": "CA-2017-135069", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": 6.4176, + "ECommerce.quantity": 3, + "ECommerce.rowId": 7425, + "ECommerce.sales": 36.672, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BF-11170", + "ECommerce.customerName": "Customer 7", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-12-14T00:00:00.000", + "ECommerce.orderId": "CA-2017-151799", + "ECommerce.productName": "Canon PC1080F Personal Copier", + "ECommerce.profit": 467.9922, + "ECommerce.quantity": 2, + "ECommerce.rowId": 7698, + "ECommerce.sales": 1199.98, + "ECommerce.subCategory": "Copiers", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Lakewood", + "ECommerce.customerId": "NP-18670", + "ECommerce.customerName": "Customer 35", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-10-12T00:00:00.000", + "ECommerce.orderId": "CA-2017-150091", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.profit": 129.294, + "ECommerce.quantity": 5, + "ECommerce.rowId": 8425, + "ECommerce.sales": 2154.9, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "Dallas", + "ECommerce.customerId": "LC-17050", + "ECommerce.customerName": "Customer 29", + "ECommerce.discount": 0.6, + "ECommerce.orderDate": "2020-11-06T00:00:00.000", + "ECommerce.orderId": "US-2017-119319", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.profit": -19.864, + "ECommerce.quantity": 5, + "ECommerce.rowId": 8621, + "ECommerce.sales": 30.56, + "ECommerce.subCategory": "Furnishings", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Decatur", + "ECommerce.customerId": "JS-16030", + "ECommerce.customerName": "Customer 25", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-02-16T00:00:00.000", + "ECommerce.orderId": "CA-2017-163265", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.profit": 6.1992, + "ECommerce.quantity": 2, + "ECommerce.rowId": 8673, + "ECommerce.sales": 18.368, + "ECommerce.subCategory": "Fasteners", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "TS-21205", + "ECommerce.customerName": "Customer 40", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-06-15T00:00:00.000", + "ECommerce.orderId": "CA-2017-119284", + "ECommerce.productName": "HTC One", + "ECommerce.profit": 26.9973, + "ECommerce.quantity": 3, + "ECommerce.rowId": 8697, + "ECommerce.sales": 239.976, + "ECommerce.subCategory": "Phones", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Morristown", + "ECommerce.customerId": "GZ-14470", + "ECommerce.customerName": "Customer 20", + "ECommerce.discount": 0, + "ECommerce.orderDate": "2020-09-17T00:00:00.000", + "ECommerce.orderId": "CA-2017-126928", + "ECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "ECommerce.profit": 225.6, + "ECommerce.quantity": 4, + "ECommerce.rowId": 8878, + "ECommerce.sales": 480, + "ECommerce.subCategory": "Machines", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "JH-15430", + "ECommerce.customerName": "Customer 23", + "ECommerce.discount": 0.5, + "ECommerce.orderDate": "2020-12-25T00:00:00.000", + "ECommerce.orderId": "CA-2017-105620", + "ECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "ECommerce.profit": -7.2, + "ECommerce.quantity": 2, + "ECommerce.rowId": 8958, + "ECommerce.sales": 120, + "ECommerce.subCategory": "Machines", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "New York City", + "ECommerce.customerId": "CD-12280", + "ECommerce.customerName": "Customer 13", + "ECommerce.discount": 0.1, + "ECommerce.orderDate": "2020-11-05T00:00:00.000", + "ECommerce.orderId": "CA-2017-102925", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.profit": 24.2012, + "ECommerce.quantity": 2, + "ECommerce.rowId": 9473, + "ECommerce.sales": 128.124, + "ECommerce.subCategory": "Chairs", + }, + Object { + "ECommerce.category": "Furniture", + "ECommerce.city": "New York City", + "ECommerce.customerId": "SB-20185", + "ECommerce.customerName": "Customer 37", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-06-25T00:00:00.000", + "ECommerce.orderId": "CA-2017-116127", + "ECommerce.productName": "DMI Eclipse Executive Suite Bookcases", + "ECommerce.profit": -5.0098, + "ECommerce.quantity": 1, + "ECommerce.rowId": 9584, + "ECommerce.sales": 400.784, + "ECommerce.subCategory": "Bookcases", + }, + Object { + "ECommerce.category": "Technology", + "ECommerce.city": "Columbus", + "ECommerce.customerId": "BS-11380", + "ECommerce.customerName": "Customer 9", + "ECommerce.discount": 0.4, + "ECommerce.orderDate": "2020-11-16T00:00:00.000", + "ECommerce.orderId": "CA-2017-160633", + "ECommerce.productName": "Hewlett Packard 610 Color Digital Copier / Printer", + "ECommerce.profit": 74.9985, + "ECommerce.quantity": 3, + "ECommerce.rowId": 9618, + "ECommerce.sales": 899.982, + "ECommerce.subCategory": "Copiers", + }, + Object { + "ECommerce.category": "Office Supplies", + "ECommerce.city": "Bowling", + "ECommerce.customerId": "BS-11380", + "ECommerce.customerName": "Customer 9", + "ECommerce.discount": 0.2, + "ECommerce.orderDate": "2020-11-16T00:00:00.000", + "ECommerce.orderId": "CA-2017-160633", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.profit": 5.397, + "ECommerce.quantity": 3, + "ECommerce.rowId": 9619, + "ECommerce.sales": 86.352, + "ECommerce.subCategory": "Art", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying ECommerce: partitioned pre-agg 1`] = ` +Array [ + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Balt Solid Wood Rectangular Table", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2020-02-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-03-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "ECommerce.productName": "Canon PC1080F Personal Copier", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2020-03-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "ECommerce.totalQuantity": "8", + }, + Object { + "ECommerce.orderDate": "2020-04-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-04-01T00:00:00.000", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-05-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "ECommerce.productName": "Google Nexus 6", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-05-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "ECommerce.productName": "Google Nexus 7", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-05-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-05-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2020-05-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "ECommerce.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-06-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "ECommerce.productName": "DMI Eclipse Executive Suite Bookcases", + "ECommerce.totalQuantity": "1", + }, + Object { + "ECommerce.orderDate": "2020-06-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "ECommerce.productName": "HTC One", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-06-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2020-06-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-06-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.totalQuantity": "6", + }, + Object { + "ECommerce.orderDate": "2020-06-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "ECommerce.productName": "Project Tote Personal File", + "ECommerce.totalQuantity": "1", + }, + Object { + "ECommerce.orderDate": "2020-09-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-09-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.totalQuantity": "7", + }, + Object { + "ECommerce.orderDate": "2020-09-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "ECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2020-09-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2020-09-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2020-09-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "ECommerce.productName": "Wausau Papers Astrobrights Colored Envelopes", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-10-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "ECommerce.productName": "Anderson Hickey Conga Table Tops & Accessories", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-10-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2020-10-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-10-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-11-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "ECommerce.productName": "Google Nexus 5", + "ECommerce.totalQuantity": "11", + }, + Object { + "ECommerce.orderDate": "2020-11-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2020-11-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "ECommerce.productName": "Hewlett Packard 610 Color Digital Copier / Printer", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-11-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2020-11-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "ECommerce.productName": "Logitech di_Novo Edge Keyboard", + "ECommerce.totalQuantity": "9", + }, + Object { + "ECommerce.orderDate": "2020-11-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-11-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "ECommerce.productName": "Recycled Eldon Regeneration Jumbo File", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2020-11-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "ECommerce.productName": "Canon PC1080F Personal Copier", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "ECommerce.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "ECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "ECommerce.productName": "Okidata C610n Printer", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.totalQuantity": "5", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying ECommerce: partitioned pre-agg higher granularity 1`] = ` +Array [ + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Anderson Hickey Conga Table Tops & Accessories", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Balt Solid Wood Rectangular Table", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Canon PC1080F Personal Copier", + "ECommerce.totalQuantity": "7", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "DMI Eclipse Executive Suite Bookcases", + "ECommerce.totalQuantity": "1", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.totalQuantity": "8", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Google Nexus 5", + "ECommerce.totalQuantity": "11", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Google Nexus 6", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Google Nexus 7", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "HTC One", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.totalQuantity": "11", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Hewlett Packard 610 Color Digital Copier / Printer", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "ECommerce.totalQuantity": "8", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "ECommerce.totalQuantity": "6", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.totalQuantity": "14", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Logitech di_Novo Edge Keyboard", + "ECommerce.totalQuantity": "9", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.totalQuantity": "9", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Okidata C610n Printer", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.totalQuantity": "8", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.totalQuantity": "11", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Project Tote Personal File", + "ECommerce.totalQuantity": "1", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Recycled Eldon Regeneration Jumbo File", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.totalQuantity": "11", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Wausau Papers Astrobrights Colored Envelopes", + "ECommerce.totalQuantity": "3", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying ECommerce: total sales, total profit by month + order (date) + total -- doesn't work with the BigQuery 1`] = ` +Array [ + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-01-01T00:00:00.000", + "ECommerce.totalProfit": "29.6548", + "ECommerce.totalSales": "259.876", + }, + Object { + "ECommerce.orderDate": "2020-02-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-02-01T00:00:00.000", + "ECommerce.totalProfit": "6.1992", + "ECommerce.totalSales": "18.368", + }, + Object { + "ECommerce.orderDate": "2020-03-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-03-01T00:00:00.000", + "ECommerce.totalProfit": "583.5945", + "ECommerce.totalSales": "2471.56", + }, + Object { + "ECommerce.orderDate": "2020-04-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-04-01T00:00:00.000", + "ECommerce.totalProfit": "6.4176", + "ECommerce.totalSales": "36.672", + }, + Object { + "ECommerce.orderDate": "2020-05-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-05-01T00:00:00.000", + "ECommerce.totalProfit": "353.6849", + "ECommerce.totalSales": "1288.21", + }, + Object { + "ECommerce.orderDate": "2020-06-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-06-01T00:00:00.000", + "ECommerce.totalProfit": "34.2361", + "ECommerce.totalSales": "728.734", + }, + Object { + "ECommerce.orderDate": "2020-09-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-09-01T00:00:00.000", + "ECommerce.totalProfit": "461.1332", + "ECommerce.totalSales": "2340.872", + }, + Object { + "ECommerce.orderDate": "2020-10-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-10-01T00:00:00.000", + "ECommerce.totalProfit": "139.997", + "ECommerce.totalSales": "2219.468", + }, + Object { + "ECommerce.orderDate": "2020-11-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-11-01T00:00:00.000", + "ECommerce.totalProfit": "1132.6617", + "ECommerce.totalSales": "5573.922", + }, + Object { + "ECommerce.orderDate": "2020-12-01T00:00:00.000", + "ECommerce.orderDate.month": "2020-12-01T00:00:00.000", + "ECommerce.totalProfit": "303.9737", + "ECommerce.totalSales": "2434.222", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying Products: dimensions + order + limit + total 1`] = ` +Array [ + Object { + "Products.category": "Furniture", + "Products.productName": "DMI Eclipse Executive Suite Bookcases", + "Products.subCategory": "Bookcases", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "Products.subCategory": "Bookcases", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Harbour Creations 67200 Series Stacking Chairs", + "Products.subCategory": "Chairs", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "Products.subCategory": "Chairs", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Linden 10 Round Wall Clock, Black", + "Products.subCategory": "Furnishings", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Magna Visual Magnetic Picture Hangers", + "Products.subCategory": "Furnishings", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Anderson Hickey Conga Table Tops & Accessories", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Balt Solid Wood Rectangular Table", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "OIC #2 Pencils, Medium Soft", + "Products.subCategory": "Art", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "Products.subCategory": "Art", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying Products: dimensions + order + limit 1`] = ` +Array [ + Object { + "Products.category": "Furniture", + "Products.productName": "DMI Eclipse Executive Suite Bookcases", + "Products.subCategory": "Bookcases", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "Products.subCategory": "Bookcases", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Harbour Creations 67200 Series Stacking Chairs", + "Products.subCategory": "Chairs", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "Products.subCategory": "Chairs", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Linden 10 Round Wall Clock, Black", + "Products.subCategory": "Furnishings", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Magna Visual Magnetic Picture Hangers", + "Products.subCategory": "Furnishings", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Anderson Hickey Conga Table Tops & Accessories", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Balt Solid Wood Rectangular Table", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "OIC #2 Pencils, Medium Soft", + "Products.subCategory": "Art", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "Products.subCategory": "Art", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying Products: dimensions + order + total 1`] = ` +Array [ + Object { + "Products.category": "Furniture", + "Products.productName": "DMI Eclipse Executive Suite Bookcases", + "Products.subCategory": "Bookcases", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "Products.subCategory": "Bookcases", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Harbour Creations 67200 Series Stacking Chairs", + "Products.subCategory": "Chairs", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "Products.subCategory": "Chairs", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Linden 10 Round Wall Clock, Black", + "Products.subCategory": "Furnishings", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Magna Visual Magnetic Picture Hangers", + "Products.subCategory": "Furnishings", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Anderson Hickey Conga Table Tops & Accessories", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Balt Solid Wood Rectangular Table", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "OIC #2 Pencils, Medium Soft", + "Products.subCategory": "Art", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "Products.subCategory": "Art", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "Products.subCategory": "Envelopes", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Wausau Papers Astrobrights Colored Envelopes", + "Products.subCategory": "Envelopes", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "Products.subCategory": "Fasteners", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "Products.subCategory": "Fasteners", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Project Tote Personal File", + "Products.subCategory": "Storage", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Recycled Eldon Regeneration Jumbo File", + "Products.subCategory": "Storage", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Logitech di_Novo Edge Keyboard", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Canon PC1080F Personal Copier", + "Products.subCategory": "Copiers", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Hewlett Packard 610 Color Digital Copier / Printer", + "Products.subCategory": "Copiers", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "Products.subCategory": "Machines", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Okidata C610n Printer", + "Products.subCategory": "Machines", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Google Nexus 5", + "Products.subCategory": "Phones", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Google Nexus 6", + "Products.subCategory": "Phones", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Google Nexus 7", + "Products.subCategory": "Phones", + }, + Object { + "Products.category": "Technology", + "Products.productName": "HTC One", + "Products.subCategory": "Phones", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying Products: dimensions + order 1`] = ` +Array [ + Object { + "Products.category": "Furniture", + "Products.productName": "DMI Eclipse Executive Suite Bookcases", + "Products.subCategory": "Bookcases", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "Products.subCategory": "Bookcases", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Harbour Creations 67200 Series Stacking Chairs", + "Products.subCategory": "Chairs", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "Products.subCategory": "Chairs", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Linden 10 Round Wall Clock, Black", + "Products.subCategory": "Furnishings", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Magna Visual Magnetic Picture Hangers", + "Products.subCategory": "Furnishings", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Anderson Hickey Conga Table Tops & Accessories", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Furniture", + "Products.productName": "Balt Solid Wood Rectangular Table", + "Products.subCategory": "Tables", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "OIC #2 Pencils, Medium Soft", + "Products.subCategory": "Art", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "Products.subCategory": "Art", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "Products.subCategory": "Envelopes", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Wausau Papers Astrobrights Colored Envelopes", + "Products.subCategory": "Envelopes", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "Products.subCategory": "Fasteners", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "Products.subCategory": "Fasteners", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Project Tote Personal File", + "Products.subCategory": "Storage", + }, + Object { + "Products.category": "Office Supplies", + "Products.productName": "Recycled Eldon Regeneration Jumbo File", + "Products.subCategory": "Storage", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Logitech di_Novo Edge Keyboard", + "Products.subCategory": "Accessories", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Canon PC1080F Personal Copier", + "Products.subCategory": "Copiers", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Hewlett Packard 610 Color Digital Copier / Printer", + "Products.subCategory": "Copiers", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "Products.subCategory": "Machines", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Okidata C610n Printer", + "Products.subCategory": "Machines", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Google Nexus 5", + "Products.subCategory": "Phones", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Google Nexus 6", + "Products.subCategory": "Phones", + }, + Object { + "Products.category": "Technology", + "Products.productName": "Google Nexus 7", + "Products.subCategory": "Phones", + }, + Object { + "Products.category": "Technology", + "Products.productName": "HTC One", + "Products.subCategory": "Phones", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying SwitchSourceTest: filter by switch dimensions 1`] = ` +Array [ + Object { + "SwitchSourceTest.city": "Detroit", + "SwitchSourceTest.orderDate": "2020-01-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-01-01T00:00:00.000", + "SwitchSourceTest.totalSales": 210.98, + }, + Object { + "SwitchSourceTest.city": "Lorain", + "SwitchSourceTest.orderDate": "2020-01-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-01-01T00:00:00.000", + "SwitchSourceTest.totalSales": 48.896, + }, + Object { + "SwitchSourceTest.city": "Decatur", + "SwitchSourceTest.orderDate": "2020-02-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-02-01T00:00:00.000", + "SwitchSourceTest.totalSales": 18.368, + }, + Object { + "SwitchSourceTest.city": "Houston", + "SwitchSourceTest.orderDate": "2020-03-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-03-01T00:00:00.000", + "SwitchSourceTest.totalSales": 2399.96, + }, + Object { + "SwitchSourceTest.city": "New York City", + "SwitchSourceTest.orderDate": "2020-03-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-03-01T00:00:00.000", + "SwitchSourceTest.totalSales": 71.6, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying SwitchSourceTest: full cross join 1`] = ` +Array [ + Object { + "SwitchSourceTest.city": "Detroit", + "SwitchSourceTest.orderDate": "2020-01-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-01-01T00:00:00.000", + "SwitchSourceTest.totalSales": 1265.88, + }, + Object { + "SwitchSourceTest.city": "Lorain", + "SwitchSourceTest.orderDate": "2020-01-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-01-01T00:00:00.000", + "SwitchSourceTest.totalSales": 293.376, + }, + Object { + "SwitchSourceTest.city": "Decatur", + "SwitchSourceTest.orderDate": "2020-02-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-02-01T00:00:00.000", + "SwitchSourceTest.totalSales": 110.208, + }, + Object { + "SwitchSourceTest.city": "Houston", + "SwitchSourceTest.orderDate": "2020-03-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-03-01T00:00:00.000", + "SwitchSourceTest.totalSales": 14399.76, + }, + Object { + "SwitchSourceTest.city": "New York City", + "SwitchSourceTest.orderDate": "2020-03-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-03-01T00:00:00.000", + "SwitchSourceTest.totalSales": 429.6, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying SwitchSourceTest: simple cross join 1`] = ` +Array [ + Object { + "SwitchSourceTest.city": "Detroit", + "SwitchSourceTest.orderDate": "2020-01-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-01-01T00:00:00.000", + "SwitchSourceTest.totalSalesA": 421.96, + }, + Object { + "SwitchSourceTest.city": "Lorain", + "SwitchSourceTest.orderDate": "2020-01-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-01-01T00:00:00.000", + "SwitchSourceTest.totalSalesA": 97.792, + }, + Object { + "SwitchSourceTest.city": "Decatur", + "SwitchSourceTest.orderDate": "2020-02-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-02-01T00:00:00.000", + "SwitchSourceTest.totalSalesA": 36.736, + }, + Object { + "SwitchSourceTest.city": "Houston", + "SwitchSourceTest.orderDate": "2020-03-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-03-01T00:00:00.000", + "SwitchSourceTest.totalSalesA": 4799.92, + }, + Object { + "SwitchSourceTest.city": "New York City", + "SwitchSourceTest.orderDate": "2020-03-01T00:00:00.000", + "SwitchSourceTest.orderDate.month": "2020-03-01T00:00:00.000", + "SwitchSourceTest.totalSalesA": 143.2, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying custom granularities (with preaggregation) ECommerce: totalQuantity by half_year + dimension 1`] = ` +Array [ + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Balt Solid Wood Rectangular Table", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-01-01T00:00:00.000", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "Canon PC1080F Personal Copier", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "DMI Eclipse Executive Suite Bookcases", + "ECommerce.totalQuantity": "1", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "Google Nexus 6", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "Google Nexus 7", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "HTC One", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.1", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.2", + "ECommerce.totalQuantity": "8", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "Plymouth Boxed Rubber Bands by Plymouth", + "ECommerce.totalQuantity": "11", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "Project Tote Personal File", + "ECommerce.totalQuantity": "1", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "Tyvek Side-Opening Peel & Seel Expanding Envelopes", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Anderson Hickey Conga Table Tops & Accessories", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Canon PC1080F Personal Copier", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Global Adaptabilites Bookcase, Cherry/Storm Gray Finish", + "ECommerce.totalQuantity": "8", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Google Nexus 5", + "ECommerce.totalQuantity": "11", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Harbour Creations 67200 Series Stacking Chairs", + "ECommerce.totalQuantity": "11", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Hewlett Packard 610 Color Digital Copier / Printer", + "ECommerce.totalQuantity": "3", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Iceberg Nesting Folding Chair, 19w x 6d x 43h", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Kingston Digital DataTraveler 16GB USB 2.0", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Lexmark 20R1285 X6650 Wireless All-in-One Printer", + "ECommerce.totalQuantity": "6", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Linden 10 Round Wall Clock, Black", + "ECommerce.totalQuantity": "7", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Logitech di_Novo Edge Keyboard", + "ECommerce.totalQuantity": "9", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Magna Visual Magnetic Picture Hangers", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "OIC #2 Pencils, Medium Soft", + "ECommerce.totalQuantity": "5", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Okidata C610n Printer", + "ECommerce.totalQuantity": "2", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Panasonic KP-380BK Classic Electric Pencil Sharpener", + "ECommerce.totalQuantity": "8", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Recycled Eldon Regeneration Jumbo File", + "ECommerce.totalQuantity": "4", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Vinyl Coated Wire Paper Clips in Organizer Box, 800/Box", + "ECommerce.totalQuantity": "9", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.productName": "Wausau Papers Astrobrights Colored Envelopes", + "ECommerce.totalQuantity": "3", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying custom granularities (with preaggregation) ECommerce: totalQuantity by half_year + no dimension 1`] = ` +Array [ + Object { + "ECommerce.orderDate": "2020-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-01-01T00:00:00.000", + "ECommerce.totalQuantity": "6", + }, + Object { + "ECommerce.orderDate": "2020-07-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2020-07-01T00:00:00.000", + "ECommerce.totalQuantity": "51", + }, + Object { + "ECommerce.orderDate": "2021-01-01T00:00:00.000", + "ECommerce.orderDate.half_year": "2021-01-01T00:00:00.000", + "ECommerce.totalQuantity": "103", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying custom granularities ECommerce: count by half_year + dimension 1`] = ` +Array [ + Object { + "ECommerce.city": "Auburn", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Baltimore", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Columbus", + "ECommerce.count": 3, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Decatur", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Detroit", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Houston", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Lorain", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Los Angeles", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Louisville", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "New York City", + "ECommerce.count": 4, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Olympia", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Omaha", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Philadelphia", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Arlington", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Bakersfield", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Bowling", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Columbus", + "ECommerce.count": 9, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Dallas", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Detroit", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Glendale", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Lafayette", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Lakewood", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Marion", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Morristown", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "New York City", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Oakland", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Philadelphia", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Provo", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "San Francisco", + "ECommerce.count": 2, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Vancouver", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying custom granularities ECommerce: count by half_year + no dimension 1`] = ` +Array [ + Object { + "ECommerce.count": 18, + "ECommerce.customOrderDateNoPreAgg": "2020-01-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-01-01T00:00:00.000", + }, + Object { + "ECommerce.count": 26, + "ECommerce.customOrderDateNoPreAgg": "2020-07-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year": "2020-07-01T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying custom granularities ECommerce: count by half_year_by_1st_april + dimension 1`] = ` +Array [ + Object { + "ECommerce.city": "Decatur", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2019-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2019-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Detroit", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2019-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2019-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Houston", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2019-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2019-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Lorain", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2019-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2019-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "New York City", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2019-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2019-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Arlington", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Auburn", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Bakersfield", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Baltimore", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Columbus", + "ECommerce.count": 4, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Detroit", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Los Angeles", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Louisville", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Morristown", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "New York City", + "ECommerce.count": 3, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Olympia", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Omaha", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Philadelphia", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Provo", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Bowling", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Columbus", + "ECommerce.count": 8, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Dallas", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Glendale", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Lafayette", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Lakewood", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Marion", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "New York City", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Oakland", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Philadelphia", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "San Francisco", + "ECommerce.count": 2, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, + Object { + "ECommerce.city": "Vancouver", + "ECommerce.count": 1, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying custom granularities ECommerce: count by half_year_by_1st_april + no dimension 1`] = ` +Array [ + Object { + "ECommerce.count": 5, + "ECommerce.customOrderDateNoPreAgg": "2019-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2019-10-01T00:00:00.000", + }, + Object { + "ECommerce.count": 19, + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-04-01T00:00:00.000", + }, + Object { + "ECommerce.count": 20, + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T00:00:00.000", + "ECommerce.customOrderDateNoPreAgg.half_year_by_1st_april": "2020-10-01T00:00:00.000", + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByLeading 1`] = ` +Array [ + Object { + "ECommerce.customOrderDateNoPreAgg": "2019-12-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2019-12-01T10:00:00.000", + "ECommerce.rollingCountByLeading": 8, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-02-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-02-01T10:00:00.000", + "ECommerce.rollingCountByLeading": 12, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-04-01T10:00:00.000", + "ECommerce.rollingCountByLeading": 6, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-06-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-06-01T10:00:00.000", + "ECommerce.rollingCountByLeading": 19, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-08-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-08-01T10:00:00.000", + "ECommerce.rollingCountByLeading": 16, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-10-01T10:00:00.000", + "ECommerce.rollingCountByLeading": null, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-12-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-12-01T10:00:00.000", + "ECommerce.rollingCountByLeading": null, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByTrailing 1`] = ` +Array [ + Object { + "ECommerce.customOrderDateNoPreAgg": "2019-12-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2019-12-01T10:00:00.000", + "ECommerce.rollingCountByTrailing": 3, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-02-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-02-01T10:00:00.000", + "ECommerce.rollingCountByTrailing": 3, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-04-01T10:00:00.000", + "ECommerce.rollingCountByTrailing": 12, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-06-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-06-01T10:00:00.000", + "ECommerce.rollingCountByTrailing": null, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-08-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-08-01T10:00:00.000", + "ECommerce.rollingCountByTrailing": 10, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-10-01T10:00:00.000", + "ECommerce.rollingCountByTrailing": 16, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-12-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-12-01T10:00:00.000", + "ECommerce.rollingCountByTrailing": null, + }, +] +`; + +exports[`Queries with the @cubejs-backend/oracle-driver querying custom granularities ECommerce: count by two_mo_by_feb + no dimension + rollingCountByUnbounded 1`] = ` +Array [ + Object { + "ECommerce.customOrderDateNoPreAgg": "2019-12-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2019-12-01T10:00:00.000", + "ECommerce.rollingCountByUnbounded": 3, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-02-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-02-01T10:00:00.000", + "ECommerce.rollingCountByUnbounded": 6, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-04-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-04-01T10:00:00.000", + "ECommerce.rollingCountByUnbounded": 18, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-06-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-06-01T10:00:00.000", + "ECommerce.rollingCountByUnbounded": 18, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-08-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-08-01T10:00:00.000", + "ECommerce.rollingCountByUnbounded": 28, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-10-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-10-01T10:00:00.000", + "ECommerce.rollingCountByUnbounded": 44, + }, + Object { + "ECommerce.customOrderDateNoPreAgg": "2020-12-01T10:00:00.000", + "ECommerce.customOrderDateNoPreAgg.two_mo_by_feb": "2020-12-01T10:00:00.000", + "ECommerce.rollingCountByUnbounded": 44, + }, +] +`; diff --git a/packages/cubejs-testing-drivers/test/oracle-core.test.ts b/packages/cubejs-testing-drivers/test/oracle-core.test.ts new file mode 100644 index 0000000000000..bc59bd11443b4 --- /dev/null +++ b/packages/cubejs-testing-drivers/test/oracle-core.test.ts @@ -0,0 +1,3 @@ +import { testSequence } from '../src/tests/testSequence'; + +testSequence('oracle'); diff --git a/packages/cubejs-testing-drivers/test/oracle-driver.test.ts b/packages/cubejs-testing-drivers/test/oracle-driver.test.ts new file mode 100644 index 0000000000000..d08cd00e2c33b --- /dev/null +++ b/packages/cubejs-testing-drivers/test/oracle-driver.test.ts @@ -0,0 +1,3 @@ +import { testConnection } from '../src/tests/testConnection'; + +testConnection('oracle'); diff --git a/packages/cubejs-testing-drivers/test/oracle-full.test.ts b/packages/cubejs-testing-drivers/test/oracle-full.test.ts new file mode 100644 index 0000000000000..b179bfbae31b8 --- /dev/null +++ b/packages/cubejs-testing-drivers/test/oracle-full.test.ts @@ -0,0 +1,6 @@ +import { testQueries } from '../src/tests/testQueries'; + +// NOTE: the incremental schema suite is intentionally omitted — the Oracle +// driver does not implement incremental schema loading (capabilities() +// .incrementalSchemaLoading is false). +testQueries('oracle'); diff --git a/packages/cubejs-testing/package.json b/packages/cubejs-testing/package.json index 01ed4a8905abc..ef26a8c604269 100644 --- a/packages/cubejs-testing/package.json +++ b/packages/cubejs-testing/package.json @@ -71,8 +71,6 @@ "smoke:lambda:snapshot": "jest --updateSnapshot --verbose -i dist/test/smoke-lambda.test.js", "smoke:materialize": "jest --verbose -i dist/test/smoke-materialize.test.js", "smoke:materialize:snapshot": "jest --verbose --updateSnapshot -i dist/test/smoke-materialize.test.js", - "smoke:oracle": "jest --verbose -i dist/test/smoke-oracle.test.js", - "smoke:oracle:snapshot": "jest --verbose --updateSnapshot -i dist/test/smoke-oracle.test.js", "smoke:questdb": "jest --verbose -i dist/test/smoke-questdb.test.js", "smoke:questdb:snapshot": "jest --verbose --updateSnapshot -i dist/test/smoke-questdb.test.js", "smoke:multidb": "jest --verbose -i dist/test/smoke-multidb.test.js", diff --git a/packages/cubejs-testing/test/__snapshots__/smoke-oracle.test.ts.snap b/packages/cubejs-testing/test/__snapshots__/smoke-oracle.test.ts.snap deleted file mode 100644 index fe28df5d4caa9..0000000000000 --- a/packages/cubejs-testing/test/__snapshots__/smoke-oracle.test.ts.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`oracle query measure: query 1`] = ` -Array [ - Object { - "Orders.totalAmount": 1700, - }, -] -`; diff --git a/packages/cubejs-testing/test/smoke-oracle.test.ts b/packages/cubejs-testing/test/smoke-oracle.test.ts deleted file mode 100644 index 21c57d428c630..0000000000000 --- a/packages/cubejs-testing/test/smoke-oracle.test.ts +++ /dev/null @@ -1,49 +0,0 @@ -// eslint-disable-next-line import/no-extraneous-dependencies -import { expect } from '@jest/globals'; - -// todo: @ovr fix me please -describe('oracle', () => { - // jest.setTimeout(60 * 5 * 100000); - // let db: StartedTestContainer; - // let birdbox: BirdBox; - // let client: CubejsApi; - - // beforeAll(async () => { - // db = await OracleDBRunner.startContainer({}); - - // const stream = await db.logs(); - // stream.pipe(process.stdout); - - // birdbox = await getBirdbox( - // 'oracle', - // { - // CUBEJS_DB_TYPE: 'oracle', - - // CUBEJS_DB_HOST: db.getHost(), - // CUBEJS_DB_PORT: `${db.getMappedPort(1521)}`, - // CUBEJS_DB_NAME: 'XE', - // CUBEJS_DB_USER: 'system', - // CUBEJS_DB_PASS: 'test', - - // ...DEFAULT_CONFIG, - // }, - // { - // schemaDir: 'oracle/schema', - // } - // ); - // client = cubejs(async () => DEFAULT_API_TOKEN, { - // apiUrl: birdbox.configuration.apiUrl, - // }); - // }); - - // afterAll(async () => { - // await birdbox.stop(); - // await db.stop(); - // }); - - // test('query measure', () => testQueryMeasure(client)); - - test('query measure', () => { - expect([{ 'Orders.totalAmount': 1700 }]).toMatchSnapshot('query'); - }); -}); diff --git a/yarn.lock b/yarn.lock index 5cef89e2c08a8..e7d89408b7872 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8627,6 +8627,13 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== +"@types/oracledb@^6.2.3": + version "6.10.4" + resolved "https://registry.yarnpkg.com/@types/oracledb/-/oracledb-6.10.4.tgz#1c8e0371ce99af343078b15ebdab8e9b5b0a66f4" + integrity sha512-VztLwr8PQsStRD5MEr6FVRv9LN+JeeTrTGVUFenAmTP/8X+mfNYwz02qvMc8B41CVeDdR3enQhaWmT9iBgNJSA== + dependencies: + "@types/node" "*" + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -24190,16 +24197,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -24290,7 +24288,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -24318,13 +24316,6 @@ strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -26416,7 +26407,7 @@ workerpool@^9.2.0: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-9.2.0.tgz#f74427cbb61234708332ed8ab9cbf56dcb1c4371" integrity sha512-PKZqBOCo6CYkVOwAxWxQaSF2Fvb5Iv2fCeTP7buyWI2GiynWr46NcXSgK/idoV6e60dgCBfgYc+Un3HMvmqP8w== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -26442,15 +26433,6 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"