@simplysm/orm-node 14.0.51 → 14.0.52
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/package.json +4 -5
- package/README.md +0 -130
- package/docs/connections/mssql-db-conn.md +0 -78
- package/docs/connections/mysql-db-conn.md +0 -76
- package/docs/connections/postgresql-db-conn.md +0 -79
- package/docs/core/create-db-conn.md +0 -54
- package/docs/core/create-orm.md +0 -100
- package/docs/core/node-db-context-executor.md +0 -45
- package/docs/types/db-conn-config.md +0 -91
- package/docs/types/db-conn-constants.md +0 -33
- package/docs/types/db-conn.md +0 -55
- package/docs/types/get-dialect-from-config.md +0 -17
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/orm-node",
|
|
3
|
-
"version": "14.0.
|
|
3
|
+
"version": "14.0.52",
|
|
4
4
|
"description": "심플리즘 패키지 - ORM (node)",
|
|
5
5
|
"author": "심플리즘",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -14,14 +14,13 @@
|
|
|
14
14
|
"types": "./dist/index.d.ts",
|
|
15
15
|
"files": [
|
|
16
16
|
"dist",
|
|
17
|
-
"src"
|
|
18
|
-
"docs"
|
|
17
|
+
"src"
|
|
19
18
|
],
|
|
20
19
|
"sideEffects": false,
|
|
21
20
|
"dependencies": {
|
|
22
21
|
"consola": "^3.4.2",
|
|
23
|
-
"@simplysm/
|
|
24
|
-
"@simplysm/
|
|
22
|
+
"@simplysm/core-common": "14.0.52",
|
|
23
|
+
"@simplysm/orm-common": "14.0.52"
|
|
25
24
|
},
|
|
26
25
|
"devDependencies": {
|
|
27
26
|
"@types/pg": "^8.20.0",
|
package/README.md
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
# @simplysm/orm-node
|
|
2
|
-
|
|
3
|
-
Node.js 환경에서 MSSQL, MySQL, PostgreSQL에 대한 저수준 DB 연결 및 ORM 실행자를 제공하는 패키지.
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install @simplysm/orm-node
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Peer dependencies (사용하는 DBMS에 따라 선택적 설치):
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# MySQL
|
|
15
|
-
npm install mysql2
|
|
16
|
-
|
|
17
|
-
# PostgreSQL
|
|
18
|
-
npm install pg pg-copy-streams
|
|
19
|
-
|
|
20
|
-
# MSSQL
|
|
21
|
-
npm install tedious
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## API Overview
|
|
25
|
-
|
|
26
|
-
### Types
|
|
27
|
-
|
|
28
|
-
| Entry | Kind | Description |
|
|
29
|
-
|-------|------|-------------|
|
|
30
|
-
| [`DbConn`](./docs/types/db-conn.md) | interface | 저수준 DB 연결 인터페이스. 각 DBMS 구현체가 이 인터페이스를 구현한다. `EventEmitter<{ close: void }>`를 상속한다 |
|
|
31
|
-
| [`DbConnConfig`](./docs/types/db-conn-config.md) | type | DB 연결 설정 discriminated union (`MysqlDbConnConfig \| MssqlDbConnConfig \| PostgresqlDbConnConfig`). `dialect` 필드로 분기한다 |
|
|
32
|
-
| [`DB_CONN_CONNECT_TIMEOUT`](./docs/types/db-conn-constants.md) | const | DB 연결 수립 타임아웃 (10초, `10_000`ms). `DB_CONN_DEFAULT_TIMEOUT`, `DB_CONN_ERRORS` 포함 |
|
|
33
|
-
| [`getDialectFromConfig`](./docs/types/get-dialect-from-config.md) | function | `DbConnConfig`에서 정규화된 `Dialect`를 추출한다. `"mssql-azure"` → `"mssql"`로 변환한다 |
|
|
34
|
-
|
|
35
|
-
### Connections
|
|
36
|
-
|
|
37
|
-
| Entry | Kind | Description |
|
|
38
|
-
|-------|------|-------------|
|
|
39
|
-
| [`MssqlDbConn`](./docs/connections/mssql-db-conn.md) | class | MSSQL 데이터베이스 연결 클래스. tedious 라이브러리를 사용한다 |
|
|
40
|
-
| [`MysqlDbConn`](./docs/connections/mysql-db-conn.md) | class | MySQL 데이터베이스 연결 클래스. mysql2/promise 라이브러리를 사용한다 |
|
|
41
|
-
| [`PostgresqlDbConn`](./docs/connections/postgresql-db-conn.md) | class | PostgreSQL 데이터베이스 연결 클래스. pg + pg-copy-streams 라이브러리를 사용한다 |
|
|
42
|
-
|
|
43
|
-
### Core
|
|
44
|
-
|
|
45
|
-
| Entry | Kind | Description |
|
|
46
|
-
|-------|------|-------------|
|
|
47
|
-
| [`createDbConn`](./docs/core/create-db-conn.md) | function | dialect 기반 DbConn 팩토리. 네이티브 드라이버를 지연 로딩하여 DbConn 인스턴스를 생성한다 |
|
|
48
|
-
| [`NodeDbContextExecutor`](./docs/core/node-db-context-executor.md) | class | `orm-common`의 `DbContextExecutor` 인터페이스 구현체. DbContext에서 사용하는 실제 DB 연결을 처리한다 |
|
|
49
|
-
| [`createOrm`](./docs/core/create-orm.md) | function | Node.js ORM 팩토리 함수. DbContext 서브클래스와 연결 설정을 받아 트랜잭션을 관리하는 `Orm<T>` 인스턴스를 생성한다. `Orm`, `OrmOptions` 포함 |
|
|
50
|
-
|
|
51
|
-
## Usage Examples
|
|
52
|
-
|
|
53
|
-
### createOrm을 사용한 ORM 연결
|
|
54
|
-
|
|
55
|
-
```typescript
|
|
56
|
-
import { DbContext } from "@simplysm/orm-common";
|
|
57
|
-
import { createOrm } from "@simplysm/orm-node";
|
|
58
|
-
|
|
59
|
-
class MyDb extends DbContext {
|
|
60
|
-
user = this.queryable(User);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const orm = createOrm(MyDb, {
|
|
64
|
-
dialect: "mysql",
|
|
65
|
-
host: "localhost",
|
|
66
|
-
port: 3306,
|
|
67
|
-
username: "root",
|
|
68
|
-
password: "password",
|
|
69
|
-
database: "mydb",
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
// 트랜잭션 내에서 실행
|
|
73
|
-
await orm.connect(async (db) => {
|
|
74
|
-
const users = await db.user().execute();
|
|
75
|
-
return users;
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
// 트랜잭션 없이 실행
|
|
79
|
-
await orm.connectWithoutTransaction(async (db) => {
|
|
80
|
-
const users = await db.user().execute();
|
|
81
|
-
return users;
|
|
82
|
-
});
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### createDbConn을 사용한 저수준 연결
|
|
86
|
-
|
|
87
|
-
```typescript
|
|
88
|
-
import { createDbConn } from "@simplysm/orm-node";
|
|
89
|
-
|
|
90
|
-
const conn = await createDbConn({
|
|
91
|
-
dialect: "postgresql",
|
|
92
|
-
host: "localhost",
|
|
93
|
-
port: 5432,
|
|
94
|
-
username: "postgres",
|
|
95
|
-
password: "password",
|
|
96
|
-
database: "mydb",
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
await conn.connect();
|
|
100
|
-
|
|
101
|
-
try {
|
|
102
|
-
await conn.beginTransaction();
|
|
103
|
-
await conn.execute(["INSERT INTO users (name) VALUES ('Alice')"]);
|
|
104
|
-
await conn.commitTransaction();
|
|
105
|
-
} catch {
|
|
106
|
-
await conn.rollbackTransaction();
|
|
107
|
-
} finally {
|
|
108
|
-
await conn.close();
|
|
109
|
-
}
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
### DbConn 클래스 직접 생성 (테스트용)
|
|
113
|
-
|
|
114
|
-
```typescript
|
|
115
|
-
import { MysqlDbConn } from "@simplysm/orm-node";
|
|
116
|
-
|
|
117
|
-
const mysql2 = await import("mysql2/promise");
|
|
118
|
-
const conn = new MysqlDbConn(mysql2, {
|
|
119
|
-
dialect: "mysql",
|
|
120
|
-
host: "localhost",
|
|
121
|
-
port: 3306,
|
|
122
|
-
username: "root",
|
|
123
|
-
password: "password",
|
|
124
|
-
database: "testdb",
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
await conn.connect();
|
|
128
|
-
const results = await conn.execute(["SELECT 1 AS val"]);
|
|
129
|
-
await conn.close();
|
|
130
|
-
```
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# MssqlDbConn
|
|
2
|
-
|
|
3
|
-
tedious 라이브러리를 사용하여 MSSQL/Azure SQL 연결을 관리하는 클래스.
|
|
4
|
-
|
|
5
|
-
```typescript
|
|
6
|
-
class MssqlDbConn extends EventEmitter<{ close: void }> implements DbConn {
|
|
7
|
-
isConnected: boolean;
|
|
8
|
-
isInTransaction: boolean;
|
|
9
|
-
readonly config: MssqlDbConnConfig;
|
|
10
|
-
|
|
11
|
-
constructor(
|
|
12
|
-
tedious: typeof import("tedious"),
|
|
13
|
-
config: MssqlDbConnConfig,
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
connect(): Promise<void>;
|
|
17
|
-
close(): Promise<void>;
|
|
18
|
-
beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;
|
|
19
|
-
commitTransaction(): Promise<void>;
|
|
20
|
-
rollbackTransaction(): Promise<void>;
|
|
21
|
-
execute(queries: string[]): Promise<Record<string, unknown>[][]>;
|
|
22
|
-
executeParametrized(query: string, params?: unknown[]): Promise<Record<string, unknown>[][]>;
|
|
23
|
-
bulkInsert(
|
|
24
|
-
tableName: string,
|
|
25
|
-
columnMetas: Record<string, ColumnMeta>,
|
|
26
|
-
records: Record<string, unknown>[],
|
|
27
|
-
): Promise<void>;
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Members
|
|
32
|
-
|
|
33
|
-
| Member | Kind | Type | Description |
|
|
34
|
-
|--------|------|------|-------------|
|
|
35
|
-
| `isConnected` | property | `boolean` | 연결 여부 |
|
|
36
|
-
| `isInTransaction` | property | `boolean` | 트랜잭션 진행 여부 |
|
|
37
|
-
| `config` | property | `MssqlDbConnConfig` | 연결 설정 |
|
|
38
|
-
| `connect()` | method | `Promise<void>` | DB 연결을 수립한다. `dialect === "mssql-azure"`인 경우 `encrypt: true`로 연결한다. 연결 성공 시 유휴 타임아웃 타이머(`DB_CONN_DEFAULT_TIMEOUT * 2`)를 시작한다 |
|
|
39
|
-
| `close()` | method | `Promise<void>` | 진행 중인 요청을 취소(`cancel()`)하고 30초 내에 완료될 때까지 대기한 뒤 연결을 종료한다 |
|
|
40
|
-
| `beginTransaction(isolationLevel?)` | method | `Promise<void>` | 트랜잭션을 시작한다 |
|
|
41
|
-
| `commitTransaction()` | method | `Promise<void>` | 트랜잭션을 커밋한다 |
|
|
42
|
-
| `rollbackTransaction()` | method | `Promise<void>` | 트랜잭션을 롤백한다 |
|
|
43
|
-
| `execute(queries)` | method | `Promise<Record<string, unknown>[][]>` | SQL 쿼리 배열을 순차 실행한다 |
|
|
44
|
-
| `executeParametrized(query, params?)` | method | `Promise<Record<string, unknown>[][]>` | 파라미터화된 쿼리를 실행한다. 파라미터가 있으면 `execSql()`, 없으면 `execSqlBatch()`를 사용한다. 쿼리 오류 시 오류 발생 줄을 `==> ` 접두사로 표시하여 에러 메시지에 포함한다 |
|
|
45
|
-
| `bulkInsert(tableName, columnMetas, records)` | method | `Promise<void>` | tedious `BulkLoad` API를 사용하여 대량 삽입한다 |
|
|
46
|
-
|
|
47
|
-
일반적으로 직접 생성하지 않고 [`createDbConn()`](../core/create-db-conn.md)을 통해 인스턴스를 얻는다. 직접 생성은 테스트 코드에서 네이티브 라이브러리를 주입할 때 사용한다.
|
|
48
|
-
|
|
49
|
-
생성자에서 tedious 라이브러리 모듈을 첫 번째 인수로 직접 주입받는다. `createDbConn()`이 동적 import 후 전달한다.
|
|
50
|
-
|
|
51
|
-
## `bulkInsert()` 값 변환 규칙
|
|
52
|
-
|
|
53
|
-
| 값 타입 | 변환 방식 |
|
|
54
|
-
|---------|-----------|
|
|
55
|
-
| `Uuid` | `toString()` |
|
|
56
|
-
| `Uint8Array` | `Buffer.from(val)` (tedious 라이브러리 요구사항으로 인한 예외적 허용) |
|
|
57
|
-
| `DateTime` / `DateOnly` | `.date` (native Date 객체) |
|
|
58
|
-
| `Time` | `"HH:mm:ss"` 포맷 문자열 |
|
|
59
|
-
|
|
60
|
-
## Usage
|
|
61
|
-
|
|
62
|
-
```typescript
|
|
63
|
-
import { MssqlDbConn } from "@simplysm/orm-node";
|
|
64
|
-
|
|
65
|
-
const tedious = await import("tedious");
|
|
66
|
-
const conn = new MssqlDbConn(tedious, {
|
|
67
|
-
dialect: "mssql",
|
|
68
|
-
host: "localhost",
|
|
69
|
-
port: 1433,
|
|
70
|
-
username: "sa",
|
|
71
|
-
password: "password",
|
|
72
|
-
database: "mydb",
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
await conn.connect();
|
|
76
|
-
const results = await conn.execute(["SELECT 1 AS val"]);
|
|
77
|
-
await conn.close();
|
|
78
|
-
```
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
# MysqlDbConn
|
|
2
|
-
|
|
3
|
-
mysql2/promise 라이브러리를 사용하여 MySQL 연결을 관리하는 클래스.
|
|
4
|
-
|
|
5
|
-
```typescript
|
|
6
|
-
class MysqlDbConn extends EventEmitter<{ close: void }> implements DbConn {
|
|
7
|
-
isConnected: boolean;
|
|
8
|
-
isInTransaction: boolean;
|
|
9
|
-
readonly config: MysqlDbConnConfig;
|
|
10
|
-
|
|
11
|
-
constructor(
|
|
12
|
-
mysql2: typeof import("mysql2/promise"),
|
|
13
|
-
config: MysqlDbConnConfig,
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
connect(): Promise<void>;
|
|
17
|
-
close(): Promise<void>;
|
|
18
|
-
beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;
|
|
19
|
-
commitTransaction(): Promise<void>;
|
|
20
|
-
rollbackTransaction(): Promise<void>;
|
|
21
|
-
execute(queries: string[]): Promise<Record<string, unknown>[][]>;
|
|
22
|
-
executeParametrized(query: string, params?: unknown[]): Promise<Record<string, unknown>[][]>;
|
|
23
|
-
bulkInsert(
|
|
24
|
-
tableName: string,
|
|
25
|
-
columnMetas: Record<string, ColumnMeta>,
|
|
26
|
-
records: Record<string, unknown>[],
|
|
27
|
-
): Promise<void>;
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Members
|
|
32
|
-
|
|
33
|
-
| Member | Kind | Type | Description |
|
|
34
|
-
|--------|------|------|-------------|
|
|
35
|
-
| `isConnected` | property | `boolean` | 연결 여부 |
|
|
36
|
-
| `isInTransaction` | property | `boolean` | 트랜잭션 진행 여부 |
|
|
37
|
-
| `config` | property | `MysqlDbConnConfig` | 연결 설정 |
|
|
38
|
-
| `connect()` | method | `Promise<void>` | DB 연결을 수립한다. `multipleStatements: true`, `charset: "utf8mb4"`로 연결한다 |
|
|
39
|
-
| `close()` | method | `Promise<void>` | DB 연결을 종료한다 |
|
|
40
|
-
| `beginTransaction(isolationLevel?)` | method | `Promise<void>` | `SET SESSION TRANSACTION ISOLATION LEVEL {level}` 후 `BEGIN`을 실행한다. MySQL은 트랜잭션 시작 전에 격리 수준을 설정해야 한다 |
|
|
41
|
-
| `commitTransaction()` | method | `Promise<void>` | 트랜잭션을 커밋한다 |
|
|
42
|
-
| `rollbackTransaction()` | method | `Promise<void>` | 트랜잭션을 롤백한다 |
|
|
43
|
-
| `execute(queries)` | method | `Promise<Record<string, unknown>[][]>` | SQL 쿼리 배열을 순차 실행한다 |
|
|
44
|
-
| `executeParametrized(query, params?)` | method | `Promise<Record<string, unknown>[][]>` | 파라미터화된 쿼리를 실행한다. 결과 형식에 따라 처리: single SELECT → flat 배열, single INSERT/UPDATE/DELETE → 빈 결과 집합, multi-statement → 각 statement의 결과를 별도 결과 집합으로 분리 |
|
|
45
|
-
| `bulkInsert(tableName, columnMetas, records)` | method | `Promise<void>` | `LOAD DATA LOCAL INFILE`을 사용하여 대량 삽입한다 |
|
|
46
|
-
|
|
47
|
-
일반적으로 직접 생성하지 않고 [`createDbConn()`](../core/create-db-conn.md)을 통해 인스턴스를 얻는다. 직접 생성은 테스트 코드에서 네이티브 라이브러리를 주입할 때 사용한다.
|
|
48
|
-
|
|
49
|
-
생성자에서 mysql2/promise 라이브러리 모듈을 첫 번째 인수로 직접 주입받는다.
|
|
50
|
-
|
|
51
|
-
## `bulkInsert()` 처리 흐름
|
|
52
|
-
|
|
53
|
-
1. `os.tmpdir()`에 UUID 기반 임시 CSV 파일 생성 (TAB 구분)
|
|
54
|
-
2. UUID/binary 컬럼은 hex 문자열로 기록, `SET` 절에서 `UNHEX()` 변환
|
|
55
|
-
3. `LOAD DATA LOCAL INFILE` 실행
|
|
56
|
-
4. `finally` 블록에서 임시 파일 삭제
|
|
57
|
-
|
|
58
|
-
## Usage
|
|
59
|
-
|
|
60
|
-
```typescript
|
|
61
|
-
import { MysqlDbConn } from "@simplysm/orm-node";
|
|
62
|
-
|
|
63
|
-
const mysql2 = await import("mysql2/promise");
|
|
64
|
-
const conn = new MysqlDbConn(mysql2, {
|
|
65
|
-
dialect: "mysql",
|
|
66
|
-
host: "localhost",
|
|
67
|
-
port: 3306,
|
|
68
|
-
username: "root",
|
|
69
|
-
password: "password",
|
|
70
|
-
database: "testdb",
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
await conn.connect();
|
|
74
|
-
const results = await conn.execute(["SELECT 1 AS val"]);
|
|
75
|
-
await conn.close();
|
|
76
|
-
```
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
# PostgresqlDbConn
|
|
2
|
-
|
|
3
|
-
pg + pg-copy-streams 라이브러리를 사용하여 PostgreSQL 연결을 관리하는 클래스.
|
|
4
|
-
|
|
5
|
-
```typescript
|
|
6
|
-
class PostgresqlDbConn extends EventEmitter<{ close: void }> implements DbConn {
|
|
7
|
-
isConnected: boolean;
|
|
8
|
-
isInTransaction: boolean;
|
|
9
|
-
readonly config: PostgresqlDbConnConfig;
|
|
10
|
-
|
|
11
|
-
constructor(
|
|
12
|
-
pg: typeof import("pg"),
|
|
13
|
-
pgCopyStreams: typeof import("pg-copy-streams"),
|
|
14
|
-
config: PostgresqlDbConnConfig,
|
|
15
|
-
);
|
|
16
|
-
|
|
17
|
-
connect(): Promise<void>;
|
|
18
|
-
close(): Promise<void>;
|
|
19
|
-
beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;
|
|
20
|
-
commitTransaction(): Promise<void>;
|
|
21
|
-
rollbackTransaction(): Promise<void>;
|
|
22
|
-
execute(queries: string[]): Promise<Record<string, unknown>[][]>;
|
|
23
|
-
executeParametrized(query: string, params?: unknown[]): Promise<Record<string, unknown>[][]>;
|
|
24
|
-
bulkInsert(
|
|
25
|
-
tableName: string,
|
|
26
|
-
columnMetas: Record<string, ColumnMeta>,
|
|
27
|
-
records: Record<string, unknown>[],
|
|
28
|
-
): Promise<void>;
|
|
29
|
-
}
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Members
|
|
33
|
-
|
|
34
|
-
| Member | Kind | Type | Description |
|
|
35
|
-
|--------|------|------|-------------|
|
|
36
|
-
| `isConnected` | property | `boolean` | 연결 여부 |
|
|
37
|
-
| `isInTransaction` | property | `boolean` | 트랜잭션 진행 여부 |
|
|
38
|
-
| `config` | property | `PostgresqlDbConnConfig` | 연결 설정 |
|
|
39
|
-
| `connect()` | method | `Promise<void>` | DB 연결을 수립한다. 기본 포트는 `5432`. `connectionTimeoutMillis: DB_CONN_CONNECT_TIMEOUT`, `query_timeout: DB_CONN_DEFAULT_TIMEOUT`으로 연결한다 |
|
|
40
|
-
| `close()` | method | `Promise<void>` | DB 연결을 종료한다 |
|
|
41
|
-
| `beginTransaction(isolationLevel?)` | method | `Promise<void>` | `BEGIN` 후 `SET TRANSACTION ISOLATION LEVEL {level}`을 실행한다 |
|
|
42
|
-
| `commitTransaction()` | method | `Promise<void>` | `COMMIT`을 실행한다 |
|
|
43
|
-
| `rollbackTransaction()` | method | `Promise<void>` | `ROLLBACK`을 실행한다 |
|
|
44
|
-
| `execute(queries)` | method | `Promise<Record<string, unknown>[][]>` | SQL 쿼리 배열을 순차 실행한다 |
|
|
45
|
-
| `executeParametrized(query, params?)` | method | `Promise<Record<string, unknown>[][]>` | 파라미터화된 쿼리를 실행한다. PostgreSQL은 단일 결과 집합을 반환하므로 `[result.rows]`로 래핑하여 반환한다 |
|
|
46
|
-
| `bulkInsert(tableName, columnMetas, records)` | method | `Promise<void>` | `COPY FROM STDIN`(CSV 형식)을 사용하여 대량 삽입한다 |
|
|
47
|
-
|
|
48
|
-
일반적으로 직접 생성하지 않고 [`createDbConn()`](../core/create-db-conn.md)을 통해 인스턴스를 얻는다. 직접 생성은 테스트 코드에서 네이티브 라이브러리를 주입할 때 사용한다.
|
|
49
|
-
|
|
50
|
-
생성자에서 pg와 pg-copy-streams 라이브러리 모듈을 첫 번째, 두 번째 인수로 직접 주입받는다.
|
|
51
|
-
|
|
52
|
-
## `bulkInsert()` 처리 방식
|
|
53
|
-
|
|
54
|
-
`pg-copy-streams`의 `from()` 함수로 스트림을 생성하고, `Readable.from(csvContent)`를 파이프한다.
|
|
55
|
-
|
|
56
|
-
binary 컬럼 값 변환:
|
|
57
|
-
- `binary` 타입: PostgreSQL bytea hex 형식 (`\x{hex}`, CSV 큰따옴표로 감쌈)
|
|
58
|
-
- `uuid` 타입: `toString()` 그대로
|
|
59
|
-
|
|
60
|
-
## Usage
|
|
61
|
-
|
|
62
|
-
```typescript
|
|
63
|
-
import { PostgresqlDbConn } from "@simplysm/orm-node";
|
|
64
|
-
|
|
65
|
-
const pg = await import("pg");
|
|
66
|
-
const pgCopyStreams = await import("pg-copy-streams");
|
|
67
|
-
const conn = new PostgresqlDbConn(pg, pgCopyStreams, {
|
|
68
|
-
dialect: "postgresql",
|
|
69
|
-
host: "localhost",
|
|
70
|
-
port: 5432,
|
|
71
|
-
username: "postgres",
|
|
72
|
-
password: "password",
|
|
73
|
-
database: "testdb",
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
await conn.connect();
|
|
77
|
-
const results = await conn.execute(["SELECT 1 AS val"]);
|
|
78
|
-
await conn.close();
|
|
79
|
-
```
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# createDbConn
|
|
2
|
-
|
|
3
|
-
dialect 기반 DbConn 팩토리. 네이티브 드라이버를 지연 로딩하여 DbConn 인스턴스를 생성한다.
|
|
4
|
-
|
|
5
|
-
```typescript
|
|
6
|
-
async function createDbConn(config: DbConnConfig): Promise<DbConn>;
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
## Parameters
|
|
10
|
-
|
|
11
|
-
| Param | Type | Description |
|
|
12
|
-
|-------|------|-------------|
|
|
13
|
-
| `config` | `DbConnConfig` | 데이터베이스 연결 설정. `dialect` 필드로 구현체를 결정한다 |
|
|
14
|
-
|
|
15
|
-
## Returns
|
|
16
|
-
|
|
17
|
-
`Promise<DbConn>` — 아직 연결되지 않은 상태의 DbConn 인스턴스. `connect()`를 별도로 호출해야 한다.
|
|
18
|
-
|
|
19
|
-
`config.dialect`에 따라 적절한 DbConn 구현체를 생성한다:
|
|
20
|
-
|
|
21
|
-
| dialect | 반환 타입 | 로드하는 패키지 |
|
|
22
|
-
|---------|-----------|----------------|
|
|
23
|
-
| `"mysql"` | [`MysqlDbConn`](../connections/mysql-db-conn.md) | `mysql2/promise` |
|
|
24
|
-
| `"postgresql"` | [`PostgresqlDbConn`](../connections/postgresql-db-conn.md) | `pg`, `pg-copy-streams` |
|
|
25
|
-
| `"mssql"` / `"mssql-azure"` | [`MssqlDbConn`](../connections/mssql-db-conn.md) | `tedious` |
|
|
26
|
-
|
|
27
|
-
네이티브 드라이버 패키지는 최초 호출 시에만 동적 import로 로드하고 모듈 수준 캐시에 보관한다. 이후 호출에서는 캐시된 모듈을 재사용한다.
|
|
28
|
-
|
|
29
|
-
## Usage
|
|
30
|
-
|
|
31
|
-
```typescript
|
|
32
|
-
import { createDbConn } from "@simplysm/orm-node";
|
|
33
|
-
|
|
34
|
-
const conn = await createDbConn({
|
|
35
|
-
dialect: "postgresql",
|
|
36
|
-
host: "localhost",
|
|
37
|
-
port: 5432,
|
|
38
|
-
username: "postgres",
|
|
39
|
-
password: "password",
|
|
40
|
-
database: "mydb",
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
await conn.connect();
|
|
44
|
-
|
|
45
|
-
try {
|
|
46
|
-
await conn.beginTransaction();
|
|
47
|
-
await conn.execute(["INSERT INTO users (name) VALUES ('Alice')"]);
|
|
48
|
-
await conn.commitTransaction();
|
|
49
|
-
} catch {
|
|
50
|
-
await conn.rollbackTransaction();
|
|
51
|
-
} finally {
|
|
52
|
-
await conn.close();
|
|
53
|
-
}
|
|
54
|
-
```
|
package/docs/core/create-orm.md
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
# createOrm
|
|
2
|
-
|
|
3
|
-
Node.js ORM 팩토리 함수. `DbContext` 서브클래스와 DB 연결 설정을 받아 트랜잭션을 관리하는 [`Orm<T>`](#orm) 인스턴스를 반환한다.
|
|
4
|
-
|
|
5
|
-
```typescript
|
|
6
|
-
function createOrm<T extends DbContext>(
|
|
7
|
-
DbClass: new (executor: DbContextExecutor, opt: { database: string; schema?: string }) => T,
|
|
8
|
-
config: DbConnConfig,
|
|
9
|
-
options?: OrmOptions,
|
|
10
|
-
): Orm<T>;
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Parameters
|
|
14
|
-
|
|
15
|
-
| Param | Type | Description |
|
|
16
|
-
|-------|------|-------------|
|
|
17
|
-
| `DbClass` | constructor | `DbContext`를 상속한 클래스 생성자 |
|
|
18
|
-
| `config` | `DbConnConfig` | DB 연결 설정 |
|
|
19
|
-
| `options` | `OrmOptions?` | ORM 옵션. `config`보다 우선 적용된다 |
|
|
20
|
-
|
|
21
|
-
## Returns
|
|
22
|
-
|
|
23
|
-
`Orm<T>` — `connect()`와 `connectWithoutTransaction()`을 제공하는 ORM 인스턴스.
|
|
24
|
-
|
|
25
|
-
`options.database` / `options.schema`는 `config`의 동일 필드보다 우선 적용된다. `database`는 필수이며, `config`와 `options` 양쪽 모두 `database`가 없으면 에러를 throw한다.
|
|
26
|
-
|
|
27
|
-
## Related Types
|
|
28
|
-
|
|
29
|
-
### `Orm`
|
|
30
|
-
|
|
31
|
-
`createOrm()`에서 반환하는 객체의 타입.
|
|
32
|
-
|
|
33
|
-
```typescript
|
|
34
|
-
interface Orm<T extends DbContext> {
|
|
35
|
-
readonly DbClass: new (
|
|
36
|
-
executor: DbContextExecutor,
|
|
37
|
-
opt: { database: string; schema?: string },
|
|
38
|
-
) => T;
|
|
39
|
-
readonly config: DbConnConfig;
|
|
40
|
-
readonly options?: OrmOptions;
|
|
41
|
-
connect<R>(callback: (conn: T) => Promise<R>, isolationLevel?: IsolationLevel): Promise<R>;
|
|
42
|
-
connectWithoutTransaction<R>(callback: (conn: T) => Promise<R>): Promise<R>;
|
|
43
|
-
}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
| Field | Type | Description |
|
|
47
|
-
|-------|------|-------------|
|
|
48
|
-
| `DbClass` | constructor | DbContext 서브클래스 생성자 |
|
|
49
|
-
| `config` | `DbConnConfig` | DB 연결 설정 |
|
|
50
|
-
| `options` | `OrmOptions?` | ORM 옵션 |
|
|
51
|
-
| `connect(callback, isolationLevel?)` | method | 트랜잭션 내에서 콜백을 실행한다. 콜백 완료 후 자동 커밋, 예외 발생 시 자동 롤백 |
|
|
52
|
-
| `connectWithoutTransaction(callback)` | method | 트랜잭션 없이 콜백을 실행한다 |
|
|
53
|
-
|
|
54
|
-
### `OrmOptions`
|
|
55
|
-
|
|
56
|
-
`createOrm()`의 세 번째 인수로 전달하는 옵션. `DbConnConfig`의 동일 필드보다 우선 적용된다.
|
|
57
|
-
|
|
58
|
-
```typescript
|
|
59
|
-
interface OrmOptions {
|
|
60
|
-
database?: string;
|
|
61
|
-
schema?: string;
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
| Field | Type | Description |
|
|
66
|
-
|-------|------|-------------|
|
|
67
|
-
| `database` | `string?` | 데이터베이스 이름. `DbConnConfig`의 `database` 대신 사용된다 |
|
|
68
|
-
| `schema` | `string?` | 스키마 이름 (MSSQL: `dbo`, PostgreSQL: `public`). `DbConnConfig`의 `schema` 대신 사용된다 |
|
|
69
|
-
|
|
70
|
-
## Usage
|
|
71
|
-
|
|
72
|
-
```typescript
|
|
73
|
-
import { DbContext } from "@simplysm/orm-common";
|
|
74
|
-
import { createOrm } from "@simplysm/orm-node";
|
|
75
|
-
|
|
76
|
-
class MyDb extends DbContext {
|
|
77
|
-
user = this.queryable(User);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const orm = createOrm(MyDb, {
|
|
81
|
-
dialect: "mysql",
|
|
82
|
-
host: "localhost",
|
|
83
|
-
port: 3306,
|
|
84
|
-
username: "root",
|
|
85
|
-
password: "password",
|
|
86
|
-
database: "mydb",
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
// 트랜잭션 내에서 실행
|
|
90
|
-
await orm.connect(async (db) => {
|
|
91
|
-
const users = await db.user().execute();
|
|
92
|
-
return users;
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
// 트랜잭션 없이 실행
|
|
96
|
-
await orm.connectWithoutTransaction(async (db) => {
|
|
97
|
-
const users = await db.user().execute();
|
|
98
|
-
return users;
|
|
99
|
-
});
|
|
100
|
-
```
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# NodeDbContextExecutor
|
|
2
|
-
|
|
3
|
-
`orm-common`의 `DbContextExecutor` 인터페이스를 구현하는 Node.js 환경용 실행자. `DbContext`에서 내부적으로 사용한다.
|
|
4
|
-
|
|
5
|
-
```typescript
|
|
6
|
-
class NodeDbContextExecutor implements DbContextExecutor {
|
|
7
|
-
constructor(config: DbConnConfig);
|
|
8
|
-
|
|
9
|
-
connect(): Promise<void>;
|
|
10
|
-
close(): Promise<void>;
|
|
11
|
-
beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;
|
|
12
|
-
commitTransaction(): Promise<void>;
|
|
13
|
-
rollbackTransaction(): Promise<void>;
|
|
14
|
-
executeParametrized(query: string, params?: unknown[]): Promise<Record<string, unknown>[][]>;
|
|
15
|
-
bulkInsert(
|
|
16
|
-
tableName: string,
|
|
17
|
-
columnMetas: Record<string, ColumnMeta>,
|
|
18
|
-
records: DataRecord[],
|
|
19
|
-
): Promise<void>;
|
|
20
|
-
executeDefs<T = DataRecord>(
|
|
21
|
-
defs: QueryDef[],
|
|
22
|
-
resultMetas?: (ResultMeta | undefined)[],
|
|
23
|
-
): Promise<T[][]>;
|
|
24
|
-
}
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Members
|
|
28
|
-
|
|
29
|
-
| Member | Kind | Type | Description |
|
|
30
|
-
|--------|------|------|-------------|
|
|
31
|
-
| `connect()` | method | `Promise<void>` | `createDbConn()`으로 DB 연결을 생성하고 연결을 수립한다 |
|
|
32
|
-
| `close()` | method | `Promise<void>` | DB 연결을 종료한다 |
|
|
33
|
-
| `beginTransaction(isolationLevel?)` | method | `Promise<void>` | 트랜잭션을 시작한다 |
|
|
34
|
-
| `commitTransaction()` | method | `Promise<void>` | 트랜잭션을 커밋한다 |
|
|
35
|
-
| `rollbackTransaction()` | method | `Promise<void>` | 트랜잭션을 롤백한다 |
|
|
36
|
-
| `executeParametrized(query, params?)` | method | `Promise<Record<string, unknown>[][]>` | 파라미터화된 쿼리를 실행한다 |
|
|
37
|
-
| `bulkInsert(tableName, columnMetas, records)` | method | `Promise<void>` | 대량 데이터 삽입 |
|
|
38
|
-
| `executeDefs(defs, resultMetas?)` | method | `Promise<T[][]>` | QueryDef 배열을 SQL로 변환하여 실행한다 |
|
|
39
|
-
|
|
40
|
-
일반적으로 직접 사용하지 않는다. [`createOrm()`](./create-orm.md)이 내부적으로 이 클래스를 생성하여 `DbContext`에 전달한다.
|
|
41
|
-
|
|
42
|
-
## `executeDefs()` 처리 방식
|
|
43
|
-
|
|
44
|
-
- `resultMetas`가 모두 `undefined`이면 쿼리를 단일 문자열로 결합하여 한 번의 요청으로 실행한다 (결과 불필요 최적화).
|
|
45
|
-
- 그 외에는 각 def를 개별 실행하고 `ResultMeta`가 있으면 `parseQueryResult()`로 결과를 파싱한다.
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
# DbConnConfig
|
|
2
|
-
|
|
3
|
-
DB 연결 설정 discriminated union. `dialect` 필드로 구현체를 분기한다.
|
|
4
|
-
|
|
5
|
-
```typescript
|
|
6
|
-
type DbConnConfig = MysqlDbConnConfig | MssqlDbConnConfig | PostgresqlDbConnConfig;
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
## Related Types
|
|
10
|
-
|
|
11
|
-
### `MysqlDbConnConfig`
|
|
12
|
-
|
|
13
|
-
MySQL 연결 설정.
|
|
14
|
-
|
|
15
|
-
```typescript
|
|
16
|
-
interface MysqlDbConnConfig {
|
|
17
|
-
dialect: "mysql";
|
|
18
|
-
host: string;
|
|
19
|
-
port?: number;
|
|
20
|
-
username: string;
|
|
21
|
-
password: string;
|
|
22
|
-
database?: string;
|
|
23
|
-
defaultIsolationLevel?: IsolationLevel;
|
|
24
|
-
}
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
| Field | Type | Description |
|
|
28
|
-
|-------|------|-------------|
|
|
29
|
-
| `dialect` | `"mysql"` | Discriminant. 항상 `"mysql"` |
|
|
30
|
-
| `host` | `string` | 호스트 주소 |
|
|
31
|
-
| `port` | `number?` | 포트 (생략 시 mysql2 기본값 사용) |
|
|
32
|
-
| `username` | `string` | 사용자 이름 |
|
|
33
|
-
| `password` | `string` | 비밀번호 |
|
|
34
|
-
| `database` | `string?` | 데이터베이스 이름 |
|
|
35
|
-
| `defaultIsolationLevel` | `IsolationLevel?` | 기본 격리 수준 (미지정 시 `READ_UNCOMMITTED`) |
|
|
36
|
-
|
|
37
|
-
### `MssqlDbConnConfig`
|
|
38
|
-
|
|
39
|
-
MSSQL/Azure SQL 연결 설정.
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
interface MssqlDbConnConfig {
|
|
43
|
-
dialect: "mssql" | "mssql-azure";
|
|
44
|
-
host: string;
|
|
45
|
-
port?: number;
|
|
46
|
-
username: string;
|
|
47
|
-
password: string;
|
|
48
|
-
database?: string;
|
|
49
|
-
schema?: string;
|
|
50
|
-
defaultIsolationLevel?: IsolationLevel;
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
| Field | Type | Description |
|
|
55
|
-
|-------|------|-------------|
|
|
56
|
-
| `dialect` | `"mssql" \| "mssql-azure"` | Discriminant. `"mssql-azure"`인 경우 암호화 연결(`encrypt: true`)을 사용한다 |
|
|
57
|
-
| `host` | `string` | 호스트 주소 |
|
|
58
|
-
| `port` | `number?` | 포트 |
|
|
59
|
-
| `username` | `string` | 사용자 이름 |
|
|
60
|
-
| `password` | `string` | 비밀번호 |
|
|
61
|
-
| `database` | `string?` | 데이터베이스 이름 |
|
|
62
|
-
| `schema` | `string?` | 스키마 이름 |
|
|
63
|
-
| `defaultIsolationLevel` | `IsolationLevel?` | 기본 격리 수준 (미지정 시 `READ_UNCOMMITTED`) |
|
|
64
|
-
|
|
65
|
-
### `PostgresqlDbConnConfig`
|
|
66
|
-
|
|
67
|
-
PostgreSQL 연결 설정.
|
|
68
|
-
|
|
69
|
-
```typescript
|
|
70
|
-
interface PostgresqlDbConnConfig {
|
|
71
|
-
dialect: "postgresql";
|
|
72
|
-
host: string;
|
|
73
|
-
port?: number;
|
|
74
|
-
username: string;
|
|
75
|
-
password: string;
|
|
76
|
-
database?: string;
|
|
77
|
-
schema?: string;
|
|
78
|
-
defaultIsolationLevel?: IsolationLevel;
|
|
79
|
-
}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
| Field | Type | Description |
|
|
83
|
-
|-------|------|-------------|
|
|
84
|
-
| `dialect` | `"postgresql"` | Discriminant. 항상 `"postgresql"` |
|
|
85
|
-
| `host` | `string` | 호스트 주소 |
|
|
86
|
-
| `port` | `number?` | 포트 (미지정 시 `5432`) |
|
|
87
|
-
| `username` | `string` | 사용자 이름 |
|
|
88
|
-
| `password` | `string` | 비밀번호 |
|
|
89
|
-
| `database` | `string?` | 데이터베이스 이름 |
|
|
90
|
-
| `schema` | `string?` | 스키마 이름 |
|
|
91
|
-
| `defaultIsolationLevel` | `IsolationLevel?` | 기본 격리 수준 (미지정 시 `READ_UNCOMMITTED`) |
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# DB_CONN_CONNECT_TIMEOUT
|
|
2
|
-
|
|
3
|
-
DB 연결 수립 타임아웃 (10초).
|
|
4
|
-
|
|
5
|
-
```typescript
|
|
6
|
-
const DB_CONN_CONNECT_TIMEOUT = 10 * 1000; // 10_000ms
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
## Related Types
|
|
10
|
-
|
|
11
|
-
### `DB_CONN_DEFAULT_TIMEOUT`
|
|
12
|
-
|
|
13
|
-
DB 쿼리 기본 타임아웃 (10분). 유휴 연결 자동 종료 타이머는 이 값의 2배 후 `close()`를 호출한다.
|
|
14
|
-
|
|
15
|
-
```typescript
|
|
16
|
-
const DB_CONN_DEFAULT_TIMEOUT = 10 * 60 * 1000; // 600_000ms
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
### `DB_CONN_ERRORS`
|
|
20
|
-
|
|
21
|
-
DB 연결 관련 오류 메시지 상수.
|
|
22
|
-
|
|
23
|
-
```typescript
|
|
24
|
-
const DB_CONN_ERRORS = {
|
|
25
|
-
NOT_CONNECTED: "'Connection'이 연결되어 있지 않습니다.",
|
|
26
|
-
ALREADY_CONNECTED: "'Connection'이 이미 연결되어 있습니다.",
|
|
27
|
-
} as const;
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
| Key | Value |
|
|
31
|
-
|-----|-------|
|
|
32
|
-
| `NOT_CONNECTED` | `"'Connection'이 연결되어 있지 않습니다."` |
|
|
33
|
-
| `ALREADY_CONNECTED` | `"'Connection'이 이미 연결되어 있습니다."` |
|
package/docs/types/db-conn.md
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# DbConn
|
|
2
|
-
|
|
3
|
-
저수준 DB 연결 인터페이스. 각 DBMS 구현체(`MssqlDbConn`, `MysqlDbConn`, `PostgresqlDbConn`)가 이 인터페이스를 구현한다.
|
|
4
|
-
|
|
5
|
-
```typescript
|
|
6
|
-
interface DbConn extends EventEmitter<{ close: void }> {
|
|
7
|
-
config: DbConnConfig;
|
|
8
|
-
isConnected: boolean;
|
|
9
|
-
isInTransaction: boolean;
|
|
10
|
-
connect(): Promise<void>;
|
|
11
|
-
close(): Promise<void>;
|
|
12
|
-
beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;
|
|
13
|
-
commitTransaction(): Promise<void>;
|
|
14
|
-
rollbackTransaction(): Promise<void>;
|
|
15
|
-
execute(queries: string[]): Promise<Record<string, unknown>[][]>;
|
|
16
|
-
executeParametrized(query: string, params?: unknown[]): Promise<Record<string, unknown>[][]>;
|
|
17
|
-
bulkInsert(
|
|
18
|
-
tableName: string,
|
|
19
|
-
columnMetas: Record<string, ColumnMeta>,
|
|
20
|
-
records: Record<string, unknown>[],
|
|
21
|
-
): Promise<void>;
|
|
22
|
-
}
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Members
|
|
26
|
-
|
|
27
|
-
| Member | Kind | Type | Description |
|
|
28
|
-
|--------|------|------|-------------|
|
|
29
|
-
| `config` | property | `DbConnConfig` | 연결 설정 |
|
|
30
|
-
| `isConnected` | property | `boolean` | 연결 여부 |
|
|
31
|
-
| `isInTransaction` | property | `boolean` | 트랜잭션 진행 여부 |
|
|
32
|
-
| `connect()` | method | `Promise<void>` | DB 연결을 수립한다 |
|
|
33
|
-
| `close()` | method | `Promise<void>` | DB 연결을 종료한다 |
|
|
34
|
-
| `beginTransaction(isolationLevel?)` | method | `Promise<void>` | 트랜잭션을 시작한다 |
|
|
35
|
-
| `commitTransaction()` | method | `Promise<void>` | 트랜잭션을 커밋한다 |
|
|
36
|
-
| `rollbackTransaction()` | method | `Promise<void>` | 트랜잭션을 롤백한다 |
|
|
37
|
-
| `execute(queries)` | method | `Promise<Record<string, unknown>[][]>` | SQL 쿼리 배열을 실행한다 |
|
|
38
|
-
| `executeParametrized(query, params?)` | method | `Promise<Record<string, unknown>[][]>` | 파라미터화된 쿼리를 실행한다 |
|
|
39
|
-
| `bulkInsert(tableName, columnMetas, records)` | method | `Promise<void>` | 네이티브 bulk API를 사용하여 대량 삽입한다 |
|
|
40
|
-
|
|
41
|
-
`EventEmitter<{ close: void }>`를 상속하므로 연결 종료 시 `'close'` 이벤트를 수신할 수 있다.
|
|
42
|
-
|
|
43
|
-
## Usage
|
|
44
|
-
|
|
45
|
-
```typescript
|
|
46
|
-
conn.on("close", () => {
|
|
47
|
-
// 연결이 종료됨
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
await conn.connect();
|
|
51
|
-
await conn.beginTransaction();
|
|
52
|
-
await conn.execute(["INSERT INTO users (name) VALUES ('Alice')"]);
|
|
53
|
-
await conn.commitTransaction();
|
|
54
|
-
await conn.close();
|
|
55
|
-
```
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# getDialectFromConfig
|
|
2
|
-
|
|
3
|
-
`DbConnConfig`에서 정규화된 `Dialect`를 추출한다.
|
|
4
|
-
|
|
5
|
-
```typescript
|
|
6
|
-
function getDialectFromConfig(config: DbConnConfig): Dialect;
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
## Parameters
|
|
10
|
-
|
|
11
|
-
| Param | Type | Description |
|
|
12
|
-
|-------|------|-------------|
|
|
13
|
-
| `config` | `DbConnConfig` | DB 연결 설정 |
|
|
14
|
-
|
|
15
|
-
## Returns
|
|
16
|
-
|
|
17
|
-
`Dialect` — 정규화된 dialect 값. `"mssql-azure"` → `"mssql"`로 변환하고, 나머지(`"mysql"`, `"mssql"`, `"postgresql"`)는 `config.dialect`를 그대로 반환한다.
|