@simplysm/orm-node 13.0.69 → 13.0.71

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
@@ -1,493 +1,37 @@
1
1
  # @simplysm/orm-node
2
2
 
3
- The Node.js implementation module of Simplysm ORM, responsible for actual database connections, query execution, transaction management, and connection pooling for MySQL, MSSQL (SQL Server), and PostgreSQL. This is the layer that directly communicates with databases in a Node.js environment, based on the schemas and query builders defined in `@simplysm/orm-common`.
3
+ Simplysm package - ORM module (node)
4
4
 
5
5
  ## Installation
6
6
 
7
- ```bash
8
- npm install @simplysm/orm-node
9
- # or
10
7
  pnpm add @simplysm/orm-node
11
- ```
12
8
 
13
- ### Database-Specific Driver Installation
9
+ **Peer Dependencies:** `mysql2` (optional), `pg` (optional), `pg-copy-streams` (optional), `tedious` (optional)
14
10
 
15
- You must additionally install the driver for your database. Drivers not in use don't need to be installed.
11
+ ## Source Index
16
12
 
17
- ```bash
18
- # MySQL
19
- npm install mysql2
13
+ ### Types
20
14
 
21
- # SQL Server (MSSQL)
22
- npm install tedious
15
+ | Source | Exports | Description | Test |
16
+ |--------|---------|-------------|------|
17
+ | `src/types/db-conn.ts` | `DB_CONN_CONNECT_TIMEOUT`, `DB_CONN_DEFAULT_TIMEOUT`, `DB_CONN_ERRORS`, `DbConn`, `DbPoolConfig`, `DbConnConfig`, `MysqlDbConnConfig`, `MssqlDbConnConfig`, `PostgresqlDbConnConfig`, `getDialectFromConfig` | Database connection interface, config types, and timeout constants for all dialects | `-` |
23
18
 
24
- # PostgreSQL
25
- npm install pg pg-copy-streams
26
- ```
19
+ ### Connections
27
20
 
28
- ## Architecture
21
+ | Source | Exports | Description | Test |
22
+ |--------|---------|-------------|------|
23
+ | `src/connections/mssql-db-conn.ts` | `MssqlDbConn` | MSSQL database connection implementation using tedious | `-` |
24
+ | `src/connections/mysql-db-conn.ts` | `MysqlDbConn` | MySQL database connection implementation using mysql2 | `-` |
25
+ | `src/connections/postgresql-db-conn.ts` | `PostgresqlDbConn` | PostgreSQL database connection implementation using pg | `-` |
29
26
 
30
- ```
31
- createOrm() (top-level entry point)
32
- └── NodeDbContextExecutor (executor between DbContext and actual DB)
33
- └── createDbConn() (connection creation and pool management)
34
- └── PooledDbConn (connection pool wrapper)
35
- └── MysqlDbConn / MssqlDbConn / PostgresqlDbConn (DBMS-specific low-level connections)
36
- ```
27
+ ### Core
37
28
 
