@simplysm/orm-common 13.0.0-beta.50 → 13.0.1
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 +135 -7
- package/dist/create-db-context.d.ts +34 -0
- package/dist/create-db-context.d.ts.map +1 -0
- package/dist/create-db-context.js +283 -0
- package/dist/create-db-context.js.map +6 -0
- package/dist/ddl/column-ddl.d.ts +19 -0
- package/dist/ddl/column-ddl.d.ts.map +1 -0
- package/dist/ddl/column-ddl.js +39 -0
- package/dist/ddl/column-ddl.js.map +6 -0
- package/dist/ddl/initialize.d.ts +36 -0
- package/dist/ddl/initialize.d.ts.map +1 -0
- package/dist/ddl/initialize.js +157 -0
- package/dist/ddl/initialize.js.map +6 -0
- package/dist/ddl/relation-ddl.d.ts +29 -0
- package/dist/ddl/relation-ddl.d.ts.map +1 -0
- package/dist/ddl/relation-ddl.js +56 -0
- package/dist/ddl/relation-ddl.js.map +6 -0
- package/dist/ddl/schema-ddl.d.ts +21 -0
- package/dist/ddl/schema-ddl.d.ts.map +1 -0
- package/dist/ddl/schema-ddl.js +19 -0
- package/dist/ddl/schema-ddl.js.map +6 -0
- package/dist/ddl/table-ddl.d.ts +66 -0
- package/dist/ddl/table-ddl.d.ts.map +1 -0
- package/dist/ddl/table-ddl.js +106 -0
- package/dist/ddl/table-ddl.js.map +6 -0
- package/dist/define-db-context.d.ts +12 -0
- package/dist/define-db-context.d.ts.map +1 -0
- package/dist/define-db-context.js +14 -0
- package/dist/define-db-context.js.map +6 -0
- package/dist/exec/executable.d.ts +3 -3
- package/dist/exec/executable.d.ts.map +1 -1
- package/dist/exec/queryable.d.ts +4 -4
- package/dist/exec/queryable.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/schema/view-builder.d.ts +4 -4
- package/dist/schema/view-builder.d.ts.map +1 -1
- package/dist/types/db-context-def.d.ts +117 -0
- package/dist/types/db-context-def.d.ts.map +1 -0
- package/dist/types/db-context-def.js +1 -0
- package/dist/types/db-context-def.js.map +6 -0
- package/dist/types/db.d.ts +2 -2
- package/dist/types/db.d.ts.map +1 -1
- package/docs/schema.md +51 -10
- package/package.json +2 -2
- package/src/create-db-context.ts +368 -0
- package/src/ddl/column-ddl.ts +68 -0
- package/src/ddl/initialize.ts +249 -0
- package/src/ddl/relation-ddl.ts +86 -0
- package/src/ddl/schema-ddl.ts +35 -0
- package/src/ddl/table-ddl.ts +180 -0
- package/src/define-db-context.ts +25 -0
- package/src/exec/executable.ts +3 -3
- package/src/exec/queryable.ts +4 -4
- package/src/index.ts +12 -1
- package/src/schema/view-builder.ts +3 -3
- package/src/types/db-context-def.ts +134 -0
- package/src/types/db.ts +2 -2
- package/dist/db-context.d.ts +0 -669
- package/dist/db-context.d.ts.map +0 -1
- package/dist/db-context.js +0 -1065
- package/dist/db-context.js.map +0 -6
- package/src/db-context.ts +0 -1293
package/README.md
CHANGED
|
@@ -76,6 +76,134 @@ See [docs/expressions.md](docs/expressions.md) for full documentation.
|
|
|
76
76
|
- **[Window Functions](docs/expressions.md#window-functions)** - `expr.rowNumber()`, `expr.rank()`, `expr.denseRank()`, `expr.lag()`, `expr.lead()`, `expr.sumOver()`, `expr.avgOver()`
|
|
77
77
|
- **[Other Expressions](docs/expressions.md#other-expressions)** - `expr.val()`, `expr.raw()`, `expr.cast()`, `expr.subquery()`, `expr.random()`
|
|
78
78
|
|
|
79
|
+
## DbContext API
|
|
80
|
+
|
|
81
|
+
### Functional API (Recommended)
|
|
82
|
+
|
|
83
|
+
The functional API uses `defineDbContext` + `createDbContext` for better type safety and composability.
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import { defineDbContext, createDbContext, createColumnFactory } from "@simplysm/orm-common";
|
|
87
|
+
|
|
88
|
+
// Step 1: Define DbContext schema
|
|
89
|
+
const MyDbDef = defineDbContext({
|
|
90
|
+
tables: { user: User, post: Post },
|
|
91
|
+
views: { activeUsers: ActiveUsers },
|
|
92
|
+
procedures: { getUserById: GetUserById },
|
|
93
|
+
migrations: [
|
|
94
|
+
{
|
|
95
|
+
name: "20260101_add_status",
|
|
96
|
+
up: async (db) => {
|
|
97
|
+
const c = createColumnFactory();
|
|
98
|
+
await db.addColumn(
|
|
99
|
+
{ database: "mydb", name: "User" },
|
|
100
|
+
"status",
|
|
101
|
+
c.varchar(20).nullable(),
|
|
102
|
+
);
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// Step 2: Create instance with executor
|
|
109
|
+
const db = createDbContext(MyDbDef, executor, { database: "mydb" });
|
|
110
|
+
|
|
111
|
+
// Use queryable accessors
|
|
112
|
+
await db.connect(async () => {
|
|
113
|
+
const users = await db.user().result();
|
|
114
|
+
const posts = await db.post().result();
|
|
115
|
+
});
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
#### Type Definitions
|
|
119
|
+
|
|
120
|
+
| Type | Description |
|
|
121
|
+
|------|-------------|
|
|
122
|
+
| `DbContextDef<TTables, TViews, TProcedures>` | DbContext definition (schema blueprint) |
|
|
123
|
+
| `DbContextInstance<TDef>` | Full DbContext instance with queryable accessors and DDL methods |
|
|
124
|
+
| `DbContextBase` | Core interface used internally (status, executeDefs, etc.) |
|
|
125
|
+
|
|
126
|
+
### Class-based API (Deprecated)
|
|
127
|
+
|
|
128
|
+
The old class-based API is deprecated. Migrate to the functional API for better type safety.
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
// Old (deprecated):
|
|
132
|
+
import { DbContext, queryable } from "@simplysm/orm-common";
|
|
133
|
+
|
|
134
|
+
class MyDb extends DbContext {
|
|
135
|
+
readonly user = queryable(this, User);
|
|
136
|
+
readonly migrations = [...];
|
|
137
|
+
}
|
|
138
|
+
const db = new MyDb(executor, { database: "mydb" });
|
|
139
|
+
|
|
140
|
+
// New (recommended):
|
|
141
|
+
const MyDbDef = defineDbContext({
|
|
142
|
+
tables: { user: User },
|
|
143
|
+
migrations: [...],
|
|
144
|
+
});
|
|
145
|
+
const db = createDbContext(MyDbDef, executor, { database: "mydb" });
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Migration Guide
|
|
149
|
+
|
|
150
|
+
To migrate from class-based to functional API:
|
|
151
|
+
|
|
152
|
+
**Step 1: Replace class definition**
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
// Before:
|
|
156
|
+
class MyDb extends DbContext {
|
|
157
|
+
readonly user = queryable(this, User);
|
|
158
|
+
readonly post = queryable(this, Post);
|
|
159
|
+
readonly getUserById = executable(this, GetUserById);
|
|
160
|
+
|
|
161
|
+
readonly migrations = [
|
|
162
|
+
{ name: "...", up: async (db: MyDb) => { ... } }
|
|
163
|
+
];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// After:
|
|
167
|
+
const MyDbDef = defineDbContext({
|
|
168
|
+
tables: { user: User, post: Post },
|
|
169
|
+
procedures: { getUserById: GetUserById },
|
|
170
|
+
migrations: [
|
|
171
|
+
{ name: "...", up: async (db) => { ... } }
|
|
172
|
+
],
|
|
173
|
+
});
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Step 2: Replace instantiation**
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
// Before:
|
|
180
|
+
const db = new MyDb(executor, { database: "mydb" });
|
|
181
|
+
|
|
182
|
+
// After:
|
|
183
|
+
const db = createDbContext(MyDbDef, executor, { database: "mydb" });
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Step 3: Update usage (no changes needed)**
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
// Both APIs use the same queryable accessors:
|
|
190
|
+
await db.connect(async () => {
|
|
191
|
+
const users = await db.user().result(); // Same syntax
|
|
192
|
+
});
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Type inference:**
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
// Extract instance type:
|
|
199
|
+
type MyDb = DbContextInstance<typeof MyDbDef>;
|
|
200
|
+
|
|
201
|
+
// Use in function parameters:
|
|
202
|
+
async function doSomething(db: MyDb) {
|
|
203
|
+
await db.user().result();
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
79
207
|
## Security Notes
|
|
80
208
|
|
|
81
209
|
orm-common uses **enhanced string escaping** instead of parameter binding due to its dynamic query nature.
|
|
@@ -99,7 +227,7 @@ await db.user().where((u) => [expr.eq(u.id, userId)]).result();
|
|
|
99
227
|
## Quick Start
|
|
100
228
|
|
|
101
229
|
```typescript
|
|
102
|
-
import { Table,
|
|
230
|
+
import { Table, defineDbContext, createDbContext, expr, DateTime } from "@simplysm/orm-common";
|
|
103
231
|
|
|
104
232
|
// Define table schema
|
|
105
233
|
const User = Table("User")
|
|
@@ -112,13 +240,13 @@ const User = Table("User")
|
|
|
112
240
|
}))
|
|
113
241
|
.primaryKey("id");
|
|
114
242
|
|
|
115
|
-
//
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
243
|
+
// Define DbContext
|
|
244
|
+
const MyDbDef = defineDbContext({
|
|
245
|
+
tables: { user: User },
|
|
246
|
+
});
|
|
119
247
|
|
|
120
|
-
//
|
|
121
|
-
const db =
|
|
248
|
+
// Create DbContext instance with executor (from orm-node package)
|
|
249
|
+
const db = createDbContext(MyDbDef, executor, { database: "mydb" });
|
|
122
250
|
|
|
123
251
|
// Execute queries
|
|
124
252
|
await db.connect(async () => {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { DbContextDef, DbContextInstance } from "./types/db-context-def";
|
|
2
|
+
import type { DbContextExecutor } from "./types/db";
|
|
3
|
+
/**
|
|
4
|
+
* DbContext 인스턴스 팩토리
|
|
5
|
+
*
|
|
6
|
+
* DbContextDef(정의)와 DbContextExecutor(실행기)를 받아
|
|
7
|
+
* queryable 접근자, DDL 메서드, 연결/트랜잭션 관리를 포함한
|
|
8
|
+
* 완전한 DbContext 인스턴스를 생성
|
|
9
|
+
*
|
|
10
|
+
* @param def - defineDbContext()로 생성한 정의 객체
|
|
11
|
+
* @param executor - 쿼리 실행기 (NodeDbContextExecutor, ServiceDbContextExecutor 등)
|
|
12
|
+
* @param opt - 데이터베이스 옵션
|
|
13
|
+
* @param opt.database - 데이터베이스 이름
|
|
14
|
+
* @param opt.schema - 스키마 이름 (MSSQL: dbo, PostgreSQL: public)
|
|
15
|
+
* @returns 완전한 DbContext 인스턴스
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const MyDb = defineDbContext({
|
|
20
|
+
* tables: { user: User, post: Post },
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* const db = createDbContext(MyDb, executor, { database: "mydb" });
|
|
24
|
+
*
|
|
25
|
+
* await db.connect(async () => {
|
|
26
|
+
* const users = await db.user().result();
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function createDbContext<TDef extends DbContextDef<any, any, any>>(def: TDef, executor: DbContextExecutor, opt: {
|
|
31
|
+
database: string;
|
|
32
|
+
schema?: string;
|
|
33
|
+
}): DbContextInstance<TDef>;
|
|
34
|
+
//# sourceMappingURL=create-db-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-db-context.d.ts","sourceRoot":"","sources":["../src/create-db-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAkC,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC9G,OAAO,KAAK,EAAc,iBAAiB,EAA8B,MAAM,YAAY,CAAC;AAuB5F;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,eAAe,CAAC,IAAI,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACtE,GAAG,EAAE,IAAI,EACT,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC,iBAAiB,CAAC,IAAI,CAAC,CAwTzB"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { DDL_TYPES } from "./types/query-def.js";
|
|
2
|
+
import { DbErrorCode, DbTransactionError } from "./errors/db-transaction-error.js";
|
|
3
|
+
import { TableBuilder } from "./schema/table-builder.js";
|
|
4
|
+
import { ViewBuilder } from "./schema/view-builder.js";
|
|
5
|
+
import { queryable } from "./exec/queryable.js";
|
|
6
|
+
import { executable } from "./exec/executable.js";
|
|
7
|
+
import { objClearUndefined } from "@simplysm/core-common";
|
|
8
|
+
import { SystemMigration } from "./models/system-migration.js";
|
|
9
|
+
import * as tableDdl from "./ddl/table-ddl.js";
|
|
10
|
+
import * as columnDdl from "./ddl/column-ddl.js";
|
|
11
|
+
import * as relationDdl from "./ddl/relation-ddl.js";
|
|
12
|
+
import * as schemaDdl from "./ddl/schema-ddl.js";
|
|
13
|
+
import { initialize as initializeImpl, validateRelations as validateRelationsImpl } from "./ddl/initialize.js";
|
|
14
|
+
function createDbContext(def, executor, opt) {
|
|
15
|
+
let aliasCounter = 0;
|
|
16
|
+
let status = "ready";
|
|
17
|
+
const base = {
|
|
18
|
+
get status() {
|
|
19
|
+
return status;
|
|
20
|
+
},
|
|
21
|
+
set status(v) {
|
|
22
|
+
status = v;
|
|
23
|
+
},
|
|
24
|
+
get database() {
|
|
25
|
+
return opt.database;
|
|
26
|
+
},
|
|
27
|
+
get schema() {
|
|
28
|
+
return opt.schema;
|
|
29
|
+
},
|
|
30
|
+
getNextAlias() {
|
|
31
|
+
return `T${++aliasCounter}`;
|
|
32
|
+
},
|
|
33
|
+
resetAliasCounter() {
|
|
34
|
+
aliasCounter = 0;
|
|
35
|
+
},
|
|
36
|
+
executeDefs(defs, resultMetas) {
|
|
37
|
+
if (status === "transact" && defs.some((d) => DDL_TYPES.includes(d.type))) {
|
|
38
|
+
throw new Error("TRANSACTION \uC0C1\uD0DC\uC5D0\uC11C\uB294 DDL\uC744 \uC2E4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.");
|
|
39
|
+
}
|
|
40
|
+
return executor.executeDefs(defs, resultMetas);
|
|
41
|
+
},
|
|
42
|
+
getQueryDefObjectName(tableOrView) {
|
|
43
|
+
return objClearUndefined({
|
|
44
|
+
database: tableOrView.meta.database ?? opt.database,
|
|
45
|
+
schema: tableOrView.meta.schema ?? opt.schema,
|
|
46
|
+
name: tableOrView.meta.name
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
async switchFk(table, switch_) {
|
|
50
|
+
await base.executeDefs([schemaDdl.getSwitchFkQueryDef(table, switch_)]);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const db = {
|
|
54
|
+
// Spread base properties (getters/setters need special handling)
|
|
55
|
+
get status() {
|
|
56
|
+
return base.status;
|
|
57
|
+
},
|
|
58
|
+
set status(v) {
|
|
59
|
+
base.status = v;
|
|
60
|
+
},
|
|
61
|
+
get database() {
|
|
62
|
+
return base.database;
|
|
63
|
+
},
|
|
64
|
+
get schema() {
|
|
65
|
+
return base.schema;
|
|
66
|
+
},
|
|
67
|
+
getNextAlias: base.getNextAlias,
|
|
68
|
+
resetAliasCounter: base.resetAliasCounter,
|
|
69
|
+
executeDefs: base.executeDefs,
|
|
70
|
+
getQueryDefObjectName: base.getQueryDefObjectName,
|
|
71
|
+
//#region ========== Connection management ==========
|
|
72
|
+
/**
|
|
73
|
+
* 트랜잭션 내에서 콜백 실행 (자동 커밋/롤백)
|
|
74
|
+
*
|
|
75
|
+
* 연결 -> 트랜잭션 시작 -> 콜백 실행 -> 커밋 -> 연결 종료
|
|
76
|
+
* 에러 발생 시 자동 롤백 후 연결 종료
|
|
77
|
+
*/
|
|
78
|
+
async connect(fn, isolationLevel) {
|
|
79
|
+
validateRelationsImpl(def);
|
|
80
|
+
base.resetAliasCounter();
|
|
81
|
+
await executor.connect();
|
|
82
|
+
status = "connect";
|
|
83
|
+
await executor.beginTransaction(isolationLevel);
|
|
84
|
+
status = "transact";
|
|
85
|
+
let result;
|
|
86
|
+
try {
|
|
87
|
+
result = await fn();
|
|
88
|
+
await executor.commitTransaction();
|
|
89
|
+
status = "connect";
|
|
90
|
+
} catch (err) {
|
|
91
|
+
try {
|
|
92
|
+
await executor.rollbackTransaction();
|
|
93
|
+
status = "connect";
|
|
94
|
+
} catch (err1) {
|
|
95
|
+
if (err1 instanceof DbTransactionError) {
|
|
96
|
+
if (err1.code !== DbErrorCode.NO_ACTIVE_TRANSACTION) {
|
|
97
|
+
await executor.close();
|
|
98
|
+
status = "ready";
|
|
99
|
+
throw err1;
|
|
100
|
+
}
|
|
101
|
+
} else {
|
|
102
|
+
await executor.close();
|
|
103
|
+
status = "ready";
|
|
104
|
+
throw err1;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
await executor.close();
|
|
108
|
+
status = "ready";
|
|
109
|
+
throw err;
|
|
110
|
+
}
|
|
111
|
+
await executor.close();
|
|
112
|
+
status = "ready";
|
|
113
|
+
return result;
|
|
114
|
+
},
|
|
115
|
+
/**
|
|
116
|
+
* 트랜잭션 없이 연결하여 콜백 실행 후 자동 종료
|
|
117
|
+
*
|
|
118
|
+
* DDL 작업이나 트랜잭션이 필요 없는 조회 작업에 사용
|
|
119
|
+
*/
|
|
120
|
+
async connectWithoutTransaction(callback) {
|
|
121
|
+
validateRelationsImpl(def);
|
|
122
|
+
base.resetAliasCounter();
|
|
123
|
+
await executor.connect();
|
|
124
|
+
status = "connect";
|
|
125
|
+
let result;
|
|
126
|
+
try {
|
|
127
|
+
result = await callback();
|
|
128
|
+
} catch (err) {
|
|
129
|
+
await executor.close();
|
|
130
|
+
status = "ready";
|
|
131
|
+
throw err;
|
|
132
|
+
}
|
|
133
|
+
await executor.close();
|
|
134
|
+
status = "ready";
|
|
135
|
+
return result;
|
|
136
|
+
},
|
|
137
|
+
/**
|
|
138
|
+
* 이미 연결된 상태에서 트랜잭션 시작 (자동 커밋/롤백)
|
|
139
|
+
*
|
|
140
|
+
* connectWithoutTransaction 내에서 부분적으로 트랜잭션이 필요할 때 사용
|
|
141
|
+
*/
|
|
142
|
+
async trans(fn, isolationLevel) {
|
|
143
|
+
if (status === "transact") {
|
|
144
|
+
throw new Error("\uC774\uBBF8 TRANSACTION \uC0C1\uD0DC\uC785\uB2C8\uB2E4.");
|
|
145
|
+
}
|
|
146
|
+
await executor.beginTransaction(isolationLevel);
|
|
147
|
+
status = "transact";
|
|
148
|
+
let result;
|
|
149
|
+
try {
|
|
150
|
+
result = await fn();
|
|
151
|
+
await executor.commitTransaction();
|
|
152
|
+
status = "connect";
|
|
153
|
+
} catch (err) {
|
|
154
|
+
try {
|
|
155
|
+
await executor.rollbackTransaction();
|
|
156
|
+
status = "connect";
|
|
157
|
+
} catch (err1) {
|
|
158
|
+
if (err1 instanceof DbTransactionError) {
|
|
159
|
+
if (err1.code !== DbErrorCode.NO_ACTIVE_TRANSACTION) {
|
|
160
|
+
throw err1;
|
|
161
|
+
}
|
|
162
|
+
} else {
|
|
163
|
+
throw err1;
|
|
164
|
+
}
|
|
165
|
+
status = "connect";
|
|
166
|
+
}
|
|
167
|
+
throw err;
|
|
168
|
+
}
|
|
169
|
+
return result;
|
|
170
|
+
},
|
|
171
|
+
//#endregion
|
|
172
|
+
//#region ========== DDL execution methods ==========
|
|
173
|
+
async createTable(table) {
|
|
174
|
+
await base.executeDefs([tableDdl.getCreateTableQueryDef(base, table)]);
|
|
175
|
+
},
|
|
176
|
+
async dropTable(table) {
|
|
177
|
+
await base.executeDefs([tableDdl.getDropTableQueryDef(table)]);
|
|
178
|
+
},
|
|
179
|
+
async renameTable(table, newName) {
|
|
180
|
+
await base.executeDefs([tableDdl.getRenameTableQueryDef(table, newName)]);
|
|
181
|
+
},
|
|
182
|
+
async createView(view) {
|
|
183
|
+
await base.executeDefs([tableDdl.getCreateViewQueryDef(db, view)]);
|
|
184
|
+
},
|
|
185
|
+
async dropView(view) {
|
|
186
|
+
await base.executeDefs([tableDdl.getDropViewQueryDef(view)]);
|
|
187
|
+
},
|
|
188
|
+
async createProc(procedure) {
|
|
189
|
+
await base.executeDefs([tableDdl.getCreateProcQueryDef(base, procedure)]);
|
|
190
|
+
},
|
|
191
|
+
async dropProc(procedure) {
|
|
192
|
+
await base.executeDefs([tableDdl.getDropProcQueryDef(procedure)]);
|
|
193
|
+
},
|
|
194
|
+
async addColumn(table, columnName, column) {
|
|
195
|
+
await base.executeDefs([columnDdl.getAddColumnQueryDef(table, columnName, column)]);
|
|
196
|
+
},
|
|
197
|
+
async dropColumn(table, column) {
|
|
198
|
+
await base.executeDefs([columnDdl.getDropColumnQueryDef(table, column)]);
|
|
199
|
+
},
|
|
200
|
+
async modifyColumn(table, columnName, column) {
|
|
201
|
+
await base.executeDefs([columnDdl.getModifyColumnQueryDef(table, columnName, column)]);
|
|
202
|
+
},
|
|
203
|
+
async renameColumn(table, column, newName) {
|
|
204
|
+
await base.executeDefs([columnDdl.getRenameColumnQueryDef(table, column, newName)]);
|
|
205
|
+
},
|
|
206
|
+
async addPk(table, columns) {
|
|
207
|
+
await base.executeDefs([relationDdl.getAddPkQueryDef(table, columns)]);
|
|
208
|
+
},
|
|
209
|
+
async dropPk(table) {
|
|
210
|
+
await base.executeDefs([relationDdl.getDropPkQueryDef(table)]);
|
|
211
|
+
},
|
|
212
|
+
async addFk(table, relationName, relationDef) {
|
|
213
|
+
await base.executeDefs([relationDdl.getAddFkQueryDef(base, table, relationName, relationDef)]);
|
|
214
|
+
},
|
|
215
|
+
async addIdx(table, indexBuilder) {
|
|
216
|
+
await base.executeDefs([relationDdl.getAddIdxQueryDef(table, indexBuilder)]);
|
|
217
|
+
},
|
|
218
|
+
async dropFk(table, relationName) {
|
|
219
|
+
await base.executeDefs([relationDdl.getDropFkQueryDef(table, relationName)]);
|
|
220
|
+
},
|
|
221
|
+
async dropIdx(table, columns) {
|
|
222
|
+
await base.executeDefs([relationDdl.getDropIdxQueryDef(table, columns)]);
|
|
223
|
+
},
|
|
224
|
+
async clearSchema(params) {
|
|
225
|
+
await base.executeDefs([schemaDdl.getClearSchemaQueryDef(params)]);
|
|
226
|
+
},
|
|
227
|
+
async schemaExists(database, schema) {
|
|
228
|
+
const result = await base.executeDefs([schemaDdl.getSchemaExistsQueryDef(database, schema)]);
|
|
229
|
+
return result[0].length > 0;
|
|
230
|
+
},
|
|
231
|
+
async truncate(table) {
|
|
232
|
+
await base.executeDefs([schemaDdl.getTruncateQueryDef(table)]);
|
|
233
|
+
},
|
|
234
|
+
async switchFk(table, switch_) {
|
|
235
|
+
await base.executeDefs([schemaDdl.getSwitchFkQueryDef(table, switch_)]);
|
|
236
|
+
},
|
|
237
|
+
//#endregion
|
|
238
|
+
//#region ========== DDL QueryDef generators ==========
|
|
239
|
+
getCreateTableQueryDef: (table) => tableDdl.getCreateTableQueryDef(base, table),
|
|
240
|
+
getCreateViewQueryDef: (view) => tableDdl.getCreateViewQueryDef(db, view),
|
|
241
|
+
getCreateProcQueryDef: (procedure) => tableDdl.getCreateProcQueryDef(base, procedure),
|
|
242
|
+
getCreateObjectQueryDef: (builder) => tableDdl.getCreateObjectQueryDef(db, builder),
|
|
243
|
+
getDropTableQueryDef: tableDdl.getDropTableQueryDef,
|
|
244
|
+
getRenameTableQueryDef: tableDdl.getRenameTableQueryDef,
|
|
245
|
+
getDropViewQueryDef: tableDdl.getDropViewQueryDef,
|
|
246
|
+
getDropProcQueryDef: tableDdl.getDropProcQueryDef,
|
|
247
|
+
getAddColumnQueryDef: columnDdl.getAddColumnQueryDef,
|
|
248
|
+
getDropColumnQueryDef: columnDdl.getDropColumnQueryDef,
|
|
249
|
+
getModifyColumnQueryDef: columnDdl.getModifyColumnQueryDef,
|
|
250
|
+
getRenameColumnQueryDef: columnDdl.getRenameColumnQueryDef,
|
|
251
|
+
getAddPkQueryDef: relationDdl.getAddPkQueryDef,
|
|
252
|
+
getDropPkQueryDef: relationDdl.getDropPkQueryDef,
|
|
253
|
+
getAddFkQueryDef: (table, relationName, relationDef) => relationDdl.getAddFkQueryDef(base, table, relationName, relationDef),
|
|
254
|
+
getAddIdxQueryDef: relationDdl.getAddIdxQueryDef,
|
|
255
|
+
getDropFkQueryDef: relationDdl.getDropFkQueryDef,
|
|
256
|
+
getDropIdxQueryDef: relationDdl.getDropIdxQueryDef,
|
|
257
|
+
getClearSchemaQueryDef: schemaDdl.getClearSchemaQueryDef,
|
|
258
|
+
getSchemaExistsQueryDef: schemaDdl.getSchemaExistsQueryDef,
|
|
259
|
+
getTruncateQueryDef: schemaDdl.getTruncateQueryDef,
|
|
260
|
+
getSwitchFkQueryDef: schemaDdl.getSwitchFkQueryDef,
|
|
261
|
+
//#endregion
|
|
262
|
+
//#region ========== Initialize ==========
|
|
263
|
+
async initialize(options) {
|
|
264
|
+
await initializeImpl(db, def, options);
|
|
265
|
+
}
|
|
266
|
+
//#endregion
|
|
267
|
+
};
|
|
268
|
+
for (const [key, tableOrView] of Object.entries(def.meta.tables)) {
|
|
269
|
+
db[key] = queryable(db, tableOrView);
|
|
270
|
+
}
|
|
271
|
+
for (const [key, view] of Object.entries(def.meta.views)) {
|
|
272
|
+
db[key] = queryable(db, view);
|
|
273
|
+
}
|
|
274
|
+
for (const [key, proc] of Object.entries(def.meta.procedures)) {
|
|
275
|
+
db[key] = executable(base, proc);
|
|
276
|
+
}
|
|
277
|
+
db.systemMigration = queryable(db, SystemMigration);
|
|
278
|
+
return db;
|
|
279
|
+
}
|
|
280
|
+
export {
|
|
281
|
+
createDbContext
|
|
282
|
+
};
|
|
283
|
+
//# sourceMappingURL=create-db-context.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/create-db-context.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ColumnBuilder } from "../schema/factory/column-builder";
|
|
2
|
+
import type { QueryDefObjectName, AddColumnQueryDef, DropColumnQueryDef, ModifyColumnQueryDef, RenameColumnQueryDef } from "../types/query-def";
|
|
3
|
+
/**
|
|
4
|
+
* ADD COLUMN QueryDef 생성
|
|
5
|
+
*/
|
|
6
|
+
export declare function getAddColumnQueryDef(table: QueryDefObjectName, columnName: string, column: ColumnBuilder<any, any>): AddColumnQueryDef;
|
|
7
|
+
/**
|
|
8
|
+
* DROP COLUMN QueryDef 생성
|
|
9
|
+
*/
|
|
10
|
+
export declare function getDropColumnQueryDef(table: QueryDefObjectName, column: string): DropColumnQueryDef;
|
|
11
|
+
/**
|
|
12
|
+
* MODIFY COLUMN QueryDef 생성
|
|
13
|
+
*/
|
|
14
|
+
export declare function getModifyColumnQueryDef(table: QueryDefObjectName, columnName: string, column: ColumnBuilder<any, any>): ModifyColumnQueryDef;
|
|
15
|
+
/**
|
|
16
|
+
* RENAME COLUMN QueryDef 생성
|
|
17
|
+
*/
|
|
18
|
+
export declare function getRenameColumnQueryDef(table: QueryDefObjectName, column: string, newName: string): RenameColumnQueryDef;
|
|
19
|
+
//# sourceMappingURL=column-ddl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-ddl.d.ts","sourceRoot":"","sources":["../../src/ddl/column-ddl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,kBAAkB,EACzB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,GAC9B,iBAAiB,CAYnB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAEnG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,kBAAkB,EACzB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,GAC9B,oBAAoB,CAYtB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,oBAAoB,CAEtB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
function getAddColumnQueryDef(table, columnName, column) {
|
|
2
|
+
return {
|
|
3
|
+
type: "addColumn",
|
|
4
|
+
table,
|
|
5
|
+
column: {
|
|
6
|
+
name: columnName,
|
|
7
|
+
dataType: column.meta.dataType,
|
|
8
|
+
autoIncrement: column.meta.autoIncrement,
|
|
9
|
+
nullable: column.meta.nullable,
|
|
10
|
+
default: column.meta.default
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function getDropColumnQueryDef(table, column) {
|
|
15
|
+
return { type: "dropColumn", table, column };
|
|
16
|
+
}
|
|
17
|
+
function getModifyColumnQueryDef(table, columnName, column) {
|
|
18
|
+
return {
|
|
19
|
+
type: "modifyColumn",
|
|
20
|
+
table,
|
|
21
|
+
column: {
|
|
22
|
+
name: columnName,
|
|
23
|
+
dataType: column.meta.dataType,
|
|
24
|
+
autoIncrement: column.meta.autoIncrement,
|
|
25
|
+
nullable: column.meta.nullable,
|
|
26
|
+
default: column.meta.default
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function getRenameColumnQueryDef(table, column, newName) {
|
|
31
|
+
return { type: "renameColumn", table, column, newName };
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
getAddColumnQueryDef,
|
|
35
|
+
getDropColumnQueryDef,
|
|
36
|
+
getModifyColumnQueryDef,
|
|
37
|
+
getRenameColumnQueryDef
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=column-ddl.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/ddl/column-ddl.ts"],
|
|
4
|
+
"mappings": "AAYO,SAAS,qBACd,OACA,YACA,QACmB;AACnB,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU,OAAO,KAAK;AAAA,MACtB,eAAe,OAAO,KAAK;AAAA,MAC3B,UAAU,OAAO,KAAK;AAAA,MACtB,SAAS,OAAO,KAAK;AAAA,IACvB;AAAA,EACF;AACF;AAKO,SAAS,sBAAsB,OAA2B,QAAoC;AACnG,SAAO,EAAE,MAAM,cAAc,OAAO,OAAO;AAC7C;AAKO,SAAS,wBACd,OACA,YACA,QACsB;AACtB,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU,OAAO,KAAK;AAAA,MACtB,eAAe,OAAO,KAAK;AAAA,MAC3B,UAAU,OAAO,KAAK;AAAA,MACtB,SAAS,OAAO,KAAK;AAAA,IACvB;AAAA,EACF;AACF;AAKO,SAAS,wBACd,OACA,QACA,SACsB;AACtB,SAAO,EAAE,MAAM,gBAAgB,OAAO,QAAQ,QAAQ;AACxD;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { DbContextBase, DbContextDef, DbContextDdlMethods } from "../types/db-context-def";
|
|
2
|
+
import type { Queryable } from "../exec/queryable";
|
|
3
|
+
/**
|
|
4
|
+
* Code First 데이터베이스 초기화
|
|
5
|
+
*
|
|
6
|
+
* DbContext에 정의된 테이블/뷰/프로시저를 데이터베이스에 생성하고,
|
|
7
|
+
* 마이그레이션을 적용
|
|
8
|
+
*
|
|
9
|
+
* @param db - DbContext 인스턴스
|
|
10
|
+
* @param def - DbContext 정의
|
|
11
|
+
* @param options - 초기화 옵션
|
|
12
|
+
* @param options.dbs - 초기화 대상 데이터베이스 목록 (미지정 시 현재 database)
|
|
13
|
+
* @param options.force - true 시 기존 스키마 삭제 후 전체 재생성
|
|
14
|
+
* @throws {Error} 초기화할 데이터베이스가 없을 때
|
|
15
|
+
* @throws {Error} 지정한 데이터베이스가 존재하지 않을 때
|
|
16
|
+
*
|
|
17
|
+
* 동작 방식:
|
|
18
|
+
* - **force=true**: clearSchema → 전체 생성 → 모든 migration "적용됨" 등록
|
|
19
|
+
* - **force=false** (기본):
|
|
20
|
+
* - SystemMigration 테이블 없음: 전체 생성 + 모든 migration 등록
|
|
21
|
+
* - SystemMigration 테이블 있음: 미적용 migration만 실행
|
|
22
|
+
*/
|
|
23
|
+
export declare function initialize(db: DbContextBase & DbContextDdlMethods & {
|
|
24
|
+
systemMigration: () => Queryable<{
|
|
25
|
+
code: string;
|
|
26
|
+
}, any>;
|
|
27
|
+
}, def: DbContextDef<any, any, any>, options?: {
|
|
28
|
+
dbs?: string[];
|
|
29
|
+
force?: boolean;
|
|
30
|
+
}): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* ForeignKeyTarget/RelationKeyTarget 관계의 유효성 검증
|
|
33
|
+
* - targetTableFn()이 반환하는 테이블에 relationName에 해당하는 FK/RelationKey가 있는지 확인
|
|
34
|
+
*/
|
|
35
|
+
export declare function validateRelations(def: DbContextDef<any, any, any>): void;
|
|
36
|
+
//# sourceMappingURL=initialize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../../src/ddl/initialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAenD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,UAAU,CAC9B,EAAE,EAAE,aAAa,GAAG,mBAAmB,GAAG;IAAE,eAAe,EAAE,MAAM,SAAS,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,CAAC,CAAA;CAAE,EACrG,GAAG,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAChC,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CA6Df;AA+ED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAyBxE"}
|