@simplysm/orm-node 14.0.47 → 14.0.49

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 ADDED
@@ -0,0 +1,143 @@
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
+ | API | Type | Description |
29
+ |-----|------|-------------|
30
+ | `DbConn` | interface | 저수준 DB 연결 인터페이스. 각 DBMS 구현체가 이 인터페이스를 구현한다. `EventEmitter<{ close: void }>`를 상속한다. |
31
+ | `DbConnConfig` | type | DB 연결 설정 discriminated union (`MysqlDbConnConfig \| MssqlDbConnConfig \| PostgresqlDbConnConfig`). `dialect` 필드로 분기한다. |
32
+ | `MysqlDbConnConfig` | interface | MySQL 연결 설정 |
33
+ | `MssqlDbConnConfig` | interface | MSSQL/Azure SQL 연결 설정 |
34
+ | `PostgresqlDbConnConfig` | interface | PostgreSQL 연결 설정 |
35
+ | `DB_CONN_CONNECT_TIMEOUT` | const | DB 연결 수립 타임아웃 (10초, `10_000`ms) |
36
+ | `DB_CONN_DEFAULT_TIMEOUT` | const | DB 쿼리 기본 타임아웃 (10분, `600_000`ms) |
37
+ | `DB_CONN_ERRORS` | const | DB 연결 오류 메시지 상수 (`NOT_CONNECTED`, `ALREADY_CONNECTED`) |
38
+ | `getDialectFromConfig` | function | `DbConnConfig`에서 정규화된 `Dialect`를 추출한다. `"mssql-azure"` → `"mssql"`로 변환한다. |
39
+
40
+ → See [docs/types.md](./docs/types.md) for details.
41
+
42
+ ### Connections
43
+
44
+ | API | Type | Description |
45
+ |-----|------|-------------|
46
+ | `MssqlDbConn` | class | MSSQL 데이터베이스 연결 클래스. tedious 라이브러리를 사용한다. |
47
+ | `MysqlDbConn` | class | MySQL 데이터베이스 연결 클래스. mysql2/promise 라이브러리를 사용한다. |
48
+ | `PostgresqlDbConn` | class | PostgreSQL 데이터베이스 연결 클래스. pg + pg-copy-streams 라이브러리를 사용한다. |
49
+
50
+ → See [docs/connections.md](./docs/connections.md) for details.
51
+
52
+ ### Core
53
+
54
+ | API | Type | Description |
55
+ |-----|------|-------------|
56
+ | `createDbConn` | function | dialect 기반 DbConn 팩토리. 네이티브 드라이버를 지연 로딩하여 DbConn 인스턴스를 생성한다. |
57
+ | `NodeDbContextExecutor` | class | `orm-common`의 `DbContextExecutor` 인터페이스 구현체. DbContext에서 사용하는 실제 DB 연결을 처리한다. |
58
+ | `createOrm` | function | Node.js ORM 팩토리 함수. DbContext 서브클래스와 연결 설정을 받아 트랜잭션을 관리하는 Orm 인스턴스를 생성한다. |
59
+ | `Orm` | interface | `createOrm`에서 반환하는 객체의 타입 |
60
+ | `OrmOptions` | interface | ORM 옵션. `DbConnConfig`보다 우선하는 `database`/`schema` 설정 |
61
+
62
+ → See [docs/core.md](./docs/core.md) for details.
63
+
64
+ ## Usage Examples
65
+
66
+ ### createOrm을 사용한 ORM 연결
67
+
68
+ ```typescript
69
+ import { DbContext } from "@simplysm/orm-common";
70
+ import { createOrm } from "@simplysm/orm-node";
71
+
72
+ class MyDb extends DbContext {
73
+ user = this.queryable(User);
74
+ }
75
+
76
+ const orm = createOrm(MyDb, {
77
+ dialect: "mysql",
78
+ host: "localhost",
79
+ port: 3306,
80
+ username: "root",
81
+ password: "password",
82
+ database: "mydb",
83
+ });
84
+
85
+ // 트랜잭션 내에서 실행
86
+ await orm.connect(async (db) => {
87
+ const users = await db.user().execute();
88
+ return users;
89
+ });
90
+
91
+ // 트랜잭션 없이 실행
92
+ await orm.connectWithoutTransaction(async (db) => {
93
+ const users = await db.user().execute();
94
+ return users;
95
+ });
96
+ ```
97
+
98
+ ### createDbConn을 사용한 저수준 연결
99
+
100
+ ```typescript
101
+ import { createDbConn } from "@simplysm/orm-node";
102
+
103
+ const conn = await createDbConn({
104
+ dialect: "postgresql",
105
+ host: "localhost",
106
+ port: 5432,
107
+ username: "postgres",
108
+ password: "password",
109
+ database: "mydb",
110
+ });
111
+
112
+ await conn.connect();
113
+
114
+ try {
115
+ await conn.beginTransaction();
116
+ await conn.execute(["INSERT INTO users (name) VALUES ('Alice')"]);
117
+ await conn.commitTransaction();
118
+ } catch {
119
+ await conn.rollbackTransaction();
120
+ } finally {
121
+ await conn.close();
122
+ }
123
+ ```
124
+
125
+ ### DbConn 클래스 직접 생성 (테스트용)
126
+
127
+ ```typescript
128
+ import { MysqlDbConn } from "@simplysm/orm-node";
129
+
130
+ const mysql2 = await import("mysql2/promise");
131
+ const conn = new MysqlDbConn(mysql2, {
132
+ dialect: "mysql",
133
+ host: "localhost",
134
+ port: 3306,
135
+ username: "root",
136
+ password: "password",
137
+ database: "testdb",
138
+ });
139
+
140
+ await conn.connect();
141
+ const results = await conn.execute(["SELECT 1 AS val"]);
142
+ await conn.close();
143
+ ```
@@ -11,7 +11,6 @@ export declare class MysqlDbConn extends EventEmitter<{
11
11
  }> implements DbConn {
12
12
  private readonly _mysql2;
13
13
  readonly config: MysqlDbConnConfig;
14
- private static readonly _ROOT_USER;
15
14
  private readonly _timeout;
16
15
  private _conn?;
17
16
  private _connTimeout?;
@@ -1 +1 @@
1
- {"version":3,"file":"mysql-db-conn.d.ts","sourceRoot":"","sources":["../../src/connections/mysql-db-conn.ts"],"names":[],"mappings":"AAMA,OAAO,EAML,YAAY,EAGb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAY,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAI1B;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,YAAY,CAAC;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,CAAE,YAAW,MAAM;IAW5E,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,QAAQ,CAAC,MAAM,EAAE,iBAAiB;IAXpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IAEpD,OAAO,CAAC,KAAK,CAAC,CAAa;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAgC;IAErD,WAAW,UAAS;IACpB,eAAe,UAAS;gBAGL,OAAO,EAAE,cAAc,gBAAgB,CAAC,EAChD,MAAM,EAAE,iBAAiB;IAK9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBhE,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAShE,mBAAmB,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAoDjC,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACjC,OAAO,CAAC,IAAI,CAAC;IAyDhB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiDrB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;CAQtB"}
1
+ {"version":3,"file":"mysql-db-conn.d.ts","sourceRoot":"","sources":["../../src/connections/mysql-db-conn.ts"],"names":[],"mappings":"AAMA,OAAO,EAML,YAAY,EAGb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAY,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAI1B;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,YAAY,CAAC;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,CAAE,YAAW,MAAM;IAU5E,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,QAAQ,CAAC,MAAM,EAAE,iBAAiB;IAVpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IAEpD,OAAO,CAAC,KAAK,CAAC,CAAa;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAgC;IAErD,WAAW,UAAS;IACpB,eAAe,UAAS;gBAGL,OAAO,EAAE,cAAc,gBAAgB,CAAC,EAChD,MAAM,EAAE,iBAAiB;IAK9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBhE,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAShE,mBAAmB,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAoDjC,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACjC,OAAO,CAAC,IAAI,CAAC;IAyDhB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiDrB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,aAAa;CAQtB"}
@@ -14,7 +14,6 @@ const logger = consola.withTag("mysql-db-conn");
14
14
  export class MysqlDbConn extends EventEmitter {
15
15
  _mysql2;
16
16
  config;
17
- static _ROOT_USER = "root";
18
17
  _timeout = DB_CONN_DEFAULT_TIMEOUT;
19
18
  _conn;
20
19
  _connTimeout;
@@ -34,9 +33,7 @@ export class MysqlDbConn extends EventEmitter {
34
33
  port: this.config.port,
35
34
  user: this.config.username,
36
35
  password: this.config.password,
37
- // root 사용자는 특정 데이터베이스에 바인딩하지 않고 연결
38
- // 모든 데이터베이스에 접근할 수 있도록 (관리 작업용)
39
- database: this.config.username === MysqlDbConn._ROOT_USER ? undefined : this.config.database,
36
+ database: this.config.database,
40
37
  multipleStatements: true,
41
38
  charset: "utf8mb4",
42
39
  infileStreamFactory: (filePath) => fs.createReadStream(filePath), // LOAD DATA LOCAL INFILE 지원
@@ -1 +1 @@
1
- {"version":3,"file":"mysql-db-conn.js","sourceRoot":"","sources":["../../src/connections/mysql-db-conn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mysql-db-conn.js","sourceRoot":"","sources":["../../src/connections/mysql-db-conn.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"node-db-context-executor.d.ts","sourceRoot":"","sources":["../src/node-db-context-executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,UAAU,EAEV,UAAU,EACV,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI5D;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAIjD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEN,OAAO,EAAE,YAAY;IAIlD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;;;;OAKG;IACG,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxC;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1C;;;;;;;OAOG;IACG,mBAAmB,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAKvC;;;;;;;OAOG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,OAAO,EAAE,UAAU,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;;;;;OASG;IACG,WAAW,CAAC,CAAC,GAAG,UAAU,EAC9B,IAAI,EAAE,QAAQ,EAAE,EAChB,WAAW,CAAC,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,GACvC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC;IAqCjB,OAAO,CAAC,YAAY;CAMrB"}
1
+ {"version":3,"file":"node-db-context-executor.d.ts","sourceRoot":"","sources":["../src/node-db-context-executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,UAAU,EAEV,UAAU,EACV,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAU,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI5D;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAIjD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEN,OAAO,EAAE,YAAY;IAIlD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;;;;OAKG;IACG,gBAAgB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxC;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1C;;;;;;;OAOG;IACG,mBAAmB,CACvB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAKvC;;;;;;;OAOG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,OAAO,EAAE,UAAU,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;;;;;OASG;IACG,WAAW,CAAC,CAAC,GAAG,UAAU,EAC9B,IAAI,EAAE,QAAQ,EAAE,EAChB,WAAW,CAAC,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,GACvC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC;IAmCjB,OAAO,CAAC,YAAY;CAMrB"}
@@ -1,5 +1,5 @@
1
1
  import { SdError } from "@simplysm/core-common";
2
- import { createQueryBuilder, parseQueryResult } from "@simplysm/orm-common";
2
+ import { createQueryBuilder, parseQueryResult, pickResultSets } from "@simplysm/orm-common";
3
3
  import { DB_CONN_ERRORS, getDialectFromConfig } from "./types/db-conn.js";
4
4
  import { createDbConn } from "./create-db-conn.js";
5
5
  /**
@@ -111,8 +111,7 @@ export class NodeDbContextExecutor {
111
111
  const meta = resultMetas?.[i];
112
112
  const buildResult = builder.build(def);
113
113
  const rawResults = await conn.execute([buildResult.sql]);
114
- // resultSetIndex가 지정된 경우 해당 인덱스의 결과 집합을 사용
115
- const targetResultSet = buildResult.resultSetIndex != null ? rawResults[buildResult.resultSetIndex] : rawResults[0];
114
+ const targetResultSet = pickResultSets(rawResults, buildResult);
116
115
  if (meta != null) {
117
116
  const parsed = await parseQueryResult(targetResultSet, meta);
118
117
  results.push(parsed ?? []);
@@ -1 +1 @@
1
- {"version":3,"file":"node-db-context-executor.js","sourceRoot":"","sources":["../src/node-db-context-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-db-context-executor.js","sourceRoot":"","sources":["../src/node-db-context-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ # Connections
2
+
3
+ 세 연결 클래스(`MssqlDbConn`, `MysqlDbConn`, `PostgresqlDbConn`)는 모두 `EventEmitter<{ close: void }>`를 상속하고 `DbConn` 인터페이스를 구현한다.
4
+
5
+ 일반적으로 직접 생성하지 않고 `createDbConn()`을 통해 인스턴스를 얻는다. 직접 생성은 테스트 코드에서 네이티브 라이브러리를 주입할 때 사용한다.
6
+
7
+ ## `MssqlDbConn`
8
+
9
+ tedious 라이브러리를 사용하여 MSSQL/Azure SQL 연결을 관리하는 클래스.
10
+
11
+ ```typescript
12
+ class MssqlDbConn extends EventEmitter<{ close: void }> implements DbConn {
13
+ isConnected: boolean;
14
+ isInTransaction: boolean;
15
+ readonly config: MssqlDbConnConfig;
16
+
17
+ constructor(
18
+ tedious: typeof import("tedious"),
19
+ config: MssqlDbConnConfig,
20
+ );
21
+
22
+ connect(): Promise<void>;
23
+ close(): Promise<void>;
24
+ beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;
25
+ commitTransaction(): Promise<void>;
26
+ rollbackTransaction(): Promise<void>;
27
+ execute(queries: string[]): Promise<Record<string, unknown>[][]>;
28
+ executeParametrized(query: string, params?: unknown[]): Promise<Record<string, unknown>[][]>;
29
+ bulkInsert(
30
+ tableName: string,
31
+ columnMetas: Record<string, ColumnMeta>,
32
+ records: Record<string, unknown>[],
33
+ ): Promise<void>;
34
+ }
35
+ ```
36
+
37
+ **생성자**: tedious 라이브러리 모듈을 첫 번째 인수로 직접 주입받는다. `createDbConn()`이 동적 import 후 전달한다.
38
+
39
+ **`connect()`**: `config.dialect === "mssql-azure"`인 경우 `encrypt: true`로 연결한다. 연결 성공 시 유휴 타임아웃 타이머(`DB_CONN_DEFAULT_TIMEOUT * 2`)를 시작한다.
40
+
41
+ **`close()`**: 진행 중인 요청을 취소(`cancel()`)하고 30초 내에 완료될 때까지 대기한 뒤 연결을 종료한다.
42
+
43
+ **`bulkInsert()`**: tedious `BulkLoad` API를 사용한다. 값 변환 규칙:
44
+ - `Uuid` → `toString()`
45
+ - `Uint8Array` → `Buffer.from(val)` (tedious 라이브러리 요구사항으로 인한 예외적 허용)
46
+ - `DateTime` / `DateOnly` → `.date` (native Date 객체)
47
+ - `Time` → `"HH:mm:ss"` 포맷 문자열
48
+
49
+ **`executeParametrized()`**: 파라미터가 있으면 `conn.execSql()`, 없으면 `conn.execSqlBatch()`를 사용한다. 쿼리 오류 시 오류 발생 줄을 `==> ` 접두사로 표시하여 에러 메시지에 포함한다.
50
+
51
+ ## `MysqlDbConn`
52
+
53
+ mysql2/promise 라이브러리를 사용하여 MySQL 연결을 관리하는 클래스.
54
+
55
+ ```typescript
56
+ class MysqlDbConn extends EventEmitter<{ close: void }> implements DbConn {
57
+ isConnected: boolean;
58
+ isInTransaction: boolean;
59
+ readonly config: MysqlDbConnConfig;
60
+
61
+ constructor(
62
+ mysql2: typeof import("mysql2/promise"),
63
+ config: MysqlDbConnConfig,
64
+ );
65
+
66
+ connect(): Promise<void>;
67
+ close(): Promise<void>;
68
+ beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;
69
+ commitTransaction(): Promise<void>;
70
+ rollbackTransaction(): Promise<void>;
71
+ execute(queries: string[]): Promise<Record<string, unknown>[][]>;
72
+ executeParametrized(query: string, params?: unknown[]): Promise<Record<string, unknown>[][]>;
73
+ bulkInsert(
74
+ tableName: string,
75
+ columnMetas: Record<string, ColumnMeta>,
76
+ records: Record<string, unknown>[],
77
+ ): Promise<void>;
78
+ }
79
+ ```
80
+
81
+ **생성자**: mysql2/promise 라이브러리 모듈을 첫 번째 인수로 직접 주입받는다.
82
+
83
+ **`connect()`**: `username === "root"`인 경우 `database` 옵션을 전달하지 않는다 (모든 데이터베이스에 접근 가능하도록 관리 작업용). `multipleStatements: true`, `charset: "utf8mb4"`로 연결한다.
84
+
85
+ **`beginTransaction()`**: `SET SESSION TRANSACTION ISOLATION LEVEL {level}` 후 `BEGIN`을 실행한다. MySQL은 트랜잭션 시작 전에 격리 수준을 설정해야 한다.
86
+
87
+ **`bulkInsert()`**: `LOAD DATA LOCAL INFILE`을 사용한다. 처리 흐름:
88
+ 1. `os.tmpdir()`에 UUID 기반 임시 CSV 파일 생성 (TAB 구분)
89
+ 2. UUID/binary 컬럼은 hex 문자열로 기록, `SET` 절에서 `UNHEX()` 변환
90
+ 3. `LOAD DATA LOCAL INFILE` 실행
91
+ 4. `finally` 블록에서 임시 파일 삭제
92
+
93
+ **`executeParametrized()`**: 결과 형식에 따라 처리:
94
+ - single SELECT → flat `RowDataPacket[]`를 단일 결과 집합으로 반환
95
+ - single INSERT/UPDATE/DELETE → `ResultSetHeader`이므로 빈 결과 집합 반환
96
+ - multi-statement → 각 statement의 결과를 별도 결과 집합으로 분리
97
+
98
+ ## `PostgresqlDbConn`
99
+
100
+ pg + pg-copy-streams 라이브러리를 사용하여 PostgreSQL 연결을 관리하는 클래스.
101
+
102
+ ```typescript
103
+ class PostgresqlDbConn extends EventEmitter<{ close: void }> implements DbConn {
104
+ isConnected: boolean;
105
+ isInTransaction: boolean;
106
+ readonly config: PostgresqlDbConnConfig;
107
+
108
+ constructor(
109
+ pg: typeof import("pg"),
110
+ pgCopyStreams: typeof import("pg-copy-streams"),
111
+ config: PostgresqlDbConnConfig,
112
+ );
113
+
114
+ connect(): Promise<void>;
115
+ close(): Promise<void>;
116
+ beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;
117
+ commitTransaction(): Promise<void>;
118
+ rollbackTransaction(): Promise<void>;
119
+ execute(queries: string[]): Promise<Record<string, unknown>[][]>;
120
+ executeParametrized(query: string, params?: unknown[]): Promise<Record<string, unknown>[][]>;
121
+ bulkInsert(
122
+ tableName: string,
123
+ columnMetas: Record<string, ColumnMeta>,
124
+ records: Record<string, unknown>[],
125
+ ): Promise<void>;
126
+ }
127
+ ```
128
+
129
+ **생성자**: pg와 pg-copy-streams 라이브러리 모듈을 첫 번째, 두 번째 인수로 직접 주입받는다.
130
+
131
+ **`connect()`**: 기본 포트는 `5432`. `connectionTimeoutMillis: DB_CONN_CONNECT_TIMEOUT`, `query_timeout: DB_CONN_DEFAULT_TIMEOUT`으로 연결한다.
132
+
133
+ **`beginTransaction()`**: `BEGIN` 후 `SET TRANSACTION ISOLATION LEVEL {level}`을 실행한다.
134
+
135
+ **`bulkInsert()`**: `COPY FROM STDIN`(CSV 형식)을 사용한다. `pg-copy-streams`의 `from()` 함수로 스트림을 생성하고, `Readable.from(csvContent)`를 파이프한다. binary 컬럼은 PostgreSQL bytea hex 형식(`\x{hex}`)으로 변환한다.
136
+
137
+ **`executeParametrized()`**: PostgreSQL은 단일 결과 집합을 반환하므로 `[result.rows]`로 래핑하여 반환한다.
package/docs/core.md ADDED
@@ -0,0 +1,131 @@
1
+ # Core
2
+
3
+ ## `createDbConn`
4
+
5
+ dialect 기반 DbConn 팩토리. 네이티브 드라이버를 지연 로딩하여 DbConn 인스턴스를 생성한다.
6
+
7
+ ```typescript
8
+ async function createDbConn(config: DbConnConfig): Promise<DbConn>;
9
+ ```
10
+
11
+ `config.dialect`에 따라 적절한 DbConn 구현체를 생성한다:
12
+
13
+ | dialect | 반환 타입 | 로드하는 패키지 |
14
+ |---------|-----------|----------------|
15
+ | `"mysql"` | `MysqlDbConn` | `mysql2/promise` |
16
+ | `"postgresql"` | `PostgresqlDbConn` | `pg`, `pg-copy-streams` |
17
+ | `"mssql"` / `"mssql-azure"` | `MssqlDbConn` | `tedious` |
18
+
19
+ 네이티브 드라이버 패키지는 최초 호출 시에만 동적 import로 로드하고 모듈 수준 캐시에 보관한다. 이후 호출에서는 캐시된 모듈을 재사용한다.
20
+
21
+ 반환된 `DbConn`은 아직 연결되지 않은 상태이므로 `connect()`를 별도로 호출해야 한다.
22
+
23
+ ```typescript
24
+ const conn = await createDbConn({ dialect: "mysql", host: "...", username: "...", password: "..." });
25
+ await conn.connect(); // 연결 수립
26
+ ```
27
+
28
+ ## `NodeDbContextExecutor`
29
+
30
+ `orm-common`의 `DbContextExecutor` 인터페이스를 구현하는 Node.js 환경용 실행자. `DbContext`에서 내부적으로 사용한다.
31
+
32
+ ```typescript
33
+ class NodeDbContextExecutor implements DbContextExecutor {
34
+ constructor(config: DbConnConfig);
35
+
36
+ connect(): Promise<void>;
37
+ close(): Promise<void>;
38
+ beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;
39
+ commitTransaction(): Promise<void>;
40
+ rollbackTransaction(): Promise<void>;
41
+ executeParametrized(query: string, params?: unknown[]): Promise<Record<string, unknown>[][]>;
42
+ bulkInsert(
43
+ tableName: string,
44
+ columnMetas: Record<string, ColumnMeta>,
45
+ records: DataRecord[],
46
+ ): Promise<void>;
47
+ executeDefs<T = DataRecord>(
48
+ defs: QueryDef[],
49
+ resultMetas?: (ResultMeta | undefined)[],
50
+ ): Promise<T[][]>;
51
+ }
52
+ ```
53
+
54
+ 내부적으로 `createDbConn()`으로 DB 연결을 생성하고 관리한다.
55
+
56
+ **`executeDefs()`**: `QueryDef` 배열을 SQL로 변환하여 실행한다. 처리 방식:
57
+ - `resultMetas`가 모두 `undefined`이면 쿼리를 단일 문자열로 결합하여 한 번의 요청으로 실행한다 (결과 불필요 최적화).
58
+ - 그 외에는 각 def를 개별 실행하고 `ResultMeta`가 있으면 `parseQueryResult()`로 결과를 파싱한다.
59
+ - `buildResult.resultSetIndex`가 지정된 경우 해당 인덱스의 결과 집합을 사용한다.
60
+
61
+ 일반적으로 직접 사용하지 않는다. `createOrm()`이 내부적으로 이 클래스를 생성하여 `DbContext`에 전달한다.
62
+
63
+ ## `createOrm`
64
+
65
+ Node.js ORM 팩토리 함수. `DbContext` 서브클래스와 DB 연결 설정을 받아 트랜잭션을 관리하는 `Orm<T>` 인스턴스를 반환한다.
66
+
67
+ ```typescript
68
+ function createOrm<T extends DbContext>(
69
+ DbClass: new (executor: DbContextExecutor, opt: { database: string; schema?: string }) => T,
70
+ config: DbConnConfig,
71
+ options?: OrmOptions,
72
+ ): Orm<T>;
73
+ ```
74
+
75
+ `options.database` / `options.schema`는 `config`의 동일 필드보다 우선 적용된다. `database`는 필수이며, `config`와 `options` 양쪽 모두 `database`가 없으면 에러를 throw한다.
76
+
77
+ ```typescript
78
+ class MyDb extends DbContext {
79
+ user = this.queryable(User);
80
+ }
81
+
82
+ const orm = createOrm(MyDb, {
83
+ dialect: "mysql",
84
+ host: "localhost",
85
+ username: "root",
86
+ password: "password",
87
+ database: "mydb",
88
+ });
89
+
90
+ await orm.connect(async (db) => {
91
+ return db.user().execute();
92
+ });
93
+ ```
94
+
95
+ ## `Orm`
96
+
97
+ `createOrm()`에서 반환하는 객체의 타입.
98
+
99
+ ```typescript
100
+ interface Orm<T extends DbContext> {
101
+ readonly DbClass: new (executor: DbContextExecutor, opt: { database: string; schema?: string }) => T;
102
+ readonly config: DbConnConfig;
103
+ readonly options?: OrmOptions;
104
+ connect<R>(callback: (conn: T) => Promise<R>, isolationLevel?: IsolationLevel): Promise<R>;
105
+ connectWithoutTransaction<R>(callback: (conn: T) => Promise<R>): Promise<R>;
106
+ }
107
+ ```
108
+
109
+ | Field | Type | Description |
110
+ |-------|------|-------------|
111
+ | `DbClass` | constructor | DbContext 서브클래스 생성자 |
112
+ | `config` | `DbConnConfig` | DB 연결 설정 |
113
+ | `options` | `OrmOptions?` | ORM 옵션 |
114
+ | `connect(callback, isolationLevel?)` | `Promise<R>` | 트랜잭션 내에서 콜백을 실행한다. 콜백 완료 후 자동 커밋, 예외 발생 시 자동 롤백 |
115
+ | `connectWithoutTransaction(callback)` | `Promise<R>` | 트랜잭션 없이 콜백을 실행한다 |
116
+
117
+ ## `OrmOptions`
118
+
119
+ `createOrm()`의 세 번째 인수로 전달하는 옵션. `DbConnConfig`의 동일 필드보다 우선 적용된다.
120
+
121
+ ```typescript
122
+ interface OrmOptions {
123
+ database?: string;
124
+ schema?: string;
125
+ }
126
+ ```
127
+
128
+ | Field | Type | Description |
129
+ |-------|------|-------------|
130
+ | `database` | `string?` | 데이터베이스 이름. `DbConnConfig`의 `database` 대신 사용된다 |
131
+ | `schema` | `string?` | 스키마 이름 (MSSQL: `dbo`, PostgreSQL: `public`). `DbConnConfig`의 `schema` 대신 사용된다 |
package/docs/types.md ADDED
@@ -0,0 +1,173 @@
1
+ # Types
2
+
3
+ ## `DbConn`
4
+
5
+ 저수준 DB 연결 인터페이스. 각 DBMS 구현체(`MssqlDbConn`, `MysqlDbConn`, `PostgresqlDbConn`)가 이 인터페이스를 구현한다.
6
+
7
+ ```typescript
8
+ interface DbConn extends EventEmitter<{ close: void }> {
9
+ config: DbConnConfig;
10
+ isConnected: boolean;
11
+ isInTransaction: boolean;
12
+ connect(): Promise<void>;
13
+ close(): Promise<void>;
14
+ beginTransaction(isolationLevel?: IsolationLevel): Promise<void>;
15
+ commitTransaction(): Promise<void>;
16
+ rollbackTransaction(): Promise<void>;
17
+ execute(queries: string[]): Promise<Record<string, unknown>[][]>;
18
+ executeParametrized(query: string, params?: unknown[]): Promise<Record<string, unknown>[][]>;
19
+ bulkInsert(
20
+ tableName: string,
21
+ columnMetas: Record<string, ColumnMeta>,
22
+ records: Record<string, unknown>[],
23
+ ): Promise<void>;
24
+ }
25
+ ```
26
+
27
+ | Field | Type | Description |
28
+ |-------|------|-------------|
29
+ | `config` | `DbConnConfig` | 연결 설정 |
30
+ | `isConnected` | `boolean` | 연결 여부 |
31
+ | `isInTransaction` | `boolean` | 트랜잭션 진행 여부 |
32
+ | `connect()` | `Promise<void>` | DB 연결을 수립한다 |
33
+ | `close()` | `Promise<void>` | DB 연결을 종료한다 |
34
+ | `beginTransaction(isolationLevel?)` | `Promise<void>` | 트랜잭션을 시작한다 |
35
+ | `commitTransaction()` | `Promise<void>` | 트랜잭션을 커밋한다 |
36
+ | `rollbackTransaction()` | `Promise<void>` | 트랜잭션을 롤백한다 |
37
+ | `execute(queries)` | `Promise<Record<string, unknown>[][]>` | SQL 쿼리 배열을 실행한다 |
38
+ | `executeParametrized(query, params?)` | `Promise<Record<string, unknown>[][]>` | 파라미터화된 쿼리를 실행한다 |
39
+ | `bulkInsert(tableName, columnMetas, records)` | `Promise<void>` | 네이티브 bulk API를 사용하여 대량 삽입한다 |
40
+
41
+ `EventEmitter<{ close: void }>`를 상속하므로 연결 종료 시 `'close'` 이벤트를 수신할 수 있다.
42
+
43
+ ## `DbConnConfig`
44
+
45
+ DB 연결 설정 discriminated union. `dialect` 필드로 구현체를 분기한다.
46
+
47
+ ```typescript
48
+ type DbConnConfig = MysqlDbConnConfig | MssqlDbConnConfig | PostgresqlDbConnConfig;
49
+ ```
50
+
51
+ ## `MysqlDbConnConfig`
52
+
53
+ MySQL 연결 설정.
54
+
55
+ ```typescript
56
+ interface MysqlDbConnConfig {
57
+ dialect: "mysql";
58
+ host: string;
59
+ port?: number;
60
+ username: string;
61
+ password: string;
62
+ database?: string;
63
+ defaultIsolationLevel?: IsolationLevel;
64
+ }
65
+ ```
66
+
67
+ | Field | Type | Description |
68
+ |-------|------|-------------|
69
+ | `dialect` | `"mysql"` | Discriminant. 항상 `"mysql"` |
70
+ | `host` | `string` | 호스트 주소 |
71
+ | `port` | `number?` | 포트 (생략 시 mysql2 기본값 사용) |
72
+ | `username` | `string` | 사용자 이름 |
73
+ | `password` | `string` | 비밀번호 |
74
+ | `database` | `string?` | 데이터베이스 이름 |
75
+ | `defaultIsolationLevel` | `IsolationLevel?` | 기본 격리 수준 (미지정 시 `READ_UNCOMMITTED`) |
76
+
77
+ ## `MssqlDbConnConfig`
78
+
79
+ MSSQL/Azure SQL 연결 설정.
80
+
81
+ ```typescript
82
+ interface MssqlDbConnConfig {
83
+ dialect: "mssql" | "mssql-azure";
84
+ host: string;
85
+ port?: number;
86
+ username: string;
87
+ password: string;
88
+ database?: string;
89
+ schema?: string;
90
+ defaultIsolationLevel?: IsolationLevel;
91
+ }
92
+ ```
93
+
94
+ | Field | Type | Description |
95
+ |-------|------|-------------|
96
+ | `dialect` | `"mssql" \| "mssql-azure"` | Discriminant. `"mssql-azure"`인 경우 암호화 연결(encrypt)을 사용한다 |
97
+ | `host` | `string` | 호스트 주소 |
98
+ | `port` | `number?` | 포트 |
99
+ | `username` | `string` | 사용자 이름 |
100
+ | `password` | `string` | 비밀번호 |
101
+ | `database` | `string?` | 데이터베이스 이름 |
102
+ | `schema` | `string?` | 스키마 이름 |
103
+ | `defaultIsolationLevel` | `IsolationLevel?` | 기본 격리 수준 (미지정 시 `READ_UNCOMMITTED`) |
104
+
105
+ ## `PostgresqlDbConnConfig`
106
+
107
+ PostgreSQL 연결 설정.
108
+
109
+ ```typescript
110
+ interface PostgresqlDbConnConfig {
111
+ dialect: "postgresql";
112
+ host: string;
113
+ port?: number;
114
+ username: string;
115
+ password: string;
116
+ database?: string;
117
+ schema?: string;
118
+ defaultIsolationLevel?: IsolationLevel;
119
+ }
120
+ ```
121
+
122
+ | Field | Type | Description |
123
+ |-------|------|-------------|
124
+ | `dialect` | `"postgresql"` | Discriminant. 항상 `"postgresql"` |
125
+ | `host` | `string` | 호스트 주소 |
126
+ | `port` | `number?` | 포트 (미지정 시 `5432`) |
127
+ | `username` | `string` | 사용자 이름 |
128
+ | `password` | `string` | 비밀번호 |
129
+ | `database` | `string?` | 데이터베이스 이름 |
130
+ | `schema` | `string?` | 스키마 이름 |
131
+ | `defaultIsolationLevel` | `IsolationLevel?` | 기본 격리 수준 (미지정 시 `READ_UNCOMMITTED`) |
132
+
133
+ ## `DB_CONN_CONNECT_TIMEOUT`
134
+
135
+ DB 연결 수립 타임아웃 (10초).
136
+
137
+ ```typescript
138
+ const DB_CONN_CONNECT_TIMEOUT = 10 * 1000; // 10_000ms
139
+ ```
140
+
141
+ ## `DB_CONN_DEFAULT_TIMEOUT`
142
+
143
+ DB 쿼리 기본 타임아웃 (10분). 유휴 연결 자동 종료 타이머는 이 값의 2배 후 `close()`를 호출한다.
144
+
145
+ ```typescript
146
+ const DB_CONN_DEFAULT_TIMEOUT = 10 * 60 * 1000; // 600_000ms
147
+ ```
148
+
149
+ ## `DB_CONN_ERRORS`
150
+
151
+ DB 연결 관련 오류 메시지 상수.
152
+
153
+ ```typescript
154
+ const DB_CONN_ERRORS = {
155
+ NOT_CONNECTED: "'Connection'이 연결되어 있지 않습니다.",
156
+ ALREADY_CONNECTED: "'Connection'이 이미 연결되어 있습니다.",
157
+ } as const;
158
+ ```
159
+
160
+ | Key | Value |
161
+ |-----|-------|
162
+ | `NOT_CONNECTED` | `"'Connection'이 연결되어 있지 않습니다."` |
163
+ | `ALREADY_CONNECTED` | `"'Connection'이 이미 연결되어 있습니다."` |
164
+
165
+ ## `getDialectFromConfig`
166
+
167
+ `DbConnConfig`에서 정규화된 `Dialect`를 추출한다.
168
+
169
+ ```typescript
170
+ function getDialectFromConfig(config: DbConnConfig): Dialect;
171
+ ```
172
+
173
+ `"mssql-azure"` → `"mssql"`로 변환하고, 나머지(`"mysql"`, `"mssql"`, `"postgresql"`)는 `config.dialect`를 그대로 반환한다.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/orm-node",
3
- "version": "14.0.47",
3
+ "version": "14.0.49",
4
4
  "description": "심플리즘 패키지 - ORM (node)",
5
5
  "author": "심플리즘",
6
6
  "license": "Apache-2.0",
@@ -14,18 +14,19 @@
14
14
  "types": "./dist/index.d.ts",
15
15
  "files": [
16
16
  "dist",
17
- "src"
17
+ "src",
18
+ "docs"
18
19
  ],
19
20
  "sideEffects": false,
20
21
  "dependencies": {
21
22
  "consola": "^3.4.2",
22
- "@simplysm/core-common": "14.0.47",
23
- "@simplysm/orm-common": "14.0.47"
23
+ "@simplysm/core-common": "14.0.49",
24
+ "@simplysm/orm-common": "14.0.49"
24
25
  },
25
26
  "devDependencies": {
26
27
  "@types/pg": "^8.20.0",
27
28
  "@types/pg-copy-streams": "^1.2.5",
28
- "mysql2": "^3.22.1",
29
+ "mysql2": "^3.22.2",
29
30
  "pg": "^8.20.0",
30
31
  "pg-copy-streams": "^7.0.0",
31
32
  "tedious": "^19.2.1"
@@ -30,7 +30,6 @@ const logger = consola.withTag("mysql-db-conn");
30
30
  * mysql2/promise 라이브러리를 사용하여 MySQL 연결을 관리한다.
31
31
  */
32
32
  export class MysqlDbConn extends EventEmitter<{ close: void }> implements DbConn {
33
- private static readonly _ROOT_USER = "root";
34
33
  private readonly _timeout = DB_CONN_DEFAULT_TIMEOUT;
35
34
 
36
35
  private _conn?: Connection;
@@ -56,9 +55,7 @@ export class MysqlDbConn extends EventEmitter<{ close: void }> implements DbConn
56
55
  port: this.config.port,
57
56
  user: this.config.username,
58
57
  password: this.config.password,
59
- // root 사용자는 특정 데이터베이스에 바인딩하지 않고 연결
60
- // 모든 데이터베이스에 접근할 수 있도록 (관리 작업용)
61
- database: this.config.username === MysqlDbConn._ROOT_USER ? undefined : this.config.database,
58
+ database: this.config.database,
62
59
  multipleStatements: true,
63
60
  charset: "utf8mb4",
64
61
  infileStreamFactory: (filePath: string) => fs.createReadStream(filePath), // LOAD DATA LOCAL INFILE 지원
@@ -8,7 +8,7 @@ import type {
8
8
  ColumnMeta,
9
9
  DataRecord,
10
10
  } from "@simplysm/orm-common";
11
- import { createQueryBuilder, parseQueryResult } from "@simplysm/orm-common";
11
+ import { createQueryBuilder, parseQueryResult, pickResultSets } from "@simplysm/orm-common";
12
12
  import type { DbConn, DbConnConfig } from "./types/db-conn";
13
13
  import { DB_CONN_ERRORS, getDialectFromConfig } from "./types/db-conn";
14
14
  import { createDbConn } from "./create-db-conn";
@@ -144,9 +144,7 @@ export class NodeDbContextExecutor implements DbContextExecutor {
144
144
 
145
145
  const rawResults = await conn.execute([buildResult.sql]);
146
146
 
147
- // resultSetIndex가 지정된 경우 해당 인덱스의 결과 집합을 사용
148
- const targetResultSet =
149
- buildResult.resultSetIndex != null ? rawResults[buildResult.resultSetIndex] : rawResults[0];
147
+ const targetResultSet = pickResultSets(rawResults, buildResult);
150
148
 
151
149
  if (meta != null) {
152
150
  const parsed = await parseQueryResult<T>(targetResultSet, meta);