@cubejs-client/core 0.33.0 → 0.33.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cubejs-client/core",
3
- "version": "0.33.0",
3
+ "version": "0.33.44",
4
4
  "engines": {},
5
5
  "repository": {
6
6
  "type": "git",
@@ -45,5 +45,5 @@
45
45
  "eslint-plugin-node": "^5.2.1",
46
46
  "jest": "^26.0.1"
47
47
  },
48
- "gitHead": "2cd366915c99b15477142bf6fe4af52c0fc8d0c6"
48
+ "gitHead": "2488618ee25a1b5e11faac9c754b021f2917f3b0"
49
49
  }
package/src/ResultSet.js CHANGED
@@ -127,6 +127,7 @@ class ResultSet {
127
127
  throw new Error('Data blending drillDown query is not currently supported');
128
128
  }
129
129
 
130
+ const { query } = this.loadResponses[0];
130
131
  const { xValues = [], yValues = [] } = drillDownLocator;
131
132
  const normalizedPivotConfig = this.normalizePivotConfig(pivotConfig);
132
133
 
@@ -161,13 +162,25 @@ class ResultSet {
161
162
 
162
163
  if (granularity !== undefined) {
163
164
  const range = dayRange(value, value).snapTo(granularity);
165
+ const originalTimeDimension = query.timeDimensions.find((td) => td.dimension);
166
+
167
+ let dateRange = [
168
+ range.start,
169
+ range.end
170
+ ];
171
+
172
+ if (originalTimeDimension) {
173
+ const [originalStart, originalEnd] = originalTimeDimension.dateRange;
174
+
175
+ dateRange = [
176
+ dayjs(originalStart) > range.start ? dayjs(originalStart) : range.start,
177
+ dayjs(originalEnd) < range.end ? dayjs(originalEnd) : range.end,
178
+ ];
179
+ }
164
180
 
165
181
  timeDimensions.push({
166
182
  dimension: [cubeName, dimension].join('.'),
167
- dateRange: [
168
- range.start,
169
- range.end
170
- ].map((dt) => dt.format('YYYY-MM-DDTHH:mm:ss.SSS')),
183
+ dateRange: dateRange.map((dt) => dt.format('YYYY-MM-DDTHH:mm:ss.SSS')),
171
184
  });
172
185
  } else if (value == null) {
173
186
  filters.push({
@@ -182,8 +195,7 @@ class ResultSet {
182
195
  });
183
196
  }
184
197
  });
