@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.
- 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.d.ts +1 -1
- package/dist/{db → cjs/db}/CachedConnection.js +2 -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 +5 -0
- package/dist/cjs/db/Postgres.js.map +1 -0
- package/dist/{db → cjs/db}/Snowflake.js +1 -0
- package/dist/cjs/db/Snowflake.js.map +1 -0
- 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 -1
- 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 +83 -0
- package/dist/cjs/models/Filters.js +178 -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 +12 -7
- 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 +81 -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 +161 -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 +267 -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 +83 -0
- package/dist/esm/models/Filters.js +174 -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 +82 -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 -240
- package/src/index.ts +0 -392
- 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 -82
- 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}/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.d.ts → cjs/index.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/db/DatabaseHelper.ts
DELETED
|
@@ -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
|
-
}
|