@quillsql/node 0.6.8 → 0.6.10

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 (150) hide show
  1. package/dist/{assets → cjs/assets}/pgtypes.js +1 -0
  2. package/dist/cjs/assets/pgtypes.js.map +1 -0
  3. package/dist/{clients → cjs/clients}/QuillServerClient.js +1 -0
  4. package/dist/cjs/clients/QuillServerClient.js.map +1 -0
  5. package/dist/{db → cjs/db}/BigQuery.js +1 -0
  6. package/dist/cjs/db/BigQuery.js.map +1 -0
  7. package/dist/{db → cjs/db}/CachedConnection.d.ts +1 -1
  8. package/dist/{db → cjs/db}/CachedConnection.js +2 -0
  9. package/dist/cjs/db/CachedConnection.js.map +1 -0
  10. package/dist/{db → cjs/db}/DatabaseHelper.js +1 -0
  11. package/dist/cjs/db/DatabaseHelper.js.map +1 -0
  12. package/dist/{db → cjs/db}/Mysql.js +1 -0
  13. package/dist/cjs/db/Mysql.js.map +1 -0
  14. package/dist/{db → cjs/db}/Postgres.js +5 -0
  15. package/dist/cjs/db/Postgres.js.map +1 -0
  16. package/dist/{db → cjs/db}/Snowflake.js +1 -0
  17. package/dist/cjs/db/Snowflake.js.map +1 -0
  18. package/dist/{index.ispec.js → cjs/index.ispec.js} +1 -0
  19. package/dist/cjs/index.ispec.js.map +1 -0
  20. package/dist/{index.js → cjs/index.js} +4 -1
  21. package/dist/cjs/index.js.map +1 -0
  22. package/dist/{index.uspec.js → cjs/index.uspec.js} +1 -0
  23. package/dist/cjs/index.uspec.js.map +1 -0
  24. package/dist/{models → cjs/models}/Cache.js +1 -0
  25. package/dist/cjs/models/Cache.js.map +1 -0
  26. package/dist/{models → cjs/models}/Client.js +1 -0
  27. package/dist/cjs/models/Client.js.map +1 -0
  28. package/dist/{models → cjs/models}/Database.js +1 -0
  29. package/dist/cjs/models/Database.js.map +1 -0
  30. package/dist/cjs/models/Filters.d.ts +83 -0
  31. package/dist/cjs/models/Filters.js +178 -0
  32. package/dist/cjs/models/Filters.js.map +1 -0
  33. package/dist/{models → cjs/models}/Formats.js +1 -0
  34. package/dist/cjs/models/Formats.js.map +1 -0
  35. package/dist/{models → cjs/models}/Quill.d.ts +12 -7
  36. package/dist/{models → cjs/models}/Quill.js +1 -0
  37. package/dist/cjs/models/Quill.js.map +1 -0
  38. package/dist/{utils → cjs/utils}/Error.js +1 -0
  39. package/dist/cjs/utils/Error.js.map +1 -0
  40. package/dist/{utils → cjs/utils}/RunQueryProcesses.js +1 -0
  41. package/dist/cjs/utils/RunQueryProcesses.js.map +1 -0
  42. package/dist/{utils → cjs/utils}/schemaConversion.js +1 -0
  43. package/dist/cjs/utils/schemaConversion.js.map +1 -0
  44. package/dist/{utils → cjs/utils}/textProcessing.js +1 -0
  45. package/dist/cjs/utils/textProcessing.js.map +1 -0
  46. package/dist/esm/assets/pgtypes.d.ts +4 -0
  47. package/dist/esm/assets/pgtypes.js +2783 -0
  48. package/dist/esm/assets/pgtypes.js.map +1 -0
  49. package/dist/esm/clients/QuillServerClient.d.ts +8 -0
  50. package/dist/esm/clients/QuillServerClient.js +24 -0
  51. package/dist/esm/clients/QuillServerClient.js.map +1 -0
  52. package/dist/esm/db/BigQuery.d.ts +27 -0
  53. package/dist/esm/db/BigQuery.js +201 -0
  54. package/dist/esm/db/BigQuery.js.map +1 -0
  55. package/dist/esm/db/CachedConnection.d.ts +23 -0
  56. package/dist/esm/db/CachedConnection.js +81 -0
  57. package/dist/esm/db/CachedConnection.js.map +1 -0
  58. package/dist/esm/db/DatabaseHelper.d.ts +50 -0
  59. package/dist/esm/db/DatabaseHelper.js +188 -0
  60. package/dist/esm/db/DatabaseHelper.js.map +1 -0
  61. package/dist/esm/db/Mysql.d.ts +30 -0
  62. package/dist/esm/db/Mysql.js +219 -0
  63. package/dist/esm/db/Mysql.js.map +1 -0
  64. package/dist/esm/db/Postgres.d.ts +32 -0
  65. package/dist/esm/db/Postgres.js +161 -0
  66. package/dist/esm/db/Postgres.js.map +1 -0
  67. package/dist/esm/db/Snowflake.d.ts +33 -0
  68. package/dist/esm/db/Snowflake.js +203 -0
  69. package/dist/esm/db/Snowflake.js.map +1 -0
  70. package/dist/esm/index.d.ts +41 -0
  71. package/dist/esm/index.ispec.d.ts +0 -0
  72. package/{src/index.ispec.ts → dist/esm/index.ispec.js} +2 -6
  73. package/dist/esm/index.ispec.js.map +1 -0
  74. package/dist/esm/index.js +267 -0
  75. package/dist/esm/index.js.map +1 -0
  76. package/dist/esm/index.uspec.d.ts +0 -0
  77. package/{src/index.uspec.ts → dist/esm/index.uspec.js} +2 -6
  78. package/dist/esm/index.uspec.js.map +1 -0
  79. package/dist/esm/models/Cache.d.ts +12 -0
  80. package/dist/esm/models/Cache.js +2 -0
  81. package/dist/esm/models/Cache.js.map +1 -0
  82. package/dist/esm/models/Client.d.ts +29 -0
  83. package/dist/esm/models/Client.js +2 -0
  84. package/dist/esm/models/Client.js.map +1 -0
  85. package/dist/esm/models/Database.d.ts +5 -0
  86. package/dist/esm/models/Database.js +2 -0
  87. package/dist/esm/models/Database.js.map +1 -0
  88. package/dist/esm/models/Filters.d.ts +83 -0
  89. package/dist/esm/models/Filters.js +174 -0
  90. package/dist/esm/models/Filters.js.map +1 -0
  91. package/dist/esm/models/Formats.d.ts +7 -0
  92. package/dist/esm/models/Formats.js +2 -0
  93. package/dist/esm/models/Formats.js.map +1 -0
  94. package/dist/esm/models/Quill.d.ts +82 -0
  95. package/dist/esm/models/Quill.js +2 -0
  96. package/dist/esm/models/Quill.js.map +1 -0
  97. package/dist/esm/utils/Error.d.ts +8 -0
  98. package/dist/esm/utils/Error.js +23 -0
  99. package/dist/esm/utils/Error.js.map +1 -0
  100. package/dist/esm/utils/RunQueryProcesses.d.ts +9 -0
  101. package/dist/esm/utils/RunQueryProcesses.js +30 -0
  102. package/dist/esm/utils/RunQueryProcesses.js.map +1 -0
  103. package/dist/esm/utils/schemaConversion.d.ts +1 -0
  104. package/dist/esm/utils/schemaConversion.js +12 -0
  105. package/dist/esm/utils/schemaConversion.js.map +1 -0
  106. package/dist/esm/utils/textProcessing.d.ts +2 -0
  107. package/dist/esm/utils/textProcessing.js +13 -0
  108. package/dist/esm/utils/textProcessing.js.map +1 -0
  109. package/package.json +11 -6
  110. package/eslint.config.mjs +0 -16
  111. package/examples/mysql-node/app.ts +0 -61
  112. package/examples/node-server/app.ts +0 -65
  113. package/jest.config.js +0 -19
  114. package/src/assets/pgtypes.ts +0 -2782
  115. package/src/clients/QuillServerClient.ts +0 -23
  116. package/src/db/BigQuery.ts +0 -220
  117. package/src/db/CachedConnection.ts +0 -109
  118. package/src/db/DatabaseHelper.ts +0 -373
  119. package/src/db/Mysql.ts +0 -262
  120. package/src/db/Postgres.ts +0 -185
  121. package/src/db/Snowflake.ts +0 -240
  122. package/src/index.ts +0 -392
  123. package/src/models/Cache.ts +0 -18
  124. package/src/models/Client.ts +0 -29
  125. package/src/models/Database.ts +0 -5
  126. package/src/models/Formats.ts +0 -19
  127. package/src/models/Quill.ts +0 -82
  128. package/src/utils/Error.ts +0 -35
  129. package/src/utils/RunQueryProcesses.ts +0 -33
  130. package/src/utils/schemaConversion.ts +0 -11
  131. package/src/utils/textProcessing.ts +0 -13
  132. package/tsconfig.json +0 -15
  133. /package/dist/{assets → cjs/assets}/pgtypes.d.ts +0 -0
  134. /package/dist/{clients → cjs/clients}/QuillServerClient.d.ts +0 -0
  135. /package/dist/{db → cjs/db}/BigQuery.d.ts +0 -0
  136. /package/dist/{db → cjs/db}/DatabaseHelper.d.ts +0 -0
  137. /package/dist/{db → cjs/db}/Mysql.d.ts +0 -0
  138. /package/dist/{db → cjs/db}/Postgres.d.ts +0 -0
  139. /package/dist/{db → cjs/db}/Snowflake.d.ts +0 -0
  140. /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
  141. /package/dist/{index.ispec.d.ts → cjs/index.ispec.d.ts} +0 -0
  142. /package/dist/{index.uspec.d.ts → cjs/index.uspec.d.ts} +0 -0
  143. /package/dist/{models → cjs/models}/Cache.d.ts +0 -0
  144. /package/dist/{models → cjs/models}/Client.d.ts +0 -0
  145. /package/dist/{models → cjs/models}/Database.d.ts +0 -0
  146. /package/dist/{models → cjs/models}/Formats.d.ts +0 -0
  147. /package/dist/{utils → cjs/utils}/Error.d.ts +0 -0
  148. /package/dist/{utils → cjs/utils}/RunQueryProcesses.d.ts +0 -0
  149. /package/dist/{utils → cjs/utils}/schemaConversion.d.ts +0 -0
  150. /package/dist/{utils → cjs/utils}/textProcessing.d.ts +0 -0
