@pma-network/sql 1.0.6 → 1.0.8

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/README.md CHANGED
@@ -44,12 +44,17 @@ Import and use:
44
44
  ```typescript
45
45
  import db from '@pma-network/sql';
46
46
 
47
- const users = await db.query('SELECT * FROM users WHERE age > :age', { age: 18 });
48
- const result = await db.insert('INSERT INTO users (name, sex, identifier) VALUES (:name, :sex, :identifier)', {
49
- name: 'John Doe',
50
- sex: 'm',
51
- identifier: 'discord:123456789',
52
- });
47
+ const users = await db.query('SELECT * FROM users WHERE job_name = :job', { job: 'police' });
48
+ const insertId = await db.insert(
49
+ 'INSERT INTO users (identifier_id, char_data_id, first_name, last_name, inventory_id) VALUES (:identifier_id, :char_data_id, :first_name, :last_name, :inventory_id)',
50
+ {
51
+ identifier_id: 1,
52
+ char_data_id: 1,
53
+ first_name: 'John',
54
+ last_name: 'Doe',
55
+ inventory_id: 1
56
+ }
57
+ );
53
58
  ```
54
59
 
55
60
  ## Usage
@@ -97,15 +102,31 @@ Optional: password, port (default: 3306)
97
102
 
98
103
  Named parameters:
99
104
  ```typescript
100
- await db.query('SELECT * FROM users WHERE name = :name AND age > :age', {
101
- name: 'John',
102
- age: 18,
105
+ await db.query('SELECT * FROM users WHERE first_name = :first_name AND job_name = :job', {
106
+ first_name: 'John',
107
+ job: 'police',
103
108
  });
104
109
  ```
105
110
 
106
111
  Positional parameters:
107
112
  ```typescript
108
- await db.query('SELECT * FROM users WHERE name = ? AND age > ?', ['John', 18]);
113
+ await db.query('SELECT * FROM users WHERE first_name = ? AND job_name = ?', ['John', 'police']);
114
+ ```
115
+
116
+ Raw queries (no parameter processing - no named params, no @ conversion, no undefined->null):
117
+ ```typescript
118
+ // Use raw methods when you need direct control
119
+ const users = await db.rawQuery('SELECT * FROM users WHERE uid = ?', [1]);
120
+ const insertId = await db.rawInsert(
121
+ 'INSERT INTO users (identifier_id, char_data_id, first_name, last_name, inventory_id) VALUES (?, ?, ?, ?, ?)',
122
+ [1, 1, 'John', 'Doe', 1]
123
+ );
124
+
125
+ // Regular methods process parameters automatically:
126
+ // - Convert @ to :
127
+ // - Support named parameters (:name)
128
+ // - Convert undefined to null
129
+ const users2 = await db.query('SELECT * FROM users WHERE uid = :uid', { uid: 1 });
109
130
  ```
110
131
 
111
132
  TypeScript with type definitions:
@@ -113,11 +134,64 @@ TypeScript with type definitions:
113
134
  import db from '@pma-network/sql';
114
135
 
115
136
  interface User {
116
- id: number;
117
- name: string;
118
- email: string;
137
+ uid: number;
138
+ identifier_id: number;
139
+ bank: number;
140
+ char_data_id: number;
141
+ first_name: string;
142
+ last_name: string;
143
+ job_name: string;
144
+ job_rank: number;
145
+ slot_id: number | null;
146
+ model: string | null;
147
+ inventory_id: number;
148
+ x: number;
149
+ y: number;
150
+ z: number;
151
+ is_deleted: boolean | null;
152
+ }
153
+
154
+ const users = await db.query<User[]>('SELECT * FROM users WHERE job_name = :job', { job: 'police' });
155
+ const user = await db.single<User>('SELECT * FROM users WHERE uid = :uid', { uid: 1 });
156
+ ```
157
+
158
+ Transactions with success/failure:
159
+ ```typescript
160
+ const { success, result, error } = await db.transaction(async (execute) => {
161
+ await execute('UPDATE users SET bank = bank + :amount WHERE uid = :uid', { amount: 1000, uid: 1 });
162
+ await execute('UPDATE users SET job_name = :job, job_rank = :rank WHERE uid = :uid', {
163
+ job: 'police',
164
+ rank: 1,
165
+ uid: 1
166
+ });
167
+ return { uid: 1 };
168
+ });
169
+
170
+ if (success) {
171
+ console.log('Transaction committed:', result);
172
+ } else {
173
+ console.error('Transaction rolled back:', error);
119
174
  }
175
+ ```
120
176
 
121
- const users = await db.query<User[]>('SELECT * FROM users');
122
- const user = await db.single<User>('SELECT * FROM users WHERE id = 1');
177
+ Batch operations for bulk inserts/updates:
178
+ ```typescript
179
+ const { success, result } = await db.batch([
180
+ {
181
+ query: 'INSERT INTO users (identifier_id, char_data_id, first_name, last_name, inventory_id) VALUES (:identifier_id, :char_data_id, :first_name, :last_name, :inventory_id)',
182
+ parameters: { identifier_id: 1, char_data_id: 1, first_name: 'John', last_name: 'Doe', inventory_id: 1 }
183
+ },
184
+ {
185
+ query: 'INSERT INTO users (identifier_id, char_data_id, first_name, last_name, inventory_id) VALUES (:identifier_id, :char_data_id, :first_name, :last_name, :inventory_id)',
186
+ parameters: { identifier_id: 2, char_data_id: 2, first_name: 'Jane', last_name: 'Smith', inventory_id: 2 }
187
+ },
188
+ {
189
+ query: 'UPDATE users SET job_name = :job WHERE uid = :uid',
190
+ parameters: { job: 'police', uid: 1 }
191
+ }
192
+ ]);
193
+
194
+ if (success) {
195
+ console.log(`Executed ${result.length} queries`);
196
+ }
123
197
  ```
package/dist/MySQL.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import type { Pool, PoolConnection, RowDataPacket } from 'mysql2/promise';
2
- import mysql from 'mysql2/promise';
3
- import type { ConnectionConfig, InsertResult, QueryParameters, TransactionCallback, UpdateResult } from './types.js';
2
+ import type { BatchQuery, ConnectionConfig, QueryParameters, TransactionCallback, TransactionResult } from './types.js';
4
3
  /**
5
4
  * MySQL database wrapper with connection pooling and named parameter support.
6
5
  * Automatically reads connection configuration from environment variables.
@@ -15,12 +14,12 @@ export declare class MySQL {
15
14
  private versionPrefix;
16
15
  private metricsExportResource;
17
16
  private metricsExportFunction;
18
- private poolReady;
19
17
  /**
20
18
  * Creates a new MySQL instance with connection pooling.
21
19
  * If no config is provided, it will automatically look for connection strings in environment variables.
22
20
  *
23
21
  * @param config - Optional database configuration. If omitted, uses environment variables.
22
+ * @throws {Error} If no connection string is found or if connection string validation fails
24
23
  */
25
24
  constructor(config?: ConnectionConfig);
26
25
  private getConvar;
@@ -28,71 +27,171 @@ export declare class MySQL {
28
27
  private getConvarBool;
29
28
  private getResourceName;
30
29
  private formatResourceConvar;
30
+ /**
31
+ * Gets default configuration from environment variables.
32
+ *
33
+ * @returns ConnectionConfig object
34
+ * @throws {Error} If no connection string is found in environment variables
35
+ * @throws {Error} If connection string validation fails
36
+ */
31
37
  private getDefaultConfig;
38
+ /**
39
+ * Validates the connection string format.
40
+ *
41
+ * @param connectionString - Connection string to validate
42
+ * @throws {Error} If protocol is not 'mysql:'
43
+ * @throws {Error} If hostname is missing
44
+ * @throws {Error} If database name is missing
45
+ * @throws {Error} If username is missing
46
+ * @throws {Error} If connection string format is invalid
47
+ */
32
48
  private validateConnectionString;
49
+ /**
50
+ * Parses connection string into PoolOptions.
51
+ *
52
+ * @param connectionString - Connection string to parse
53
+ * @returns PoolOptions configuration object
54
+ * @throws {TypeError} If connection string is not a valid URL
55
+ */
33
56
  private parseConnectionString;
34
57
  private normalizeParameters;
35
58
  private setupConvarListeners;
36
59
  private scheduleResourceTick;
60
+ private executeWithTiming;
37
61
  private exportMetric;
62
+ private replaceAtSymbols;
63
+ /**
64
+ * Executes a query on a specific connection with timing and logging.
65
+ *
66
+ * @param connection - Database connection to use
67
+ * @param query - SQL query to execute
68
+ * @param parameters - Query parameters
69
+ * @returns Query result
70
+ * @throws Query execution errors (SQL errors, syntax errors, constraint violations, etc.)
71
+ */
72
+ private executeInConnection;
73
+ private executeTransaction;
38
74
  private processParameters;
39
75
  private logQuery;
40
76
  private handleError;
77
+ /**
78
+ * Executes a SQL query with raw positional parameters.
79
+ * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
80
+ * Use ? placeholders only.
81
+ *
82
+ * @param query - SQL query with ? placeholders only
83
+ * @param parameters - Array of values (undefined values are NOT converted to null)
84
+ * @returns Query result
85
+ * @example
86
+ * const result = await db.rawExecute('SELECT * FROM users WHERE uid = ?', [1]);
87
+ */
88
+ rawExecute<T = unknown>(query: string, parameters?: unknown[]): Promise<T | null>;
41
89
  /**
42
90
  * Executes a SQL query and returns the raw results.
43
91
  * Supports SELECT, INSERT, UPDATE, DELETE, and other SQL statements.
92
+ * Processes named parameters (:name), converts undefined to null, and converts @ to :.
44
93
  *
45
94
  * @param query - SQL query with :name or ? placeholders
46
95
  * @param parameters - Parameter values as object or array
47
96
  * @returns Query result
48
97
  * @example
49
- * const result = await db.execute('SELECT * FROM users WHERE id = :id', { id: 1 });
98
+ * const result = await db.execute('SELECT * FROM users WHERE uid = :uid', { uid: 1 });
50
99
  */
51
100
  execute<T = unknown>(query: string, parameters?: QueryParameters): Promise<T | null>;
101
+ /**
102
+ * Executes a SELECT query with raw positional parameters.
103
+ * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
104
+ * Use ? placeholders only.
105
+ *
106
+ * @param query - SELECT query with ? placeholders only
107
+ * @param parameters - Array of values (undefined values are NOT converted to null)
108
+ * @returns Array of rows
109
+ * @example
110
+ * const users = await db.rawQuery('SELECT * FROM users WHERE job_name = ?', ['police']);
111
+ */
112
+ rawQuery<T = RowDataPacket[]>(query: string, parameters?: unknown[]): Promise<T | null>;
52
113
  /**
53
114
  * Executes a SELECT query and returns rows.
54
115
  * Use for queries returning multiple rows.
116
+ * Processes named parameters (:name), converts undefined to null, and converts @ to :.
55
117
  *
56
118
  * @param query - SELECT query with :name or ? placeholders
57
119
  * @param parameters - Parameter values
58
120
  * @returns Array of rows
59
121
  * @example
60
- * const users = await db.query('SELECT * FROM users WHERE age > :age', { age: 18 });
122
+ * const users = await db.query('SELECT * FROM users WHERE job_name = :job', { job: 'police' });
61
123
  */
62
124
  query<T = RowDataPacket[]>(query: string, parameters?: QueryParameters): Promise<T | null>;
125
+ /**
126
+ * Inserts a row with raw positional parameters.
127
+ * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
128
+ * Returns the auto-generated ID.
129
+ *
130
+ * @param query - INSERT query with ? placeholders only
131
+ * @param parameters - Array of values (undefined values are NOT converted to null)
132
+ * @returns Insert ID or null on error
133
+ * @example
134
+ * const insertId = await db.rawInsert('INSERT INTO users (identifier_id, char_data_id, first_name, last_name, inventory_id) VALUES (?, ?, ?, ?, ?)', [1, 1, 'John', 'Doe', 1]);
135
+ */
136
+ rawInsert(query: string, parameters?: unknown[]): Promise<number | null>;
63
137
  /**
64
138
  * Inserts a row into the database.
65
- * Returns the auto-generated ID and affected row count.
139
+ * Returns the auto-generated ID.
140
+ * Processes named parameters (:name), converts undefined to null, and converts @ to :.
66
141
  *
67
142
  * @param query - INSERT query with :name or ? placeholders
68
143
  * @param parameters - Values to insert
69
- * @returns Object with insertId and affectedRows
144
+ * @returns Insert ID or null on error
70
145
  * @example
71
- * const result = await db.insert(
72
- * 'INSERT INTO users (name, email) VALUES (:name, :email)',
73
- * { name: 'John', email: 'john@example.com' }
146
+ * const insertId = await db.insert(
147
+ * 'INSERT INTO users (identifier_id, char_data_id, first_name, last_name, inventory_id) VALUES (:identifier_id, :char_data_id, :first_name, :last_name, :inventory_id)',
148
+ * { identifier_id: 1, char_data_id: 1, first_name: 'John', last_name: 'Doe', inventory_id: 1 }
74
149
  * );
75
- * console.log(result.insertId);
76
150
  */
77
- insert(query: string, parameters?: QueryParameters): Promise<InsertResult | null>;
151
+ insert(query: string, parameters?: QueryParameters): Promise<number | null>;
152
+ /**
153
+ * Updates rows with raw positional parameters.
154
+ * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
155
+ * Returns the number of affected rows.
156
+ *
157
+ * @param query - UPDATE query with ? placeholders only
158
+ * @param parameters - Array of values (undefined values are NOT converted to null)
159
+ * @returns Number of affected rows or null on error
160
+ * @example
161
+ * const affectedRows = await db.rawUpdate('UPDATE users SET job_name = ?, job_rank = ? WHERE uid = ?', ['police', 1, 123]);
162
+ */
163
+ rawUpdate(query: string, parameters?: unknown[]): Promise<number | null>;
78
164
  /**
79
165
  * Updates rows in the database.
80
166
  * Returns the number of affected rows.
167
+ * Processes named parameters (:name), converts undefined to null, and converts @ to :.
81
168
  *
82
169
  * @param query - UPDATE query with :name or ? placeholders
83
170
  * @param parameters - Values to update
84
- * @returns Object with affectedRows count
171
+ * @returns Number of affected rows or null on error
85
172
  * @example
86
- * const result = await db.update(
87
- * 'UPDATE users SET verified = 1 WHERE id = :id',
88
- * { id: 123 }
173
+ * const affectedRows = await db.update(
174
+ * 'UPDATE users SET job_name = :job, job_rank = :rank WHERE uid = :uid',
175
+ * { job: 'police', rank: 1, uid: 123 }
89
176
  * );
90
- * console.log(result.affectedRows);
91
177
  */
92
- update(query: string, parameters?: QueryParameters): Promise<UpdateResult | null>;
178
+ update(query: string, parameters?: QueryParameters): Promise<number | null>;
179
+ /**
180
+ * Returns a single value with raw positional parameters.
181
+ * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
182
+ * Use for COUNT, SUM, or single column queries.
183
+ *
184
+ * @param query - SELECT query with ? placeholders only, returning one column
185
+ * @param parameters - Array of values (undefined values are NOT converted to null)
186
+ * @returns Value from first column of first row, or null
187
+ * @example
188
+ * const count = await db.rawScalar('SELECT COUNT(*) FROM users WHERE age > ?', [18]);
189
+ */
190
+ rawScalar<T = unknown>(query: string, parameters?: unknown[]): Promise<T | null>;
93
191
  /**
94
192
  * Returns a single value from the database.
95
193
  * Use for COUNT, SUM, or single column queries.
194
+ * Processes named parameters (:name), converts undefined to null, and converts @ to :.
96
195
  *
97
196
  * @param query - SELECT query returning one column
98
197
  * @param parameters - Parameter values
@@ -102,9 +201,22 @@ export declare class MySQL {
102
201
  * const name = await db.scalar('SELECT name FROM users WHERE id = :id', { id: 1 });
103
202
  */
104
203
  scalar<T = unknown>(query: string, parameters?: QueryParameters): Promise<T | null>;
204
+ /**
205
+ * Returns a single row with raw positional parameters.
206
+ * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
207
+ * Returns null if no rows match.
208
+ *
209
+ * @param query - SELECT query with ? placeholders only
210
+ * @param parameters - Array of values (undefined values are NOT converted to null)
211
+ * @returns Single row or null
212
+ * @example
213
+ * const user = await db.rawSingle('SELECT * FROM users WHERE id = ?', [1]);
214
+ */
215
+ rawSingle<T = RowDataPacket>(query: string, parameters?: unknown[]): Promise<T | null>;
105
216
  /**
106
217
  * Returns a single row from the database.
107
218
  * Returns null if no rows match.
219
+ * Processes named parameters (:name), converts undefined to null, and converts @ to :.
108
220
  *
109
221
  * @param query - SELECT query with :name or ? placeholders
110
222
  * @param parameters - Parameter values
@@ -116,45 +228,44 @@ export declare class MySQL {
116
228
  * }
117
229
  */
118
230
  single<T = RowDataPacket>(query: string, parameters?: QueryParameters): Promise<T | null>;
119
- /**
120
- * Prepares a statement for execution.
121
- * Use for executing the same query multiple times with different parameters.
122
- *
123
- * @param query - SQL query to prepare
124
- * @returns Prepared statement
125
- * @example
126
- * const stmt = await db.prepare('SELECT * FROM users WHERE id = ?');
127
- */
128
- prepare(query: string): Promise<mysql.PreparedStatementInfo>;
129
231
  /**
130
232
  * Executes multiple queries as an atomic transaction.
131
233
  * All changes are rolled back if any query fails.
132
234
  *
133
235
  * @param callback - Function receiving an execute function for queries
134
- * @returns Value returned by callback
236
+ * @returns TransactionResult with success status and result/error
135
237
  * @example
136
- * await db.transaction(async (execute) => {
238
+ * const { success, result, error } = await db.transaction(async (execute) => {
137
239
  * await execute('INSERT INTO accounts (balance) VALUES (:balance)', { balance: 100 });
138
240
  * await execute('UPDATE users SET has_account = 1 WHERE id = :id', { id: 1 });
241
+ * return { accountId: 123 };
139
242
  * });
140
243
  */
141
- transaction<T = unknown>(callback: TransactionCallback): Promise<T | null>;
244
+ transaction<T = unknown>(callback: TransactionCallback): Promise<TransactionResult<T>>;
142
245
  /**
143
- * Executes a query with positional parameters.
144
- * Skips named parameter processing. Use ? placeholders only.
246
+ * Executes multiple queries in a batch within a transaction.
247
+ * All queries are executed atomically - either all succeed or all are rolled back.
248
+ * More efficient than executing queries one by one.
145
249
  *
146
- * @param query - SQL query with ? placeholders
147
- * @param parameters - Array of values for placeholders
148
- * @returns Query result
250
+ * @param queries - Array of queries with their parameters
251
+ * @returns TransactionResult with success status and array of results
149
252
  * @example
150
- * const result = await db.rawExecute('SELECT * FROM users WHERE id = ?', [1]);
253
+ * const { success, result } = await db.batch([
254
+ * { query: 'INSERT INTO users (name) VALUES (:name)', parameters: { name: 'John' } },
255
+ * { query: 'INSERT INTO users (name) VALUES (:name)', parameters: { name: 'Jane' } },
256
+ * { query: 'UPDATE accounts SET balance = :balance WHERE id = :id', parameters: { balance: 100, id: 1 } }
257
+ * ]);
258
+ * if (success) {
259
+ * console.log(`Executed ${result.length} queries`);
260
+ * }
151
261
  */
152
- rawExecute<T = unknown>(query: string, parameters?: unknown[]): Promise<T | null>;
262
+ batch(queries: BatchQuery[]): Promise<TransactionResult<any[]>>;
153
263
  /**
154
264
  * Returns a connection from the pool.
155
265
  * Must call connection.release() when finished.
156
266
  *
157
267
  * @returns Database connection
268
+ * @throws {Error} If pool is unable to provide a connection (pool exhausted, connection timeout, etc.)
158
269
  * @example
159
270
  * const connection = await db.getConnection();
160
271
  * try {
@@ -168,6 +279,7 @@ export declare class MySQL {
168
279
  * Closes all connections in the pool.
169
280
  * Call when shutting down the application.
170
281
  *
282
+ * @throws {Error} If pool fails to close connections
171
283
  * @example
172
284
  * await db.end();
173
285
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MySQL.d.ts","sourceRoot":"","sources":["../src/MySQL.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,IAAI,EACJ,cAAc,EAGd,aAAa,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,MAAM,gBAAgB,CAAC;AAEnC,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EAEZ,eAAe,EACf,mBAAmB,EACnB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,yBAAyB,CAA0E;IAC3G,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,SAAS,CAAgB;IAEjC;;;;;OAKG;gBACS,MAAM,CAAC,EAAE,gBAAgB;IAkCrC,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,wBAAwB;IAgChC,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,QAAQ;IAoChB,OAAO,CAAC,WAAW;IAQnB;;;;;;;;;OASG;IACG,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAoB1F;;;;;;;;;OASG;IACG,KAAK,CAAC,CAAC,GAAG,aAAa,EAAE,EAC7B,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,eAAe,GAC3B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAoBpB;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAsBvF;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAqBvF;;;;;;;;;;OAUG;IACG,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA0BzF;;;;;;;;;;;;OAYG;IACG,MAAM,CAAC,CAAC,GAAG,aAAa,EAC5B,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,eAAe,GAC3B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAmBpB;;;;;;;;OAQG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC;IAYlE;;;;;;;;;;;OAWG;IACG,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAqChF;;;;;;;;;OASG;IACG,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA2BvF;;;;;;;;;;;;OAYG;IACG,aAAa,IAAI,OAAO,CAAC,cAAc,CAAC;IAI9C;;;;;;OAMG;IACG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B;;;;;OAKG;IACH,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"MySQL.d.ts","sourceRoot":"","sources":["../src/MySQL.ts"],"names":[],"mappings":"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"}
package/dist/MySQL.js CHANGED
@@ -15,12 +15,12 @@ export class MySQL {
15
15
  versionPrefix = '';
16
16
  metricsExportResource;
17
17
  metricsExportFunction;
18
- poolReady;
19
18
  /**
20
19
  * Creates a new MySQL instance with connection pooling.
21
20
  * If no config is provided, it will automatically look for connection strings in environment variables.
22
21
  *
23
22
  * @param config - Optional database configuration. If omitted, uses environment variables.
23
+ * @throws {Error} If no connection string is found or if connection string validation fails
24
24
  */
25
25
  constructor(config) {
26
26
  this.resourceName = this.getResourceName();
@@ -41,7 +41,7 @@ export class MySQL {
41
41
  ...poolConfig,
42
42
  });
43
43
  this.namedPlaceholdersCompiler = namedPlaceholders();
44
- this.poolReady = this.pool.getConnection().then(conn => {
44
+ this.pool.getConnection().then(conn => {
45
45
  const serverVersion = conn.connection?._handshakePacket?.serverVersion;
46
46
  if (serverVersion) {
47
47
  this.versionPrefix = `^4[${serverVersion}]^0 `;
@@ -85,6 +85,13 @@ export class MySQL {
85
85
  formatResourceConvar(resourceName) {
86
86
  return resourceName.replace(/-/g, '_').toLowerCase();
87
87
  }
88
+ /**
89
+ * Gets default configuration from environment variables.
90
+ *
91
+ * @returns ConnectionConfig object
92
+ * @throws {Error} If no connection string is found in environment variables
93
+ * @throws {Error} If connection string validation fails
94
+ */
88
95
  getDefaultConfig() {
89
96
  let connectionString = null;
90
97
  const resourceName = this.getResourceName();
@@ -107,6 +114,16 @@ export class MySQL {
107
114
  this.validateConnectionString(connectionString);
108
115
  return { connectionString };
109
116
  }
117
+ /**
118
+ * Validates the connection string format.
119
+ *
120
+ * @param connectionString - Connection string to validate
121
+ * @throws {Error} If protocol is not 'mysql:'
122
+ * @throws {Error} If hostname is missing
123
+ * @throws {Error} If database name is missing
124
+ * @throws {Error} If username is missing
125
+ * @throws {Error} If connection string format is invalid
126
+ */
110
127
  validateConnectionString(connectionString) {
111
128
  try {
112
129
  const url = new URL(connectionString);
@@ -131,6 +148,13 @@ export class MySQL {
131
148
  throw error;
132
149
  }
133
150
  }
151
+ /**
152
+ * Parses connection string into PoolOptions.
153
+ *
154
+ * @param connectionString - Connection string to parse
155
+ * @returns PoolOptions configuration object
156
+ * @throws {TypeError} If connection string is not a valid URL
157
+ */
134
158
  parseConnectionString(connectionString) {
135
159
  const url = new URL(connectionString);
136
160
  return {
@@ -188,6 +212,21 @@ export class MySQL {
188
212
  globalThis.ScheduleResourceTick(this.resourceName);
189
213
  }
190
214
  }
215
+ async executeWithTiming(processedQuery, processedParams, executor) {
216
+ const startTime = performance.now();
217
+ try {
218
+ const result = await executor();
219
+ const executionTime = performance.now() - startTime;
220
+ this.logQuery(processedQuery, executionTime, processedParams);
221
+ return result;
222
+ }
223
+ catch (error) {
224
+ const executionTime = performance.now() - startTime;
225
+ this.logQuery(processedQuery, executionTime, processedParams, error);
226
+ this.handleError(error);
227
+ return null;
228
+ }
229
+ }
191
230
  exportMetric(metric) {
192
231
  if (this.metricsExportResource && this.metricsExportFunction) {
193
232
  try {
@@ -196,8 +235,53 @@ export class MySQL {
196
235
  catch (error) { }
197
236
  }
198
237
  }
238
+ replaceAtSymbols(query) {
239
+ return query.replace(/@/g, ':');
240
+ }
241
+ /**
242
+ * Executes a query on a specific connection with timing and logging.
243
+ *
244
+ * @param connection - Database connection to use
245
+ * @param query - SQL query to execute
246
+ * @param parameters - Query parameters
247
+ * @returns Query result
248
+ * @throws Query execution errors (SQL errors, syntax errors, constraint violations, etc.)
249
+ */
250
+ async executeInConnection(connection, query, parameters) {
251
+ this.scheduleResourceTick();
252
+ const [processedQuery, processedParams] = this.processParameters(query, parameters);
253
+ const startTime = performance.now();
254
+ try {
255
+ const [result] = await connection.execute(processedQuery, processedParams);
256
+ const executionTime = performance.now() - startTime;
257
+ this.logQuery(processedQuery, executionTime, processedParams);
258
+ return result;
259
+ }
260
+ catch (error) {
261
+ const executionTime = performance.now() - startTime;
262
+ this.logQuery(processedQuery, executionTime, processedParams, error);
263
+ throw error;
264
+ }
265
+ }
266
+ async executeTransaction(callback) {
267
+ const connection = await this.pool.getConnection();
268
+ try {
269
+ await connection.beginTransaction();
270
+ const result = await callback(connection);
271
+ await connection.commit();
272
+ return { success: true, result };
273
+ }
274
+ catch (error) {
275
+ await connection.rollback();
276
+ const errorMessage = error instanceof Error ? error.message : String(error);
277
+ return { success: false, error: errorMessage };
278
+ }
279
+ finally {
280
+ connection.release();
281
+ }
282
+ }
199
283
  processParameters(query, parameters) {
200
- const processedQuery = query.replace(/@/g, ':');
284
+ const processedQuery = this.replaceAtSymbols(query);
201
285
  if (!parameters) {
202
286
  return [processedQuery, []];
203
287
  }
@@ -246,132 +330,176 @@ export class MySQL {
246
330
  throw error;
247
331
  }
248
332
  }
333
+ /**
334
+ * Executes a SQL query with raw positional parameters.
335
+ * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
336
+ * Use ? placeholders only.
337
+ *
338
+ * @param query - SQL query with ? placeholders only
339
+ * @param parameters - Array of values (undefined values are NOT converted to null)
340
+ * @returns Query result
341
+ * @example
342
+ * const result = await db.rawExecute('SELECT * FROM users WHERE uid = ?', [1]);
343
+ */
344
+ async rawExecute(query, parameters) {
345
+ this.scheduleResourceTick();
346
+ const params = parameters || [];
347
+ return this.executeWithTiming(query, params, async () => {
348
+ const [results] = await this.pool.execute(query, params);
349
+ return results;
350
+ });
351
+ }
249
352
  /**
250
353
  * Executes a SQL query and returns the raw results.
251
354
  * Supports SELECT, INSERT, UPDATE, DELETE, and other SQL statements.
355
+ * Processes named parameters (:name), converts undefined to null, and converts @ to :.
252
356
  *
253
357
  * @param query - SQL query with :name or ? placeholders
254
358
  * @param parameters - Parameter values as object or array
255
359
  * @returns Query result
256
360
  * @example
257
- * const result = await db.execute('SELECT * FROM users WHERE id = :id', { id: 1 });
361
+ * const result = await db.execute('SELECT * FROM users WHERE uid = :uid', { uid: 1 });
258
362
  */
259
363
  async execute(query, parameters) {
260
- this.scheduleResourceTick();
261
364
  const [processedQuery, processedParams] = this.processParameters(query, parameters);
262
- await this.poolReady;
263
- const startTime = performance.now();
264
- try {
265
- const [results] = await this.pool.execute(processedQuery, processedParams);
266
- const executionTime = performance.now() - startTime;
267
- this.logQuery(processedQuery, executionTime, processedParams);
268
- return results;
269
- }
270
- catch (error) {
271
- const executionTime = performance.now() - startTime;
272
- this.logQuery(processedQuery, executionTime, processedParams, error);
273
- this.handleError(error);
274
- return null;
275
- }
365
+ return this.rawExecute(processedQuery, processedParams);
366
+ }
367
+ /**
368
+ * Executes a SELECT query with raw positional parameters.
369
+ * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
370
+ * Use ? placeholders only.
371
+ *
372
+ * @param query - SELECT query with ? placeholders only
373
+ * @param parameters - Array of values (undefined values are NOT converted to null)
374
+ * @returns Array of rows
375
+ * @example
376
+ * const users = await db.rawQuery('SELECT * FROM users WHERE job_name = ?', ['police']);
377
+ */
378
+ async rawQuery(query, parameters) {
379
+ this.scheduleResourceTick();
380
+ const params = parameters || [];
381
+ return this.executeWithTiming(query, params, async () => {
382
+ const [rows] = await this.pool.query(query, params);
383
+ return rows;
384
+ });
276
385
  }
277
386
  /**
278
387
  * Executes a SELECT query and returns rows.
279
388
  * Use for queries returning multiple rows.
389
+ * Processes named parameters (:name), converts undefined to null, and converts @ to :.
280
390
  *
281
391
  * @param query - SELECT query with :name or ? placeholders
282
392
  * @param parameters - Parameter values
283
393
  * @returns Array of rows
284
394
  * @example
285
- * const users = await db.query('SELECT * FROM users WHERE age > :age', { age: 18 });
395
+ * const users = await db.query('SELECT * FROM users WHERE job_name = :job', { job: 'police' });
286
396
  */
287
397
  async query(query, parameters) {
288
- this.scheduleResourceTick();
289
398
  const [processedQuery, processedParams] = this.processParameters(query, parameters);
290
- await this.poolReady;
291
- const startTime = performance.now();
292
- try {
293
- const [rows] = await this.pool.query(processedQuery, processedParams);
294
- const executionTime = performance.now() - startTime;
295
- this.logQuery(processedQuery, executionTime, processedParams);
296
- return rows;
297
- }
298
- catch (error) {
299
- const executionTime = performance.now() - startTime;
300
- this.logQuery(processedQuery, executionTime, processedParams, error);
301
- this.handleError(error);
302
- return null;
303
- }
399
+ return this.rawQuery(processedQuery, processedParams);
400
+ }
401
+ /**
402
+ * Inserts a row with raw positional parameters.
403
+ * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
404
+ * Returns the auto-generated ID.
405
+ *
406
+ * @param query - INSERT query with ? placeholders only
407
+ * @param parameters - Array of values (undefined values are NOT converted to null)
408
+ * @returns Insert ID or null on error
409
+ * @example
410
+ * const insertId = await db.rawInsert('INSERT INTO users (identifier_id, char_data_id, first_name, last_name, inventory_id) VALUES (?, ?, ?, ?, ?)', [1, 1, 'John', 'Doe', 1]);
411
+ */
412
+ async rawInsert(query, parameters) {
413
+ this.scheduleResourceTick();
414
+ const params = parameters || [];
415
+ return this.executeWithTiming(query, params, async () => {
416
+ const [result] = await this.pool.execute(query, params);
417
+ return result.insertId;
418
+ });
304
419
  }
305
420
  /**
306
421
  * Inserts a row into the database.
307
- * Returns the auto-generated ID and affected row count.
422
+ * Returns the auto-generated ID.
423
+ * Processes named parameters (:name), converts undefined to null, and converts @ to :.
308
424
  *
309
425
  * @param query - INSERT query with :name or ? placeholders
310
426
  * @param parameters - Values to insert
311
- * @returns Object with insertId and affectedRows
427
+ * @returns Insert ID or null on error
312
428
  * @example
313
- * const result = await db.insert(
314
- * 'INSERT INTO users (name, email) VALUES (:name, :email)',
315
- * { name: 'John', email: 'john@example.com' }
429
+ * const insertId = await db.insert(
430
+ * 'INSERT INTO users (identifier_id, char_data_id, first_name, last_name, inventory_id) VALUES (:identifier_id, :char_data_id, :first_name, :last_name, :inventory_id)',
431
+ * { identifier_id: 1, char_data_id: 1, first_name: 'John', last_name: 'Doe', inventory_id: 1 }
316
432
  * );
317
- * console.log(result.insertId);
318
433
  */
319
434
  async insert(query, parameters) {
320
435
  const [processedQuery, processedParams] = this.processParameters(query, parameters);
321
- await this.poolReady;
322
- const startTime = performance.now();
323
- try {
324
- const [result] = await this.pool.execute(processedQuery, processedParams);
325
- const executionTime = performance.now() - startTime;
326
- this.logQuery(processedQuery, executionTime, processedParams);
327
- return {
328
- insertId: result.insertId,
329
- affectedRows: result.affectedRows,
330
- };
331
- }
332
- catch (error) {
333
- const executionTime = performance.now() - startTime;
334
- this.logQuery(processedQuery, executionTime, processedParams, error);
335
- this.handleError(error);
336
- return null;
337
- }
436
+ return this.rawInsert(processedQuery, processedParams);
437
+ }
438
+ /**
439
+ * Updates rows with raw positional parameters.
440
+ * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
441
+ * Returns the number of affected rows.
442
+ *
443
+ * @param query - UPDATE query with ? placeholders only
444
+ * @param parameters - Array of values (undefined values are NOT converted to null)
445
+ * @returns Number of affected rows or null on error
446
+ * @example
447
+ * const affectedRows = await db.rawUpdate('UPDATE users SET job_name = ?, job_rank = ? WHERE uid = ?', ['police', 1, 123]);
448
+ */
449
+ async rawUpdate(query, parameters) {
450
+ this.scheduleResourceTick();
451
+ const params = parameters || [];
452
+ return this.executeWithTiming(query, params, async () => {
453
+ const [result] = await this.pool.execute(query, params);
454
+ return result.affectedRows;
455
+ });
338
456
  }
339
457
  /**
340
458
  * Updates rows in the database.
341
459
  * Returns the number of affected rows.
460
+ * Processes named parameters (:name), converts undefined to null, and converts @ to :.
342
461
  *
343
462
  * @param query - UPDATE query with :name or ? placeholders
344
463
  * @param parameters - Values to update
345
- * @returns Object with affectedRows count
464
+ * @returns Number of affected rows or null on error
346
465
  * @example
347
- * const result = await db.update(
348
- * 'UPDATE users SET verified = 1 WHERE id = :id',
349
- * { id: 123 }
466
+ * const affectedRows = await db.update(
467
+ * 'UPDATE users SET job_name = :job, job_rank = :rank WHERE uid = :uid',
468
+ * { job: 'police', rank: 1, uid: 123 }
350
469
  * );
351
- * console.log(result.affectedRows);
352
470
  */
353
471
  async update(query, parameters) {
354
472
  const [processedQuery, processedParams] = this.processParameters(query, parameters);
355
- await this.poolReady;
356
- const startTime = performance.now();
357
- try {
358
- const [result] = await this.pool.execute(processedQuery, processedParams);
359
- const executionTime = performance.now() - startTime;
360
- this.logQuery(processedQuery, executionTime, processedParams);
361
- return {
362
- affectedRows: result.affectedRows,
363
- };
364
- }
365
- catch (error) {
366
- const executionTime = performance.now() - startTime;
367
- this.logQuery(processedQuery, executionTime, processedParams, error);
368
- this.handleError(error);
369
- return null;
370
- }
473
+ return this.rawUpdate(processedQuery, processedParams);
474
+ }
475
+ /**
476
+ * Returns a single value with raw positional parameters.
477
+ * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
478
+ * Use for COUNT, SUM, or single column queries.
479
+ *
480
+ * @param query - SELECT query with ? placeholders only, returning one column
481
+ * @param parameters - Array of values (undefined values are NOT converted to null)
482
+ * @returns Value from first column of first row, or null
483
+ * @example
484
+ * const count = await db.rawScalar('SELECT COUNT(*) FROM users WHERE age > ?', [18]);
485
+ */
486
+ async rawScalar(query, parameters) {
487
+ this.scheduleResourceTick();
488
+ const params = parameters || [];
489
+ return this.executeWithTiming(query, params, async () => {
490
+ const [rows] = await this.pool.query(query, params);
491
+ if (!rows || rows.length === 0) {
492
+ return null;
493
+ }
494
+ const firstRow = rows[0];
495
+ const firstColumn = Object.values(firstRow)[0];
496
+ return firstColumn;
497
+ });
371
498
  }
372
499
  /**
373
500
  * Returns a single value from the database.
374
501
  * Use for COUNT, SUM, or single column queries.
502
+ * Processes named parameters (:name), converts undefined to null, and converts @ to :.
375
503
  *
376
504
  * @param query - SELECT query returning one column
377
505
  * @param parameters - Parameter values
@@ -382,29 +510,31 @@ export class MySQL {
382
510
  */
383
511
  async scalar(query, parameters) {
384
512
  const [processedQuery, processedParams] = this.processParameters(query, parameters);
385
- await this.poolReady;
386
- const startTime = performance.now();
387
- try {
388
- const [rows] = await this.pool.query(processedQuery, processedParams);
389
- const executionTime = performance.now() - startTime;
390
- this.logQuery(processedQuery, executionTime, processedParams);
391
- if (!rows || rows.length === 0) {
392
- return null;
393
- }
394
- const firstRow = rows[0];
395
- const firstColumn = Object.values(firstRow)[0];
396
- return firstColumn;
397
- }
398
- catch (error) {
399
- const executionTime = performance.now() - startTime;
400
- this.logQuery(processedQuery, executionTime, processedParams, error);
401
- this.handleError(error);
402
- return null;
403
- }
513
+ return this.rawScalar(processedQuery, processedParams);
514
+ }
515
+ /**
516
+ * Returns a single row with raw positional parameters.
517
+ * This cannot use named parameters (i.e. :job_name, or @job_name), you cannot use undefined as a value here you *must* use null, otherwise you will get an error.
518
+ * Returns null if no rows match.
519
+ *
520
+ * @param query - SELECT query with ? placeholders only
521
+ * @param parameters - Array of values (undefined values are NOT converted to null)
522
+ * @returns Single row or null
523
+ * @example
524
+ * const user = await db.rawSingle('SELECT * FROM users WHERE id = ?', [1]);
525
+ */
526
+ async rawSingle(query, parameters) {
527
+ this.scheduleResourceTick();
528
+ const params = parameters || [];
529
+ return this.executeWithTiming(query, params, async () => {
530
+ const [rows] = await this.pool.query(query, params);
531
+ return rows.length > 0 ? rows[0] : null;
532
+ });
404
533
  }
405
534
  /**
406
535
  * Returns a single row from the database.
407
536
  * Returns null if no rows match.
537
+ * Processes named parameters (:name), converts undefined to null, and converts @ to :.
408
538
  *
409
539
  * @param query - SELECT query with :name or ? placeholders
410
540
  * @param parameters - Parameter values
@@ -417,128 +547,64 @@ export class MySQL {
417
547
  */
418
548
  async single(query, parameters) {
419
549
  const [processedQuery, processedParams] = this.processParameters(query, parameters);
420
- await this.poolReady;
421
- const startTime = performance.now();
422
- try {
423
- const [rows] = await this.pool.query(processedQuery, processedParams);
424
- const executionTime = performance.now() - startTime;
425
- this.logQuery(processedQuery, executionTime, processedParams);
426
- return rows.length > 0 ? rows[0] : null;
427
- }
428
- catch (error) {
429
- const executionTime = performance.now() - startTime;
430
- this.logQuery(processedQuery, executionTime, processedParams, error);
431
- this.handleError(error);
432
- return null;
433
- }
434
- }
435
- /**
436
- * Prepares a statement for execution.
437
- * Use for executing the same query multiple times with different parameters.
438
- *
439
- * @param query - SQL query to prepare
440
- * @returns Prepared statement
441
- * @example
442
- * const stmt = await db.prepare('SELECT * FROM users WHERE id = ?');
443
- */
444
- async prepare(query) {
445
- this.scheduleResourceTick();
446
- const connection = await this.pool.getConnection();
447
- try {
448
- const processedQuery = query.replace(/@/g, ':');
449
- const statement = await connection.prepare(processedQuery);
450
- return statement;
451
- }
452
- finally {
453
- connection.release();
454
- }
550
+ return this.rawSingle(processedQuery, processedParams);
455
551
  }
456
552
  /**
457
553
  * Executes multiple queries as an atomic transaction.
458
554
  * All changes are rolled back if any query fails.
459
555
  *
460
556
  * @param callback - Function receiving an execute function for queries
461
- * @returns Value returned by callback
557
+ * @returns TransactionResult with success status and result/error
462
558
  * @example
463
- * await db.transaction(async (execute) => {
559
+ * const { success, result, error } = await db.transaction(async (execute) => {
464
560
  * await execute('INSERT INTO accounts (balance) VALUES (:balance)', { balance: 100 });
465
561
  * await execute('UPDATE users SET has_account = 1 WHERE id = :id', { id: 1 });
562
+ * return { accountId: 123 };
466
563
  * });
467
564
  */
468
565
  async transaction(callback) {
469
566
  this.scheduleResourceTick();
470
- await this.poolReady;
471
- const connection = await this.pool.getConnection();
472
- try {
473
- await connection.beginTransaction();
474
- const executeInTransaction = async (query, parameters) => {
475
- this.scheduleResourceTick();
476
- const [processedQuery, processedParams] = this.processParameters(query, parameters);
477
- const startTime = performance.now();
478
- try {
479
- const [result] = await connection.execute(processedQuery, processedParams);
480
- const executionTime = performance.now() - startTime;
481
- this.logQuery(processedQuery, executionTime, processedParams);
482
- return result;
483
- }
484
- catch (error) {
485
- const executionTime = performance.now() - startTime;
486
- this.logQuery(processedQuery, executionTime, processedParams, error);
487
- throw error;
488
- }
567
+ return this.executeTransaction(async (connection) => {
568
+ const executeInTransaction = (query, parameters) => {
569
+ return this.executeInConnection(connection, query, parameters);
489
570
  };
490
- const result = await callback(executeInTransaction);
491
- await connection.commit();
492
- return result;
493
- }
494
- catch (error) {
495
- await connection.rollback();
496
- this.handleError(error);
497
- return null;
498
- }
499
- finally {
500
- connection.release();
501
- }
571
+ return callback(executeInTransaction);
572
+ });
502
573
  }
503
574
  /**
504
- * Executes a query with positional parameters.
505
- * Skips named parameter processing. Use ? placeholders only.
575
+ * Executes multiple queries in a batch within a transaction.
576
+ * All queries are executed atomically - either all succeed or all are rolled back.
577
+ * More efficient than executing queries one by one.
506
578
  *
507
- * @param query - SQL query with ? placeholders
508
- * @param parameters - Array of values for placeholders
509
- * @returns Query result
579
+ * @param queries - Array of queries with their parameters
580
+ * @returns TransactionResult with success status and array of results
510
581
  * @example
511
- * const result = await db.rawExecute('SELECT * FROM users WHERE id = ?', [1]);
582
+ * const { success, result } = await db.batch([
583
+ * { query: 'INSERT INTO users (name) VALUES (:name)', parameters: { name: 'John' } },
584
+ * { query: 'INSERT INTO users (name) VALUES (:name)', parameters: { name: 'Jane' } },
585
+ * { query: 'UPDATE accounts SET balance = :balance WHERE id = :id', parameters: { balance: 100, id: 1 } }
586
+ * ]);
587
+ * if (success) {
588
+ * console.log(`Executed ${result.length} queries`);
589
+ * }
512
590
  */
513
- async rawExecute(query, parameters) {
591
+ async batch(queries) {
514
592
  this.scheduleResourceTick();
515
- const processedQuery = query.replace(/@/g, ':');
516
- const params = parameters || [];
517
- for (let i = 0; i < params.length; i++) {
518
- if (params[i] === undefined) {
519
- params[i] = null;
593
+ return this.executeTransaction(async (connection) => {
594
+ const results = [];
595
+ for (const { query, parameters } of queries) {
596
+ const result = await this.executeInConnection(connection, query, parameters);
597
+ results.push(result);
520
598
  }
521
- }
522
- await this.poolReady;
523
- const startTime = performance.now();
524
- try {
525
- const [results] = await this.pool.execute(processedQuery, params);
526
- const executionTime = performance.now() - startTime;
527
- this.logQuery(processedQuery, executionTime, params);
528
599
  return results;
529
- }
530
- catch (error) {
531
- const executionTime = performance.now() - startTime;
532
- this.logQuery(processedQuery, executionTime, params, error);
533
- this.handleError(error);
534
- return null;
535
- }
600
+ });
536
601
  }
537
602
  /**
538
603
  * Returns a connection from the pool.
539
604
  * Must call connection.release() when finished.
540
605
  *
541
606
  * @returns Database connection
607
+ * @throws {Error} If pool is unable to provide a connection (pool exhausted, connection timeout, etc.)
542
608
  * @example
543
609
  * const connection = await db.getConnection();
544
610
  * try {
@@ -554,6 +620,7 @@ export class MySQL {
554
620
  * Closes all connections in the pool.
555
621
  * Call when shutting down the application.
556
622
  *
623
+ * @throws {Error} If pool fails to close connections
557
624
  * @example
558
625
  * await db.end();
559
626
  */
package/dist/MySQL.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"MySQL.js","sourceRoot":"","sources":["../src/MySQL.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MySQL.js","sourceRoot":"","sources":["../src/MySQL.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { MySQL } from './MySQL.js';
2
2
  export { MySQL };
3
- export type { ConnectionConfig, FieldPacket, InsertResult, Pool, PoolOptions, QueryMetrics, QueryParameters, QueryResult, ResultSetHeader, RowDataPacket, TransactionCallback, UpdateResult, } from './types.js';
3
+ export type { BatchQuery, ConnectionConfig, FieldPacket, Pool, PoolOptions, QueryMetrics, QueryParameters, QueryResult, ResultSetHeader, RowDataPacket, TransactionCallback, TransactionResult, } from './types.js';
4
4
  export declare const db: MySQL;
5
5
  export default db;
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,eAAe,EACf,WAAW,EACX,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,EAAE,OAAc,CAAC;AAC9B,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,eAAe,EACf,WAAW,EACX,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,EAAE,OAAc,CAAC;AAC9B,eAAe,EAAE,CAAC"}
package/dist/types.d.ts CHANGED
@@ -4,16 +4,18 @@ export interface ConnectionConfig extends PoolOptions {
4
4
  }
5
5
  export type QueryParameters = Record<string, any> | any[];
6
6
  export type QueryResult<T = any> = T extends RowDataPacket[] ? T : any;
7
- export interface InsertResult {
8
- insertId: number;
9
- affectedRows: number;
10
- }
11
- export interface UpdateResult {
12
- affectedRows: number;
13
- }
14
7
  export interface TransactionCallback {
15
8
  (execute: (query: string, parameters?: QueryParameters) => Promise<any>): Promise<any>;
16
9
  }
10
+ export interface TransactionResult<T = any> {
11
+ success: boolean;
12
+ result?: T;
13
+ error?: string;
14
+ }
15
+ export interface BatchQuery {
16
+ query: string;
17
+ parameters?: QueryParameters;
18
+ }
17
19
  export interface QueryMetrics {
18
20
  query: string;
19
21
  executionTime: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAErG,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AAE1D,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,aAAa,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;AAEvE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACxF;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAErG,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;AAE1D,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,aAAa,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACxF;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pma-network/sql",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "MySQL wrapper with promise-based async operations, connection pooling, and named parameters support",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",