@or-sdk/pgsql 1.0.3-beta.1946.0 → 1.0.3-beta.1949.0

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 (60) hide show
  1. package/dist/cjs/Pgsql.js +128 -35
  2. package/dist/cjs/Pgsql.js.map +1 -1
  3. package/dist/cjs/utils/index.js +1 -13
  4. package/dist/cjs/utils/index.js.map +1 -1
  5. package/dist/esm/Pgsql.js +106 -28
  6. package/dist/esm/Pgsql.js.map +1 -1
  7. package/dist/esm/utils/index.js +0 -6
  8. package/dist/esm/utils/index.js.map +1 -1
  9. package/dist/types/Pgsql.d.ts +31 -18
  10. package/dist/types/Pgsql.d.ts.map +1 -1
  11. package/dist/types/types.d.ts +20 -13
  12. package/dist/types/types.d.ts.map +1 -1
  13. package/dist/types/utils/index.d.ts +0 -6
  14. package/dist/types/utils/index.d.ts.map +1 -1
  15. package/package.json +2 -2
  16. package/src/Pgsql.ts +152 -60
  17. package/src/types.ts +20 -18
  18. package/src/utils/index.ts +0 -6
  19. package/dist/cjs/utils/encodeValue.js +0 -17
  20. package/dist/cjs/utils/encodeValue.js.map +0 -1
  21. package/dist/cjs/utils/extractDatabaseNames.js +0 -10
  22. package/dist/cjs/utils/extractDatabaseNames.js.map +0 -1
  23. package/dist/cjs/utils/getDeleteRowsQuery.js +0 -9
  24. package/dist/cjs/utils/getDeleteRowsQuery.js.map +0 -1
  25. package/dist/cjs/utils/getEditRowQuery.js +0 -10
  26. package/dist/cjs/utils/getEditRowQuery.js.map +0 -1
  27. package/dist/cjs/utils/getInsertKeys.js +0 -9
  28. package/dist/cjs/utils/getInsertKeys.js.map +0 -1
  29. package/dist/cjs/utils/getInsertQueries.js +0 -18
  30. package/dist/cjs/utils/getInsertQueries.js.map +0 -1
  31. package/dist/esm/utils/encodeValue.js +0 -12
  32. package/dist/esm/utils/encodeValue.js.map +0 -1
  33. package/dist/esm/utils/extractDatabaseNames.js +0 -5
  34. package/dist/esm/utils/extractDatabaseNames.js.map +0 -1
  35. package/dist/esm/utils/getDeleteRowsQuery.js +0 -8
  36. package/dist/esm/utils/getDeleteRowsQuery.js.map +0 -1
  37. package/dist/esm/utils/getEditRowQuery.js +0 -10
  38. package/dist/esm/utils/getEditRowQuery.js.map +0 -1
  39. package/dist/esm/utils/getInsertKeys.js +0 -7
  40. package/dist/esm/utils/getInsertKeys.js.map +0 -1
  41. package/dist/esm/utils/getInsertQueries.js +0 -14
  42. package/dist/esm/utils/getInsertQueries.js.map +0 -1
  43. package/dist/types/utils/encodeValue.d.ts +0 -4
  44. package/dist/types/utils/encodeValue.d.ts.map +0 -1
  45. package/dist/types/utils/extractDatabaseNames.d.ts +0 -4
  46. package/dist/types/utils/extractDatabaseNames.d.ts.map +0 -1
  47. package/dist/types/utils/getDeleteRowsQuery.d.ts +0 -4
  48. package/dist/types/utils/getDeleteRowsQuery.d.ts.map +0 -1
  49. package/dist/types/utils/getEditRowQuery.d.ts +0 -4
  50. package/dist/types/utils/getEditRowQuery.d.ts.map +0 -1
  51. package/dist/types/utils/getInsertKeys.d.ts +0 -4
  52. package/dist/types/utils/getInsertKeys.d.ts.map +0 -1
  53. package/dist/types/utils/getInsertQueries.d.ts +0 -4
  54. package/dist/types/utils/getInsertQueries.d.ts.map +0 -1
  55. package/src/utils/encodeValue.ts +0 -11
  56. package/src/utils/extractDatabaseNames.ts +0 -7
  57. package/src/utils/getDeleteRowsQuery.ts +0 -10
  58. package/src/utils/getEditRowQuery.ts +0 -12
  59. package/src/utils/getInsertKeys.ts +0 -9
  60. package/src/utils/getInsertQueries.ts +0 -18
package/src/Pgsql.ts CHANGED
@@ -1,33 +1,30 @@
1
+ import _ from 'lodash';
1
2
  import { Base, CalApiParams, List, MakeApiUrlData, makeList } from '@or-sdk/base';