@@ -1,373 +0,0 @@
1
- import { Pool } from "pg";
2
- import snowflake from "snowflake-sdk";
3
- import { Pool as MysqlPool } from "mysql2";
4
- import { BigQuery } from "@google-cloud/bigquery";
5
- import {
6
- PostgresConnectionConfig,
7
- connectToPostgres,
8
- disconnectFromPostgres,
9
- formatPostgresConfig,
10
- getTablesBySchemaPostgres,
11
- getColumnsByTablePostgres,
12
- runQueryPostgres,
13
- getForeignKeysPostgres,
14
- getSchemaColumnInfoPostgress,
15
- getSchemasPostgres,
16
- } from "./Postgres";
17
- import {
18
- SnowflakeConnectionConfig,
19
- connectToSnowflake,
20
- disconnectFromSnowflake,
21
- formatSnowflakeConfig,
22
- getTablesBySchemaSnowflake,
23
- getColumnsByTableSnowflake,
24
- runQuerySnowflake,
25
- getForeignKeysSnowflake,
26
- getSchemaColumnInfoSnowflake,
27
- getSchemasSnowflake,
28
- } from "./Snowflake";
29
- import {
30
- formatBigQueryConfig,
31
- BigQueryConfig,
32
- connectToBigQuery,
33
- runQueryBigQuery,
34
- getTablesBySchemaBigQuery,
35
- getColumnsByTableBigQuery,
36
- getForeignKeysBigQuery,
37
- getSchemaColumnInfoBigQuery,
38
- getSchemaBigQuery,
39
- } from "./BigQuery";
40
- import {
41
- MysqlConnectionConfig,
42
- connectToMysql,
43
- disconnectFromMysql,
44
- formatMysqlConfig,
45
- runQueryMysql,
46
- getTablesBySchemaMysql,
47
- getColumnsByTableMysql,
48
- getForeignKeysMysql,
49
- getSchemaColumnInfoMysql,
50
- getSchemasMysql,
51
- } from "./Mysql";
52
-
53
- // export all database connections types
54
- export type DatabaseConnection =
55
- | Pool
56
- | snowflake.Connection
57
- | BigQuery
58
- | MysqlPool;
59
-
60
- export interface QuillQueryResults {
61
- fields: { name: string; dataTypeID: number }[];
62
- rows: { [fieldName: string]: any }[];
63
- }
64
-
65
- export function getDatabaseCredentials(
66
- databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql",
67
- connectionString: string,
68
- ):
69
- | PostgresConnectionConfig
70
- | SnowflakeConnectionConfig
71
- | BigQueryConfig
72
- | MysqlConnectionConfig {
73
- switch (databaseType.toLowerCase()) {
74
- case "postgres":
75
- return formatPostgresConfig(connectionString);
76
- case "postgresql":
77
- return formatPostgresConfig(connectionString);
78
- case "snowflake":
79
- return formatSnowflakeConfig(connectionString);
80
- case "bigquery":
81
- return formatBigQueryConfig(connectionString);
82
- case "mysql":
83
- return formatMysqlConfig(connectionString);
84
- default:
85
- throw new Error("Invalid database type");
86
- }
87
- }
88
-
89
- export function connectToDatabase(
90
- databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql",
91
- config:
92
- | PostgresConnectionConfig
93
- | SnowflakeConnectionConfig
94
- | BigQueryConfig
95
- | MysqlConnectionConfig,
96
- ): DatabaseConnection {
97
- switch (databaseType.toLowerCase()) {
98
- case "postgres":
99
- return connectToPostgres(config as PostgresConnectionConfig);
100
- case "postgresql":
101
- return connectToPostgres(config as PostgresConnectionConfig);
102
- case "snowflake":
103
- return connectToSnowflake(config as SnowflakeConnectionConfig);
104
- case "bigquery":
105
- return connectToBigQuery(config as BigQueryConfig);
106
- case "mysql":
107
- return connectToMysql(config as MysqlConnectionConfig);
108
- default:
109
- return connectToPostgres(config as PostgresConnectionConfig);
110
- }
111
- }
112
-
113
- export async function withConnection<T>(
114
- databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql",
115
- connectionString: string,
116
- callback: (connection: DatabaseConnection) => T,
117
- ): Promise<T> {
118
- const config = getDatabaseCredentials(databaseType, connectionString);
119
- const connection = connectToDatabase(databaseType, config);
120
- try {
121
- return await callback(connection);
122
- } catch (e: any) {
123
- return new Promise((_, reject) =>
124
- reject({ success: false, message: e.message || e.error || e }),
125
- );
126
- } finally {
127
- await disconnectFromDatabase(databaseType, connection);
128
- }
129
- }
130
-
131
- export function runQueryByDatabase(
132
- databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql",
133
- connection: DatabaseConnection,
134
- sql: string,
135
- ): Promise<QuillQueryResults> | undefined {
136
- switch (databaseType.toLowerCase()) {
137
- case "postgres":
138
- return runQueryPostgres(sql, connection as Pool);
139
- case "postgresql":
140
- return runQueryPostgres(sql, connection as Pool);
141
- case "snowflake":
142
- return runQuerySnowflake(sql, connection as snowflake.Connection);
143
- case "bigquery":
144
- return runQueryBigQuery(sql, connection as BigQuery);
145
- case "mysql":
146
- return runQueryMysql(sql, connection as MysqlPool);
147
- default:
148
- return undefined;
149
- }
150
- }
151
-
152
- export async function connectAndRunQuery(
153
- databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql",
154
- connectionString: string,
155
- sql: string,
156
- ): Promise<QuillQueryResults | undefined> {
157
- return withConnection(
158
- databaseType,
159
- connectionString,
160
- async (connection) =>
161
- await runQueryByDatabase(databaseType, connection, sql),
162
- );
163
- }
164
-
165
- export function disconnectFromDatabase(
166
- databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql",
167
- database: DatabaseConnection,
168
- ) {
169
- switch (databaseType.toLowerCase()) {
170
- case "postgres":
171
- return disconnectFromPostgres(database as Pool);
172
- case "postgresql":
173
- return disconnectFromPostgres(database as Pool);
174
- case "snowflake":
175
- return disconnectFromSnowflake(database as snowflake.Connection);
176
- case "bigquery":
177
- return; // BigQuery does not need to be disconnected
178
- case "mysql":
179
- return disconnectFromMysql(database as MysqlPool);
180
- default:
181
- return undefined;
182
- }
183
- }
184
-
185
- export async function getSchemasByDatabase(
186
- databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql",
187
- connection: DatabaseConnection,
188
- ): Promise<string[] | undefined> {
189
- switch (databaseType.toLowerCase()) {
190
- case "postgres":
191
- return getSchemasPostgres(connection as Pool);
192
- case "postgresql":
193
- return getSchemasPostgres(connection as Pool);
194
- case "snowflake":
195
- return getSchemasSnowflake(connection as snowflake.Connection);
196
- case "bigquery":
197
- return getSchemaBigQuery(connection as BigQuery);
198
- case "mysql":
199
- return getSchemasMysql(connection as MysqlPool);
200
- default:
201
- return undefined;
202
- }
203
- }
204
-
205
- // INFORMATION SCHEMA SELECTS
206
- export async function getTablesBySchemaByDatabase(
207
- databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql",
208
- connection: DatabaseConnection,
209
- schemaName: string | string[],
210
- ): Promise<string[] | { tableName: string; schemaName: string }[] | undefined> {
211
- switch (databaseType.toLowerCase()) {
212
- case "postgres":
213
- return getTablesBySchemaPostgres(
214
- connection as Pool,
215
- schemaName as string[],
216
- );
217
- case "postgresql":
218
- return getTablesBySchemaPostgres(
219
- connection as Pool,
220
- schemaName as string[],
221
- );
222
- case "snowflake":
223
- return getTablesBySchemaSnowflake(
224
- connection as snowflake.Connection,
225
- schemaName as string[],
226
- );
227
- case "bigquery":
228
- return getTablesBySchemaBigQuery(
229
- connection as BigQuery,
230
- schemaName as string[],
231
- );
232
- case "mysql":
233
- return getTablesBySchemaMysql(
234
- connection as MysqlPool,
235
- schemaName as string[],
236
- );
237
- default:
238
- return undefined;
239
- }
240
- }
241
-
242
- // INFORMATION SCHEMA SELECTS
243
- export async function getColumnsByTableByDatabase(
244
- databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql",
245
- connection: DatabaseConnection,
246
- schemaName: string,
247
- tableName: string,
248
- ): Promise<string[] | undefined> {
249
- switch (databaseType.toLowerCase()) {
250
- case "postgres":
251
- return getColumnsByTablePostgres(
252
- connection as Pool,
253
- schemaName,
254
- tableName,
255
- );
256
- case "postgresql":
257
- return getColumnsByTablePostgres(
258
- connection as Pool,
259
- schemaName,
260
- tableName,
261
- );
262
- case "snowflake":
263
- return getColumnsByTableSnowflake(
264
- connection as snowflake.Connection,
265
- schemaName,
266
- tableName,
267
- );
268
- case "bigquery":
269
- return getColumnsByTableBigQuery(
270
- connection as BigQuery,
271
- schemaName,
272
- tableName,
273
- );
274
- case "mysql":
275
- return getColumnsByTableMysql(
276
- connection as MysqlPool,
277
- schemaName,
278
- tableName,
279
- );
280
- default:
281
- return undefined;
282
- }
283
- }
284
-
285
- export async function getForiegnKeysByDatabase(
286
- databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql",
287
- connection: DatabaseConnection,
288
- schemaName: string,
289
- tableName: string,
290
- primaryKey: string,
291
- ): Promise<string[] | undefined> {
292
- switch (databaseType.toLowerCase()) {
293
- case "postgres":
294
- return getForeignKeysPostgres(
295
- connection as Pool,
296
- schemaName,
297
- tableName,
298
- primaryKey,
299
- );
300
- case "postgresql":
301
- return getForeignKeysPostgres(
302
- connection as Pool,
303
- schemaName,
304
- tableName,
305
- primaryKey,
306
- );
307
- case "snowflake":
308
- return getForeignKeysSnowflake(
309
- connection as snowflake.Connection,
310
- schemaName,
311
- tableName,
312
- primaryKey,
313
- );
314
- case "bigquery":
315
- return getForeignKeysBigQuery(
316
- connection as BigQuery,
317
- schemaName,
318
- tableName,
319
- primaryKey,
320
- );
321
- case "mysql":
322
- return getForeignKeysMysql(
323
- connection as MysqlPool,
324
- schemaName,
325
- tableName,
326
- primaryKey,
327
- );
328
- default:
329
- return undefined;
330
- }
331
- }
332
-
333
- export function getColumnInfoBySchemaByDatabase(
334
- databaseType: "postgresql" | "snowflake" | "bigquery" | "mysql",
335
- connection: DatabaseConnection,
336
- schemaName: string,
337
- tables: string[] | { tableName: string; schemaName: string }[],
338
- ) {
339
- switch (databaseType.toLowerCase()) {
340
- case "postgres":
341
- return getSchemaColumnInfoPostgress(
342
- connection as Pool,
343
- schemaName,
344
- tables as { tableName: string; schemaName: string }[],
345
- );
346
- case "postgresql":
347
- return getSchemaColumnInfoPostgress(
348
- connection as Pool,
349
- schemaName,
350
- tables as { tableName: string; schemaName: string }[],
351
- );
352
- case "snowflake":
353
- return getSchemaColumnInfoSnowflake(
354
- connection as snowflake.Connection,
355
- schemaName,
356
- tables as { tableName: string; schemaName: string }[],
357
- );
358
- case "bigquery":
359
- return getSchemaColumnInfoBigQuery(
360
- connection as BigQuery,
361
- schemaName,
362
- tables as { tableName: string; schemaName: string }[],
363
- );
364
- case "mysql":
365
- return getSchemaColumnInfoMysql(
366
- connection as MysqlPool,
367
- schemaName,
368
- tables as { tableName: string; schemaName: string }[],
369
- );
370
- default:
371
- return undefined;
372
- }
373
- }
package/src/db/Mysql.ts DELETED
@@ -1,262 +0,0 @@
1
- import mysql, { Pool as MysqlPool } from "mysql2";
2
- import { QuillQueryResults } from "./DatabaseHelper";
3
- import url from "url";
4
- import { capitalize, depluralize } from "../utils/textProcessing";
5
-
6
- export interface MysqlConnectionConfig {
7
- host: string;
8
- user: string;
9
- password: string;
10
- database: string;
11
- port: number;
12
- }
13
-
14
- export function formatMysqlConfig(
15
- connectionString: string,
16
- ): MysqlConnectionConfig {
17
- const parsedUrl = url.parse(connectionString);
18
- const [user, password] = (parsedUrl.auth || "").split(":");
19
- return {
20
- host: parsedUrl.hostname || "",
21
- user: user || "",
22
- password: password || "",
23
- database: (parsedUrl.pathname || "").slice(1),
24
- port: parsedUrl.port ? parseInt(parsedUrl.port) : 3306,
25
- };
26
- }
27
-
28
- export function connectToMysql(config: MysqlConnectionConfig): MysqlPool {
29
- const pool = mysql.createPool({
30
- ...config,
31
- waitForConnections: true,
32
- connectionLimit: 24,
33
- queueLimit: 0,
34
- });
35
- return pool;
36
- }
37
-
38
- export function disconnectFromMysql(connection: MysqlPool) {
39
- connection.end();
40
- }
41
-
42
- export async function runQueryMysql(
43
- sql: string,
44
- connection: MysqlPool,
45
- ): Promise<QuillQueryResults> {
46
- const result: QuillQueryResults = await new Promise((resolve, reject) => {
47
- connection.query(sql, (error, results, fields) => {
48
- if (error) {
49
- reject(error);
50
- return;
51
- }
52
-
53
- const mappedFields = fields
54
- ? fields.map((field) => ({
55
- name: field.name,
56
- dataTypeID: mysqlDataTypeIdToPostgresType(field.type || 1043), // Provide a default value for dataTypeID
57
- }))
58
- : [];
59
-
60
- const processRows = Array.isArray(results)
61
- ? results.map((row: any) => {
62
- return JSON.parse(JSON.stringify(row));
63
- })
64
- : [];
65
-
66
- resolve({ fields: mappedFields, rows: processRows });
67
- });
68
- });
69
- return result;
70
- }
71
-
72
- export async function getSchemasMysql(
73
- connection: MysqlPool,
74
- ): Promise<string[]> {
75
- const sql = `SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
76
- WHERE schema_name != 'information_schema'
77
- AND schema_name != 'performance_schema'
78
- and schema_name != 'sys';`;
79
- const results = await runQueryMysql(sql, connection);
80
- return results.rows.map((row) => row.SCHEMA_NAME);
81
- }
82
-
83
- export async function getTablesBySchemaMysql(
84
- connection: MysqlPool,
85
- schemaNames: string[],
86
- ): Promise<{ tableName: string; schemaName: string }[]> {
87
- const allColumns = await Promise.all(
88
- schemaNames.map(async (schema) => {
89
- const sql = `SELECT TABLE_NAME, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '${schema}'`;
90
- const results = await runQueryMysql(sql, connection);
91
- return results.rows.map((row) => {
92
- return { tableName: row.TABLE_NAME, schemaName: row.TABLE_SCHEMA };
93
- });
94
- }),
95
- );
96
- return allColumns.flat();
97
- }
98
-
99
- export async function getColumnsByTableMysql(
100
- connection: MysqlPool,
101
- schemaName: string,
102
- tableName: string,
103
- ): Promise<string[]> {
104
- const sql = `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '${schemaName}' AND TABLE_NAME = '${tableName}'`;
105
- const results = await runQueryMysql(sql, connection);
106
- return results.rows.map((row) => row.COLUMN_NAME);
107
- }
108
-
109
- export async function getForeignKeysMysql(
110
- connection: MysqlPool,
111
- schemaName: string,
112
- tableName: string,
113
- primaryKey: string,
114
- ): Promise<string[]> {
115
- const depluralizedTableName = depluralize(tableName);
116
- let sql = `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
117
- WHERE TABLE_SCHEMA = '${schemaName}'
118
- and table_name != '${tableName}'
119
- and (column_name = '${primaryKey}'
120
- or column_name = '${depluralizedTableName}\\_${primaryKey}'
121
- or column_name = '${depluralizedTableName}${capitalize(primaryKey)}' )`;
122
- const results = await runQueryMysql(sql, connection);
123
- let foreignKeysString = results.rows.map((key) => {
124
- return key.COLUMN_NAME;
125
- });
126
- // remove any foreignKeyStrings that are just 'id'
127
- foreignKeysString = foreignKeysString.filter(
128
- (key) => key !== "id" && key !== "_id_",
129
- );
130
- foreignKeysString = [...new Set(foreignKeysString)];
131
- if (foreignKeysString.length === 0) {
132
- sql = `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
133
- WHERE TABLE_SCHEMA = '${schemaName}'
134
- and table_name != '${tableName}'
135
- and (column_name like '${depluralizedTableName}%'
136
- or column_name like '%\\_id'
137
- or column_name like '%Id'
138
- or column_name like '%\\_${primaryKey}'
139
- or column_name like '%${capitalize(primaryKey)}')`;
140
- const results = await runQueryMysql(sql, connection);
141
- foreignKeysString = results.rows.map((key) => {
142
- return key.COLUMN_NAME;
143
- });
144
- foreignKeysString = [...new Set(foreignKeysString)];
145
- }
146
- return foreignKeysString;
147
- }
148
-
149
- export async function getSchemaColumnInfoMysql(
150
- connection: MysqlPool,
151
- schemaName: string,
152
- tableNames: { tableName: string; schemaName: string }[],
153
- ): Promise<
154
- { tableName: string; columns: { columnName: string; dataTypeID: number }[] }[]
155
- > {
156
- const allColumns = await Promise.all(
157
- tableNames.map(async (tableName) => {
158
- const query = `
159
- SELECT COLUMN_NAME as columnName,
160
- DATA_TYPE as dataType FROM INFORMATION_SCHEMA.COLUMNS
161
- WHERE TABLE_SCHEMA = '${tableName.schemaName}'
162
- AND TABLE_NAME = '${tableName.tableName}'
163
- `;
164
- const results = await runQueryMysql(query, connection);
165
- return {
166
- tableName: `${tableName.schemaName}.${tableName.tableName}`,
167
- displayName: `${tableName.schemaName}.${tableName.tableName}`,
168
- columns: results.rows.map((row: any) => ({
169
- columnName: row.columnName,
170
- displayName: row.columnName,
171
- dataTypeID: mysqlTextDataTypeToPostgresOID(row.dataType),
172
- fieldType: row.dataType,
173
- })),
174
- };
175
- }),
176
- );
177
- return allColumns;
178
- }
179
-
180
- function mysqlTextDataTypeToPostgresOID(type: string): number {
181
- switch (type) {
182
- case "bigint": // BIGINT in MySQL
183
- return 20; // BIGINT in PostgreSQL
184
- case "tinyint": // TINYINT in MySQL
185
- return 21; // SMALLINT in PostgreSQL
186
- case "smallint": // SMALLINT in MySQL
187
- return 21; // SMALLINT in PostgreSQL
188
- case "int": // INT in MySQL
189
- return 23; // INTEGER in PostgreSQL
190
- case "float": // FLOAT in MySQL
191
- return 701; // DOUBLE PRECISION in PostgreSQL
192
- case "double": // DOUBLE in MySQL
193
- return 701; // DOUBLE PRECISION in PostgreSQL
194
- case "varchar": // VARCHAR in MySQL
195
- return 1043; // VARCHAR in PostgreSQL
196
- case "char": // CHAR in MySQL
197
- return 1042; // CHAR in PostgreSQL
198
- case "timestamp": // TIMESTAMP in MySQL
199
- return 1114; // TIMESTAMP in PostgreSQL
200
- case "date": // DATE in MySQL
201
- return 1082; // DATE in PostgreSQL
202
- case "datetime": // DATETIME in MySQL
203
- return 1114; // TIMESTAMP in PostgreSQL
204
- case "time": // TIME in MySQL
205
- return 1083; // TIME in PostgreSQL
206
- case "year": // YEAR in MySQL
207
- return 23; // INTEGER in PostgreSQL
208
- case "binary": // BINARY in MySQL
209
- return 17; // BYTEA in PostgreSQL
210
- case "blob": // BLOB in MySQL
211
- return 17; // BYTEA in PostgreSQL
212
- case "text": // TEXT in MySQL
213
- return 25; // TEXT in PostgreSQL
214
- case "json": // JSON in MySQL
215
- return 114; // JSON in PostgreSQL
216
- default:
217
- return 1043; // VARCHAR in PostgreSQL (fallback)
218
- }
219
- }
220
-
221
- function mysqlDataTypeIdToPostgresType(type: number): number {
222
- switch (type) {
223
- case 0: // DECIMAL
224
- case 1: // TINY
225
- case 2: // SHORT
226
- case 3: // LONG
227
- case 8: // LONGLONG
228
- case 9: // INT24
229
- case 13: // YEAR
230
- return 23; // INTEGER
231
-
232
- case 4: // FLOAT
233
- case 5: // DOUBLE
234
- return 701; // DOUBLE PRECISION
235
-
236
- case 7: // TIMESTAMP
237
- case 12: // DATETIME
238
- return 1114; // TIMESTAMP
239
-
240
- case 10: // DATE
241
- case 242: // NEWDATE
242
- return 1082; // DATE
243
-
244
- case 15: // VARCHAR
245
- case 25: // VAR_STRING
246
- case 250: // STRING
247
- case 254: // ENUM
248
- case 255: // SET
249
- return 1043; // VARCHAR
250
-
251
- case 16: // BIT
252
- case 245: // TINY_BLOB
253
- case 246: // MEDIUM_BLOB
254
- case 247: // LONG_BLOB
255
- case 248: // BLOB
256
- case 251: // GEOMETRY
257
- return 17; // BYTEA
258
-
259
- default:
260
- return 1043; // Default to VARCHAR if unknown
261
- }
262
- }