38
- - `createOrm()` is the top-level factory function that takes a `DbContextDef` and connection settings to manage transactions.
39
- - `NodeDbContextExecutor` is the executor used by `DbContext`, converting `QueryDef` to SQL and executing it.
40
- - `createDbConn()` is a factory function that creates a `PooledDbConn` wrapper synchronously; actual pool acquisition happens when `connect()` is called on the returned object.
41
- - `PooledDbConn` is a connection pool wrapper based on `generic-pool`, returning connections to the pool instead of closing them after use.
42
- - Each DBMS-specific connection class (`MysqlDbConn`, `MssqlDbConn`, `PostgresqlDbConn`) directly uses low-level DB drivers. These are not intended for direct instantiation — use `createDbConn()` instead.
43
-
44
- ## Main Modules
45
-
46
- ### Functions
47
-
48
- | Function | Description |
49
- |----------|-------------|
50
- | `createOrm()` | ORM factory function. Takes a `DbContextDef` and connection settings to manage transaction-based connections. |
51
- | `createDbConn()` | Connection factory function. Caches connection pools by configuration and returns a `DbConn` (backed by `PooledDbConn`). |
52
-
53
- ### Classes
54
-
55
- | Class | Description |
56
- |--------|------|
57
- | `NodeDbContextExecutor` | `DbContextExecutor` implementation. Converts `QueryDef` to SQL, executes it, and parses results. |
58
- | `PooledDbConn` | Connection pool wrapper. Acquires/returns physical connections from `generic-pool`, implements `DbConn` interface. |
59
- | `MysqlDbConn` | MySQL connection class. Uses `mysql2/promise` driver. |
60
- | `MssqlDbConn` | MSSQL/Azure SQL connection class. Uses `tedious` driver. |
61
- | `PostgresqlDbConn` | PostgreSQL connection class. Uses `pg` and `pg-copy-streams` drivers. |
62
-
63
- ### Interfaces and Types
64
-
65
- | Type | Description |
66
- |------|------|
67
- | `DbConn` | Low-level DB connection interface. Implemented by all DBMS-specific connection classes. |
68
- | `Orm<TDef>` | Return type of `createOrm()`. Exposes `connect()` and `connectWithoutTransaction()` methods. |
69
- | `OrmOptions` | `createOrm()` options. `database`, `schema` settings that override `DbConnConfig`. |
70
- | `DbConnConfig` | DB connection config union type (`MysqlDbConnConfig \| MssqlDbConnConfig \| PostgresqlDbConnConfig`). |
71
- | `MysqlDbConnConfig` | MySQL connection config. `dialect: "mysql"`. |
72
- | `MssqlDbConnConfig` | MSSQL connection config. `dialect: "mssql" \| "mssql-azure"`. |
73
- | `PostgresqlDbConnConfig` | PostgreSQL connection config. `dialect: "postgresql"`. |
74
- | `DbPoolConfig` | Connection pool config (`min`, `max`, `acquireTimeoutMillis`, `idleTimeoutMillis`). |
75
-
76
- ### Constants and Utility Functions
77
-
78
- | Name | Description |
79
- |------|------|
80
- | `DB_CONN_CONNECT_TIMEOUT` | DB connection establishment timeout (10 seconds, 10000ms). |
81
- | `DB_CONN_DEFAULT_TIMEOUT` | DB query default timeout (10 minutes, 600000ms). |
82
- | `DB_CONN_ERRORS` | DB connection error message constants (`NOT_CONNECTED`, `ALREADY_CONNECTED`). |
83
- | `getDialectFromConfig(config)` | Extract `Dialect` from `DbConnConfig`. `"mssql-azure"` is converted to `"mssql"`. |
84
-
85
- ## Usage
86
-
87
- ### Basic Usage with createOrm
88
-
89
- `createOrm()` is the top-level factory function used with `defineDbContext`. It automatically handles transaction management.
90
-
91
- ```typescript
92
- import { createOrm } from "@simplysm/orm-node";
93
- import { defineDbContext, Table } from "@simplysm/orm-common";
94
-
95
- // 1. Define table
96
- const User = Table("User")
97
- .database("mydb")
98
- .columns((c) => ({
99
- id: c.bigint().autoIncrement(),
100
- name: c.varchar(100),
101
- email: c.varchar(200).nullable(),
102
- }))
103
- .primaryKey("id");
104
-
105
- // 2. Define DbContext
106
- const MyDb = defineDbContext({
107
- tables: { user: User },
108
- });
109
-
110
- // 3. Create ORM instance
111
- const orm = createOrm(MyDb, {
112
- dialect: "mysql",
113
- host: "localhost",
114
- port: 3306,
115
- username: "root",
116
- password: "password",
117
- database: "mydb",
118
- });
119
-
120
- // 4. Execute queries within transaction (commits on success, rolls back on failure)
121
- const users = await orm.connect(async (db) => {
122
- return await db.user().result();
123
- });
124
- ```
125
-
126
- ### Transaction Management
127
-
128
- ```typescript
129
- // Execute within transaction (auto commit/rollback)
130
- await orm.connect(async (db) => {
131
- await db.user().insert([
132
- { name: "John Doe", email: "john@example.com" },
133
- { name: "Jane Smith", email: "jane@example.com" },
134
- ]);
135
- // Commits if callback completes successfully
136
- // Auto rollback if exception occurs
137
- });
138
-
139
- // Specify isolation level
140
- await orm.connect(async (db) => {
141
- const users = await db.user().result();
142
- return users;
143
- }, "SERIALIZABLE");
144
-
145
- // Execute without transaction (for DDL operations, etc.)
146
- await orm.connectWithoutTransaction(async (db) => {
147
- const users = await db.user().result();
148
- return users;
149
- });
150
- ```
151
-
152
- Supported isolation levels (`IsolationLevel`):
153
- - `"READ_UNCOMMITTED"`
154
- - `"READ_COMMITTED"`
155
- - `"REPEATABLE_READ"`
156
- - `"SERIALIZABLE"`
157
-
158
- ### Overriding database/schema via OrmOptions
159
-
160
- Using `OrmOptions`, you can use different values instead of the `database`/`schema` set in `DbConnConfig`.
161
-
162
- ```typescript
163
- const orm = createOrm(MyDb, {
164
- dialect: "postgresql",
165
- host: "localhost",
166
- port: 5432,
167
- username: "postgres",
168
- password: "password",
169
- database: "default_db", // Default DB used for connection
170
- schema: "public",
171
- }, {
172
- database: "app_db", // DB to use in DbContext (takes precedence)
173
- schema: "app_schema", // Schema to use in DbContext (takes precedence)
174
- });
175
- ```
176
-
177
- ### Connection Pool Configuration
178
-
179
- Configure connection pool via the `pool` field in `DbConnConfig`. The pool is based on the `generic-pool` library, and pools are automatically cached for identical configurations.
180
-
181
- ```typescript
182
- const orm = createOrm(MyDb, {
183
- dialect: "mssql",
184
- host: "localhost",
185
- port: 1433,
186
- username: "sa",
187
- password: "password",
188
- database: "mydb",
189
- pool: {
190
- min: 2, // Minimum connections (default: 1)
191
- max: 20, // Maximum connections (default: 10)
192
- acquireTimeoutMillis: 60000, // Connection acquisition timeout (default: 30000ms)
193
- idleTimeoutMillis: 60000, // Idle connection timeout (default: 30000ms)
194
- },
195
- });
196
- ```
197
-
198
- ### Low-Level Connection with createDbConn
199
-
200
- You can connect directly to the DB and execute SQL without `createOrm`/`DbContext`. `createDbConn()` returns a `DbConn` (backed by `PooledDbConn`) from the connection pool.
201
-
202
- ```typescript
203
- import { createDbConn } from "@simplysm/orm-node";
204
-
205
- // Create connection wrapper (pool acquisition happens on connect())
206
- const conn = await createDbConn({
207
- dialect: "mysql",
208
- host: "localhost",
209
- port: 3306,
210
- username: "root",
211
- password: "password",
212
- database: "mydb",
213
- });
214
-
215
- // Connect
216
- await conn.connect();
217
-
218
- try {
219
- // Execute SQL
220
- const results = await conn.execute(["SELECT * FROM User WHERE id = 1"]);
221
- console.log(results); // [[{ id: 1, name: "John Doe", ... }]]
222
-
223
- // Manual transaction management
224
- await conn.beginTransaction("READ_COMMITTED");
225
- await conn.execute(["INSERT INTO User (name) VALUES ('Jane Smith')"]);
226
- await conn.commitTransaction();
227
- } catch (err) {
228
- if (conn.isInTransaction) {
229
- await conn.rollbackTransaction();
230
- }
231
- throw err;
232
- } finally {
233
- // Return connection (returns to pool, not actual close)
234
- await conn.close();
235
- }
236
- ```
237
-
238
- ### Parameterized Query Execution
239
-
240
- Each connection class supports parameter binding via the `executeParametrized()` method.
241
-
242
- ```typescript
243
- const conn = await createDbConn({
244
- dialect: "postgresql",
245
- host: "localhost",
246
- port: 5432,
247
- username: "postgres",
248
- password: "password",
249
- database: "mydb",
250
- });
251
-
252
- await conn.connect();
253
-
254
- // Parameterized query (uses DBMS-specific placeholders like $1, $2)
255
- const results = await conn.executeParametrized(
256
- "SELECT * FROM \"User\" WHERE name = $1",
257
- ["John Doe"],
258
- );
259
-
260
- await conn.close();
261
- ```
262
-
263
- ### Bulk INSERT
264
-
265
- Supports bulk data insertion using native bulk APIs for each DBMS.
266
-
267
- | DBMS | Bulk Method |
268
- |------|----------|
269
- | MySQL | `LOAD DATA LOCAL INFILE` (temporary CSV file) |
270
- | MSSQL | tedious `BulkLoad` API |
271
- | PostgreSQL | `COPY FROM STDIN` (pg-copy-streams) |
272
-
273
- ```typescript
274
- import type { ColumnMeta } from "@simplysm/orm-common";
275
-
276
- const conn = await createDbConn({
277
- dialect: "mysql",
278
- host: "localhost",
279
- port: 3306,
280
- username: "root",
281
- password: "password",
282
- database: "mydb",
283
- });
284
-
285
- await conn.connect();
286
-
287
- // Define column metadata
288
- const columnMetas: Record<string, ColumnMeta> = {
289
- name: { dataType: { type: "varchar", length: 100 } },
290
- email: { dataType: { type: "varchar", length: 200 }, nullable: true },
291
- age: { dataType: { type: "int" } },
292
- };
293
-
294
- // Insert bulk records
295
- const records = [
296
- { name: "John Doe", email: "john@example.com", age: 30 },
297
- { name: "Jane Smith", email: "jane@example.com", age: 25 },
298
- // ... thousands of records
299
- ];
300
-
301
- await conn.bulkInsert("mydb.User", columnMetas, records);
302
- await conn.close();
303
- ```
304
-
305
- ### DBMS-Specific Connection Configuration
306
-
307
- #### MySQL
308
-
309
- ```typescript
310
- const mysqlConfig: MysqlDbConnConfig = {
311
- dialect: "mysql",
312
- host: "localhost",
313
- port: 3306, // Optional (default: 3306)
314
- username: "root",
315
- password: "password",
316
- database: "mydb", // Optional
317
- defaultIsolationLevel: "READ_UNCOMMITTED", // Optional (default isolation level)
318
- pool: { min: 1, max: 10 }, // Optional (connection pool)
319
- };
320
- ```
321
-
322
- MySQL connection characteristics:
323
- - `multipleStatements: true` -- Can execute multiple SQL statements in one request
324
- - `charset: "utf8mb4"` -- Supports 4-byte characters like emojis
325
- - `LOAD DATA LOCAL INFILE` support (for bulk INSERT)
326
- - `root` user can connect without binding to a specific database and access all DBs
327
-
328
- #### MSSQL / Azure SQL
329
-
330
- ```typescript
331
- const mssqlConfig: MssqlDbConnConfig = {
332
- dialect: "mssql", // Or "mssql-azure" (for Azure SQL Database)
333
- host: "localhost",
334
- port: 1433, // Optional
335
- username: "sa",
336
- password: "password",
337
- database: "mydb", // Optional
338
- schema: "dbo", // Optional (MSSQL schema)
339
- defaultIsolationLevel: "READ_UNCOMMITTED", // Optional
340
- pool: { min: 1, max: 10 }, // Optional
341
- };
342
- ```
343
-
344
- MSSQL connection characteristics:
345
- - `encrypt: true` automatically set when using `"mssql-azure"` dialect
346
- - `trustServerCertificate: true` default setting
347
- - `useUTC: false` -- Uses local timezone
348
-
349
- #### PostgreSQL
350
-
351
- ```typescript
352
- const pgConfig: PostgresqlDbConnConfig = {
353
- dialect: "postgresql",
354
- host: "localhost",
355
- port: 5432, // Optional (default: 5432)
356
- username: "postgres",
357
- password: "password",
358
- database: "mydb", // Optional
359
- schema: "public", // Optional (PostgreSQL schema)
360
- defaultIsolationLevel: "READ_UNCOMMITTED", // Optional
361
- pool: { min: 1, max: 10 }, // Optional
362
- };
363
- ```
364
-
365
- ## DbConn Interface
366
-
367
- The common interface implemented by all DBMS-specific connection classes (`MysqlDbConn`, `MssqlDbConn`, `PostgresqlDbConn`) and `PooledDbConn`.
368
-
369
- | Method/Property | Signature | Description |
370
- |------------|----------|------|
371
- | `config` | `DbConnConfig` | Connection config (read-only) |
372
- | `isConnected` | `boolean` | Connection status |
373
- | `isInTransaction` | `boolean` | Transaction in progress |
374
- | `connect()` | `() => Promise<void>` | Establish DB connection |
375
- | `close()` | `() => Promise<void>` | Close DB connection (PooledDbConn returns to pool) |
376
- | `beginTransaction()` | `(isolationLevel?: IsolationLevel) => Promise<void>` | Start transaction |
377
- | `commitTransaction()` | `() => Promise<void>` | Commit transaction |
378
- | `rollbackTransaction()` | `() => Promise<void>` | Rollback transaction |
379
- | `execute()` | `(queries: string[]) => Promise<Record<string, unknown>[][]>` | Execute SQL query array |
380
- | `executeParametrized()` | `(query: string, params?: unknown[]) => Promise<Record<string, unknown>[][]>` | Execute parameterized query |
381
- | `bulkInsert()` | `(tableName: string, columnMetas: Record<string, ColumnMeta>, records: Record<string, unknown>[]) => Promise<void>` | Native bulk INSERT |
382
-
383
- `DbConn` extends `EventEmitter<{ close: void }>`, so you can listen for connection close events with `on("close", handler)` / `off("close", handler)`.
384
-
385
- ## NodeDbContextExecutor
386
-
387
- `NodeDbContextExecutor` implements the `DbContextExecutor` interface from `@simplysm/orm-common`. It is used internally by `createOrm()` but can also be instantiated directly when you need fine-grained control over the executor lifecycle.
388
-
389
- ```typescript
390
- import { NodeDbContextExecutor } from "@simplysm/orm-node";
391
-
392
- const executor = new NodeDbContextExecutor({
393
- dialect: "mysql",
394
- host: "localhost",
395
- port: 3306,
396
- username: "root",
397
- password: "password",
398
- database: "mydb",
399
- });
400
- ```
401
-
402
- | Method | Signature | Description |
403
- |--------|-----------|-------------|
404
- | `connect()` | `() => Promise<void>` | Create a `PooledDbConn` via `createDbConn()` and call `connect()` to acquire from pool |
405
- | `close()` | `() => Promise<void>` | Return the connection to the pool |
406
- | `beginTransaction()` | `(isolationLevel?: IsolationLevel) => Promise<void>` | Begin a transaction |
407
- | `commitTransaction()` | `() => Promise<void>` | Commit the current transaction |
408
- | `rollbackTransaction()` | `() => Promise<void>` | Roll back the current transaction |
409
- | `executeParametrized()` | `(query: string, params?: unknown[]) => Promise<Record<string, unknown>[][]>` | Execute a parameterized SQL query |
410
- | `bulkInsert()` | `(tableName: string, columnMetas: Record<string, ColumnMeta>, records: DataRecord[]) => Promise<void>` | Delegate bulk insert to the underlying connection |
411
- | `executeDefs()` | `(defs: QueryDef[], resultMetas?: (ResultMeta \| undefined)[]) => Promise<T[][]>` | Build SQL from `QueryDef` array, execute, and parse results using `ResultMeta` |
412
-
413
- ### executeDefs behavior
414
-
415
- `executeDefs()` is the core method used by `DbContext`. It:
416
- - Builds SQL strings from `QueryDef` using the appropriate dialect query builder.
417
- - If all `resultMetas` entries are `undefined`, combines all SQL into a single batch execution and returns empty arrays (used for write-only operations to minimize round-trips).
418
- - Otherwise, executes each `QueryDef` individually and parses results through `parseQueryResult()` using the corresponding `ResultMeta`. When `ResultMeta` contains `resultSetIndex`, that index selects the correct result set from multi-result-set responses (relevant for MSSQL stored procedures, etc.).
419
-
420
- ## PooledDbConn
421
-
422
- `PooledDbConn` wraps a physical DBMS connection with pool management. Key behaviors:
423
-
424
- - **`config` getter**: Returns the inner connection's config if connected, otherwise falls back to the config passed at creation.
425
- - **`isConnected` / `isInTransaction`**: Delegated to the inner physical connection.
426
- - **`connect()`**: Acquires a physical connection from `generic-pool`. If the pool factory fails, the error is reported with context from the last creation error.
427
- - **`close()`**: If a transaction is in progress, automatically attempts rollback before returning the connection to the pool. Emits a `close` event.
428
-
429
- ## OrmOptions
430
-
431
- Options object passed as the third argument to `createOrm()`.
432
-
433
- | Field | Type | Description |
434
- |-------|------|-------------|
435
- | `database` | `string \| undefined` | Override the `database` from `DbConnConfig` for use in DbContext queries |
436
- | `schema` | `string \| undefined` | Override the `schema` from `DbConnConfig` for use in DbContext queries |
437
-
438
- These overrides affect SQL generation (table prefixing) without changing the physical connection target.
439
-
440
- ## Orm Interface
441
-
442
- The return type of `createOrm()`. Provides the `connect()` and `connectWithoutTransaction()` methods.
443
-
444
- | Member | Signature | Description |
445
- |--------|-----------|-------------|
446
- | `dbContextDef` | `TDef` | The `DbContextDef` passed to `createOrm()` |
447
- | `config` | `DbConnConfig` | The connection config passed to `createOrm()` |
448
- | `options` | `OrmOptions \| undefined` | The options passed to `createOrm()` |
449
- | `connect()` | `(callback, isolationLevel?) => Promise<R>` | Run callback inside a transaction; auto-commits on success, auto-rolls back on error |
450
- | `connectWithoutTransaction()` | `(callback) => Promise<R>` | Run callback without a transaction |
451
-
452
- ## Supported Databases
453
-
454
- | Database | Driver Package | dialect Value | Minimum Version |
455
- |-------------|----------------|------------|----------|
456
- | MySQL | `mysql2` | `"mysql"` | 8.0.14+ |
457
- | SQL Server | `tedious` | `"mssql"` | 2012+ |
458
- | Azure SQL Database | `tedious` | `"mssql-azure"` | - |
459
- | PostgreSQL | `pg`, `pg-copy-streams` | `"postgresql"` | 9.0+ |
460
-
461
- ## Caveats
462
-
463
- ### Timeouts
464
-
465
- - Connection establishment timeout is 10 seconds (`DB_CONN_CONNECT_TIMEOUT = 10000ms`).
466
- - Query default timeout is 10 minutes (`DB_CONN_DEFAULT_TIMEOUT = 600000ms`).
467
- - Connections are automatically closed if idle for more than twice the query timeout (20 minutes).
468
- - Connection pool's `acquireTimeoutMillis` (default 30s) and `idleTimeoutMillis` (default 30s) operate separately.
469
-
470
- ### SQL Injection Security
471
-
472
- `@simplysm/orm-common` uses string escaping instead of parameter binding due to its dynamic query nature. Therefore, when passing user input to ORM queries, you must perform input validation at the application level. Refer to the "ORM Security Guide" in `CLAUDE.md` at the project root for details.
473
-
474
- ### Driver Lazy Loading
475
-
476
- DBMS-specific drivers (`mysql2`, `tedious`, `pg`) are lazy-loaded within `createDbConn()`. Therefore, import errors won't occur even if unused drivers are not installed.
477
-
478
- ### PooledDbConn close Behavior
479
-
480
- `PooledDbConn.close()` returns the connection to the pool instead of closing the actual physical connection. If `close()` is called while a transaction is in progress, it automatically attempts to rollback before returning to the pool.
481
-
482
- ## Dependencies
483
-
484
- | Package | Purpose |
485
- |--------|------|
486
- | `mysql2` | MySQL driver |
487
- | `tedious` | MSSQL driver |
488
- | `pg` | PostgreSQL driver |
489
- | `pg-copy-streams` | PostgreSQL bulk COPY support |
490
- | `generic-pool` | Connection pooling |
29
+ | Source | Exports | Description | Test |
30
+ |--------|---------|-------------|------|
31
+ | `src/create-db-conn.ts` | `createDbConn` | Factory function to create a dialect-specific database connection | `-` |
32
+ | `src/node-db-context-executor.ts` | `NodeDbContextExecutor` | DbContextExecutor that runs queries directly on a local database connection | `-` |
33
+ | `src/pooled-db-conn.ts` | `PooledDbConn` | Connection pool wrapper with configurable pool size and auto-release | `-` |
34
+ | `src/create-orm.ts` | `OrmOptions`, `Orm`, `createOrm` | High-level ORM factory with connection pooling and migration support | `-` |
491
35
 