2
3
  import { LIST_SCHEMAS_QUERY, SERVICE_KEY } from './constants';
3
4
  import {
4
5
  AddColumnsArgs,
5
6
  CreateDatabaseParams,
6
- CreateDatabaseResponse, CreateTableArgs,
7
+ CreateTableArgs,
7
8
  DatabaseItem,
8
9
  DeleteRowsArgs, DropDatabaseResponse, EditRowArgs,
9
- ExecuteQueryArgs, ExecuteQueryResponse, GetDBSizeResult, InsertArgs,
10
+ ExecuteQueryArgs, ExecuteQueryResponse, GetDBSizeResult, GetTableDataProps, InsertArgs,
10
11
  ListDatabasesResponse,
11
- PgsqlConfig, Row, SelectAllArgs,
12
+ PgsqlConfig, QueryField, Row, SelectAllArgs,
12
13
  } from './types';
13
14
  import {
14
15
  createSchemaQuery,
15
16
  getAddColumnsQuery,
16
17
  getCreateTableQuery,
17
- getDeleteRowsQuery,
18
18
  getDropSchemaQuery,
19
- getDropTableQuery, getEditRowQuery, getGenerateTableSchemaQuery,
19
+ getDropTableQuery, getGenerateTableSchemaQuery,
20
20
  getGetPrimaryKeysQuery,
21
- getInsertQueries,
22
- getListTablesQuery, getSelectAllCountQuery, getSelectAllQuery,
21
+ getListTablesQuery, getSelectAllCountQuery, getSelectAllQuery, splitPrimaryKeys,
23
22
  } from './utils';
24
23
 
25
24
 
