@quillsql/node 0.6.6 → 0.6.9
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/dist/{assets → cjs/assets}/pgtypes.js +1 -0
- package/dist/cjs/assets/pgtypes.js.map +1 -0
- package/dist/{clients → cjs/clients}/QuillServerClient.js +1 -0
- package/dist/cjs/clients/QuillServerClient.js.map +1 -0
- package/dist/{db → cjs/db}/BigQuery.js +1 -0
- package/dist/cjs/db/BigQuery.js.map +1 -0
- package/dist/{db → cjs/db}/CachedConnection.js +1 -0
- package/dist/cjs/db/CachedConnection.js.map +1 -0
- package/dist/{db → cjs/db}/DatabaseHelper.js +1 -0
- package/dist/cjs/db/DatabaseHelper.js.map +1 -0
- package/dist/{db → cjs/db}/Mysql.js +1 -0
- package/dist/cjs/db/Mysql.js.map +1 -0
- package/dist/{db → cjs/db}/Postgres.js +1 -0
- package/dist/cjs/db/Postgres.js.map +1 -0
- package/dist/{db → cjs/db}/Snowflake.js +43 -14
- package/dist/cjs/db/Snowflake.js.map +1 -0
- package/dist/{index.d.ts → cjs/index.d.ts} +1 -1
- package/dist/{index.ispec.js → cjs/index.ispec.js} +1 -0
- package/dist/cjs/index.ispec.js.map +1 -0
- package/dist/{index.js → cjs/index.js} +4 -2
- package/dist/cjs/index.js.map +1 -0
- package/dist/{index.uspec.js → cjs/index.uspec.js} +1 -0
- package/dist/cjs/index.uspec.js.map +1 -0
- package/dist/{models → cjs/models}/Cache.js +1 -0
- package/dist/cjs/models/Cache.js.map +1 -0
- package/dist/{models → cjs/models}/Client.js +1 -0
- package/dist/cjs/models/Client.js.map +1 -0
- package/dist/{models → cjs/models}/Database.js +1 -0
- package/dist/cjs/models/Database.js.map +1 -0
- package/dist/cjs/models/Filters.d.ts +117 -0
- package/dist/cjs/models/Filters.js +100 -0
- package/dist/cjs/models/Filters.js.map +1 -0
- package/dist/{models → cjs/models}/Formats.js +1 -0
- package/dist/cjs/models/Formats.js.map +1 -0
- package/dist/{models → cjs/models}/Quill.d.ts +2 -0
- package/dist/{models → cjs/models}/Quill.js +1 -0
- package/dist/cjs/models/Quill.js.map +1 -0
- package/dist/{utils → cjs/utils}/Error.js +1 -0
- package/dist/cjs/utils/Error.js.map +1 -0
- package/dist/{utils → cjs/utils}/RunQueryProcesses.js +1 -0
- package/dist/cjs/utils/RunQueryProcesses.js.map +1 -0
- package/dist/{utils → cjs/utils}/schemaConversion.js +1 -0
- package/dist/cjs/utils/schemaConversion.js.map +1 -0
- package/dist/{utils → cjs/utils}/textProcessing.js +1 -0
- package/dist/cjs/utils/textProcessing.js.map +1 -0
- package/dist/esm/assets/pgtypes.d.ts +4 -0
- package/dist/esm/assets/pgtypes.js +2783 -0
- package/dist/esm/assets/pgtypes.js.map +1 -0
- package/dist/esm/clients/QuillServerClient.d.ts +8 -0
- package/dist/esm/clients/QuillServerClient.js +24 -0
- package/dist/esm/clients/QuillServerClient.js.map +1 -0
- package/dist/esm/db/BigQuery.d.ts +27 -0
- package/dist/esm/db/BigQuery.js +201 -0
- package/dist/esm/db/BigQuery.js.map +1 -0
- package/dist/esm/db/CachedConnection.d.ts +23 -0
- package/dist/esm/db/CachedConnection.js +80 -0
- package/dist/esm/db/CachedConnection.js.map +1 -0
- package/dist/esm/db/DatabaseHelper.d.ts +50 -0
- package/dist/esm/db/DatabaseHelper.js +188 -0
- package/dist/esm/db/DatabaseHelper.js.map +1 -0
- package/dist/esm/db/Mysql.d.ts +30 -0
- package/dist/esm/db/Mysql.js +219 -0
- package/dist/esm/db/Mysql.js.map +1 -0
- package/dist/esm/db/Postgres.d.ts +32 -0
- package/dist/esm/db/Postgres.js +157 -0
- package/dist/esm/db/Postgres.js.map +1 -0
- package/dist/esm/db/Snowflake.d.ts +33 -0
- package/dist/esm/db/Snowflake.js +203 -0
- package/dist/esm/db/Snowflake.js.map +1 -0
- package/dist/esm/index.d.ts +41 -0
- package/dist/esm/index.ispec.d.ts +0 -0
- package/{src/index.ispec.ts → dist/esm/index.ispec.js} +2 -6
- package/dist/esm/index.ispec.js.map +1 -0
- package/dist/esm/index.js +266 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/index.uspec.d.ts +0 -0
- package/{src/index.uspec.ts → dist/esm/index.uspec.js} +2 -6
- package/dist/esm/index.uspec.js.map +1 -0
- package/dist/esm/models/Cache.d.ts +12 -0
- package/dist/esm/models/Cache.js +2 -0
- package/dist/esm/models/Cache.js.map +1 -0
- package/dist/esm/models/Client.d.ts +29 -0
- package/dist/esm/models/Client.js +2 -0
- package/dist/esm/models/Client.js.map +1 -0
- package/dist/esm/models/Database.d.ts +5 -0
- package/dist/esm/models/Database.js +2 -0
- package/dist/esm/models/Database.js.map +1 -0
- package/dist/esm/models/Filters.d.ts +117 -0
- package/dist/esm/models/Filters.js +97 -0
- package/dist/esm/models/Filters.js.map +1 -0
- package/dist/esm/models/Formats.d.ts +7 -0
- package/dist/esm/models/Formats.js +2 -0
- package/dist/esm/models/Formats.js.map +1 -0
- package/dist/esm/models/Quill.d.ts +73 -0
- package/dist/esm/models/Quill.js +2 -0
- package/dist/esm/models/Quill.js.map +1 -0
- package/dist/esm/utils/Error.d.ts +8 -0
- package/dist/esm/utils/Error.js +23 -0
- package/dist/esm/utils/Error.js.map +1 -0
- package/dist/esm/utils/RunQueryProcesses.d.ts +9 -0
- package/dist/esm/utils/RunQueryProcesses.js +30 -0
- package/dist/esm/utils/RunQueryProcesses.js.map +1 -0
- package/dist/esm/utils/schemaConversion.d.ts +1 -0
- package/dist/esm/utils/schemaConversion.js +12 -0
- package/dist/esm/utils/schemaConversion.js.map +1 -0
- package/dist/esm/utils/textProcessing.d.ts +2 -0
- package/dist/esm/utils/textProcessing.js +13 -0
- package/dist/esm/utils/textProcessing.js.map +1 -0
- package/package.json +11 -6
- package/eslint.config.mjs +0 -16
- package/examples/mysql-node/app.ts +0 -61
- package/examples/node-server/app.ts +0 -65
- package/jest.config.js +0 -19
- package/src/assets/pgtypes.ts +0 -2782
- package/src/clients/QuillServerClient.ts +0 -23
- package/src/db/BigQuery.ts +0 -220
- package/src/db/CachedConnection.ts +0 -109
- package/src/db/DatabaseHelper.ts +0 -373
- package/src/db/Mysql.ts +0 -262
- package/src/db/Postgres.ts +0 -185
- package/src/db/Snowflake.ts +0 -205
- package/src/index.ts +0 -390
- package/src/models/Cache.ts +0 -18
- package/src/models/Client.ts +0 -29
- package/src/models/Database.ts +0 -5
- package/src/models/Formats.ts +0 -19
- package/src/models/Quill.ts +0 -75
- package/src/utils/Error.ts +0 -35
- package/src/utils/RunQueryProcesses.ts +0 -33
- package/src/utils/schemaConversion.ts +0 -11
- package/src/utils/textProcessing.ts +0 -13
- package/tsconfig.json +0 -15
- /package/dist/{assets → cjs/assets}/pgtypes.d.ts +0 -0
- /package/dist/{clients → cjs/clients}/QuillServerClient.d.ts +0 -0
- /package/dist/{db → cjs/db}/BigQuery.d.ts +0 -0
- /package/dist/{db → cjs/db}/CachedConnection.d.ts +0 -0
- /package/dist/{db → cjs/db}/DatabaseHelper.d.ts +0 -0
- /package/dist/{db → cjs/db}/Mysql.d.ts +0 -0
- /package/dist/{db → cjs/db}/Postgres.d.ts +0 -0
- /package/dist/{db → cjs/db}/Snowflake.d.ts +0 -0
- /package/dist/{index.ispec.d.ts → cjs/index.ispec.d.ts} +0 -0
- /package/dist/{index.uspec.d.ts → cjs/index.uspec.d.ts} +0 -0
- /package/dist/{models → cjs/models}/Cache.d.ts +0 -0
- /package/dist/{models → cjs/models}/Client.d.ts +0 -0
- /package/dist/{models → cjs/models}/Database.d.ts +0 -0
- /package/dist/{models → cjs/models}/Formats.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/Error.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/RunQueryProcesses.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/schemaConversion.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/textProcessing.d.ts +0 -0
package/src/index.ts
DELETED
|
@@ -1,390 +0,0 @@
|
|
|
1
|
-
import { CacheCredentials } from "./models/Cache";
|
|
2
|
-
import {
|
|
3
|
-
AdditionalProcessing,
|
|
4
|
-
QuillClientResponse,
|
|
5
|
-
QuillQueryParams,
|
|
6
|
-
} from "./models/Quill";
|
|
7
|
-
import { CachedConnection } from "./db/CachedConnection";
|
|
8
|
-
import axios from "axios";
|
|
9
|
-
import "dotenv/config";
|
|
10
|
-
import { mapQueries, removeFields } from "./utils/RunQueryProcesses";
|
|
11
|
-
import {
|
|
12
|
-
connectToDatabase,
|
|
13
|
-
connectAndRunQuery,
|
|
14
|
-
getColumnInfoBySchemaByDatabase,
|
|
15
|
-
getColumnsByTableByDatabase,
|
|
16
|
-
getDatabaseCredentials,
|
|
17
|
-
getForiegnKeysByDatabase,
|
|
18
|
-
getSchemasByDatabase,
|
|
19
|
-
getTablesBySchemaByDatabase,
|
|
20
|
-
runQueryByDatabase,
|
|
21
|
-
withConnection,
|
|
22
|
-
} from "./db/DatabaseHelper";
|
|
23
|
-
import { convertTypeToPostgres } from "./utils/schemaConversion";
|
|
24
|
-
|
|
25
|
-
const HOST =
|
|
26
|
-
process.env.ENV === "development"
|
|
27
|
-
? "http://localhost:8080"
|
|
28
|
-
: "https://quill-344421.uc.r.appspot.com";
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Quill - Fullstack API Platform for Dashboards and Reporting.
|
|
32
|
-
*/
|
|
33
|
-
|
|
34
|
-
export interface QuillQueryResult {
|
|
35
|
-
data?: any;
|
|
36
|
-
status: string;
|
|
37
|
-
error?: string;
|
|
38
|
-
queries?: { rows: any[]; fields: any[] };
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export enum DatabaseType {
|
|
42
|
-
postgresql = "postgresql",
|
|
43
|
-
snowflake = "snowflake",
|
|
44
|
-
bigquery = "bigquery",
|
|
45
|
-
mysql = "mysql",
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export class Quill implements AsyncDisposable {
|
|
49
|
-
// Configure cached connection pools with the given config.
|
|
50
|
-
private targetConnection;
|
|
51
|
-
private baseUrl: string;
|
|
52
|
-
private config: {
|
|
53
|
-
headers: {
|
|
54
|
-
Authorization: string;
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
constructor(data: {
|
|
59
|
-
privateKey: string;
|
|
60
|
-
databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql";
|
|
61
|
-
databaseConnectionString?: string;
|
|
62
|
-
databaseConfig?: any;
|
|
63
|
-
cache?: Partial<CacheCredentials>;
|
|
64
|
-
metadataServerURL?: string;
|
|
65
|
-
}) {
|
|
66
|
-
const {
|
|
67
|
-
privateKey,
|
|
68
|
-
databaseType,
|
|
69
|
-
databaseConnectionString,
|
|
70
|
-
databaseConfig,
|
|
71
|
-
cache,
|
|
72
|
-
metadataServerURL,
|
|
73
|
-
} = data;
|
|
74
|
-
this.baseUrl = metadataServerURL ? metadataServerURL : HOST;
|
|
75
|
-
this.config = { headers: { Authorization: `Bearer ${privateKey}` } };
|
|
76
|
-
let credentials = databaseConfig;
|
|
77
|
-
if (databaseConnectionString) {
|
|
78
|
-
credentials = getDatabaseCredentials(
|
|
79
|
-
databaseType,
|
|
80
|
-
databaseConnectionString,
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
this.targetConnection = new CachedConnection(
|
|
84
|
-
databaseType,
|
|
85
|
-
credentials,
|
|
86
|
-
cache || {},
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
public async query({
|
|
91
|
-
orgId,
|
|
92
|
-
metadata,
|
|
93
|
-
}: QuillQueryParams): Promise<QuillQueryResult> {
|
|
94
|
-
this.targetConnection.orgId = orgId;
|
|
95
|
-
let responseMetadata: any = {};
|
|
96
|
-
|
|
97
|
-
if (!metadata.task) {
|
|
98
|
-
return { error: "Missing task.", status: "error", data: {} };
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
try {
|
|
102
|
-
const preQueryResults = metadata.preQueries
|
|
103
|
-
? await this.runQueries(
|
|
104
|
-
metadata.preQueries,
|
|
105
|
-
this.targetConnection.databaseType,
|
|
106
|
-
metadata.databaseType,
|
|
107
|
-
metadata.runQueryConfig,
|
|
108
|
-
)
|
|
109
|
-
: {};
|
|
110
|
-
if (metadata.runQueryConfig?.overridePost) {
|
|
111
|
-
return {
|
|
112
|
-
data: { queryResults: preQueryResults },
|
|
113
|
-
status: "success",
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
const response = await this.postQuill(metadata.task, {
|
|
117
|
-
...metadata,
|
|
118
|
-
...preQueryResults,
|
|
119
|
-
orgId,
|
|
120
|
-
viewQuery: metadata.preQueries ? metadata.preQueries[0] : undefined,
|
|
121
|
-
});
|
|
122
|
-
if (response.error) {
|
|
123
|
-
return {
|
|
124
|
-
status: "error",
|
|
125
|
-
error: response.error,
|
|
126
|
-
data: response.metadata || {},
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
// if there is no metadata object in the response, create one
|
|
130
|
-
if (response.metadata) {
|
|
131
|
-
responseMetadata = response.metadata;
|
|
132
|
-
}
|
|
133
|
-
const results = await this.runQueries(
|
|
134
|
-
response.queries,
|
|
135
|
-
this.targetConnection.databaseType,
|
|
136
|
-
metadata.databaseType,
|
|
137
|
-
responseMetadata.runQueryConfig,
|
|
138
|
-
);
|
|
139
|
-
// QUICK JANKY FIX TO UPDATE METADATA AFTER GETTING MAPPED ARRAYS
|
|
140
|
-
if (results.mappedArray && responseMetadata.runQueryConfig?.arrayToMap) {
|
|
141
|
-
const arrayToMap = responseMetadata.runQueryConfig.arrayToMap;
|
|
142
|
-
results.mappedArray.forEach((array: any, index: number) => {
|
|
143
|
-
responseMetadata[arrayToMap.arrayName][index][arrayToMap.field] =
|
|
144
|
-
array;
|
|
145
|
-
});
|
|
146
|
-
delete results.mappedArray;
|
|
147
|
-
}
|
|
148
|
-
// if there is a single query array in queryResults and the rows and field objects to metadata
|
|
149
|
-
if (results?.queryResults.length === 1) {
|
|
150
|
-
const queryResults = results.queryResults[0];
|
|
151
|
-
if (queryResults.rows) {
|
|
152
|
-
responseMetadata.rows = queryResults.rows;
|
|
153
|
-
}
|
|
154
|
-
if (queryResults.fields) {
|
|
155
|
-
responseMetadata.fields = queryResults.fields;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return {
|
|
159
|
-
data: responseMetadata,
|
|
160
|
-
queries: results,
|
|
161
|
-
status: "success",
|
|
162
|
-
};
|
|
163
|
-
} catch (err) {
|
|
164
|
-
if (metadata.task === "update-view") {
|
|
165
|
-
this.postQuill("set-broken-view", {
|
|
166
|
-
table: metadata.name,
|
|
167
|
-
clientId: metadata.clientId,
|
|
168
|
-
error: (err as any).message,
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
return {
|
|
172
|
-
status: "error",
|
|
173
|
-
error: (err as any).message,
|
|
174
|
-
data: responseMetadata || {},
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
private async runQueries(
|
|
180
|
-
queries: any[] | undefined,
|
|
181
|
-
pkDatabaseType: "postgresql" | "snowflake" | "bigquery" | "mysql",
|
|
182
|
-
databaseType?: string,
|
|
183
|
-
runQueryConfig?: AdditionalProcessing,
|
|
184
|
-
) {
|
|
185
|
-
let results: any;
|
|
186
|
-
if (!queries) return { ...results, queryResults: [] };
|
|
187
|
-
if (
|
|
188
|
-
databaseType &&
|
|
189
|
-
databaseType.toLowerCase() !== pkDatabaseType.toLowerCase()
|
|
190
|
-
) {
|
|
191
|
-
return {
|
|
192
|
-
dbMismatched: true,
|
|
193
|
-
backendDatabaseType: pkDatabaseType,
|
|
194
|
-
queryResults: [],
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
if (runQueryConfig?.arrayToMap) {
|
|
199
|
-
const mappedArray = await mapQueries(queries, this.targetConnection);
|
|
200
|
-
return { ...results, queryResults: [], mappedArray };
|
|
201
|
-
} else if (runQueryConfig?.getColumns) {
|
|
202
|
-
const queryResult = await this.targetConnection.query(
|
|
203
|
-
`${queries[0].replace(/;/, "")} limit 1000`,
|
|
204
|
-
);
|
|
205
|
-
const columns = queryResult.fields.map((field: any) => {
|
|
206
|
-
return {
|
|
207
|
-
fieldType: convertTypeToPostgres(field.dataTypeID),
|
|
208
|
-
name: field.name,
|
|
209
|
-
displayName: field.name,
|
|
210
|
-
isVisible: true,
|
|
211
|
-
field: field.name,
|
|
212
|
-
};
|
|
213
|
-
});
|
|
214
|
-
return { columns };
|
|
215
|
-
} else if (runQueryConfig?.getColumnsForSchema) {
|
|
216
|
-
const queryResults = await Promise.all(
|
|
217
|
-
queries.map(async (table) => {
|
|
218
|
-
if (
|
|
219
|
-
!table.viewQuery ||
|
|
220
|
-
(!table.isSelectStar && !table.customFieldInfo)
|
|
221
|
-
) {
|
|
222
|
-
return table;
|
|
223
|
-
}
|
|
224
|
-
let limit = "";
|
|
225
|
-
if (runQueryConfig.limitBy) {
|
|
226
|
-
limit = ` limit ${runQueryConfig.limitBy}`;
|
|
227
|
-
}
|
|
228
|
-
try {
|
|
229
|
-
const queryResult = await this.targetConnection.query(
|
|
230
|
-
`${table.viewQuery.replace(/;/, "")} ${limit}`,
|
|
231
|
-
);
|
|
232
|
-
const columns = queryResult.fields.map((field: any) => {
|
|
233
|
-
return {
|
|
234
|
-
fieldType: convertTypeToPostgres(field.dataTypeID),
|
|
235
|
-
name: field.name,
|
|
236
|
-
displayName: field.name,
|
|
237
|
-
isVisible: true,
|
|
238
|
-
field: field.name,
|
|
239
|
-
};
|
|
240
|
-
});
|
|
241
|
-
return { ...table, columns: columns, rows: queryResult.rows };
|
|
242
|
-
} catch (err: any) {
|
|
243
|
-
return {
|
|
244
|
-
...table,
|
|
245
|
-
error: err.message
|
|
246
|
-
? `Error fetching columns: ${err.message}`
|
|
247
|
-
: "Error fetching columns",
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
}),
|
|
251
|
-
);
|
|
252
|
-
results = { ...results, queryResults };
|
|
253
|
-
if (runQueryConfig?.fieldsToRemove) {
|
|
254
|
-
results = {
|
|
255
|
-
...results,
|
|
256
|
-
queryResults: queryResults.map((table: any) => {
|
|
257
|
-
const removedColumns = table.columns.filter((column: any) => {
|
|
258
|
-
return !runQueryConfig.fieldsToRemove?.includes(column.name);
|
|
259
|
-
});
|
|
260
|
-
return { ...table, columns: removedColumns };
|
|
261
|
-
}),
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
} else if (runQueryConfig?.getTables) {
|
|
265
|
-
const queryResult = await getTablesBySchemaByDatabase(
|
|
266
|
-
this.targetConnection.databaseType,
|
|
267
|
-
this.targetConnection.getPool(),
|
|
268
|
-
runQueryConfig.schemaNames! || runQueryConfig.schema,
|
|
269
|
-
);
|
|
270
|
-
const schemaInfo = await getColumnInfoBySchemaByDatabase(
|
|
271
|
-
this.targetConnection.databaseType,
|
|
272
|
-
this.targetConnection.getPool(),
|
|
273
|
-
runQueryConfig.schema!,
|
|
274
|
-
queryResult!,
|
|
275
|
-
);
|
|
276
|
-
return schemaInfo;
|
|
277
|
-
} else {
|
|
278
|
-
if (runQueryConfig?.limitThousand) {
|
|
279
|
-
queries = queries.map((query) => {
|
|
280
|
-
return query.replace(/;/, "") + " limit 1000;";
|
|
281
|
-
});
|
|
282
|
-
} else if (runQueryConfig?.limitBy) {
|
|
283
|
-
queries = queries.map((query) => {
|
|
284
|
-
return query.replace(/;/, "") + " limit " + runQueryConfig.limitBy;
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
const queryResults = await Promise.all(
|
|
288
|
-
queries.map(async (query) => {
|
|
289
|
-
return await this.targetConnection.query(query);
|
|
290
|
-
}),
|
|
291
|
-
);
|
|
292
|
-
results = { ...results, queryResults };
|
|
293
|
-
if (runQueryConfig?.fieldsToRemove) {
|
|
294
|
-
results = {
|
|
295
|
-
...results,
|
|
296
|
-
queryResults: queryResults.map((queryResult) => {
|
|
297
|
-
return removeFields(queryResult, runQueryConfig.fieldsToRemove!);
|
|
298
|
-
}),
|
|
299
|
-
};
|
|
300
|
-
}
|
|
301
|
-
if (runQueryConfig?.convertDatatypes) {
|
|
302
|
-
results = queryResults.map((result) => {
|
|
303
|
-
return {
|
|
304
|
-
fields: result.fields.map((field: any) => {
|
|
305
|
-
return {
|
|
306
|
-
...field,
|
|
307
|
-
fieldType: convertTypeToPostgres(field.dataTypeID),
|
|
308
|
-
isVisible: true,
|
|
309
|
-
field: field.name,
|
|
310
|
-
displayName: field.name,
|
|
311
|
-
name: field.name,
|
|
312
|
-
};
|
|
313
|
-
}),
|
|
314
|
-
rows: result.rows,
|
|
315
|
-
};
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
return results;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
private async postQuill(
|
|
323
|
-
path: string,
|
|
324
|
-
payload: any,
|
|
325
|
-
): Promise<QuillClientResponse> {
|
|
326
|
-
try {
|
|
327
|
-
const response = await axios.post(
|
|
328
|
-
`${this.baseUrl}/sdk/${path}`,
|
|
329
|
-
payload,
|
|
330
|
-
this.config,
|
|
331
|
-
);
|
|
332
|
-
return response.data;
|
|
333
|
-
} catch (e: any) {
|
|
334
|
-
return new Promise((_, reject) =>
|
|
335
|
-
reject({ message: e?.response?.data?.error || e.message || e }),
|
|
336
|
-
);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
public async [Symbol.asyncDispose](): Promise<void> {
|
|
341
|
-
await this.close();
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
public async close() {
|
|
345
|
-
await this.targetConnection.close();
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
const requireQuill = ({
|
|
350
|
-
privateKey,
|
|
351
|
-
databaseConnectionString,
|
|
352
|
-
databaseConfig,
|
|
353
|
-
cache,
|
|
354
|
-
databaseType,
|
|
355
|
-
metadataServerURL,
|
|
356
|
-
}: {
|
|
357
|
-
privateKey: string;
|
|
358
|
-
databaseConnectionString: string;
|
|
359
|
-
cache?: Partial<CacheCredentials>;
|
|
360
|
-
databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql";
|
|
361
|
-
databaseConfig: any;
|
|
362
|
-
metadataServerURL?: string;
|
|
363
|
-
}) => {
|
|
364
|
-
return new Quill({
|
|
365
|
-
privateKey,
|
|
366
|
-
databaseType,
|
|
367
|
-
databaseConnectionString,
|
|
368
|
-
databaseConfig,
|
|
369
|
-
cache,
|
|
370
|
-
metadataServerURL,
|
|
371
|
-
});
|
|
372
|
-
};
|
|
373
|
-
|
|
374
|
-
module.exports = requireQuill;
|
|
375
|
-
module.exports.default = requireQuill;
|
|
376
|
-
module.exports.withConnection = withConnection;
|
|
377
|
-
module.exports.connectToDatabase = connectToDatabase;
|
|
378
|
-
module.exports.connectAndRunQuery = connectAndRunQuery;
|
|
379
|
-
module.exports.Quill = Quill;
|
|
380
|
-
module.exports.getTablesBySchemaByDatabase = getTablesBySchemaByDatabase;
|
|
381
|
-
module.exports.getDatabaseCredentials = getDatabaseCredentials;
|
|
382
|
-
module.exports.getColumnsByTableByDatabase = getColumnsByTableByDatabase;
|
|
383
|
-
module.exports.getForiegnKeysByDatabase = getForiegnKeysByDatabase;
|
|
384
|
-
module.exports.getSchemasByDatabase = getSchemasByDatabase;
|
|
385
|
-
module.exports.getColumnInfoBySchemaByDatabase =
|
|
386
|
-
getColumnInfoBySchemaByDatabase;
|
|
387
|
-
module.exports.runQueryByDatabase = runQueryByDatabase;
|
|
388
|
-
module.exports.DatabaseType = DatabaseType;
|
|
389
|
-
|
|
390
|
-
export { QuillQueryParams as QuillRequest } from "./models/Quill";
|
package/src/models/Cache.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export interface Mappable {
|
|
2
|
-
get(key: string): Promise<string | null>;
|
|
3
|
-
set(
|
|
4
|
-
key: string,
|
|
5
|
-
value: string,
|
|
6
|
-
type?: string,
|
|
7
|
-
ttl?: number,
|
|
8
|
-
): Promise<string | null>;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface CacheCredentials {
|
|
12
|
-
username: string;
|
|
13
|
-
password: string;
|
|
14
|
-
host: string;
|
|
15
|
-
port: string;
|
|
16
|
-
cacheType: string;
|
|
17
|
-
ttl?: number;
|
|
18
|
-
}
|
package/src/models/Client.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export interface Client {
|
|
2
|
-
name: string;
|
|
3
|
-
databaseConnectionString: string;
|
|
4
|
-
etlDatabaseConnectionString: string;
|
|
5
|
-
stagingDatabaseConnectionString: string;
|
|
6
|
-
customerTableTitleFieldName: string;
|
|
7
|
-
databaseType: string;
|
|
8
|
-
// foreign key
|
|
9
|
-
customerFieldName: string;
|
|
10
|
-
// native key, ex: uuid
|
|
11
|
-
customerTableFieldName: string;
|
|
12
|
-
// table with all customers, ex: company_company
|
|
13
|
-
customerTableName: string;
|
|
14
|
-
customerView: string;
|
|
15
|
-
// sql type. ex: INT
|
|
16
|
-
customerFieldType: string;
|
|
17
|
-
// does db use ssl
|
|
18
|
-
useSsl: boolean;
|
|
19
|
-
serverCa: string;
|
|
20
|
-
clientCert: string;
|
|
21
|
-
clientKey: string;
|
|
22
|
-
defaultQuery: string;
|
|
23
|
-
ignoreDarkMode: boolean;
|
|
24
|
-
domainName: string;
|
|
25
|
-
hideSqlEditor: boolean;
|
|
26
|
-
adminCustomerId: string;
|
|
27
|
-
stagingAdminCustomerId: string;
|
|
28
|
-
cacheCloudConfig: { type: { cacheQueries: boolean }; default: null };
|
|
29
|
-
}
|
package/src/models/Database.ts
DELETED
package/src/models/Formats.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export type FieldFormat =
|
|
2
|
-
| "whole_number"
|
|
3
|
-
| "one_decimal_place"
|
|
4
|
-
| "two_decimal_places"
|
|
5
|
-
| "dollar_amount"
|
|
6
|
-
| "MMM_yyyy"
|
|
7
|
-
| "MMM_dd_yyyy"
|
|
8
|
-
| "MMM_dd-MMM_dd"
|
|
9
|
-
| "MMM_dd_hh:mm_ap_pm"
|
|
10
|
-
| "hh_ap_pm"
|
|
11
|
-
| "percent"
|
|
12
|
-
| "string";
|
|
13
|
-
|
|
14
|
-
export interface FormattedColumn {
|
|
15
|
-
label: string;
|
|
16
|
-
field: string;
|
|
17
|
-
chartType: string;
|
|
18
|
-
format: FieldFormat;
|
|
19
|
-
}
|
package/src/models/Quill.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { CacheCredentials } from "./Cache";
|
|
2
|
-
import { DatabaseCredentials } from "./Database";
|
|
3
|
-
import { FieldFormat, FormattedColumn } from "./Formats";
|
|
4
|
-
|
|
5
|
-
export interface QuillRequestMetadata {
|
|
6
|
-
task: string;
|
|
7
|
-
// a query to be run
|
|
8
|
-
queries?: string[];
|
|
9
|
-
preQueries?: string[];
|
|
10
|
-
runQueryConfig?: AdditionalProcessing;
|
|
11
|
-
query?: string;
|
|
12
|
-
// a report to be fetched
|
|
13
|
-
id?: string;
|
|
14
|
-
filters?: any[];
|
|
15
|
-
// dashboard item fields
|
|
16
|
-
name?: string;
|
|
17
|
-
xAxisField?: string;
|
|
18
|
-
yAxisFields?: FormattedColumn[];
|
|
19
|
-
xAxisLabel?: string;
|
|
20
|
-
xAxisFormat?: FieldFormat;
|
|
21
|
-
yAxisLabel?: string;
|
|
22
|
-
chartType?: string;
|
|
23
|
-
dashboardName?: string;
|
|
24
|
-
columns?: FormattedColumn[];
|
|
25
|
-
dateField?: { table: string; field: string };
|
|
26
|
-
template?: boolean;
|
|
27
|
-
clientId?: string;
|
|
28
|
-
deleted?: boolean;
|
|
29
|
-
databaseType?: string;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface QuillQueryParams {
|
|
33
|
-
orgId: string;
|
|
34
|
-
metadata: QuillRequestMetadata;
|
|
35
|
-
environment?: string;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface QuillConfig {
|
|
39
|
-
privateKey: string;
|
|
40
|
-
db: Partial<DatabaseCredentials>;
|
|
41
|
-
cache: Partial<CacheCredentials>;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* @deprecated Use db credential object instead
|
|
45
|
-
*/
|
|
46
|
-
databaseConnectionString?: string;
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* @deprecated Use db credential object instead
|
|
50
|
-
*/
|
|
51
|
-
stagingDatabaseConnectionString?: string;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export interface AdditionalProcessing {
|
|
55
|
-
getSchema?: boolean;
|
|
56
|
-
getColumns?: boolean;
|
|
57
|
-
getColumnsForSchema?: boolean;
|
|
58
|
-
getTables?: boolean;
|
|
59
|
-
schema?: string;
|
|
60
|
-
schemaNames?: string[];
|
|
61
|
-
table?: string;
|
|
62
|
-
fieldsToRemove?: string[];
|
|
63
|
-
arrayToMap?: { arrayName: string; field: string };
|
|
64
|
-
overridePost?: boolean;
|
|
65
|
-
convertDatatypes?: boolean;
|
|
66
|
-
limitThousand?: boolean;
|
|
67
|
-
limitBy?: number;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export interface QuillClientResponse {
|
|
71
|
-
queries: string[];
|
|
72
|
-
metadata: any;
|
|
73
|
-
runQueryConfig: AdditionalProcessing;
|
|
74
|
-
error?: string;
|
|
75
|
-
}
|
package/src/utils/Error.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export class PgError extends Error {
|
|
2
|
-
code?: string;
|
|
3
|
-
detail?: string;
|
|
4
|
-
hint?: string;
|
|
5
|
-
position?: string;
|
|
6
|
-
// Add other properties if needed
|
|
7
|
-
constructor(
|
|
8
|
-
message: string,
|
|
9
|
-
detail?: string,
|
|
10
|
-
hint?: string,
|
|
11
|
-
position?: string,
|
|
12
|
-
code?: string,
|
|
13
|
-
) {
|
|
14
|
-
super(message);
|
|
15
|
-
this.code = code;
|
|
16
|
-
this.detail = detail;
|
|
17
|
-
this.hint = hint;
|
|
18
|
-
this.position = position;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function isSuperset(obj: any, baseClass: any): boolean {
|
|
23
|
-
// Get the property names of the base class instance
|
|
24
|
-
const baseInstance = new baseClass();
|
|
25
|
-
const baseProps = Object.keys(baseInstance);
|
|
26
|
-
|
|
27
|
-
// Check if the object has all the properties of the base class
|
|
28
|
-
for (const prop of baseProps) {
|
|
29
|
-
if (!Object.prototype.hasOwnProperty.call(obj, prop)) {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { CachedConnection } from "../db/CachedConnection";
|
|
2
|
-
|
|
3
|
-
export interface TableSchemaInfo {
|
|
4
|
-
fieldType: string;
|
|
5
|
-
name: string;
|
|
6
|
-
displayName: string;
|
|
7
|
-
isVisible: boolean;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export function removeFields(queryResults: any, fieldsToRemove: string[]): any {
|
|
11
|
-
const fields = queryResults.fields.filter(
|
|
12
|
-
(field: { name: any }) => !fieldsToRemove.includes(field.name),
|
|
13
|
-
);
|
|
14
|
-
const rows = queryResults.rows.map((row: any) => {
|
|
15
|
-
fieldsToRemove.forEach((field) => {
|
|
16
|
-
delete row[field];
|
|
17
|
-
});
|
|
18
|
-
return row;
|
|
19
|
-
});
|
|
20
|
-
return { fields, rows };
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export async function mapQueries(
|
|
24
|
-
queries: string[],
|
|
25
|
-
targetConnection: CachedConnection,
|
|
26
|
-
): Promise<any[]> {
|
|
27
|
-
const mappedArray = [];
|
|
28
|
-
for (let i = 0; i < queries.length; i++) {
|
|
29
|
-
const queryResult = await targetConnection.query(queries[i]);
|
|
30
|
-
mappedArray.push(queryResult.rows);
|
|
31
|
-
}
|
|
32
|
-
return mappedArray;
|
|
33
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { PG_TYPES } from "../assets/pgtypes";
|
|
2
|
-
|
|
3
|
-
export function convertTypeToPostgres(data_type_id: number): string {
|
|
4
|
-
const type = PG_TYPES.find((type) => data_type_id === type.oid)
|
|
5
|
-
? PG_TYPES.find((type) => data_type_id === type.oid)?.typname
|
|
6
|
-
: undefined;
|
|
7
|
-
if (!type) {
|
|
8
|
-
return "varchar";
|
|
9
|
-
}
|
|
10
|
-
return type;
|
|
11
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export function capitalize(text: string): string {
|
|
2
|
-
return text.charAt(0).toUpperCase() + text.slice(1);
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
export function depluralize(text: string): string {
|
|
6
|
-
if (text.endsWith("ies")) {
|
|
7
|
-
return text.slice(0, -3) + "y";
|
|
8
|
-
}
|
|
9
|
-
if (text.endsWith("s")) {
|
|
10
|
-
return text.slice(0, -1);
|
|
11
|
-
}
|
|
12
|
-
return text;
|
|
13
|
-
}
|
package/tsconfig.json
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "es2016",
|
|
4
|
-
"module": "commonjs",
|
|
5
|
-
"esModuleInterop": true,
|
|
6
|
-
"forceConsistentCasingInFileNames": true,
|
|
7
|
-
"strict": true,
|
|
8
|
-
"skipLibCheck": true,
|
|
9
|
-
"declaration": true,
|
|
10
|
-
"outDir": "./dist",
|
|
11
|
-
"rootDir": "./src"
|
|
12
|
-
},
|
|
13
|
-
"include": ["src/**/*.ts"],
|
|
14
|
-
"exclude": ["node_modules", "**/*.spec.ts"]
|
|
15
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|