@cubejs-backend/query-orchestrator 0.24.0 → 0.24.2

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.
Files changed (96) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/src/driver/BaseDriver.d.ts +36 -0
  3. package/dist/src/driver/BaseDriver.d.ts.map +1 -0
  4. package/dist/src/driver/BaseDriver.js +175 -0
  5. package/dist/src/driver/BaseDriver.js.map +1 -0
  6. package/dist/src/driver/index.d.ts +3 -0
  7. package/dist/src/driver/index.d.ts.map +1 -0
  8. package/dist/src/driver/index.js +15 -0
  9. package/dist/src/driver/index.js.map +1 -0
  10. package/dist/src/driver/utils.d.ts +2 -0
  11. package/dist/src/driver/utils.d.ts.map +1 -0
  12. package/dist/src/driver/utils.js +17 -0
  13. package/dist/src/driver/utils.js.map +1 -0
  14. package/dist/src/index.d.ts +3 -0
  15. package/dist/src/index.d.ts.map +1 -0
  16. package/dist/src/index.js +15 -0
  17. package/dist/src/index.js.map +1 -0
  18. package/dist/src/orchestrator/BaseQueueDriver.d.ts +4 -0
  19. package/dist/src/orchestrator/BaseQueueDriver.d.ts.map +1 -0
  20. package/dist/src/orchestrator/BaseQueueDriver.js +16 -0
  21. package/dist/src/orchestrator/BaseQueueDriver.js.map +1 -0
  22. package/dist/src/orchestrator/ContinueWaitError.d.ts +3 -0
  23. package/dist/src/orchestrator/ContinueWaitError.d.ts.map +1 -0
  24. package/dist/src/orchestrator/ContinueWaitError.js +10 -0
  25. package/dist/src/orchestrator/ContinueWaitError.js.map +1 -0
  26. package/dist/src/orchestrator/LocalCacheDriver.d.ts +8 -0
  27. package/dist/src/orchestrator/LocalCacheDriver.d.ts.map +1 -0
  28. package/dist/src/orchestrator/LocalCacheDriver.js +30 -0
  29. package/dist/src/orchestrator/LocalCacheDriver.js.map +1 -0
  30. package/dist/src/orchestrator/LocalQueueDriver.d.ts +57 -0
  31. package/dist/src/orchestrator/LocalQueueDriver.d.ts.map +1 -0
  32. package/dist/src/orchestrator/LocalQueueDriver.js +230 -0
  33. package/dist/src/orchestrator/LocalQueueDriver.js.map +1 -0
  34. package/dist/src/orchestrator/PreAggregations.d.ts +26 -0
  35. package/dist/src/orchestrator/PreAggregations.d.ts.map +1 -0
  36. package/dist/src/orchestrator/PreAggregations.js +565 -0
  37. package/dist/src/orchestrator/PreAggregations.js.map +1 -0
  38. package/dist/src/orchestrator/QueryCache.d.ts +51 -0
  39. package/dist/src/orchestrator/QueryCache.d.ts.map +1 -0
  40. package/dist/src/orchestrator/QueryCache.js +293 -0
  41. package/dist/src/orchestrator/QueryCache.js.map +1 -0
  42. package/dist/src/orchestrator/QueryOrchestrator.d.ts +27 -0
  43. package/dist/src/orchestrator/QueryOrchestrator.d.ts.map +1 -0
  44. package/dist/src/orchestrator/QueryOrchestrator.js +79 -0
  45. package/dist/src/orchestrator/QueryOrchestrator.js.map +1 -0
  46. package/dist/src/orchestrator/QueryQueue.d.ts +36 -0
  47. package/dist/src/orchestrator/QueryQueue.d.ts.map +1 -0
  48. package/dist/src/orchestrator/QueryQueue.js +351 -0
  49. package/dist/src/orchestrator/QueryQueue.js.map +1 -0
  50. package/dist/src/orchestrator/RedisCacheDriver.d.ts +12 -0
  51. package/dist/src/orchestrator/RedisCacheDriver.d.ts.map +1 -0
  52. package/dist/src/orchestrator/RedisCacheDriver.js +50 -0
  53. package/dist/src/orchestrator/RedisCacheDriver.js.map +1 -0
  54. package/dist/src/orchestrator/RedisFactory.d.ts +3 -0
  55. package/dist/src/orchestrator/RedisFactory.d.ts.map +1 -0
  56. package/dist/src/orchestrator/RedisFactory.js +45 -0
  57. package/dist/src/orchestrator/RedisFactory.js.map +1 -0
  58. package/dist/src/orchestrator/RedisPool.d.ts +10 -0
  59. package/dist/src/orchestrator/RedisPool.d.ts.map +1 -0
  60. package/dist/src/orchestrator/RedisPool.js +57 -0
  61. package/dist/src/orchestrator/RedisPool.js.map +1 -0
  62. package/dist/src/orchestrator/RedisQueueDriver.d.ts +47 -0
  63. package/dist/src/orchestrator/RedisQueueDriver.d.ts.map +1 -0
  64. package/dist/src/orchestrator/RedisQueueDriver.js +253 -0
  65. package/dist/src/orchestrator/RedisQueueDriver.js.map +1 -0
  66. package/dist/src/orchestrator/TimeoutError.d.ts +4 -0
  67. package/dist/src/orchestrator/TimeoutError.d.ts.map +1 -0
  68. package/dist/src/orchestrator/TimeoutError.js +7 -0
  69. package/dist/src/orchestrator/TimeoutError.js.map +1 -0
  70. package/dist/src/orchestrator/index.d.ts +14 -0
  71. package/dist/src/orchestrator/index.d.ts.map +1 -0
  72. package/dist/src/orchestrator/index.js +26 -0
  73. package/dist/src/orchestrator/index.js.map +1 -0
  74. package/driver/BaseDriver.js +5 -221
  75. package/driver/README.md +3 -0
  76. package/driver/utils.js +8 -12
  77. package/orchestrator/BaseQueueDriver.js +5 -8
  78. package/orchestrator/ContinueWaitError.js +6 -5
  79. package/orchestrator/LocalCacheDriver.js +5 -29
  80. package/orchestrator/LocalQueueDriver.js +5 -256
  81. package/orchestrator/PreAggregations.js +4 -764
  82. package/orchestrator/QueryCache.js +5 -381
  83. package/orchestrator/QueryOrchestrator.js +5 -100
  84. package/orchestrator/QueryQueue.js +5 -378
  85. package/orchestrator/README.md +3 -0
  86. package/orchestrator/RedisCacheDriver.js +5 -45
  87. package/orchestrator/RedisFactory.js +6 -46
  88. package/orchestrator/RedisPool.js +5 -49
  89. package/orchestrator/RedisQueueDriver.js +5 -283
  90. package/orchestrator/TimeoutError.js +6 -1
  91. package/package.json +29 -11
  92. package/docker-compose.yml +0 -7
  93. package/test/integration/QueryQueueRedis.test.js +0 -5
  94. package/test/unit/PreAggregations.test.js +0 -337
  95. package/test/unit/QueryOrchestrator.test.js +0 -373
  96. package/test/unit/QueryQueue.test.js +0 -247
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RedisQueueDriver = exports.RedisQueueDriverConnection = void 0;
7
+ const ramda_1 = __importDefault(require("ramda"));
8
+ const BaseQueueDriver_1 = require("./BaseQueueDriver");
9
+ class RedisQueueDriverConnection {
10
+ constructor(driver, options) {
11
+ this.driver = driver;
12
+ this.redisClient = options.redisClient;
13
+ this.redisQueuePrefix = options.redisQueuePrefix;
14
+ this.continueWaitTimeout = options.continueWaitTimeout;
15
+ this.orphanedTimeout = options.orphanedTimeout;
16
+ this.heartBeatTimeout = options.heartBeatTimeout;
17
+ this.concurrency = options.concurrency;
18
+ }
19
+ async getResultBlocking(queryKey) {
20
+ const resultListKey = this.resultListKey(queryKey);
21
+ if (!(await this.redisClient.hgetAsync([this.queriesDefKey(), this.redisHash(queryKey)]))) {
22
+ return this.getResult(queryKey);
23
+ }
24
+ const result = await this.redisClient.brpopAsync([resultListKey, this.continueWaitTimeout]);
25
+ if (result) {
26
+ await this.redisClient.lpushAsync([resultListKey, result[1]]);
27
+ await this.redisClient.rpopAsync(resultListKey);
28
+ }
29
+ return result && JSON.parse(result[1]);
30
+ }
31
+ async getResult(queryKey) {
32
+ const resultListKey = this.resultListKey(queryKey);
33
+ const result = await this.redisClient.rpopAsync(resultListKey);
34
+ return result && JSON.parse(result);
35
+ }
36
+ addToQueue(keyScore, queryKey, time, queryHandler, query, priority, options) {
37
+ return this.redisClient.multi()
38
+ .zadd([this.toProcessRedisKey(), 'NX', keyScore, this.redisHash(queryKey)])
39
+ .zadd([this.recentRedisKey(), time, this.redisHash(queryKey)])
40
+ .hsetnx([
41
+ this.queriesDefKey(),
42
+ this.redisHash(queryKey),
43
+ JSON.stringify({
44
+ queryHandler,
45
+ query,
46
+ queryKey,
47
+ stageQueryKey: options.stageQueryKey,
48
+ priority,
49
+ requestId: options.requestId,
50
+ addedToQueueTime: new Date().getTime()
51
+ })
52
+ ])
53
+ .zcard(this.toProcessRedisKey())
54
+ .execAsync();
55
+ }
56
+ getToProcessQueries() {
57
+ return this.redisClient.zrangeAsync([this.toProcessRedisKey(), 0, -1]);
58
+ }
59
+ getActiveQueries() {
60
+ return this.redisClient.zrangeAsync([this.activeRedisKey(), 0, -1]);
61
+ }
62
+ async getQueryAndRemove(queryKey) {
63
+ const [query, ...restResult] = await this.redisClient.multi()
64
+ .hget([this.queriesDefKey(), this.redisHash(queryKey)])
65
+ .zrem([this.activeRedisKey(), this.redisHash(queryKey)])
66
+ .zrem([this.heartBeatRedisKey(), this.redisHash(queryKey)])
67
+ .zrem([this.toProcessRedisKey(), this.redisHash(queryKey)])
68
+ .zrem([this.recentRedisKey(), this.redisHash(queryKey)])
69
+ .hdel([this.queriesDefKey(), this.redisHash(queryKey)])
70
+ .del(this.queryProcessingLockKey(queryKey))
71
+ .execAsync();
72
+ return [JSON.parse(query), ...restResult];
73
+ }
74
+ async setResultAndRemoveQuery(queryKey, executionResult, processingId) {
75
+ try {
76
+ await this.redisClient.watchAsync(this.queryProcessingLockKey(queryKey));
77
+ const currentProcessId = await this.redisClient.getAsync(this.queryProcessingLockKey(queryKey));
78
+ if (processingId !== currentProcessId) {
79
+ return false;
80
+ }
81
+ return this.redisClient.multi()
82
+ .lpush([this.resultListKey(queryKey), JSON.stringify(executionResult)])
83
+ .zrem([this.activeRedisKey(), this.redisHash(queryKey)])
84
+ .zrem([this.heartBeatRedisKey(), this.redisHash(queryKey)])
85
+ .zrem([this.toProcessRedisKey(), this.redisHash(queryKey)])
86
+ .zrem([this.recentRedisKey(), this.redisHash(queryKey)])
87
+ .hdel([this.queriesDefKey(), this.redisHash(queryKey)])
88
+ .del(this.queryProcessingLockKey(queryKey))
89
+ .execAsync();
90
+ }
91
+ finally {
92
+ await this.redisClient.unwatchAsync();
93
+ }
94
+ }
95
+ getOrphanedQueries() {
96
+ return this.redisClient.zrangebyscoreAsync([this.recentRedisKey(), 0, (new Date().getTime() - this.orphanedTimeout * 1000)]);
97
+ }
98
+ getStalledQueries() {
99
+ return this.redisClient.zrangebyscoreAsync([this.heartBeatRedisKey(), 0, (new Date().getTime() - this.heartBeatTimeout * 1000)]);
100
+ }
101
+ async getQueryStageState(onlyKeys) {
102
+ let request = this.redisClient.multi()
103
+ .zrange([this.activeRedisKey(), 0, -1])
104
+ .zrange([this.toProcessRedisKey(), 0, -1]);
105
+ if (!onlyKeys) {
106
+ request = request.hgetall(this.queriesDefKey());
107
+ }
108
+ const [active, toProcess, allQueryDefs] = await request.execAsync();
109
+ return [active, toProcess, ramda_1.default.map(q => JSON.parse(q), allQueryDefs || {})];
110
+ }
111
+ async getQueryDef(queryKey) {
112
+ const query = await this.redisClient.hgetAsync([this.queriesDefKey(), this.redisHash(queryKey)]);
113
+ return JSON.parse(query);
114
+ }
115
+ updateHeartBeat(queryKey) {
116
+ return this.redisClient.zaddAsync([this.heartBeatRedisKey(), new Date().getTime(), this.redisHash(queryKey)]);
117
+ }
118
+ async getNextProcessingId() {
119
+ const id = await this.redisClient.incrAsync(this.processingIdKey());
120
+ return id && id.toString();
121
+ }
122
+ async retrieveForProcessing(queryKey, processingId) {
123
+ try {
124
+ const lockKey = this.queryProcessingLockKey(queryKey);
125
+ await this.redisClient.watchAsync(lockKey);
126
+ const currentProcessId = await this.redisClient.getAsync(lockKey);
127
+ if (currentProcessId) {
128
+ return null;
129
+ }
130
+ const result = await this.redisClient.multi()
131
+ .zadd([this.activeRedisKey(), 'NX', processingId, this.redisHash(queryKey)])
132
+ .zremrangebyrank([this.activeRedisKey(), this.concurrency, -1])
133
+ .zrange([this.activeRedisKey(), 0, this.concurrency - 1])
134
+ .zcard(this.toProcessRedisKey())
135
+ .hget(([this.queriesDefKey(), this.redisHash(queryKey)]))
136
+ .set(lockKey, processingId, 'NX')
137
+ .zadd([this.heartBeatRedisKey(), 'NX', new Date().getTime(), this.redisHash(queryKey)])
138
+ .execAsync();
139
+ if (result) {
140
+ result[4] = JSON.parse(result[4]);
141
+ }
142
+ return result;
143
+ }
144
+ finally {
145
+ await this.redisClient.unwatchAsync();
146
+ }
147
+ }
148
+ async freeProcessingLock(queryKey, processingId, activated) {
149
+ try {
150
+ const lockKey = this.queryProcessingLockKey(queryKey);
151
+ await this.redisClient.watchAsync(lockKey);
152
+ const currentProcessId = await this.redisClient.getAsync(lockKey);
153
+ if (currentProcessId === processingId) {
154
+ let removeCommand = this.redisClient.multi()
155
+ .del(lockKey);
156
+ if (activated) {
157
+ removeCommand = removeCommand.zrem([this.activeRedisKey(), this.redisHash(queryKey)]);
158
+ }
159
+ await removeCommand
160
+ .execAsync();
161
+ return null;
162
+ }
163
+ else {
164
+ return currentProcessId;
165
+ }
166
+ }
167
+ finally {
168
+ await this.redisClient.unwatchAsync();
169
+ }
170
+ }
171
+ async optimisticQueryUpdate(queryKey, toUpdate, processingId) {
172
+ try {
173
+ let query = await this.getQueryDef(queryKey);
174
+ for (let i = 0; i < 10; i++) {
175
+ if (query) {
176
+ // eslint-disable-next-line no-await-in-loop
177
+ await this.redisClient.watchAsync(this.queryProcessingLockKey(queryKey));
178
+ const currentProcessId = await this.redisClient.getAsync(this.queryProcessingLockKey(queryKey));
179
+ if (currentProcessId !== processingId) {
180
+ return false;
181
+ }
182
+ let [beforeUpdate] = await this.redisClient
183
+ .multi()
184
+ .hget([this.queriesDefKey(), this.redisHash(queryKey)])
185
+ .hset([this.queriesDefKey(), this.redisHash(queryKey), JSON.stringify(Object.assign(Object.assign({}, query), toUpdate))])
186
+ .execAsync();
187
+ beforeUpdate = JSON.parse(beforeUpdate);
188
+ if (JSON.stringify(query) === JSON.stringify(beforeUpdate)) {
189
+ return true;
190
+ }
191
+ query = beforeUpdate;
192
+ }
193
+ }
194
+ throw new Error(`Can't update ${queryKey} with ${JSON.stringify(toUpdate)}`);
195
+ }
196
+ finally {
197
+ await this.redisClient.unwatchAsync();
198
+ }
199
+ }
200
+ release() {
201
+ return this.redisClient.quit();
202
+ }
203
+ toProcessRedisKey() {
204
+ return this.queueRedisKey('QUEUE');
205
+ }
206
+ recentRedisKey() {
207
+ return this.queueRedisKey('RECENT');
208
+ }
209
+ activeRedisKey() {
210
+ return this.queueRedisKey('ACTIVE');
211
+ }
212
+ heartBeatRedisKey() {
213
+ return this.queueRedisKey('HEART_BEAT');
214
+ }
215
+ queryRedisKey(queryKey, suffix) {
216
+ return `${this.redisQueuePrefix}_${this.redisHash(queryKey)}_${suffix}`;
217
+ }
218
+ queueRedisKey(suffix) {
219
+ return `${this.redisQueuePrefix}_${suffix}`;
220
+ }
221
+ queriesDefKey() {
222
+ return this.queueRedisKey('QUERIES');
223
+ }
224
+ processingIdKey() {
225
+ return this.queueRedisKey('PROCESSING_COUNTER');
226
+ }
227
+ resultListKey(queryKey) {
228
+ return this.queryRedisKey(queryKey, 'RESULT');
229
+ }
230
+ queryProcessingLockKey(queryKey) {
231
+ return this.queryRedisKey(queryKey, 'LOCK');
232
+ }
233
+ redisHash(queryKey) {
234
+ return this.driver.redisHash(queryKey);
235
+ }
236
+ }
237
+ exports.RedisQueueDriverConnection = RedisQueueDriverConnection;
238
+ class RedisQueueDriver extends BaseQueueDriver_1.BaseQueueDriver {
239
+ constructor(options) {
240
+ super();
241
+ this.redisPool = options.redisPool;
242
+ this.options = options;
243
+ }
244
+ async createConnection() {
245
+ const redisClient = await this.redisPool.getClient();
246
+ return new RedisQueueDriverConnection(this, Object.assign({ redisClient }, this.options));
247
+ }
248
+ release(connection) {
249
+ this.redisPool.release(connection.redisClient);
250
+ }
251
+ }
252
+ exports.RedisQueueDriver = RedisQueueDriver;
253
+ //# sourceMappingURL=RedisQueueDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisQueueDriver.js","sourceRoot":"","sources":["../../../src/orchestrator/RedisQueueDriver.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export class TimeoutError extends Error {
2
+ constructor(message?: string);
3
+ }
4
+ //# sourceMappingURL=TimeoutError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeoutError.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/TimeoutError.js"],"names":[],"mappings":"AAAA;IACuhwC,8BAAmC;CADhhwC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TimeoutError = void 0;
4
+ class TimeoutError extends Error {
5
+ }
6
+ exports.TimeoutError = TimeoutError;
7
+ //# sourceMappingURL=TimeoutError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeoutError.js","sourceRoot":"","sources":["../../../src/orchestrator/TimeoutError.js"],"names":[],"mappings":";;;AAAA,MAAa,YAAa,SAAQ,KAAK;CAAG;AAA1C,oCAA0C"}
@@ -0,0 +1,14 @@
1
+ export * from './BaseQueueDriver';
2
+ export * from './ContinueWaitError';
3
+ export * from './LocalCacheDriver';
4
+ export * from './LocalQueueDriver';
5
+ export * from './PreAggregations';
6
+ export * from './QueryCache';
7
+ export * from './QueryOrchestrator';
8
+ export * from './QueryQueue';
9
+ export * from './RedisCacheDriver';
10
+ export * from './RedisFactory';
11
+ export * from './RedisPool';
12
+ export * from './RedisQueueDriver';
13
+ export * from './TimeoutError';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./BaseQueueDriver"), exports);
14
+ __exportStar(require("./ContinueWaitError"), exports);
15
+ __exportStar(require("./LocalCacheDriver"), exports);
16
+ __exportStar(require("./LocalQueueDriver"), exports);
17
+ __exportStar(require("./PreAggregations"), exports);
18
+ __exportStar(require("./QueryCache"), exports);
19
+ __exportStar(require("./QueryOrchestrator"), exports);
20
+ __exportStar(require("./QueryQueue"), exports);
21
+ __exportStar(require("./RedisCacheDriver"), exports);
22
+ __exportStar(require("./RedisFactory"), exports);
23
+ __exportStar(require("./RedisPool"), exports);
24
+ __exportStar(require("./RedisQueueDriver"), exports);
25
+ __exportStar(require("./TimeoutError"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/orchestrator/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAkC;AAClC,sDAAoC;AACpC,qDAAmC;AACnC,qDAAmC;AACnC,oDAAkC;AAClC,+CAA6B;AAC7B,sDAAoC;AACpC,+CAA6B;AAC7B,qDAAmC;AACnC,iDAA+B;AAC/B,8CAA4B;AAC5B,qDAAmC;AACnC,iDAA+B"}
@@ -1,224 +1,8 @@
1
- const { reduce } = require('ramda');
2
- const { cancelCombinator } = require('./utils');
1
+ const { BaseDriver } = require('../dist/src/driver/BaseDriver');
3
2
 
4
- const sortByKeys = (unordered) => {
5
- const ordered = {};
6
-
7
- Object.keys(unordered).sort().forEach((key) => {
8
- ordered[key] = unordered[key];
9
- });
10
-
11
- return ordered;
12
- };
13
-
14
- const DbTypeToGenericType = {
15
- 'timestamp without time zone': 'timestamp',
16
- integer: 'int',
17
- 'character varying': 'text',
18
- varchar: 'text',
19
- nvarchar: 'text',
20
- text: 'text',
21
- string: 'text',
22
- boolean: 'boolean',
23
- bigint: 'bigint',
24
- time: 'string',
25
- datetime: 'timestamp',
26
- date: 'date',
27
- 'double precision': 'decimal'
28
- };
29
-
30
- // Order of keys is important here: from more specific to less specific
31
- const DbTypeValueMatcher = {
32
- timestamp: (v) => v instanceof Date || v.toString().match(/^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d/),
33
- date: (v) => v instanceof Date || v.toString().match(/^\d\d\d\d-\d\d-\d\d$/),
34
- int: (v) => Number.isInteger(v) || v.toString().match(/^\d+$/),
35
- decimal: (v) => v instanceof Number || v.toString().match(/^\d+(\.\d+)?$/),
36
- boolean: (v) => v === false || v === true || v.toString().toLowerCase() === 'true' || v.toString().toLowerCase() === 'false',
37
- string: (v) => v.length < 256,
38
- text: () => true
39
- };
40
-
41
- class BaseDriver {
42
- informationSchemaQuery() {
43
- return `
44
- SELECT columns.column_name as ${this.quoteIdentifier('column_name')},
45
- columns.table_name as ${this.quoteIdentifier('table_name')},
46
- columns.table_schema as ${this.quoteIdentifier('table_schema')},
47
- columns.data_type as ${this.quoteIdentifier('data_type')}
48
- FROM information_schema.columns
49
- WHERE columns.table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
50
- `;
51
- }
52
-
53
- testConnection() {
54
- throw new Error('Not implemented');
55
- }
56
-
57
- query() {
58
- throw new Error('Not implemented');
59
- }
60
-
61
- async downloadQueryResults(query, values) {
62
- const rows = await this.query(query, values);
63
- const fields = Object.keys(rows[0]);
64
-
65
- const types = fields.map(field => ({
66
- name: field,
67
- type: Object.keys(DbTypeValueMatcher).find(
68
- type => !rows.filter(row => !!row[field]).find(row => !DbTypeValueMatcher[type](row[field])) &&
69
- rows.find(row => !!row[field])
70
- ) || 'text'
71
- }));
72
-
73
- return {
74
- rows,
75
- types,
76
- };
77
- }
78
-
79
- readOnly() {
80
- return false;
81
- }
82
-
83
- tablesSchema() {
84
- const query = this.informationSchemaQuery();
85
-
86
- const reduceCb = (result, i) => {
87
- let schema = (result[i.table_schema] || {});
88
- const tables = (schema[i.table_name] || []);
89
-
90
- tables.push({ name: i.column_name, type: i.data_type, attributes: i.key_type ? ['primaryKey'] : [] });
91
-
92
- tables.sort();
93
- schema[i.table_name] = tables;
94
- schema = sortByKeys(schema);
95
- result[i.table_schema] = schema;
96
-
97
- return sortByKeys(result);
98
- };
99
-
100
- return this.query(query).then(data => reduce(reduceCb, {}, data));
101
- }
102
-
103
- createSchemaIfNotExists(schemaName) {
104
- return this.query(
105
- `SELECT schema_name FROM information_schema.schemata WHERE schema_name = ${this.param(0)}`,
106
- [schemaName]
107
- ).then((schemas) => {
108
- if (schemas.length === 0) {
109
- return this.query(`CREATE SCHEMA IF NOT EXISTS ${schemaName}`);
110
- }
111
- return null;
112
- });
113
- }
114
-
115
- getTablesQuery(schemaName) {
116
- return this.query(
117
- `SELECT table_name FROM information_schema.tables WHERE table_schema = ${this.param(0)}`,
118
- [schemaName]
119
- );
120
- }
121
-
122
- loadPreAggregationIntoTable(preAggregationTableName, loadSql, params, options) {
123
- return this.query(loadSql, params, options);
124
- }
125
-
126
- dropTable(tableName, options) {
127
- return this.query(`DROP TABLE ${tableName}`, [], options);
128
- }
129
-
130
- param(/* paramIndex */) {
131
- return '?';
132
- }
133
-
134
- testConnectionTimeout() {
135
- return 10000;
136
- }
137
-
138
- async downloadTable(table) {
139
- return { rows: await this.query(`SELECT * FROM ${table}`) };
140
- }
141
-
142
- async uploadTable(table, columns, tableData) {
143
- if (!tableData.rows) {
144
- throw new Error(`${this.constructor} driver supports only rows upload`);
145
- }
146
- await this.createTable(table, columns);
147
- try {
148
- for (let i = 0; i < tableData.rows.length; i++) {
149
- await this.query(
150
- `INSERT INTO ${table}
151
- (${columns.map(c => this.quoteIdentifier(c.name)).join(', ')})
152
- VALUES (${columns.map((c, paramIndex) => this.param(paramIndex)).join(', ')})`,
153
- columns.map(c => this.toColumnValue(tableData.rows[i][c.name], c.type))
154
- );
155
- }
156
- } catch (e) {
157
- await this.dropTable(table);
158
- throw e;
159
- }
160
- }
161
-
162
- // eslint-disable-next-line no-unused-vars
163
- toColumnValue(value, genericType) {
164
- return value;
165
- }
166
-
167
- async tableColumnTypes(table) {
168
- const [schema, name] = table.split('.');
169
- const columns = await this.query(
170
- `SELECT columns.column_name,
171
- columns.table_name,
172
- columns.table_schema,
173
- columns.data_type
174
- FROM information_schema.columns
175
- WHERE table_name = ${this.param(0)} AND table_schema = ${this.param(1)}`,
176
- [name, schema]
177
- );
178
- return columns.map(c => ({ name: c.column_name, type: this.toGenericType(c.data_type) }));
179
- }
180
-
181
- createTable(quotedTableName, columns) {
182
- const createTableSql = this.createTableSql(quotedTableName, columns);
183
- return this.query(createTableSql, []).catch(e => {
184
- e.message = `Error during create table: ${createTableSql}: ${e.message}`;
185
- throw e;
186
- });
187
- }
188
-
189
- createTableSql(quotedTableName, columns) {
190
- columns = columns.map(c => `${this.quoteIdentifier(c.name)} ${this.fromGenericType(c.type)}`);
191
- return `CREATE TABLE ${quotedTableName} (${columns.join(', ')})`;
192
- }
193
-
194
- toGenericType(columnType) {
195
- return DbTypeToGenericType[columnType.toLowerCase()] || columnType;
196
- }
197
-
198
- fromGenericType(columnType) {
199
- return columnType;
200
- }
201
-
202
- quoteIdentifier(identifier) {
203
- return `"${identifier}"`;
204
- }
205
-
206
- cancelCombinator(fn) {
207
- return cancelCombinator(fn);
208
- }
209
-
210
- setLogger(logger) {
211
- this.logger = logger;
212
- }
213
-
214
- reportQueryUsage(usage, queryOptions) {
215
- if (this.logger) {
216
- this.logger('SQL Query Usage', {
217
- ...usage,
218
- ...queryOptions
219
- });
220
- }
221
- }
222
- }
3
+ process.emitWarning(
4
+ 'Using absolute import with @cubejs-backend/query-orchestrator is deprecated',
5
+ 'DeprecationWarning'
6
+ );
223
7
 
224
8
  module.exports = BaseDriver;
@@ -0,0 +1,3 @@
1
+
2
+ This directory will be removed in next major version after full deprecation
3
+ of absolute imports for @cubejs-backend/query-orchestrator
package/driver/utils.js CHANGED
@@ -1,12 +1,8 @@
1
- exports.cancelCombinator = (fn) => {
2
- const cancelFnArray = [];
3
- const saveCancelFn = promise => {
4
- if (promise.cancel) {
5
- cancelFnArray.push(promise.cancel);
6
- }
7
- return promise;
8
- };
9
- const promise = fn(saveCancelFn);
10
- promise.cancel = () => Promise.all(cancelFnArray.map(cancel => cancel()));
11
- return promise;
12
- };
1
+ const { cancelCombinator } = require('../dist/src/driver/utils');
2
+
3
+ process.emitWarning(
4
+ 'Using absolute import with @cubejs-backend/query-orchestrator is deprecated',
5
+ 'DeprecationWarning'
6
+ );
7
+
8
+ module.exports = cancelCombinator;
@@ -1,11 +1,8 @@
1
- const crypto = require('crypto');
1
+ const { BaseQueueDriver } = require('../dist/src/orchestrator/BaseQueueDriver');
2
2
 
3
- class BaseQueueDriver {
4
- redisHash(queryKey) {
5
- return typeof queryKey === 'string' && queryKey.length < 256 ?
6
- queryKey :
7
- crypto.createHash('md5').update(JSON.stringify(queryKey)).digest('hex');
8
- }
9
- }
3
+ process.emitWarning(
4
+ 'Using absolute import with @cubejs-backend/query-orchestrator is deprecated',
5
+ 'DeprecationWarning'
6
+ );
10
7
 
11
8
  module.exports = BaseQueueDriver;
@@ -1,7 +1,8 @@
1
- class ContinueWaitError extends Error {
2
- constructor() {
3
- super('Continue wait');
4
- }
5
- }
1
+ const { ContinueWaitError } = require('../dist/src/orchestrator/ContinueWaitError');
2
+
3
+ process.emitWarning(
4
+ 'Using absolute import with @cubejs-backend/query-orchestrator is deprecated',
5
+ 'DeprecationWarning'
6
+ );
6
7
 
7
8
  module.exports = ContinueWaitError;
@@ -1,32 +1,8 @@
1
- const store = {};
1
+ const { LocalCacheDriver } = require('../dist/src/orchestrator/LocalCacheDriver');
2
2
 
3
- class LocalCacheDriver {
4
- constructor() {
5
- this.store = store;
6
- }
7
-
8
- async get(key) {
9
- if (this.store[key] && this.store[key].exp < new Date().getTime()) {
10
- delete this.store[key];
11
- }
12
- return this.store[key] && this.store[key].value;
13
- }
14
-
15
- async set(key, value, expiration) {
16
- this.store[key] = {
17
- value,
18
- exp: new Date().getTime() + expiration * 1000
19
- };
20
- }
21
-
22
- async remove(key) {
23
- delete this.store[key];
24
- }
25
-
26
- async keysStartingWith(prefix) {
27
- return Object.keys(this.store)
28
- .filter(k => k.indexOf(prefix) === 0 && this.store[k].exp > new Date().getTime());
29
- }
30
- }
3
+ process.emitWarning(
4
+ 'Using absolute import with @cubejs-backend/query-orchestrator is deprecated',
5
+ 'DeprecationWarning'
6
+ );
31
7
 
32
8
  module.exports = LocalCacheDriver;