Skip to content

Commit 33012b1

Browse files
fix(questdb-driver): Fix invalid QuestDB timestamp floor year unit (#9678)
* bugfix: Invalid QuestDB timestamp floor year unit * feat: Unit GraphQL tests for year aggregation query * fix tests --------- Co-authored-by: Peter Klingelhofer <peterklingelhofer@gmail.com> Co-authored-by: Peter Klingelhofer <peterklingelhofer@users.noreply.github.com>
1 parent 17570d4 commit 33012b1

File tree

5 files changed

+114
-60
lines changed

5 files changed

+114
-60
lines changed

packages/cubejs-api-gateway/test/__snapshots__/graphql.test.ts.snap

Lines changed: 70 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,9 @@ Object {
182182
`;
183183

184184
exports[`GraphQL Schema with camelCase GraphQL query 6: query CubeQuery {
185-
cube(where: { orders: { createdAt: { inDateRange: "2 weeks ago to now" } } }) {
185+
cube(
186+
where: { orders: { createdAt: { inDateRange: "2 weeks ago to now" } } }
187+
) {
186188
orders {
187189
count
188190
createdAt {
@@ -298,8 +300,7 @@ exports[`GraphQL Schema with camelCase GraphQL query 9: query CubeQuery {
298300
status
299301
}
300302
}
301-
}
302-
1`] = `
303+
} 1`] = `
303304
Object {
304305
"dimensions": Array [
305306
"Orders.status",
@@ -339,6 +340,37 @@ Object {
339340
}
340341
`;
341342

343+
exports[`GraphQL Schema with camelCase GraphQL query 10: query CubeQuery {
344+
cube(where: { orders: { createdAt: { inDateRange: "This year" } } }) {
345+
orders(orderBy: { createdAt: asc }) {
346+
count
347+
createdAt {
348+
year
349+
}
350+
}
351+
}
352+
}
353+
1`] = `
354+
Object {
355+
"measures": Array [
356+
"Orders.count",
357+
],
358+
"order": Array [
359+
Array [
360+
"Orders.createdAt",
361+
"asc",
362+
],
363+
],
364+
"timeDimensions": Array [
365+
Object {
366+
"dateRange": "This year",
367+
"dimension": "Orders.createdAt",
368+
"granularity": "year",
369+
},
370+
],
371+
}
372+
`;
373+
342374
exports[`GraphQL Schema with snake_case GraphQL query 0: query CubeQuery {
343375
cube {
344376
orders {
@@ -521,7 +553,9 @@ Object {
521553
`;
522554

523555
exports[`GraphQL Schema with snake_case GraphQL query 6: query CubeQuery {
524-
cube(where: { orders: { created_at: { inDateRange: "2 weeks ago to now" } } }) {
556+
cube(
557+
where: { orders: { created_at: { inDateRange: "2 weeks ago to now" } } }
558+
) {
525559
orders {
526560
count
527561
created_at {
@@ -637,8 +671,7 @@ exports[`GraphQL Schema with snake_case GraphQL query 9: query CubeQuery {
637671
status
638672
}
639673
}
640-
}
641-
1`] = `
674+
} 1`] = `
642675
Object {
643676
"dimensions": Array [
644677
"orders.status",
@@ -677,3 +710,34 @@ Object {
677710
],
678711
}
679712
`;
713+
714+
exports[`GraphQL Schema with snake_case GraphQL query 10: query CubeQuery {
715+
cube(where: { orders: { created_at: { inDateRange: "This year" } } }) {
716+
orders(orderBy: { created_at: asc }) {
717+
count
718+
created_at {
719+
year
720+
}
721+
}
722+
}
723+
}
724+
1`] = `
725+
Object {
726+
"measures": Array [
727+
"orders.count",
728+
],
729+
"order": Array [
730+
Array [
731+
"orders.created_at",
732+
"asc",
733+
],
734+
],
735+
"timeDimensions": Array [
736+
Object {
737+
"dateRange": "This year",
738+
"dimension": "orders.created_at",
739+
"granularity": "year",
740+
},
741+
],
742+
}
743+
`;

packages/cubejs-api-gateway/test/graphql-queries/base-snake-case.gql

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ query CubeQuery {
7373
}
7474

7575
query CubeQuery {
76-
cube(where: { orders: { created_at: { inDateRange: "2 weeks ago to now" } } }) {
76+
cube(
77+
where: { orders: { created_at: { inDateRange: "2 weeks ago to now" } } }
78+
) {
7779
orders {
7880
count
7981
created_at {
@@ -130,3 +132,14 @@ query CubeQuery {
130132
}
131133
}
132134
}
135+
136+
query CubeQuery {
137+
cube(where: { orders: { created_at: { inDateRange: "This year" } } }) {
138+
orders(orderBy: { created_at: asc }) {
139+
count
140+
created_at {
141+
year
142+
}
143+
}
144+
}
145+
}

packages/cubejs-api-gateway/test/graphql-queries/base.gql

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ query CubeQuery {
7373
}
7474

7575
query CubeQuery {
76-
cube(where: { orders: { createdAt: { inDateRange: "2 weeks ago to now" } } }) {
76+
cube(
77+
where: { orders: { createdAt: { inDateRange: "2 weeks ago to now" } } }
78+
) {
7779
orders {
7880
count
7981
createdAt {
@@ -130,3 +132,14 @@ query CubeQuery {
130132
}
131133
}
132134
}
135+
136+
query CubeQuery {
137+
cube(where: { orders: { createdAt: { inDateRange: "This year" } } }) {
138+
orders(orderBy: { createdAt: asc }) {
139+
count
140+
createdAt {
141+
year
142+
}
143+
}
144+
}
145+
}

packages/cubejs-questdb-driver/src/QuestQuery.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const GRANULARITY_TO_INTERVAL: Record<string, string> = {
66
hour: 'h',
77
day: 'd',
88
month: 'M',
9-
year: 'Y'
9+
year: 'y'
1010
};
1111

1212
class QuestParamAllocator extends ParamAllocator {

packages/cubejs-questdb-driver/test/QuestDriver.test.ts

Lines changed: 15 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ describe('QuestDriver', () => {
6262
throw new Error('stream must throw an exception');
6363
} catch (e) {
6464
expect((e as Error).message).toEqual(
65-
'table does not exist [name=random_name_for_table_that_doesnot_exist_sql_must_fail]'
65+
'table does not exist [table=random_name_for_table_that_doesnot_exist_sql_must_fail]'
6666
);
6767
}
6868
});
@@ -71,56 +71,20 @@ describe('QuestDriver', () => {
7171
const schema = await driver.tablesSchema();
7272

7373
expect(schema['']).toEqual({
74-
'query_test': [
75-
{
76-
name: 'id',
77-
type: 'LONG',
78-
},
79-
{
80-
name: 'created',
81-
type: 'date',
82-
},
83-
{
84-
name: 'price',
85-
type: 'DOUBLE',
86-
},
87-
],
88-
'telemetry': [
89-
{
90-
name: 'created',
91-
type: 'TIMESTAMP',
92-
},
93-
{
94-
name: 'event',
95-
type: 'SHORT',
96-
},
97-
{
98-
name: 'origin',
99-
type: 'SHORT',
100-
},
101-
],
102-
'telemetry_config': [
103-
{
104-
name: 'id',
105-
type: 'LONG256',
106-
},
107-
{
108-
name: 'enabled',
109-
type: 'boolean',
110-
},
111-
{
112-
name: 'version',
113-
type: 'SYMBOL',
114-
},
115-
{
116-
name: 'os',
117-
type: 'SYMBOL',
118-
},
119-
{
120-
name: 'package',
121-
type: 'SYMBOL',
122-
},
123-
],
74+
query_test: [
75+
{
76+
name: 'id',
77+
type: 'LONG',
78+
},
79+
{
80+
name: 'created',
81+
type: 'date',
82+
},
83+
{
84+
name: 'price',
85+
type: 'DOUBLE',
86+
},
87+
],
12488
});
12589
});
12690
});

0 commit comments

Comments
 (0)