185
-
186
- const { query } = this.loadResponses[0];
198
+
187
199
  if (
188
200
  timeDimensions.length === 0 &&
189
201
  query.timeDimensions.length > 0 &&
package/src/index.js CHANGED
@@ -348,5 +348,5 @@ class CubejsApi {
348
348
 
349
349
  export default (apiToken, options) => new CubejsApi(apiToken, options);
350
350
 
351
- export { CubejsApi, HttpTransport, ResultSet, RequestError };
351
+ export { CubejsApi, HttpTransport, ResultSet, RequestError, Meta };
352
352
  export * from './utils';
@@ -57,7 +57,11 @@ const loadResponse = (query = {}) => ({
57
57
  dimensions: {},
58
58
  segments: {},
59
59
  timeDimensions: {
60
- 'Orders.ts.day': { title: 'Orders Ts', shortTitle: 'Ts', type: 'time' },
60
+ 'Orders.ts.day': {
61
+ title: 'Orders Ts',
62
+ shortTitle: 'Ts',
63
+ type: 'time',
64
+ },
61
65
  'Orders.ts': { title: 'Orders Ts', shortTitle: 'Ts', type: 'time' },
62
66
  },
63
67
  },
@@ -80,6 +84,139 @@ const loadResponse = (query = {}) => ({
80
84
  },
81
85
  });
82
86
 
87
+ const loadResponse2 = {
88
+ queryType: 'regularQuery',
89
+ results: [
90
+ {
91
+ query: {
92
+ measures: ['Orders.count'],
93
+ timeDimensions: [
94
+ {
95
+ dimension: 'Orders.createdAt',
96
+ granularity: 'week',
97
+ dateRange: ['2023-05-10T00:00:00.000', '2023-05-14T23:59:59.999'],
98
+ },
99
+ ],
100
+ limit: 10000,
101
+ timezone: 'UTC',
102
+ order: [],
103
+ filters: [],
104
+ dimensions: [],
105
+ rowLimit: 10000,
106
+ queryType: 'regularQuery',
107
+ },
108
+ data: [
109
+ {
110
+ 'Orders.createdAt.week': '2023-05-08T00:00:00.000',
111
+ 'Orders.createdAt': '2023-05-08T00:00:00.000',
112
+ 'Orders.count': '21',
113
+ },
114
+ ],
115
+ lastRefreshTime: '2023-05-22T14:46:45.000Z',
116
+ usedPreAggregations: {
117
+ 'prod_pre_aggregations.orders_main': {
118
+ targetTableName:
119
+ 'prod_pre_aggregations.orders_main20230508_instgodu_ehgypjtt_1i6n02l',
120
+ refreshKeyValues: [[]],
121
+ lastUpdatedAt: 1684766805000,
122
+ },
123
+ },
124
+ transformedQuery: {
125
+ sortedDimensions: [],
126
+ sortedTimeDimensions: [['Orders.createdAt', 'day']],
127
+ timeDimensions: [['Orders.createdAt', 'week']],
128
+ measures: ['Orders.count'],
129
+ leafMeasureAdditive: true,
130
+ leafMeasures: ['Orders.count'],
131
+ measureToLeafMeasures: {
132
+ 'Orders.count': [
133
+ { measure: 'Orders.count', additive: true, type: 'count' },
134
+ ],
135
+ },
136
+ hasNoTimeDimensionsWithoutGranularity: true,
137
+ allFiltersWithinSelectedDimensions: true,
138
+ isAdditive: true,
139
+ granularityHierarchies: {
140
+ year: [
141
+ 'year',
142
+ 'quarter',
143
+ 'month',
144
+ 'month',
145
+ 'day',
146
+ 'hour',
147
+ 'minute',
148
+ 'second',
149
+ ],
150
+ quarter: ['quarter', 'month', 'day', 'hour', 'minute', 'second'],
151
+ month: ['month', 'day', 'hour', 'minute', 'second'],
152
+ week: ['week', 'day', 'hour', 'minute', 'second'],
153
+ day: ['day', 'hour', 'minute', 'second'],
154
+ hour: ['hour', 'minute', 'second'],
155
+ minute: ['minute', 'second'],
156
+ second: ['second'],
157
+ },
158
+ hasMultipliedMeasures: false,
159
+ hasCumulativeMeasures: false,
160
+ windowGranularity: null,
161
+ filterDimensionsSingleValueEqual: {},
162
+ ownedDimensions: [],
163
+ ownedTimeDimensionsWithRollupGranularity: [['Orders.createdAt', 'day']],
164
+ ownedTimeDimensionsAsIs: [['Orders.createdAt', 'week']],
165
+ },
166
+ requestId: 'x',
167
+ annotation: {
168
+ measures: {
169
+ 'Orders.count': {
170
+ title: 'Orders Count',
171
+ shortTitle: 'Count',
172
+ type: 'number',
173
+ drillMembers: ['Orders.id', 'Orders.createdAt'],
174
+ drillMembersGrouped: {
175
+ measures: [],
176
+ dimensions: ['Orders.id', 'Orders.createdAt'],
177
+ },
178
+ },
179
+ },
180
+ dimensions: {},
181
+ segments: {},
182
+ timeDimensions: {
183
+ 'Orders.createdAt.week': {
184
+ title: 'Orders Created at',
185
+ shortTitle: 'Created at',
186
+ type: 'time',
187
+ },
188
+ 'Orders.createdAt': {
189
+ title: 'Orders Created at',
190
+ shortTitle: 'Created at',
191
+ type: 'time',
192
+ },
193
+ },
194
+ },
195
+ dataSource: 'default',
196
+ dbType: 'postgres',
197
+ extDbType: 'cubestore',
198
+ },
199
+ ],
200
+ pivotQuery: {
201
+ measures: ['Orders.count'],
202
+ timeDimensions: [
203
+ {
204
+ dimension: 'Orders.createdAt',
205
+ granularity: 'week',
206
+ dateRange: ['2023-05-10T00:00:00.000', '2023-05-14T23:59:59.999'],
207
+ },
208
+ ],
209
+ limit: 10000,
210
+ timezone: 'UTC',
211
+ order: [],
212
+ filters: [],
213
+ dimensions: [],
214
+ rowLimit: 10000,
215
+ queryType: 'regularQuery',
216
+ },
217
+ slowQuery: false,
218
+ };
219
+
83
220
  describe('drill down query', () => {
84
221
  const resultSet1 = new ResultSet(loadResponse());
85
222
  const resultSet2 = new ResultSet(
@@ -101,7 +238,7 @@ describe('drill down query', () => {
101
238
  const resultSet4 = new ResultSet(
102
239
  loadResponse({
103
240
  dimensions: ['Statuses.potential'],
104
- timeDimensions: []
241
+ timeDimensions: [],
105
242
  })
106
243
  );
107
244
 
@@ -184,31 +321,49 @@ describe('drill down query', () => {
184
321
  timezone: 'UTC',
185
322
  });
186
323
  });
187
-
324
+
188
325
  it('handles null values', () => {
326
+ expect(resultSet4.drillDown({ xvalues: [null] })).toEqual({
327
+ measures: [],
328
+ segments: [],
329
+ dimensions: ['Orders.id', 'Orders.title'],
330
+ filters: [
331
+ {
332
+ member: 'Orders.count',
333
+ operator: 'measureFilter',
334
+ },
335
+ {
336
+ member: 'Statuses.potential',
337
+ operator: 'notSet',
338
+ },
339
+ ],
340
+ timeDimensions: [],
341
+ timezone: 'UTC',
342
+ });
343
+ });
344
+
345
+ it('respects the parent time dimension date range', () => {
346
+ const resultSet = new ResultSet(loadResponse2);
347
+
189
348
  expect(
190
- resultSet4.drillDown({ xvalues: [null] })
191
- ).toEqual(
192
- {
193
- measures: [],
194
- segments: [],
195
- dimensions: [
196
- 'Orders.id',
197
- 'Orders.title',
198
- ],
199
- filters: [
200
- {
201
- member: 'Orders.count',
202
- operator: 'measureFilter',
203
- },
204
- {
205
- member: 'Statuses.potential',
206
- operator: 'notSet',
207
- },
208
- ],
209
- timeDimensions: [],
210
- timezone: 'UTC',
211
- }
212
- );
349
+ resultSet.drillDown({ xValues: ['2023-05-08T00:00:00.000'] })
350
+ ).toEqual({
351
+ measures: [],
352
+ segments: [],
353
+ dimensions: ['Orders.id', 'Orders.createdAt'],
354
+ filters: [
355
+ {
356
+ operator: 'measureFilter',
357
+ member: 'Orders.count',
358
+ },
359
+ ],
360
+ timeDimensions: [
361
+ {
362
+ dimension: 'Orders.createdAt',
363
+ dateRange: ['2023-05-10T00:00:00.000', '2023-05-14T23:59:59.999'],
364
+ },
365
+ ],
366
+ timezone: 'UTC'
367
+ });
213
368
  });
214
369
  });