@or-sdk/pgsql 0.22.5-244.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 (136) hide show
  1. package/dist/cjs/Pgsql.js +370 -0
  2. package/dist/cjs/Pgsql.js.map +1 -0
  3. package/dist/cjs/constants.js +6 -0
  4. package/dist/cjs/constants.js.map +1 -0
  5. package/dist/cjs/index.js +21 -0
  6. package/dist/cjs/index.js.map +1 -0
  7. package/dist/cjs/types.js +3 -0
  8. package/dist/cjs/types.js.map +1 -0
  9. package/dist/cjs/utils/createSchemaQuery.js +4 -0
  10. package/dist/cjs/utils/createSchemaQuery.js.map +1 -0
  11. package/dist/cjs/utils/encodeValue.js +17 -0
  12. package/dist/cjs/utils/encodeValue.js.map +1 -0
  13. package/dist/cjs/utils/extractDatabaseNames.js +10 -0
  14. package/dist/cjs/utils/extractDatabaseNames.js.map +1 -0
  15. package/dist/cjs/utils/getAddColumnsQuery.js +6 -0
  16. package/dist/cjs/utils/getAddColumnsQuery.js.map +1 -0
  17. package/dist/cjs/utils/getCreateTableQuery.js +6 -0
  18. package/dist/cjs/utils/getCreateTableQuery.js.map +1 -0
  19. package/dist/cjs/utils/getDeleteRowsQuery.js +9 -0
  20. package/dist/cjs/utils/getDeleteRowsQuery.js.map +1 -0
  21. package/dist/cjs/utils/getDropSchemaQuery.js +4 -0
  22. package/dist/cjs/utils/getDropSchemaQuery.js.map +1 -0
  23. package/dist/cjs/utils/getDropTableQuery.js +4 -0
  24. package/dist/cjs/utils/getDropTableQuery.js.map +1 -0
  25. package/dist/cjs/utils/getEditRowQuery.js +10 -0
  26. package/dist/cjs/utils/getEditRowQuery.js.map +1 -0
  27. package/dist/cjs/utils/getGenerateTableSchemaQuery.js +4 -0
  28. package/dist/cjs/utils/getGenerateTableSchemaQuery.js.map +1 -0
  29. package/dist/cjs/utils/getGetPrimaryKeysQuery.js +4 -0
  30. package/dist/cjs/utils/getGetPrimaryKeysQuery.js.map +1 -0
  31. package/dist/cjs/utils/getInsertKeys.js +9 -0
  32. package/dist/cjs/utils/getInsertKeys.js.map +1 -0
  33. package/dist/cjs/utils/getInsertQueries.js +18 -0
  34. package/dist/cjs/utils/getInsertQueries.js.map +1 -0
  35. package/dist/cjs/utils/getListTablesQuery.js +4 -0
  36. package/dist/cjs/utils/getListTablesQuery.js.map +1 -0
  37. package/dist/cjs/utils/getSelectAllCountQuery.js +4 -0
  38. package/dist/cjs/utils/getSelectAllCountQuery.js.map +1 -0
  39. package/dist/cjs/utils/getSelectAllQuery.js +4 -0
  40. package/dist/cjs/utils/getSelectAllQuery.js.map +1 -0
  41. package/dist/cjs/utils/index.js +41 -0
  42. package/dist/cjs/utils/index.js.map +1 -0
  43. package/dist/cjs/utils/splitPrimaryKeys.js +8 -0
  44. package/dist/cjs/utils/splitPrimaryKeys.js.map +1 -0
  45. package/dist/esm/Pgsql.js +218 -0
  46. package/dist/esm/Pgsql.js.map +1 -0
  47. package/dist/esm/constants.js +4 -0
  48. package/dist/esm/constants.js.map +1 -0
  49. package/dist/esm/index.js +3 -0
  50. package/dist/esm/index.js.map +1 -0
  51. package/dist/esm/types.js +2 -0
  52. package/dist/esm/types.js.map +1 -0
  53. package/dist/esm/utils/createSchemaQuery.js +2 -0
  54. package/dist/esm/utils/createSchemaQuery.js.map +1 -0
  55. package/dist/esm/utils/encodeValue.js +12 -0
  56. package/dist/esm/utils/encodeValue.js.map +1 -0
  57. package/dist/esm/utils/extractDatabaseNames.js +5 -0
  58. package/dist/esm/utils/extractDatabaseNames.js.map +1 -0
  59. package/dist/esm/utils/getAddColumnsQuery.js +2 -0
  60. package/dist/esm/utils/getAddColumnsQuery.js.map +1 -0
  61. package/dist/esm/utils/getCreateTableQuery.js +2 -0
  62. package/dist/esm/utils/getCreateTableQuery.js.map +1 -0
  63. package/dist/esm/utils/getDeleteRowsQuery.js +8 -0
  64. package/dist/esm/utils/getDeleteRowsQuery.js.map +1 -0
  65. package/dist/esm/utils/getDropSchemaQuery.js +2 -0
  66. package/dist/esm/utils/getDropSchemaQuery.js.map +1 -0
  67. package/dist/esm/utils/getDropTableQuery.js +2 -0
  68. package/dist/esm/utils/getDropTableQuery.js.map +1 -0
  69. package/dist/esm/utils/getEditRowQuery.js +10 -0
  70. package/dist/esm/utils/getEditRowQuery.js.map +1 -0
  71. package/dist/esm/utils/getGenerateTableSchemaQuery.js +18 -0
  72. package/dist/esm/utils/getGenerateTableSchemaQuery.js.map +1 -0
  73. package/dist/esm/utils/getGetPrimaryKeysQuery.js +9 -0
  74. package/dist/esm/utils/getGetPrimaryKeysQuery.js.map +1 -0
  75. package/dist/esm/utils/getInsertKeys.js +7 -0
  76. package/dist/esm/utils/getInsertKeys.js.map +1 -0
  77. package/dist/esm/utils/getInsertQueries.js +14 -0
  78. package/dist/esm/utils/getInsertQueries.js.map +1 -0
  79. package/dist/esm/utils/getListTablesQuery.js +4 -0
  80. package/dist/esm/utils/getListTablesQuery.js.map +1 -0
  81. package/dist/esm/utils/getSelectAllCountQuery.js +2 -0
  82. package/dist/esm/utils/getSelectAllCountQuery.js.map +1 -0
  83. package/dist/esm/utils/getSelectAllQuery.js +2 -0
  84. package/dist/esm/utils/getSelectAllQuery.js.map +1 -0
  85. package/dist/esm/utils/index.js +18 -0
  86. package/dist/esm/utils/index.js.map +1 -0
  87. package/dist/esm/utils/splitPrimaryKeys.js +3 -0
  88. package/dist/esm/utils/splitPrimaryKeys.js.map +1 -0
  89. package/dist/types/Pgsql.d.ts +51 -0
  90. package/dist/types/constants.d.ts +2 -0
  91. package/dist/types/index.d.ts +2 -0
  92. package/dist/types/types.d.ts +110 -0
  93. package/dist/types/utils/createSchemaQuery.d.ts +2 -0
  94. package/dist/types/utils/encodeValue.d.ts +3 -0
  95. package/dist/types/utils/extractDatabaseNames.d.ts +3 -0
  96. package/dist/types/utils/getAddColumnsQuery.d.ts +3 -0
  97. package/dist/types/utils/getCreateTableQuery.d.ts +3 -0
  98. package/dist/types/utils/getDeleteRowsQuery.d.ts +3 -0
  99. package/dist/types/utils/getDropSchemaQuery.d.ts +2 -0
  100. package/dist/types/utils/getDropTableQuery.d.ts +2 -0
  101. package/dist/types/utils/getEditRowQuery.d.ts +3 -0
  102. package/dist/types/utils/getGenerateTableSchemaQuery.d.ts +2 -0
  103. package/dist/types/utils/getGetPrimaryKeysQuery.d.ts +2 -0
  104. package/dist/types/utils/getInsertKeys.d.ts +3 -0
  105. package/dist/types/utils/getInsertQueries.d.ts +3 -0
  106. package/dist/types/utils/getListTablesQuery.d.ts +2 -0
  107. package/dist/types/utils/getSelectAllCountQuery.d.ts +2 -0
  108. package/dist/types/utils/getSelectAllQuery.d.ts +2 -0
  109. package/dist/types/utils/index.d.ts +17 -0
  110. package/dist/types/utils/splitPrimaryKeys.d.ts +2 -0
  111. package/package.json +30 -0
  112. package/src/Pgsql.ts +405 -0
  113. package/src/constants.ts +4 -0
  114. package/src/index.ts +2 -0
  115. package/src/types.ts +143 -0
  116. package/src/utils/createSchemaQuery.ts +1 -0
  117. package/src/utils/encodeValue.ts +11 -0
  118. package/src/utils/extractDatabaseNames.ts +7 -0
  119. package/src/utils/getAddColumnsQuery.ts +4 -0
  120. package/src/utils/getCreateTableQuery.ts +4 -0
  121. package/src/utils/getDeleteRowsQuery.ts +10 -0
  122. package/src/utils/getDropSchemaQuery.ts +1 -0
  123. package/src/utils/getDropTableQuery.ts +1 -0
  124. package/src/utils/getEditRowQuery.ts +12 -0
  125. package/src/utils/getGenerateTableSchemaQuery.ts +17 -0
  126. package/src/utils/getGetPrimaryKeysQuery.ts +8 -0
  127. package/src/utils/getInsertKeys.ts +9 -0
  128. package/src/utils/getInsertQueries.ts +18 -0
  129. package/src/utils/getListTablesQuery.ts +3 -0
  130. package/src/utils/getSelectAllCountQuery.ts +1 -0
  131. package/src/utils/getSelectAllQuery.ts +1 -0
  132. package/src/utils/index.ts +21 -0
  133. package/src/utils/splitPrimaryKeys.ts +3 -0
  134. package/tsconfig.esm.json +9 -0
  135. package/tsconfig.json +7 -0
  136. package/tsconfig.types.json +9 -0