492
36
  ## License
493
37
 
@@ -2,9 +2,9 @@ import { EventEmitter } from "@simplysm/core-common";
2
2
  import type { ColumnMeta, IsolationLevel } from "@simplysm/orm-common";
3
3
  import { type DbConn, type MssqlDbConnConfig } from "../types/db-conn";
4
4
  /**
5
- * MSSQL 데이터베이스 연결 클래스
5
+ * MSSQL database connection class
6
6
  *
7
- * tedious 라이브러리를 사용하여 MSSQL/Azure SQL 연결을 관리합니다.
7
+ * Manages MSSQL/Azure SQL connections using the tedious library.
8
8
  */
9
9
  export declare class MssqlDbConn extends EventEmitter<{
10
10
  close: void;
@@ -34,10 +34,10 @@ export declare class MssqlDbConn extends EventEmitter<{
34
34
  private _convertColumnMetaToTediousBulkColumnDef;
35
35
  private _convertDataTypeToTediousBulkColumnType;
36
36
  /**
37
- * 값의 타입을 추론하여 Tedious 데이터 타입 반환
37
+ * Infer the type of a value and return Tedious data type
38
38
  *
39
- * @param value - 타입을 추론할 (null/undefined 전달 시 오류 발생)
40
- * @throws null/undefined 전달되면 오류 발생
39
+ * @param value - Value whose type is to be inferred (error if null/undefined is passed)
40
+ * @throws Error if null/undefined is passed
41
41
  */
42
42
  private _guessTediousType;
43
43
  }
@@ -156,7 +156,7 @@ class MssqlDbConn extends EventEmitter {
156
156
  this._startTimeout();
157
157
  const conn = this._conn;
158
158
  const results = [];
159
- logger.debug("\uCFFC\uB9AC \uC2E4\uD589", { queryLength: query.length, params });
159
+ logger.debug("Query execution", { queryLength: query.length, params });
160
160
  await new Promise((resolve, reject) => {
161
161
  let rejected = false;
162
162
  const queryRequest = new this._tedious.Request(query, (err) => {
@@ -165,20 +165,20 @@ class MssqlDbConn extends EventEmitter {
165
165
  this._requests = this._requests.filter((r) => r !== queryRequest);
166
166
  const errRec = err;
167
167
  if (errRec["code"] === "ECANCEL") {
168
- reject(new SdError(err, "\uCFFC\uB9AC\uAC00 \uCDE8\uC18C\uB418\uC5C8\uC2B5\uB2C8\uB2E4."));
168
+ reject(new SdError(err, "Query was cancelled."));
169
169
  } else {
170
170
  const lineNumber = errRec["lineNumber"];
171
171
  if (lineNumber != null && lineNumber > 0) {
172
172
  const splitQuery = query.split("\n");
173
173
  splitQuery[lineNumber - 1] = "==> " + splitQuery[lineNumber - 1];
174
174
  reject(
175
- new SdError(err, `\uCFFC\uB9AC \uC218\uD589\uC911 \uC624\uB958\uBC1C\uC0DD
175
+ new SdError(err, `Error executing query
176
176
  -- query
177
177
  ${splitQuery.join("\n")}
178
178
  --`)
179
179
  );
180
180
  } else {
181
- reject(new SdError(err, `\uCFFC\uB9AC \uC218\uD589\uC911 \uC624\uB958\uBC1C\uC0DD
181
+ reject(new SdError(err, `Error executing query
182
182
  -- query
183
183
  ${query}
184
184
  --`));
@@ -205,7 +205,7 @@ ${query}
205
205
  }
206
206
  rejected = true;
207
207
  this._requests = this._requests.filter((r) => r !== queryRequest);
208
- reject(new SdError(err, `\uCFFC\uB9AC \uC218\uD589\uC911 \uC624\uB958\uBC1C\uC0DD
208
+ reject(new SdError(err, `Error executing query
209
209
  -- query
210
210
  ${query}
211
211
  --`));
@@ -245,7 +245,7 @@ ${query}
245
245
  reject(
246
246
  new SdError(
247
247
  err,
248
- `Bulk Insert \uC624\uB958\uBC1C\uC0DD
248
+ `Bulk Insert error
249
249
  ${jsonStringify(tediousColumnDefs)}
250
250
  -- data
251
251
  ${jsonStringify(records).substring(0, 1e4)}...
@@ -358,18 +358,18 @@ ${jsonStringify(records).substring(0, 1e4)}...
358
358
  case "uuid":
359
359
  return { type: this._tedious.TYPES.UniqueIdentifier };
360
360
  default:
361
- throw new SdError(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 DataType: ${JSON.stringify(dataType)}`);
361
+ throw new SdError(`Unsupported DataType: ${JSON.stringify(dataType)}`);
362
362
  }
363
363
  }
364
364
  /**
365
- * 값의 타입을 추론하여 Tedious 데이터 타입 반환
365
+ * Infer the type of a value and return Tedious data type
366
366
  *
367
- * @param value - 타입을 추론할 (null/undefined 전달 시 오류 발생)
368
- * @throws null/undefined 전달되면 오류 발생
367
+ * @param value - Value whose type is to be inferred (error if null/undefined is passed)
368
+ * @throws Error if null/undefined is passed
369
369
  */
370
370
  _guessTediousType(value) {
371
371
  if (value == null) {
372
- throw new SdError("_guessTediousType: null/undefined \uAC12\uC740 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.");
372
+ throw new SdError("_guessTediousType: null/undefined values are not supported.");
373
373
  }
374
374
  if (typeof value === "string") {
375
375
  return this._tedious.TYPES.NVarChar;
@@ -383,7 +383,7 @@ ${jsonStringify(records).substring(0, 1e4)}...
383
383
  if (value instanceof Time) return this._tedious.TYPES.Time;
384
384
  if (value instanceof Uuid) return this._tedious.TYPES.UniqueIdentifier;
385
385
  if (value instanceof Uint8Array) return this._tedious.TYPES.VarBinary;
386
- throw new SdError(`\uC54C \uC218 \uC5C6\uB294 \uAC12 \uD0C0\uC785: ${typeof value}`);
386
+ throw new SdError(`Unknown value type: ${typeof value}`);
387
387
  }
388
388
  }
389
389
  export {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/connections/mssql-db-conn.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }