@quillsql/node 0.9.17 → 0.9.18

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.
@@ -1,12 +1,11 @@
1
1
  import { Mappable, CacheCredentials } from "../models/Cache";
2
2
  import { DatabaseConnection, DatabaseConnectionConfig, DatabaseConnectionType } from "./DatabaseHelper";
3
3
  export declare class CachedConnection {
4
- private static sharedRedisClients;
5
4
  databaseType: DatabaseConnectionType;
6
5
  readonly pool: DatabaseConnection;
7
- tenantIds: (string | number)[] | null;
8
6
  ttl: number;
9
7
  cache: Mappable | null;
8
+ isCacheJobRunning: boolean;
10
9
  private _isClosed;
11
10
  get isClosed(): boolean;
12
11
  /** Private constructor; use CachedConnection.create(...) */
@@ -14,9 +13,6 @@ export declare class CachedConnection {
14
13
  /** Async factory initializer */
15
14
  static create(databaseType: DatabaseConnectionType, config: DatabaseConnectionConfig, cacheConfig?: Partial<CacheCredentials>): Promise<CachedConnection>;
16
15
  query(text: string, overwriteCache?: boolean): Promise<any>;
17
- getCachedValue(key: string): Promise<string | null>;
18
- setCachedValue(key: string, value: string): Promise<void>;
19
- deleteCachedValue(key: string): Promise<void>;
20
16
  /**
21
17
  * Configures and returns a cache instance or null if none could be created.
22
18
  */
@@ -22,7 +22,7 @@ class CachedConnection {
22
22
  /** Private constructor; use CachedConnection.create(...) */
23
23
  constructor(databaseType, config, cacheConfig = {}) {
24
24
  var _a;
25
- this.tenantIds = null;
25
+ this.isCacheJobRunning = false;
26
26
  this._isClosed = false;
27
27
  this.databaseType = databaseType;
28
28
  this.pool = (0, DatabaseHelper_1.connectToDatabase)(databaseType, config);
@@ -46,27 +46,27 @@ class CachedConnection {
46
46
  if (!this.cache) {
47
47
  return yield (0, DatabaseHelper_1.runQueryByDatabase)(this.databaseType, this.pool, text);
48
48
  }
49
+ // `text` must be a tenant-scoped SQL query.
50
+ // Since runQueryByDatabase doesn't receive tenant information from any
51
+ // of its other parameters
52
+ const key = text;
49
53
  if (!overwriteCache) {
50
- try {
51
- const cached = yield this.cache.get(text);
52
- if (cached)
53
- return JSON.parse(cached);
54
- }
55
- catch (_a) {
56
- // cache read fail. corrupted
57
- }
58
- }
59
- const newResult = yield (0, DatabaseHelper_1.runQueryByDatabase)(this.databaseType, this.pool, text);
60
- if (!newResult) {
61
- return newResult;
54
+ let cachedResult = yield this.cache.get(key);
55
+ if (cachedResult)
56
+ return JSON.parse(cachedResult);
62
57
  }
58
+ const result = yield (0, DatabaseHelper_1.runQueryByDatabase)(this.databaseType, this.pool, text);
63
59
  try {
64
- this.cache.set(text, JSON.stringify(newResult));
60
+ yield this.cache.set(key, JSON.stringify(result), "EX", this.ttl);
65
61
  }
66
62
  catch (error) {
67
- console.warn("Redis Cache Set Failed: ", error);
63
+ const message = "Redis Cache Set Failed: " + String(error);
64
+ if (this.isCacheJobRunning) {
65
+ throw new Error(message);
66
+ }
67
+ console.warn(message); // This runs for general data fetching by customers
68
68
  }
69
- return newResult;
69
+ return result;
70
70
  }
71
71
  catch (err) {
72
72
  if ((0, Error_1.isSuperset)(err, Error_1.PgError)) {
@@ -78,56 +78,22 @@ class CachedConnection {
78
78
  }
79
79
  });
80
80
  }
81
- getCachedValue(key) {
82
- return __awaiter(this, void 0, void 0, function* () {
83
- if (!this.cache || this.isClosed)
84
- return null;
85
- return yield this.cache.get(key);
86
- });
87
- }
88
- setCachedValue(key, value) {
89
- return __awaiter(this, void 0, void 0, function* () {
90
- if (!this.cache || this.isClosed)
91
- return;
92
- yield this.cache.set(key, value, "EX", this.ttl);
93
- });
94
- }
95
- deleteCachedValue(key) {
96
- return __awaiter(this, void 0, void 0, function* () {
97
- if (!this.cache || this.isClosed)
98
- return;
99
- yield this.cache.del(key);
100
- });
101
- }
102
81
  /**
103
82
  * Configures and returns a cache instance or null if none could be created.
104
83
  */
105
84
  getCache(_a) {
106
85
  return __awaiter(this, arguments, void 0, function* ({ username, password, host, port, cacheType, }) {
107
86
  if (cacheType === "redis" || cacheType === "rediss") {
108
- const sharedKey = JSON.stringify({
109
- cacheType,
110
- username: username || "",
111
- password: password || "",
112
- host: host || "",
113
- port: port || "",
114
- });
115
- const existingClient = CachedConnection.sharedRedisClients.get(sharedKey);
116
- if (existingClient) {
117
- return existingClient;
118
- }
119
87
  const client = (0, redis_1.createClient)({
120
- username: username || "",
121
- password: password || "",
88
+ username: username || '',
89
+ password: password || '',
122
90
  socket: {
123
- host: host || "",
124
- port: port ? parseInt(port) : 0,
91
+ host: host || '',
92
+ port: port ? parseInt(port) : 0
125
93
  },
126
94
  });
127
95
  client.on("error", (err) => console.log("Redis Client Error", err));
128
96
  yield client.connect();
129
- console.log("Redis connected to host:", host);
130
- CachedConnection.sharedRedisClients.set(sharedKey, client);
131
97
  return client;
132
98
  }
133
99
  return null;
@@ -144,5 +110,4 @@ class CachedConnection {
144
110
  }
145
111
  }
146
112
  exports.CachedConnection = CachedConnection;
147
- CachedConnection.sharedRedisClients = new Map();
148
113
  //# sourceMappingURL=CachedConnection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CachedConnection.js","sourceRoot":"","sources":["../../../src/db/CachedConnection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CachedConnection.js","sourceRoot":"","sources":["../../../src/db/CachedConnection.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,21 @@ export interface QuillQueryResult {
19
19
  fields: any[];
20
20
  };
21
21
  }
22
+ export type QuillCacheResult = {
23
+ status: "failed";
24
+ error: string;
25
+ } | {
26
+ status: "complete";
27
+ cachedDashboards: string[];
28
+ failedDashboards: string[];
29
+ };
30
+ export interface QuillCacheParams {
31
+ tenants: QuillQueryParams["tenants"];
32
+ dashboards?: string[];
33
+ signal?: AbortSignal;
34
+ parallelQueries?: number;
35
+ maxRowsPerReport?: number;
36
+ }
22
37
  export type QuillStreamEvent = {
23
38
  type: "start";
24
39
  } | {
@@ -74,6 +89,7 @@ export declare class Quill implements AsyncDisposable {
74
89
  private baseUrl;
75
90
  private config;
76
91
  private initPromise;
92
+ private lock;
77
93
  constructor(data: {
78
94
  privateKey: string;
79
95
  databaseType: "snowflake";
@@ -107,9 +123,7 @@ export declare class Quill implements AsyncDisposable {
107
123
  metadataServerURL?: string;
108
124
  });
109
125
  private ensureReady;
110
- private getTenantMappedFlagsCacheKey;
111
- private getTenantMappedFlagsFromCache;
112
- private setTenantMappedFlagsCache;
126
+ cache({ tenants, dashboards, signal, parallelQueries, maxRowsPerReport, }: QuillCacheParams): Promise<QuillCacheResult>;
113
127
  query({ tenants, flags, metadata, filters, adminEnabled, }: QuillQueryParams): Promise<QuillQueryResult>;
114
128
  stream({ tenants, flags, metadata, filters, adminEnabled, signal, }: QuillStreamOptions): Promise<AsyncIterable<QuillStreamEvent>>;
115
129
  private applyLimit;