@@ -0,0 +1,110 @@
1
+ import { Token } from '@or-sdk/base';
2
+ export declare type PgsqlConfig = {
3
+ token: Token;
4
+ discoveryUrl?: string;
5
+ accountId?: string;
6
+ pgsqlUrl?: string;
7
+ };
8
+ export declare type QueryField = {
9
+ name: string;
10
+ tableID: number;
11
+ columnID: number;
12
+ dataTypeID: number;
13
+ dataTypeSize: number;
14
+ dataTypeModifier: number;
15
+ format: string;
16
+ };
17
+ export declare type ExecuteQueryResponse<T> = {
18
+ command: string;
19
+ rowCount: null | number;
20
+ oid: null | number;
21
+ rows: T[];
22
+ fields: QueryField[];
23
+ RowCtor: null | unknown;
24
+ rowAsArray: boolean;
25
+ };
26
+ export declare type ExecuteQueryArgs = {
27
+ query: string;
28
+ params?: {
29
+ [key: string]: unknown;
30
+ };
31
+ database: string;
32
+ };
33
+ export declare type CreateDatabaseResponse = {
34
+ ok: number;
35
+ result: [
36
+ unknown[],
37
+ unknown[]
38
+ ];
39
+ };
40
+ export declare type ListDatabasesResponseItem = {
41
+ name: string;
42
+ };
43
+ export declare type ListDatabasesResponse = {
44
+ databases: ListDatabasesResponseItem[];
45
+ };
46
+ export declare type DropDatabaseResponse = {
47
+ ok?: number;
48
+ };
49
+ export declare type GetDBSizeResult = {
50
+ usedSize: number;
51
+ sizeLimit: string | number;
52
+ };
53
+ export declare type TableColumn = {
54
+ name: string;
55
+ type: number;
56
+ };
57
+ export declare type CreateTableArgs = {
58
+ database: string;
59
+ schema: string;
60
+ table: string;
61
+ columns: TableColumn[];
62
+ primaryKey: string;
63
+ };
64
+ export declare type AddColumnsArgs = {
65
+ database: string;
66
+ schema: string;
67
+ table: string;
68
+ columns: TableColumn[];
69
+ };
70
+ export declare type Row = {
71
+ [key: string]: unknown;
72
+ };
73
+ export declare type InsertArgs = {
74
+ database: string;
75
+ schema: string;
76
+ table: string;
77
+ rows: Row[];
78
+ chunkSize: number;
79
+ context?: {
80
+ progress?: number;
81
+ };
82
+ };
83
+ export declare type EncodedValue = string | number | boolean;
84
+ export declare type SelectAllArgs = {
85
+ database: string;
86
+ query: string;
87
+ context?: {
88
+ progress?: number;
89
+ total?: number;
90
+ };
91
+ chunkSize?: number;
92
+ offset?: number;
93
+ limit?: number;
94
+ };
95
+ export declare type EditRowArgs = {
96
+ database: string;
97
+ schema: string;
98
+ table: string;
99
+ key: string;
100
+ value: unknown;
101
+ row: Row;
102
+ primaryKeys: string;
103
+ };
104
+ export declare type DeleteRowsArgs = {
105
+ database: string;
106
+ schema: string;
107
+ table: string;
108
+ rows: Row[];
109
+ primaryKeys: string;
110
+ };
@@ -0,0 +1,2 @@
1
+ declare const _default: (schema: string) => string;
2
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { EncodedValue } from '../types';
2
+ declare function encodeValue(value: unknown): EncodedValue;
3
+ export default encodeValue;
@@ -0,0 +1,3 @@
1
+ import { ListDatabasesResponseItem } from '../types';
2
+ declare function extractDatabaseNames(databaseNameArr: ListDatabasesResponseItem[]): string[];
3
+ export default extractDatabaseNames;
@@ -0,0 +1,3 @@
1
+ import { TableColumn } from '../types';
2
+ declare const _default: (schema: string, table: string, columns: TableColumn[]) => string;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { TableColumn } from '../types';
2
+ declare const _default: (schema: string, table: string, columns: TableColumn[], primaryKey: string) => string;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { Row } from '../types';
2
+ declare function getDeleteRowQuery(schema: string, table: string, rows: Row[], primaryKeys: string): string;
3
+ export default getDeleteRowQuery;
@@ -0,0 +1,2 @@
1
+ declare const _default: (schema: string) => string;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: (schema: string, table: string) => string;
2
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { Row } from '../types';
2
+ declare function getEditRowQuery(schema: string, table: string, key: string, value: unknown, row: Row, primaryKeys: string): string;
3
+ export default getEditRowQuery;
@@ -0,0 +1,2 @@
1
+ declare const _default: (schema: string, table: string) => string;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: (schema: string, table: string) => string;
2
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { Row } from '../types';
2
+ declare function getInsertKeys(rows: Row[]): string[];
3
+ export default getInsertKeys;
@@ -0,0 +1,3 @@
1
+ import { Row } from '../types';
2
+ declare function getInsertQueries(schema: string, table: string, insertRows: Row[], chunkSize: number): string[];
3
+ export default getInsertQueries;
@@ -0,0 +1,2 @@
1
+ declare const _default: (schema: string) => string;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: (query: string) => string;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: (query: string, offset: number, chunkSize: number) => string;
2
+ export default _default;
@@ -0,0 +1,17 @@
1
+ export { default as extractDatabaseNames } from './extractDatabaseNames';
2
+ export { default as getInsertKeys } from './getInsertKeys';
3
+ export { default as encodeValue } from './encodeValue';
4
+ export { default as splitPrimaryKeys } from './splitPrimaryKeys';
5
+ export { default as getListTablesQuery } from './getListTablesQuery';
6
+ export { default as createSchemaQuery } from './createSchemaQuery';
7
+ export { default as getDropSchemaQuery } from './getDropSchemaQuery';
8
+ export { default as getCreateTableQuery } from './getCreateTableQuery';
9
+ export { default as getDropTableQuery } from './getDropTableQuery';
10
+ export { default as getAddColumnsQuery } from './getAddColumnsQuery';
11
+ export { default as getInsertQueries } from './getInsertQueries';
12
+ export { default as getSelectAllCountQuery } from './getSelectAllCountQuery';
13
+ export { default as getSelectAllQuery } from './getSelectAllQuery';
14
+ export { default as getEditRowQuery } from './getEditRowQuery';
15
+ export { default as getDeleteRowsQuery } from './getDeleteRowsQuery';
16
+ export { default as getGenerateTableSchemaQuery } from './getGenerateTableSchemaQuery';
17
+ export { default as getGetPrimaryKeysQuery } from './getGetPrimaryKeysQuery';
@@ -0,0 +1,2 @@
1
+ declare const _default: (primaryKeys: string) => string[];
2
+ export default _default;
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "version": "0.22.5-244.0",
3
+ "name": "@or-sdk/pgsql",
4
+ "main": "dist/cjs/index.js",
5
+ "module": "dist/esm/index.js",
6
+ "types": "dist/types/index.d.ts",
7
+ "scripts": {
8
+ "build": "npm run clean && concurrently \"npm run build:cjs\" \"npm run build:esm\" \"npm run build:types\"",
9
+ "build:watch": "concurrently -r --hide 1,2 \"npm run build:watch:cjs\" \"npm run build:watch:esm\" \"npm run build:watch:types\"",
10
+ "build:cjs": "tsc --project tsconfig.json",
11
+ "build:watch:cjs": "tsc --project tsconfig.json -w",
12
+ "build:esm": "tsc --project tsconfig.esm.json",
13
+ "build:watch:esm": "tsc --project tsconfig.esm.json -w",
14
+ "build:types": "tsc --project tsconfig.types.json",
15
+ "build:watch:types": "tsc --project tsconfig.types.json -w",
16
+ "clean": "rm -rf ./dist"
17
+ },
18
+ "devDependencies": {
19
+ "@types/lodash": "^4.14.176",
20
+ "concurrently": "^6.4.0",
21
+ "typescript": "^4.4.4"
22
+ },
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "dependencies": {
27
+ "@or-sdk/base": "^0.22.4",
28
+ "lodash": "^4.17.21"
29
+ }
30
+ }
package/src/Pgsql.ts ADDED
@@ -0,0 +1,405 @@
1
+ import { Base, ServiceDiscoveryResponse, List, makeList } from '@or-sdk/base';
2
+ import {
3
+ AddColumnsArgs,
4
+ CreateDatabaseResponse, CreateTableArgs, DeleteRowsArgs, DropDatabaseResponse, EditRowArgs,
5
+ ExecuteQueryArgs, ExecuteQueryResponse, GetDBSizeResult, InsertArgs,
6
+ ListDatabasesResponse,
7
+ PgsqlConfig, Row, SelectAllArgs,
8
+ } from './types';
9
+ import { LIST_SCHEMAS_QUERY, SERVICE_KEY } from './constants';
10
+ import {
11
+ extractDatabaseNames, getAddColumnsQuery,
12
+ getCreateTableQuery,
13
+ getDropSchemaQuery,
14
+ getDropTableQuery, getEditRowQuery, getGenerateTableSchemaQuery, getInsertQueries,
15
+ getListTablesQuery, getSelectAllCountQuery, getSelectAllQuery,
16
+ getDeleteRowsQuery, createSchemaQuery, getGetPrimaryKeysQuery,
17
+ } from './utils';
18
+
19
+ /**
20
+ * OneReach Pgsql service client
21
+ * ## Installation:
22
+ * ```
23
+ * $ npm i @or-sdk/pgsql
24
+ * ```
25
+ */
26
+ export class Pgsql extends Base {
27
+ /**
28
+ * ```typescript
29
+ * import { Pgsql } from '@or-sdk/pgsql'
30
+ * const pgsql = new Pgsql({token: 'my-account-token-string', discoveryUrl: 'http://example.pgsql/endpoint'});
31
+ * ```
32
+ */
33
+ constructor(params: PgsqlConfig) {
34
+ const { token, discoveryUrl, accountId, pgsqlUrl } = params;
35
+
36
+ super({
37
+ token,
38
+ discoveryUrl,
39
+ serviceKey: SERVICE_KEY,
40
+ accountId,
41
+ serviceUrl: pgsqlUrl,
42
+ });
43
+ }
44
+
45
+ makeApiUrl(data: ServiceDiscoveryResponse): string {
46
+ return this.isCrossAccount
47
+ ? `${data.url}/${this.targetAccountId}`
48
+ : `${data.url}/current`;
49
+ }
50
+
51
+ /**
52
+ * Execute query
53
+ * ```typescript
54
+ * const result = await pgsql.executeQuery({
55
+ * query: 'select * from table',
56
+ * database: 'db-name'
57
+ * });
58
+ * ```
59
+ */
60
+ public async executeQuery<T>({ query, params, database }: ExecuteQueryArgs): Promise<ExecuteQueryResponse<T>> {
61
+ return this.callApi<ExecuteQueryResponse<T>>({
62
+ data: {
63
+ query,
64
+ params,
65
+ database,
66
+ },
67
+ method: 'POST',
68
+ route: 'query',
69
+ });
70
+ }
71
+
72
+ /**
73
+ * List databases
74
+ * ```typescript
75
+ * const databaseList = await pgsql.listDatabases();
76
+ * ```
77
+ */
78
+ public async listDatabases(): Promise<List<string>> {
79
+ const { databases } = await this.callApi<ListDatabasesResponse>({
80
+ method: 'GET',
81
+ route: 'databases',
82
+ });
83
+
84
+ return makeList<string>(extractDatabaseNames(databases));
85
+ }
86
+
87
+ /**
88
+ * Create database
89
+ * ```typescript
90
+ * const result = await pgsql.createDatabase({ database: 'db-name' });
91
+ * ```
92
+ */
93
+ public async createDatabase({ database }: { database: string; }): Promise<CreateDatabaseResponse> {
94
+ return this.callApi<CreateDatabaseResponse>({
95
+ data: { database },
96
+ method: 'PUT',
97
+ route: 'databases',
98
+ });
99
+ }
100
+
101
+ /**
102
+ * Get database info
103
+ *
104
+ * @deprecated route not available
105
+ * ```typescript
106
+ * const result = await pgsql.getDatabaseInfo({ database: 'db-name' });
107
+ * ```
108
+ */
109
+ // TODO: uncomment or replace route?
110
+ // public async getDatabaseInfo({ database }: { database: string; }): Promise<unknown> {
111
+ // return this.callApi<unknown>({
112
+ // method: 'GET',
113
+ // route: `databases/${encodeURIComponent(database)}`
114
+ // })
115
+ // }
116
+
117
+ /**
118
+ * Drop database
119
+ * ```typescript
120
+ * const result = await pgsql.dropDatabase({ database: 'db-name' });
121
+ * ```
122
+ */
123
+ public async dropDatabase({ database }: { database: string; }): Promise<DropDatabaseResponse> {
124
+ return this.callApi<DropDatabaseResponse>({
125
+ data: { database },
126
+ method: 'DELETE',
127
+ route: 'databases',
128
+ });
129
+ }
130
+
131
+ /**
132
+ * List tables
133
+ * ```typescript
134
+ * const result = await pgsql.listTables({ database: 'db-name', schema: 'schema-name' });
135
+ * ```
136
+ */
137
+ public async listTables({ database, schema = 'public' }: { database: string; schema?: string; }): Promise<List<string>> {
138
+ const { rows } = await this.executeQuery<{ table_name: string; }>({
139
+ query: getListTablesQuery(schema),
140
+ database,
141
+ });
142
+ return makeList<string>(rows.map(x => x.table_name));
143
+ }
144
+
145
+ /**
146
+ * List schemas
147
+ * ```typescript
148
+ * const result = await pgsql.listSchemas({ database: 'db-name' });
149
+ * ```
150
+ */
151
+ public async listSchemas({ database }: { database: string; }): Promise<List<string>> {
152
+ const { rows } = await this.executeQuery<{ schema_name: string; }>({
153
+ query: LIST_SCHEMAS_QUERY,
154
+ database,
155
+ });
156
+ return makeList<string>(rows.map(x => x.schema_name));
157
+ }
158
+
159
+ /**
160
+ * Create schema
161
+ * ```typescript
162
+ * const result = await pgsql.createSchema({ database: 'db-name', schema: 'schema-name' });
163
+ * ```
164
+ */
165
+ public async createSchema({ database, schema }: { database: string; schema: string; }): Promise<ExecuteQueryResponse<void>> {
166
+ return this.executeQuery<void>({
167
+ query: createSchemaQuery(schema),
168
+ database,
169
+ });
170
+ }
171
+
172
+ /**
173
+ * Drop schema
174
+ * ```typescript
175
+ * const result = await pgsql.dropSchema({ database: 'db-name', schema: 'schema-name' });
176
+ * ```
177
+ */
178
+ public async dropSchema({ database, schema }: { database: string; schema: string; }): Promise<ExecuteQueryResponse<void>> {
179
+ return this.executeQuery<void>({
180
+ query: getDropSchemaQuery(schema),
181
+ database,
182
+ });
183
+ }
184
+
185
+ /**
186
+ * Drop table
187
+ * ```typescript
188
+ * const result = await pgsql.dropSchema({ database: 'db-name', schema: 'schema-name', table: 'table-name' });
189
+ * ```
190
+ */
191
+ public async dropTable({ database, schema, table }: { database: string; schema: string; table: string; }): Promise<ExecuteQueryResponse<void>> {
192
+ return this.executeQuery<void>({
193
+ query: getDropTableQuery(schema, table),
194
+ database,
195
+ });
196
+ }
197
+
198
+ /**
199
+ * Create table
200
+ * ```typescript
201
+ * const result = await pgsql.createTable({
202
+ * database: 'db-name',
203
+ * schema: 'schema-name',
204
+ * table: 'table-name',
205
+ * columns: [
206
+ * { name: 'col1', type: 'integer' },
207
+ * { name: 'col2', type: 'text' }
208
+ * ],
209
+ * primaryKey: 'col1,col2'
210
+ * });
211
+ * ```
212
+ */
213
+ public async createTable({ database, schema, table, columns, primaryKey }: CreateTableArgs): Promise<ExecuteQueryResponse<void>> {
214
+ return this.executeQuery<void>({
215
+ query: getCreateTableQuery(schema, table, columns, primaryKey),
216
+ database,
217
+ });
218
+ }
219
+
220
+ /**
221
+ * Drop database
222
+ * ```typescript
223
+ * const result = await pgsql.addColumns({
224
+ * database: 'db-name',
225
+ * schema: 'schema-name',
226
+ * table: 'table-name',
227
+ * columns: [
228
+ * { name: 'col1', type: 'integer' },
229
+ * { name: 'col2', type: 'text' }
230
+ * ],
231
+ * });
232
+ * ```
233
+ */
234
+ public async addColumns({ database, schema, table, columns }: AddColumnsArgs): Promise<ExecuteQueryResponse<void>> {
235
+ return this.executeQuery<void>({
236
+ query: getAddColumnsQuery(schema, table, columns),
237
+ database,
238
+ });
239
+ }
240
+
241
+ /**
242
+ * Insert
243
+ * ```typescript
244
+ * const result = await pgsql.insert({
245
+ * database: 'db-name',
246
+ * schema: 'schema-name',
247
+ * table: 'table-name',
248
+ * rows: [
249
+ * { col1: 'value' }
250
+ * ],
251
+ * chunkSize: 300,
252
+ * context: { progress: 0 } // progress of insert will be set from 0 to 100
253
+ * });
254
+ * ```
255
+ */
256
+ public async insert({ database, schema, table, rows, chunkSize = 300, context }: InsertArgs): Promise<ExecuteQueryResponse<void>[]> {
257
+ const res = [];
258
+
259
+ const queries = getInsertQueries(schema, table, rows, chunkSize);
260
+
261
+ for (const [index, query] of Array.from(queries.entries())) {
262
+ res.push(await this.executeQuery<void>({
263
+ query,
264
+ database,
265
+ }));
266
+
267
+ if (context) {
268
+ context.progress = Math.min((index + 1) / (rows.length / Math.min(chunkSize, rows.length)), 1) * 100;
269
+ }
270
+ }
271
+
272
+ return res;
273
+ }
274
+
275
+ /**
276
+ * Select all
277
+ * ```typescript
278
+ * const result = await pgsql.selectAll({
279
+ * database: 'db-name',
280
+ * query: 'select * from table', // must be select only, without limit and offset
281
+ * chunkSize: 300,
282
+ * offset: 0,
283
+ * limit: 0,
284
+ * context: { progress: 0, total: 0 } // progress of select will be set from 0 to 100
285
+ * });
286
+ * ```
287
+ */
288
+ public async selectAll({ database, query, context, chunkSize = 1000, offset = 0, limit }: SelectAllArgs): Promise<List<Row>> {
289
+ let count: number, rows, result: Row[] = [];
290
+ if (limit && limit < chunkSize) {
291
+ chunkSize = limit;
292
+ }
293
+
294
+ if (context) {
295
+ const { rows } = await this.executeQuery<{ count: number; }>({
296
+ query: getSelectAllCountQuery(query),
297
+ database,
298
+ });
299
+ count = rows[0].count;
300
+ context.total = count;
301
+ }
302
+
303
+ do {
304
+ ({ rows } = await this.executeQuery<Row>({
305
+ query: getSelectAllQuery(query, offset, chunkSize),
306
+ database,
307
+ }));
308
+ offset += chunkSize;
309
+ result = result.concat(rows);
310
+ if (context) {
311
+ context.progress = Math.min(offset / count! * 100, 100);
312
+ }
313
+ if (limit && result.length >= limit) {
314
+ result = result.slice(0, limit);
315
+ break;
316
+ }
317
+ } while (rows.length);
318
+
319
+ return makeList<Row>(result);
320
+ }
321
+
322
+ /**
323
+ * Get primary keys
324
+ * ```typescript
325
+ * const result = await pgsql.getPrimaryKeys({ database: 'db-name', schema: 'schema-name', table: 'table-name' });
326
+ * ```
327
+ */
328
+ public async getPrimaryKeys({ database, schema, table }: { database: string; schema: string; table: string; }): Promise<string> {
329
+ const { rows } = await this.executeQuery<{ pk: string; }>({
330
+ database,
331
+ query: getGetPrimaryKeysQuery(schema, table),
332
+ });
333
+ return rows[0].pk;
334
+ }
335
+
336
+ /**
337
+ * Edit row
338
+ * ```typescript
339
+ * const result = await pgsql.editRow({
340
+ * database: 'db-name',
341
+ * schema: 'schema-name',
342
+ * table: 'table-name',
343
+ * key: 'col1',
344
+ * value: 'new_value',
345
+ * row: { pk: 'pk_val', col1: 'old_value' },
346
+ * primaryKeys: 'pk',
347
+ * });
348
+ * ```
349
+ */
350
+ public async editRow({ database, schema, table, key, value, row, primaryKeys }: EditRowArgs): Promise<ExecuteQueryResponse<void>> {
351
+ return this.executeQuery({
352
+ database,
353
+ query: getEditRowQuery(schema, table, key, value, row, primaryKeys),
354
+ });
355
+ }
356
+
357
+ /**
358
+ * Delete rows
359
+ * ```typescript
360
+ * const result = await pgsql.deleteRows({
361
+ * database: 'db-name',
362
+ * schema: 'schema-name',
363
+ * table: 'table-name',
364
+ * rows: [
365
+ * { pk: 'pk_val', col1: 'value' }
366
+ * ],
367
+ * primaryKeys: 'pk',
368
+ * });
369
+ * ```
370
+ */
371
+ public async deleteRows({ database, schema, table, rows, primaryKeys }: DeleteRowsArgs): Promise<ExecuteQueryResponse<void>> {
372
+ return this.executeQuery({
373
+ database,
374
+ query: getDeleteRowsQuery(schema, table, rows, primaryKeys),
375
+ });
376
+ }
377
+
378
+ /**
379
+ * Generate create table query for existing table
380
+ * ```typescript
381
+ * const result = await pgsql.generateTableSchema({ database: 'db-name', schema: 'schema-name', table: 'table-name' });
382
+ * ```
383
+ */
384
+ public async generateTableSchema({ database, schema, table }: { database: string; schema: string; table: string; }): Promise<string> {
385
+ const { rows } = await this.executeQuery<{ code: string; }>({
386
+ database,
387
+ query: getGenerateTableSchemaQuery(schema, table),
388
+ });
389
+
390
+ return rows[0].code;
391
+ }
392
+
393
+ /**
394
+ * Get database size
395
+ * ```typescript
396
+ * const result = await pgsql.getDBSize();
397
+ * ```
398
+ */
399
+ public async getDBSize(): Promise<GetDBSizeResult> {
400
+ return await this.callApi<GetDBSizeResult>({
401
+ method: 'GET',
402
+ route: 'size',
403
+ });
404
+ }
405
+ }
@@ -0,0 +1,4 @@
1
+ export const SERVICE_KEY = 'pgsql';
2
+
3
+ export const LIST_SCHEMAS_QUERY = `SELECT schema_name FROM information_schema.schemata
4
+ where schema_name not in ('pg_catalog', 'information_schema')`;
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { Pgsql } from './Pgsql';
2
+ export * from './types';