data-api-client 2.0.0-beta.0 → 2.1.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.
@@ -0,0 +1,350 @@
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
+ exports.createMySQLConnection = createMySQLConnection;
7
+ exports.createMySQLPool = createMySQLPool;
8
+ const events_1 = require("events");
9
+ const sqlstring_1 = __importDefault(require("sqlstring"));
10
+ const client_1 = require("../client");
11
+ const errors_1 = require("./errors");
12
+ function formatMySQLQuery(sql, params = []) {
13
+ return sqlstring_1.default.format(sql, params);
14
+ }
15
+ function convertToMySQL2Result(result, _sql) {
16
+ if (result.records && Array.isArray(result.records)) {
17
+ const rows = result.records;
18
+ let fields = [];
19
+ if (rows.length > 0) {
20
+ const firstRow = rows[0];
21
+ if (Array.isArray(firstRow)) {
22
+ fields = firstRow.map((_, index) => ({ name: index.toString() }));
23
+ }
24
+ else {
25
+ fields = Object.keys(firstRow).map((name) => ({ name }));
26
+ }
27
+ }
28
+ return [rows, fields];
29
+ }
30
+ else if (result.insertId !== undefined) {
31
+ const queryResult = {
32
+ insertId: result.insertId,
33
+ affectedRows: result.numberOfRecordsUpdated || 1,
34
+ warningCount: 0
35
+ };
36
+ return [queryResult, []];
37
+ }
38
+ else if (result.numberOfRecordsUpdated !== undefined) {
39
+ const queryResult = {
40
+ affectedRows: result.numberOfRecordsUpdated,
41
+ changedRows: result.numberOfRecordsUpdated,
42
+ warningCount: 0
43
+ };
44
+ return [queryResult, []];
45
+ }
46
+ else {
47
+ const queryResult = {
48
+ affectedRows: 0,
49
+ warningCount: 0
50
+ };
51
+ return [queryResult, []];
52
+ }
53
+ }
54
+ function createMySQLConnection(config) {
55
+ const mysqlConfig = {
56
+ ...config,
57
+ engine: 'mysql'
58
+ };
59
+ const core = (0, client_1.init)(mysqlConfig);
60
+ const eventEmitter = new events_1.EventEmitter();
61
+ let transactionId;
62
+ async function executeQuery(sqlOrOptions, params) {
63
+ let sql;
64
+ let values = [];
65
+ let rowsAsArray = false;
66
+ if (typeof sqlOrOptions === 'string') {
67
+ sql = sqlOrOptions;
68
+ values = params || [];
69
+ }
70
+ else {
71
+ sql = sqlOrOptions.sql;
72
+ values = sqlOrOptions.values || params || [];
73
+ rowsAsArray = sqlOrOptions.rowsAsArray || false;
74
+ }
75
+ const formattedSql = formatMySQLQuery(sql, values);
76
+ const queryOptions = {
77
+ sql: formattedSql,
78
+ hydrateColumnNames: !rowsAsArray,
79
+ includeResultMetadata: true
80
+ };
81
+ if (transactionId) {
82
+ queryOptions.transactionId = transactionId;
83
+ }
84
+ const result = await core.query(queryOptions);
85
+ return convertToMySQL2Result(result, sql);
86
+ }
87
+ const connection = Object.assign(eventEmitter, {
88
+ connect(callback) {
89
+ if (callback) {
90
+ process.nextTick(() => {
91
+ connection.emit('connect');
92
+ callback(null);
93
+ });
94
+ return;
95
+ }
96
+ connection.emit('connect');
97
+ return Promise.resolve();
98
+ },
99
+ end(callback) {
100
+ if (callback) {
101
+ process.nextTick(() => {
102
+ connection.emit('end');
103
+ callback();
104
+ });
105
+ return;
106
+ }
107
+ connection.emit('end');
108
+ return Promise.resolve();
109
+ },
110
+ query(sqlOrOptions, paramsOrCallback, callback) {
111
+ let params = [];
112
+ let cb;
113
+ if (typeof sqlOrOptions === 'object' && 'sql' in sqlOrOptions) {
114
+ if (typeof paramsOrCallback === 'function') {
115
+ cb = paramsOrCallback;
116
+ }
117
+ else if (Array.isArray(paramsOrCallback)) {
118
+ params = paramsOrCallback;
119
+ cb = callback;
120
+ }
121
+ }
122
+ else {
123
+ if (typeof paramsOrCallback === 'function') {
124
+ cb = paramsOrCallback;
125
+ }
126
+ else if (Array.isArray(paramsOrCallback)) {
127
+ params = paramsOrCallback;
128
+ cb = callback;
129
+ }
130
+ }
131
+ if (cb) {
132
+ return executeQuery(sqlOrOptions, params)
133
+ .then(([results, fields]) => {
134
+ cb(null, results, fields);
135
+ })
136
+ .catch((err) => {
137
+ const mysqlError = (0, errors_1.mapToMySQLError)(err);
138
+ connection.emit('error', mysqlError);
139
+ cb(mysqlError, null, null);
140
+ });
141
+ }
142
+ return executeQuery(sqlOrOptions, params).catch((err) => {
143
+ const mysqlError = (0, errors_1.mapToMySQLError)(err);
144
+ connection.emit('error', mysqlError);
145
+ throw mysqlError;
146
+ });
147
+ },
148
+ execute(sqlOrOptions, paramsOrCallback, callback) {
149
+ return connection.query(sqlOrOptions, paramsOrCallback, callback);
150
+ },
151
+ beginTransaction(callback) {
152
+ const doBegin = async () => {
153
+ const txResult = await core.beginTransaction();
154
+ transactionId = txResult.transactionId;
155
+ };
156
+ if (callback) {
157
+ doBegin()
158
+ .then(() => callback(null))
159
+ .catch((err) => {
160
+ const mysqlError = (0, errors_1.mapToMySQLError)(err);
161
+ connection.emit('error', mysqlError);
162
+ callback(mysqlError);
163
+ });
164
+ return;
165
+ }
166
+ return doBegin().catch((err) => {
167
+ const mysqlError = (0, errors_1.mapToMySQLError)(err);
168
+ connection.emit('error', mysqlError);
169
+ throw mysqlError;
170
+ });
171
+ },
172
+ commit(callback) {
173
+ const doCommit = async () => {
174
+ if (transactionId) {
175
+ await core.commitTransaction({ transactionId });
176
+ transactionId = undefined;
177
+ }
178
+ };
179
+ if (callback) {
180
+ doCommit()
181
+ .then(() => callback())
182
+ .catch((err) => {
183
+ const mysqlError = (0, errors_1.mapToMySQLError)(err);
184
+ connection.emit('error', mysqlError);
185
+ callback(mysqlError);
186
+ });
187
+ return;
188
+ }
189
+ return doCommit().catch((err) => {
190
+ const mysqlError = (0, errors_1.mapToMySQLError)(err);
191
+ connection.emit('error', mysqlError);
192
+ throw mysqlError;
193
+ });
194
+ },
195
+ rollback(callback) {
196
+ const doRollback = async () => {
197
+ if (transactionId) {
198
+ await core.rollbackTransaction({ transactionId });
199
+ transactionId = undefined;
200
+ }
201
+ };
202
+ if (callback) {
203
+ doRollback()
204
+ .then(() => callback())
205
+ .catch((err) => {
206
+ const mysqlError = (0, errors_1.mapToMySQLError)(err);
207
+ connection.emit('error', mysqlError);
208
+ callback(mysqlError);
209
+ });
210
+ return;
211
+ }
212
+ return doRollback().catch((err) => {
213
+ const mysqlError = (0, errors_1.mapToMySQLError)(err);
214
+ connection.emit('error', mysqlError);
215
+ throw mysqlError;
216
+ });
217
+ },
218
+ ping(callback) {
219
+ const doPing = async () => {
220
+ await core.query('SELECT 1');
221
+ };
222
+ if (callback) {
223
+ doPing()
224
+ .then(() => callback())
225
+ .catch((err) => {
226
+ const mysqlError = (0, errors_1.mapToMySQLError)(err);
227
+ connection.emit('error', mysqlError);
228
+ callback(mysqlError);
229
+ });
230
+ return;
231
+ }
232
+ return doPing().catch((err) => {
233
+ const mysqlError = (0, errors_1.mapToMySQLError)(err);
234
+ connection.emit('error', mysqlError);
235
+ throw mysqlError;
236
+ });
237
+ }
238
+ });
239
+ return connection;
240
+ }
241
+ function createMySQLPool(config) {
242
+ const mysqlConfig = {
243
+ ...config,
244
+ engine: 'mysql'
245
+ };
246
+ const core = (0, client_1.init)(mysqlConfig);
247
+ const eventEmitter = new events_1.EventEmitter();
248
+ async function executePoolQuery(sqlOrOptions, params) {
249
+ let sql;
250
+ let values = [];
251
+ let rowsAsArray = false;
252
+ if (typeof sqlOrOptions === 'string') {
253
+ sql = sqlOrOptions;
254
+ values = params || [];
255
+ }
256
+ else {
257
+ sql = sqlOrOptions.sql;
258
+ values = sqlOrOptions.values || params || [];
259
+ rowsAsArray = sqlOrOptions.rowsAsArray || false;
260
+ }
261
+ const formattedSql = formatMySQLQuery(sql, values);
262
+ const result = await core.query({
263
+ sql: formattedSql,
264
+ hydrateColumnNames: !rowsAsArray,
265
+ includeResultMetadata: true
266
+ });
267
+ return convertToMySQL2Result(result, sql);
268
+ }
269
+ const pool = Object.assign(eventEmitter, {
270
+ getConnection(callback) {
271
+ const getConn = () => {
272
+ const connection = createMySQLConnection(config);
273
+ connection.release = () => {
274
+ pool.emit('release', connection);
275
+ };
276
+ pool.emit('acquire', connection);
277
+ pool.emit('connection', connection);
278
+ return connection;
279
+ };
280
+ if (!callback) {
281
+ return Promise.resolve(getConn());
282
+ }
283
+ try {
284
+ const connection = getConn();
285
+ process.nextTick(() => callback(null, connection));
286
+ }
287
+ catch (err) {
288
+ process.nextTick(() => callback(err, null));
289
+ }
290
+ },
291
+ end(callback) {
292
+ if (callback) {
293
+ process.nextTick(() => callback());
294
+ return;
295
+ }
296
+ return Promise.resolve();
297
+ },
298
+ query(sqlOrOptions, paramsOrCallback, callback) {
299
+ let params = [];
300
+ let cb;
301
+ if (typeof sqlOrOptions === 'object' && 'sql' in sqlOrOptions) {
302
+ if (typeof paramsOrCallback === 'function') {
303
+ cb = paramsOrCallback;
304
+ }
305
+ else if (Array.isArray(paramsOrCallback)) {
306
+ params = paramsOrCallback;
307
+ cb = callback;
308
+ }
309
+ }
310
+ else {
311
+ if (typeof paramsOrCallback === 'function') {
312
+ cb = paramsOrCallback;
313
+ }
314
+ else if (Array.isArray(paramsOrCallback)) {
315
+ params = paramsOrCallback;
316
+ cb = callback;
317
+ }
318
+ }
319
+ if (cb) {
320
+ return executePoolQuery(sqlOrOptions, params)
321
+ .then(([results, fields]) => {
322
+ cb(null, results, fields);
323
+ })
324
+ .catch((err) => {
325
+ const mysqlError = (0, errors_1.mapToMySQLError)(err);
326
+ pool.emit('error', mysqlError);
327
+ cb(mysqlError, null, null);
328
+ });
329
+ }
330
+ return executePoolQuery(sqlOrOptions, params).catch((err) => {
331
+ const mysqlError = (0, errors_1.mapToMySQLError)(err);
332
+ pool.emit('error', mysqlError);
333
+ throw mysqlError;
334
+ });
335
+ },
336
+ execute(sqlOrOptions, paramsOrCallback, callback) {
337
+ return pool.query(sqlOrOptions, paramsOrCallback, callback);
338
+ },
339
+ releaseConnection(_connection) {
340
+ },
341
+ promise() {
342
+ return pool;
343
+ },
344
+ unprepare(_sql) {
345
+ return { sql: _sql };
346
+ },
347
+ config: mysqlConfig
348
+ });
349
+ return pool;
350
+ }
@@ -0,0 +1,142 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { DataAPIClientConfig } from '../types';
3
+ import { type PostgresError } from './errors';
4
+ export interface PgQueryResult<R = any> {
5
+ rows: R[];
6
+ rowCount: number;
7
+ command: string;
8
+ fields: Array<{
9
+ name: string;
10
+ dataTypeID?: number;
11
+ }>;
12
+ oid?: number;
13
+ }
14
+ export interface PgQueryConfig {
15
+ name?: string;
16
+ text: string;
17
+ values?: any[];
18
+ rowMode?: 'array' | 'object';
19
+ types?: any;
20
+ }
21
+ export interface PgCompatClient extends EventEmitter {
22
+ connect(): Promise<void>;
23
+ connect(callback: (err: Error) => void): void;
24
+ end(): Promise<void>;
25
+ end(callback: (err?: Error) => void): void;
26
+ query<T extends {
27
+ submit: (connection: any) => void;
28
+ }>(queryStream: T): T;
29
+ query<R extends any[] = any[]>(queryConfig: {
30
+ text: string;
31
+ values?: any[];
32
+ rowMode: 'array';
33
+ }, values?: any[]): Promise<{
34
+ rows: R[];
35
+ rowCount: number;
36
+ command: string;
37
+ fields: Array<{
38
+ name: string;
39
+ }>;
40
+ }>;
41
+ query<R = any>(queryConfig: {
42
+ text: string;
43
+ values?: any[];
44
+ }): Promise<PgQueryResult<R>>;
45
+ query<R = any>(queryTextOrConfig: string | {
46
+ text: string;
47
+ values?: any[];
48
+ }, values?: any[]): Promise<PgQueryResult<R>>;
49
+ query<R extends any[] = any[]>(queryConfig: {
50
+ text: string;
51
+ values?: any[];
52
+ rowMode: 'array';
53
+ }, callback: (err: Error, result: {
54
+ rows: R[];
55
+ rowCount: number;
56
+ command: string;
57
+ fields: Array<{
58
+ name: string;
59
+ }>;
60
+ }) => void): void;
61
+ query<R = any>(queryTextOrConfig: string | {
62
+ text: string;
63
+ values?: any[];
64
+ }, callback: (err: Error, result: PgQueryResult<R>) => void): void;
65
+ query<R = any>(queryText: string, values: any[], callback: (err: Error, result: PgQueryResult<R>) => void): void;
66
+ release(err?: Error | boolean): void;
67
+ copyFrom(queryText: string): any;
68
+ copyTo(queryText: string): any;
69
+ pauseDrain(): void;
70
+ resumeDrain(): void;
71
+ escapeIdentifier(str: string): string;
72
+ escapeLiteral(str: string): string;
73
+ setTypeParser(oid: number, format: string | ((text: string) => any), parseFn?: (text: string) => any): void;
74
+ getTypeParser(oid: number, format?: string): (text: string) => any;
75
+ on(event: 'drain', listener: () => void): this;
76
+ on(event: 'error', listener: (err: PostgresError) => void): this;
77
+ on(event: 'notice', listener: (notice: any) => void): this;
78
+ on(event: 'notification', listener: (message: any) => void): this;
79
+ on(event: 'end', listener: () => void): this;
80
+ on(event: string, listener: (...args: any[]) => void): this;
81
+ }
82
+ export interface PgCompatPool extends EventEmitter {
83
+ readonly totalCount: number;
84
+ readonly idleCount: number;
85
+ readonly waitingCount: number;
86
+ readonly expiredCount: number;
87
+ readonly ending: boolean;
88
+ readonly ended: boolean;
89
+ options: any;
90
+ connect(): Promise<PgCompatClient>;
91
+ connect(callback: (err: Error | null, client?: PgCompatClient) => void): void;
92
+ end(): Promise<void>;
93
+ end(callback: (err?: Error) => void): void;
94
+ query<T extends {
95
+ submit: (connection: any) => void;
96
+ }>(queryStream: T): T;
97
+ query<R extends any[] = any[]>(queryConfig: {
98
+ text: string;
99
+ values?: any[];
100
+ rowMode: 'array';
101
+ }, values?: any[]): Promise<{
102
+ rows: R[];
103
+ rowCount: number;
104
+ command: string;
105
+ fields: Array<{
106
+ name: string;
107
+ }>;
108
+ }>;
109
+ query<R = any>(queryConfig: {
110
+ text: string;
111
+ values?: any[];
112
+ }): Promise<PgQueryResult<R>>;
113
+ query<R = any>(queryTextOrConfig: string | {
114
+ text: string;
115
+ values?: any[];
116
+ }, values?: any[]): Promise<PgQueryResult<R>>;
117
+ query<R extends any[] = any[]>(queryConfig: {
118
+ text: string;
119
+ values?: any[];
120
+ rowMode: 'array';
121
+ }, callback: (err: Error, result: {
122
+ rows: R[];
123
+ rowCount: number;
124
+ command: string;
125
+ fields: Array<{
126
+ name: string;
127
+ }>;
128
+ }) => void): void;
129
+ query<R = any>(queryTextOrConfig: string | {
130
+ text: string;
131
+ values?: any[];
132
+ }, callback: (err: Error, result: PgQueryResult<R>) => void): void;
133
+ query<R = any>(queryText: string, values: any[], callback: (err: Error, result: PgQueryResult<R>) => void): void;
134
+ on(event: 'error', listener: (err: PostgresError) => void): this;
135
+ on(event: 'connect', listener: (client: PgCompatClient) => void): this;
136
+ on(event: 'acquire', listener: (client: PgCompatClient) => void): this;
137
+ on(event: 'remove', listener: (client: PgCompatClient) => void): this;
138
+ on(event: string, listener: (...args: any[]) => void): this;
139
+ }
140
+ export declare function createPgClient(config: DataAPIClientConfig): PgCompatClient;
141
+ export declare function createPgPool(config: DataAPIClientConfig): PgCompatPool;
142
+ //# sourceMappingURL=pg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/compat/pg.ts"],"names":[],"mappings":"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"}