26
25
  export class Pgsql extends Base {
27
- private isExternal?: boolean;
28
-
29
26
  constructor(params: PgsqlConfig) {
30
- const { token, discoveryUrl, accountId, pgsqlUrl, version = 'master', isExternal } = params;
27
+ const { token, discoveryUrl, accountId, pgsqlUrl, version = 'master' } = params;
31
28
  super({
32
29
  token,
33
30
  discoveryUrl,
@@ -36,7 +33,6 @@ export class Pgsql extends Base {
36
33
  serviceUrl: pgsqlUrl,
37
34
  feature: version,
38
35
  });
39
- this.isExternal = isExternal;
40
36
  }
41
37
 
42
38
  /**
@@ -56,7 +52,7 @@ export class Pgsql extends Base {
56
52
  (params.params as any).feature = this.feature;
57
53
  }
58
54
 
59
- return this.callApi<T>(params);
55
+ return this.callApiV2<T>(params);
60
56
  }
61
57
 
62
58
  makeApiUrl(data: MakeApiUrlData): string {
@@ -70,17 +66,19 @@ export class Pgsql extends Base {
70
66
  * ```typescript
71
67
  * const result = await pgsql.executeQuery({
72
68
  * query: 'select * from table',
73
- * database: 'db-name'
69
+ * database: 'db-name',
70
+ * isExternal: false,
71
+ * params: [],
74
72
  * });
75
73
  * ```
76
74
  */
77
- public async executeQuery<T>({ query, params, database }: ExecuteQueryArgs): Promise<ExecuteQueryResponse<T>> {
75
+ public async executeQuery<T>({ query, params, database, isExternal }: ExecuteQueryArgs): Promise<ExecuteQueryResponse<T>> {
78
76
  return this.makeRequest<ExecuteQueryResponse<T>>({
79
77
  data: {
80
78
  query,
81
79
  params,
82
80
  database,
83
- isExternal: this.isExternal,
81
+ isExternal,
84
82
  },
85
83
  method: 'POST',
86
84
  route: 'query',
@@ -92,6 +90,7 @@ export class Pgsql extends Base {
92
90
  * ```typescript
93
91
  * const databaseList = await pgsql.listDatabases();
94
92
  * ```
93
+ * @returns {Array} database names
95
94
  */
96
95
  public async listDatabases(): Promise<List<DatabaseItem>> {
97
96
  const { databases } = await this.makeRequest<ListDatabasesResponse>({
@@ -108,8 +107,8 @@ export class Pgsql extends Base {
108
107
  * const result = await pgsql.createDatabase({ database: 'db-name' });
109
108
  * ```
110
109
  */
111
- public async createDatabase({ database, externalCredentials }: CreateDatabaseParams): Promise<CreateDatabaseResponse> {
112
- return this.makeRequest<CreateDatabaseResponse>({
110
+ public async createDatabase({ database, externalCredentials }: CreateDatabaseParams): Promise<void> {
111
+ return this.makeRequest<void>({
113
112
  data: {
114
113
  database,
115
114
  externalCredentials,
@@ -127,18 +126,17 @@ export class Pgsql extends Base {
127
126
  * const result = await pgsql.getDatabaseInfo({ database: 'db-name' });
128
127
  * ```
129
128
  */
130
- // TODO: uncomment or replace route?
131
- // public async getDatabaseInfo({ database }: { database: string; }): Promise<unknown> {
132
- // return this.callApi<unknown>({
133
- // method: 'GET',
134
- // route: `databases/${encodeURIComponent(database)}`
135
- // })
136
- // }
129
+ public async getDatabaseInfo({ database }: { database: string; }): Promise<unknown> {
130
+ return this.callApiV2<unknown>({
131
+ method: 'GET',
132
+ route: `databases/${encodeURIComponent(database)}`,
133
+ });
134
+ }
137
135
 
138
136
  /**
139
137
  * Drop database
140
138
  * ```typescript
141
- * const result = await pgsql.dropDatabase({ database: 'db-name' });
139
+ * const result = await pgsql.dropDatabase({ database: 'db-name', isExternal: false });
142
140
  * ```
143
141
  */
144
142
  public async dropDatabase({ database, isExternal }: { database: string; isExternal?: boolean;}): Promise<DropDatabaseResponse> {
@@ -155,67 +153,74 @@ export class Pgsql extends Base {
155
153
  /**
156
154
  * List tables
157
155
  * ```typescript
158
- * const result = await pgsql.listTables({ database: 'db-name', schema: 'schema-name' });
156
+ * const result = await pgsql.listTables({ database: 'db-name', schema: 'schema-name', isExternal: false });
159
157
  * ```
160
158
  */
161
- public async listTables({ database, schema = 'public' }: { database: string; schema?: string; }): Promise<List<string>> {
159
+ public async listTables({ database, schema, isExternal }: { database: string; schema: string; isExternal: boolean; }): Promise<List<string>> {
162
160
  const { rows } = await this.executeQuery<{ table_name: string; }>({
163
161
  query: getListTablesQuery(schema),
164
162
  database,
163
+ isExternal,
165
164
  });
165
+
166
166
  return makeList<string>(rows.map(x => x.table_name));
167
167
  }
168
168
 
169
169
  /**
170
170
  * List schemas
171
171
  * ```typescript
172
- * const result = await pgsql.listSchemas({ database: 'db-name' });
172
+ * const result = await pgsql.listSchemas({ database: 'db-name', isExternal: false });
173
173
  * ```
174
174
  */
175
- public async listSchemas({ database }: { database: string; }): Promise<List<string>> {
175
+ public async listSchemas({ database, isExternal }: { database: string; isExternal: boolean; }): Promise<List<string>> {
176
176
  const { rows } = await this.executeQuery<{ schema_name: string; }>({
177
177
  query: LIST_SCHEMAS_QUERY,
178
178
  database,
179
+ isExternal,
179
180
  });
181
+
180
182
  return makeList<string>(rows.map(x => x.schema_name));
181
183
  }
182
184
 
183
185
  /**
184
186
  * Create schema
185
187
  * ```typescript
186
- * const result = await pgsql.createSchema({ database: 'db-name', schema: 'schema-name' });
188
+ * const result = await pgsql.createSchema({ database: 'db-name', schema: 'schema-name', isExternal: false });
187
189
  * ```
188
190
  */
189
- public async createSchema({ database, schema }: { database: string; schema: string; }): Promise<ExecuteQueryResponse<void>> {
191
+ public async createSchema({ database, schema, isExternal }: { database: string; schema: string; isExternal: boolean; }): Promise<ExecuteQueryResponse<void>> {
190
192
  return this.executeQuery<void>({
191
193
  query: createSchemaQuery(schema),
192
194
  database,
195
+ isExternal,
193
196
  });
194
197
  }
195
198
 
196
199
  /**
197
200
  * Drop schema
198
201
  * ```typescript
199
- * const result = await pgsql.dropSchema({ database: 'db-name', schema: 'schema-name' });
202
+ * const result = await pgsql.dropSchema({ database: 'db-name', schema: 'schema-name', isExternal: false });
200
203
  * ```
201
204
  */
202
- public async dropSchema({ database, schema }: { database: string; schema: string; }): Promise<ExecuteQueryResponse<void>> {
205
+ public async dropSchema({ database, schema, isExternal }: { database: string; schema: string; isExternal: boolean; }): Promise<ExecuteQueryResponse<void>> {
203
206
  return this.executeQuery<void>({
204
207
  query: getDropSchemaQuery(schema),
205
208
  database,
209
+ isExternal,
206
210
  });
207
211
  }
208
212
 
209
213
  /**
210
214
  * Drop table
211
215
  * ```typescript
212
- * const result = await pgsql.dropSchema({ database: 'db-name', schema: 'schema-name', table: 'table-name' });
216
+ * const result = await pgsql.dropSchema({ database: 'db-name', schema: 'schema-name', table: 'table-name', isExternal: false });
213
217
  * ```
214
218
  */
215
- public async dropTable({ database, schema, table }: { database: string; schema: string; table: string; }): Promise<ExecuteQueryResponse<void>> {
219
+ public async dropTable({ database, schema, table, isExternal }: { database: string; schema: string; table: string; isExternal: boolean; }): Promise<ExecuteQueryResponse<void>> {
216
220
  return this.executeQuery<void>({
217
221
  query: getDropTableQuery(schema, table),
218
222
  database,
223
+ isExternal,
219
224
  });
220
225
  }
221
226
 
@@ -230,14 +235,16 @@ export class Pgsql extends Base {
230
235
  * { name: 'col1', type: 'integer' },
231
236
  * { name: 'col2', type: 'text' }
232
237
  * ],
233
- * primaryKey: 'col1,col2'
238
+ * primaryKey: 'col1,col2',
239
+ * isExternal: false
234
240
  * });
235
241
  * ```
236
242
  */
237
- public async createTable({ database, schema, table, columns, primaryKey }: CreateTableArgs): Promise<ExecuteQueryResponse<void>> {
243
+ public async createTable({ database, schema, table, columns, primaryKey, isExternal }: CreateTableArgs): Promise<ExecuteQueryResponse<void>> {
238
244
  return this.executeQuery<void>({
239
245
  query: getCreateTableQuery(schema, table, columns, primaryKey),
240
246
  database,
247
+ isExternal,
241
248
  });
242
249
  }
243
250
 
@@ -252,13 +259,15 @@ export class Pgsql extends Base {
252
259
  * { name: 'col1', type: 'integer' },
253
260
  * { name: 'col2', type: 'text' }
254
261
  * ],
262
+ * isExternal: false
255
263
  * });
256
264
  * ```
257
265
  */
258
- public async addColumns({ database, schema, table, columns }: AddColumnsArgs): Promise<ExecuteQueryResponse<void>> {
266
+ public async addColumns({ database, schema, table, columns, isExternal }: AddColumnsArgs): Promise<ExecuteQueryResponse<void>> {
259
267
  return this.executeQuery<void>({
260
268
  query: getAddColumnsQuery(schema, table, columns),
261
269
  database,
270
+ isExternal,
262
271
  });
263
272
  }
264
273
 
@@ -273,52 +282,100 @@ export class Pgsql extends Base {
273
282
  * { col1: 'value' }
274
283
  * ],
275
284
  * chunkSize: 300,
276
- * context: { progress: 0 } // progress of insert will be set from 0 to 100
285
+ * context: { progress: 0 } // progress of insert will be set from 0 to 100,
286
+ * isExternal: false
277
287
  * });
278
288
  * ```
279
289
  */
280
- public async insert({ database, schema, table, rows, chunkSize = 300, context }: InsertArgs): Promise<ExecuteQueryResponse<void>[]> {
290
+ public async insert({ database, schema, table, rows, chunkSize = 300, context, isExternal }: InsertArgs): Promise<ExecuteQueryResponse<unknown>[]> {
291
+ let params: any[] = [];
292
+ const addParam = (val: any) => {params.push(val);return `$${params.length}`;};
281
293
  const res = [];
294
+ if (!_.isArray(rows)) rows = [rows];
295
+ const allKeys = {};
296
+ rows.forEach(x => Object.assign(allKeys, x));
297
+ const keys = Object.keys(allKeys);
298
+ const stringifyRow = (row: any) => `${keys.map(key => addParam(row[key])).join(', ')}`;
299
+
300
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
301
+ // @ts-ignore
302
+ for (const [index, chunk] of _.chunk(rows, chunkSize).entries()) {
303
+ params = [];
304
+ const query = `insert into ${schema}.${table} (${keys.join(', ')})
305
+ values (${chunk.map(stringifyRow).join('), (')});`;
306
+ res.push(await this.executeQuery({
307
+ query,
308
+ database,
309
+ isExternal,
310
+ params,
311
+ }));
312
+ if (context) context.progress = (index + 1) / (rows.length / chunkSize) * 100;
313
+ }
314
+
315
+ return res;
316
+ }
282
317
 
283
- const queries = getInsertQueries(schema, table, rows, chunkSize);
284
318
 
285
- for (const [index, query] of Array.from(queries.entries())) {
286
- res.push(await this.executeQuery<void>({
287
- query,
319
+ // TODO: add method description and example
320
+ public async getDatabaseRows({ database, schema, table, chunkSize = 1000, offset = 0, limit, isExternal, params }: GetTableDataProps): Promise<{ rows: List<Row>; fields: QueryField[]; }> {
321
+ let fields: QueryField[] = [];
322
+ let rows, result: Row[] = [];
323
+
324
+ // TODO: add order by primary key?
325
+ // const query = `select * from ${schema}.${table} order by int`;
326
+ const query = `select * from ${schema}.${table}`;
327
+
328
+ if (limit && limit < chunkSize) chunkSize = limit;
329
+
330
+ do {
331
+ ({ rows, fields } = await this.executeQuery<Row>({
332
+ query: getSelectAllQuery(query, offset, chunkSize),
288
333
  database,
334
+ isExternal,
335
+ params,
289
336
  }));
337
+ offset += chunkSize;
338
+ result = result.concat(rows);
290
339
 
291
- if (context) {
292
- context.progress = Math.min((index + 1) / (rows.length / Math.min(chunkSize, rows.length)), 1) * 100;
340
+ if (limit && result.length >= limit) {
341
+ result = result.slice(0, limit);
342
+ break;
293
343
  }
294
- }
344
+ } while (rows.length);
295
345
 
296
- return res;
346
+ return {
347
+ rows: makeList<Row>(result),
348
+ fields,
349
+ };
297
350
  }
298
351
 
352
+
299
353
  /**
300
354
  * Select all
301
355
  * ```typescript
302
356
  * const result = await pgsql.selectAll({
303
357
  * database: 'db-name',
304
- * query: 'select * from table', // must be select only, without limit and offset
358
+ * query: 'select * from table where id = $1', // must be select only, without limit and offset
305
359
  * chunkSize: 300,
306
360
  * offset: 0,
307
361
  * limit: 0,
308
362
  * context: { progress: 0, total: 0 } // progress of select will be set from 0 to 100
363
+ * isExternal: false,
364
+ * params: ['123']
309
365
  * });
310
366
  * ```
311
367
  */
312
- public async selectAll({ database, query, context, chunkSize = 1000, offset = 0, limit }: SelectAllArgs): Promise<List<Row>> {
368
+ public async selectAll({ database, query, context, chunkSize = 1000, offset = 0, limit, isExternal, params }: SelectAllArgs): Promise<List<Row>> {
313
369
  let count: number, rows, result: Row[] = [];
314
- if (limit && limit < chunkSize) {
315
- chunkSize = limit;
316
- }
370
+
371
+ if (limit && limit < chunkSize) chunkSize = limit;
317
372
 
318
373
  if (context) {
319
374
  const { rows } = await this.executeQuery<{ count: number; }>({
320
375
  query: getSelectAllCountQuery(query),
321
376
  database,
377
+ isExternal,
378
+ params,
322
379
  });
323
380
  count = rows[0].count;
324
381
  context.total = count;
@@ -328,12 +385,16 @@ export class Pgsql extends Base {
328
385
  ({ rows } = await this.executeQuery<Row>({
329
386
  query: getSelectAllQuery(query, offset, chunkSize),
330
387
  database,
388
+ isExternal,
389
+ params,
331
390
  }));
332
391
  offset += chunkSize;
333
392
  result = result.concat(rows);
393
+
334
394
  if (context) {
335
395
  context.progress = Math.min(offset / count! * 100, 100);
336
396
  }
397
+
337
398
  if (limit && result.length >= limit) {
338
399
  result = result.slice(0, limit);
339
400
  break;
@@ -346,13 +407,14 @@ export class Pgsql extends Base {
346
407
  /**
347
408
  * Get primary keys
348
409
  * ```typescript
349
- * const result = await pgsql.getPrimaryKeys({ database: 'db-name', schema: 'schema-name', table: 'table-name' });
410
+ * const result = await pgsql.getPrimaryKeys({ database: 'db-name', schema: 'schema-name', table: 'table-name', isExternal: false });
350
411
  * ```
351
412
  */
352
- public async getPrimaryKeys({ database, schema, table }: { database: string; schema: string; table: string; }): Promise<string> {
413
+ public async getPrimaryKeys({ database, schema, table, isExternal }: { database: string; schema: string; table: string; isExternal: boolean; }): Promise<string> {
353
414
  const { rows } = await this.executeQuery<{ pk: string; }>({
354
415
  database,
355
416
  query: getGetPrimaryKeysQuery(schema, table),
417
+ isExternal,
356
418
  });
357
419
  return rows[0].pk;
358
420
  }
@@ -368,13 +430,28 @@ export class Pgsql extends Base {
368
430
  * value: 'new_value',
369
431
  * row: { pk: 'pk_val', col1: 'old_value' },
370
432
  * primaryKeys: 'pk',
433
+ * isExternal: false
371
434
  * });
372
435
  * ```
373
436
  */
374
- public async editRow({ database, schema, table, key, value, row, primaryKeys }: EditRowArgs): Promise<ExecuteQueryResponse<void>> {
437
+ public async editRow({ database, schema, table, key, value, row, primaryKeys, isExternal }: EditRowArgs): Promise<ExecuteQueryResponse<void>> {
438
+ // TODO: maybe move query and params to utils and return both
439
+ const params: any[] = [];
440
+ const addParam = (val: any) => {
441
+ params.push(val);
442
+ return `$${params.length}`;
443
+ };
444
+
445
+ const pk = splitPrimaryKeys(primaryKeys);
446
+
447
+ // TODO: move query to utils
375
448
  return this.executeQuery({
376
449
  database,
377
- query: getEditRowQuery(schema, table, key, value, row, primaryKeys),
450
+ query: `update ${schema}.${table}
451
+ set ${key} = ${addParam(value)}
452
+ where ${pk.map(primaryKey => `${primaryKey} = ${addParam(row[primaryKey])}`).join(' AND ')}`,
453
+ isExternal,
454
+ params,
378
455
  });
379
456
  }
380
457
 
@@ -389,13 +466,27 @@ export class Pgsql extends Base {
389
466
  * { pk: 'pk_val', col1: 'value' }
390
467
  * ],
391
468
  * primaryKeys: 'pk',
469
+ * isExternal: false
392
470
  * });
393
471
  * ```
394
472
  */
395
- public async deleteRows({ database, schema, table, rows, primaryKeys }: DeleteRowsArgs): Promise<ExecuteQueryResponse<void>> {
473
+ public async deleteRows({ database, schema, table, rows, primaryKeys, isExternal }: DeleteRowsArgs): Promise<ExecuteQueryResponse<void>> {
474
+ const params: any[] = [];
475
+ const addParam = (val: any) => {
476
+ params.push(val);
477
+ return `$${params.length}`;
478
+ };
479
+
480
+ const pk = splitPrimaryKeys(primaryKeys);
481
+ // TODO: move query to util
482
+ const query = `delete from ${schema}.${table}
483
+ where (${rows.map(row => `${pk.map(primaryKey => `${primaryKey} = ${addParam(row[primaryKey])}`).join(' AND ')}`).join(') \nOR (')})`;
484
+
396
485
  return this.executeQuery({
397
486
  database,
398
- query: getDeleteRowsQuery(schema, table, rows, primaryKeys),
487
+ query,
488
+ isExternal,
489
+ params,
399
490
  });
400
491
  }
401
492
 
@@ -405,10 +496,11 @@ export class Pgsql extends Base {
405
496
  * const result = await pgsql.generateTableSchema({ database: 'db-name', schema: 'schema-name', table: 'table-name' });
406
497
  * ```
407
498
  */
408
- public async generateTableSchema({ database, schema, table }: { database: string; schema: string; table: string; }): Promise<string> {
499
+ public async generateTableSchema({ database, schema, table, isExternal }: { database: string; schema: string; table: string; isExternal: boolean; }): Promise<string> {
409
500
  const { rows } = await this.executeQuery<{ code: string; }>({
410
501
  database,
411
502
  query: getGenerateTableSchemaQuery(schema, table),
503
+ isExternal,
412
504
  });
413
505
 
414
506
  return rows[0].code;
package/src/types.ts CHANGED
@@ -25,11 +25,6 @@ export type PgsqlConfig = {
25
25
  * Api version
26
26
  */
27
27
  version?: string;
28
-
29
- /**
30
- * use external database
31
- */
32
- isExternal?: boolean;
33
28
  };
34
29
 
35
30
  export type QueryField = {
@@ -54,18 +49,9 @@ export type ExecuteQueryResponse<T> = {
54
49
 
55
50
  export type ExecuteQueryArgs = {
56
51
  query: string;
57
- params?: {
58
- [key: string]: unknown;
59
- };
52
+ params?: any[];
60
53
  database: string;
61
- };
62
-
63
- export type CreateDatabaseResponse = {
64
- ok: number;
65
- result: [
66
- unknown[],
67
- unknown[],
68
- ];
54
+ isExternal: boolean;
69
55
  };
70
56
 
71
57
  export type ListDatabasesResponseItem = {
@@ -87,7 +73,7 @@ export type GetDBSizeResult = {
87
73
 
88
74
  export type TableColumn = {
89
75
  name: string;
90
- type: number;
76
+ type: string;
91
77
  };
92
78
 
93
79
  export type CreateTableArgs = {
@@ -96,6 +82,7 @@ export type CreateTableArgs = {
96
82
  table: string;
97
83
  columns: TableColumn[];
98
84
  primaryKey: string;
85
+ isExternal: boolean;
99
86
  };
100
87
 
101
88
  export type AddColumnsArgs = {
@@ -103,6 +90,7 @@ export type AddColumnsArgs = {
103
90
  schema: string;
104
91
  table: string;
105
92
  columns: TableColumn[];
93
+ isExternal: boolean;
106
94
  };
107
95
 
108
96
  export type Row = {
@@ -118,9 +106,19 @@ export type InsertArgs = {
118
106
  context?: {
119
107
  progress?: number;
120
108
  };
109
+ isExternal: boolean;
121
110
  };
122
111
 
123
- export type EncodedValue = string | number | boolean;
112
+ export type GetTableDataProps = {
113
+ database: string;
114
+ schema: string;
115
+ table: string;
116
+ isExternal: boolean;
117
+ chunkSize?: number;
118
+ offset?: number;
119
+ limit?: number;
120
+ params?: any[];
121
+ };
124
122
 
125
123
  export type SelectAllArgs = {
126
124
  database: string;
@@ -132,6 +130,8 @@ export type SelectAllArgs = {
132
130
  chunkSize?: number;
133
131
  offset?: number;
134
132
  limit?: number;
133
+ isExternal: boolean;
134
+ params?: any[];
135
135
  };
136
136
 
137
137
  export type EditRowArgs = {
@@ -142,6 +142,7 @@ export type EditRowArgs = {
142
142
  value: unknown;
143
143
  row: Row;
144
144
  primaryKeys: string;
145
+ isExternal: boolean;
145
146
  };
146
147
 
147
148
  export type DeleteRowsArgs = {
@@ -150,6 +151,7 @@ export type DeleteRowsArgs = {
150
151
  table: string;
151
152
  rows: Row[];
152
153
  primaryKeys: string;
154
+ isExternal: boolean;
153
155
  };
154
156
 
155
157
  export type DatabaseItem = {
@@ -2,9 +2,6 @@
2
2
  * @internal
3
3
  */
4
4
 
5
- export { default as extractDatabaseNames } from './extractDatabaseNames';
6
- export { default as getInsertKeys } from './getInsertKeys';
7
- export { default as encodeValue } from './encodeValue';
8
5
  export { default as splitPrimaryKeys } from './splitPrimaryKeys';
9
6
  export { default as getListTablesQuery } from './getListTablesQuery';
10
7
  export { default as createSchemaQuery } from './createSchemaQuery';
@@ -12,10 +9,7 @@ export { default as getDropSchemaQuery } from './getDropSchemaQuery';
12
9
  export { default as getCreateTableQuery } from './getCreateTableQuery';
13
10
  export { default as getDropTableQuery } from './getDropTableQuery';
14
11
  export { default as getAddColumnsQuery } from './getAddColumnsQuery';
15
- export { default as getInsertQueries } from './getInsertQueries';
16
12
  export { default as getSelectAllCountQuery } from './getSelectAllCountQuery';
17
13
  export { default as getSelectAllQuery } from './getSelectAllQuery';
18
- export { default as getEditRowQuery } from './getEditRowQuery';
19
- export { default as getDeleteRowsQuery } from './getDeleteRowsQuery';
20
14
  export { default as getGenerateTableSchemaQuery } from './getGenerateTableSchemaQuery';
21
15
  export { default as getGetPrimaryKeysQuery } from './getGetPrimaryKeysQuery';
@@ -1,17 +0,0 @@
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
- var lodash_1 = __importDefault(require("lodash"));
7
- function encodeValue(value) {
8
- if (lodash_1.default.isUndefined(value) || value === '' || lodash_1.default.isNull(value))
9
- return 'NULL';
10
- if (lodash_1.default.isString(value))
11
- return "'".concat(value.replaceAll('\'', '\'\''), "'");
12
- if (lodash_1.default.isNumber(value) || lodash_1.default.isBoolean(value))
13
- return value;
14
- return "'".concat(JSON.stringify(value).replaceAll('\'', '\'\''), "'");
15
- }
16
- exports.default = encodeValue;
17
- //# sourceMappingURL=encodeValue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encodeValue.js","sourceRoot":"","sources":["../../../src/utils/encodeValue.ts"],"names":[],"mappings":";;;;;AACA,kDAAuB;AAEvB,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,gBAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,IAAI,gBAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3E,IAAI,gBAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,WAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAG,CAAC;IACpE,IAAI,gBAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,gBAAC,CAAC,SAAS,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1D,OAAO,WAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAG,CAAC;AAC/D,CAAC;AAED,kBAAe,WAAW,CAAC"}
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function extractDatabaseNames(databaseNameArr) {
4
- return databaseNameArr.map(function (_a) {
5
- var name = _a.name;
6
- return name;
7
- });
8
- }
9
- exports.default = extractDatabaseNames;
10
- //# sourceMappingURL=extractDatabaseNames.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extractDatabaseNames.js","sourceRoot":"","sources":["../../../src/utils/extractDatabaseNames.ts"],"names":[],"mappings":";;AAEA,SAAS,oBAAoB,CAAC,eAA4C;IACxE,OAAO,eAAe,CAAC,GAAG,CAAC,UAAC,EAAQ;YAAN,IAAI,UAAA;QAAO,OAAA,IAAI;IAAJ,CAAI,CAAC,CAAC;AACjD,CAAC;AAED,kBAAe,oBAAoB,CAAC"}
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var utils_1 = require("../utils");
4
- function getDeleteRowQuery(schema, table, rows, primaryKeys) {
5
- var pk = (0, utils_1.splitPrimaryKeys)(primaryKeys);
6
- return "delete from ".concat(schema, ".").concat(table, "\nwhere (").concat(rows.map(function (row) { return "".concat(pk.map(function (primaryKey) { return "".concat(primaryKey, " = ").concat((0, utils_1.encodeValue)(row[primaryKey])); }).join(' AND ')); }).join(') \nOR ('), ")");
7
- }
8
- exports.default = getDeleteRowQuery;
9
- //# sourceMappingURL=getDeleteRowsQuery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getDeleteRowsQuery.js","sourceRoot":"","sources":["../../../src/utils/getDeleteRowsQuery.ts"],"names":[],"mappings":";;AACA,kCAAyD;AAEzD,SAAS,iBAAiB,CAAC,MAAc,EAAE,KAAa,EAAE,IAAW,EAAE,WAAmB;IACxF,IAAM,EAAE,GAAG,IAAA,wBAAgB,EAAC,WAAW,CAAC,CAAC;IACzC,OAAO,sBAAe,MAAM,cAAI,KAAK,sBAC9B,IAAI,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,UAAG,EAAE,CAAC,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,UAAG,UAAU,gBAAM,IAAA,mBAAW,EAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAE,EAAjD,CAAiD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAE,EAA1F,CAA0F,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAG,CAAC;AACzI,CAAC;AAED,kBAAe,iBAAiB,CAAC"}
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var utils_1 = require("../utils");
4
- function getEditRowQuery(schema, table, key, value, row, primaryKeys) {
5
- value = (0, utils_1.encodeValue)(value);
6
- var pk = (0, utils_1.splitPrimaryKeys)(primaryKeys);
7
- return "update ".concat(schema, ".").concat(table, "\nset ").concat(key, " = ").concat(value, "\nwhere ").concat(pk.map(function (primaryKey) { return "".concat(primaryKey, " = ").concat((0, utils_1.encodeValue)(row[primaryKey])); }).join(' AND '));
8
- }
9
- exports.default = getEditRowQuery;
10
- //# sourceMappingURL=getEditRowQuery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getEditRowQuery.js","sourceRoot":"","sources":["../../../src/utils/getEditRowQuery.ts"],"names":[],"mappings":";;AAAA,kCAAyD;AAGzD,SAAS,eAAe,CAAC,MAAc,EAAE,KAAa,EAAE,GAAW,EAAE,KAAc,EAAE,GAAQ,EAAE,WAAmB;IAChH,KAAK,GAAG,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC;IAC3B,IAAM,EAAE,GAAG,IAAA,wBAAgB,EAAC,WAAW,CAAC,CAAC;IACzC,OAAO,iBAAU,MAAM,cAAI,KAAK,mBAC5B,GAAG,gBAAM,KAAK,qBACZ,EAAE,CAAC,GAAG,CAAC,UAAA,UAAU,IAAI,OAAA,UAAG,UAAU,gBAAM,IAAA,mBAAW,EAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAE,EAAjD,CAAiD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAE,CAAC;AAChG,CAAC;AAED,kBAAe,eAAe,CAAC"}
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- function getInsertKeys(rows) {
4
- var allKeys = {};
5
- rows.forEach(function (x) { return Object.assign(allKeys, x); });
6
- return Object.keys(allKeys);
7
- }
8
- exports.default = getInsertKeys;
9
- //# sourceMappingURL=getInsertKeys.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getInsertKeys.js","sourceRoot":"","sources":["../../../src/utils/getInsertKeys.ts"],"names":[],"mappings":";;AAEA,SAAS,aAAa,CAAC,IAAW;IAChC,IAAM,OAAO,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,EAAzB,CAAyB,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,kBAAe,aAAa,CAAC"}