cgraphx 1.3.1 → 1.4.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/dist/.claude-template/skills/code-impact-api/SKILL.md +1 -1
- package/dist/.claude-template/skills/code-impact-init/SKILL.md +3 -0
- package/dist/.claude-template/skills/code-impact-markdown/SKILL.md +13 -5
- package/dist/.claude-template/skills/db-query/SKILL.md +102 -42
- package/dist/.claude-template/skills/db-query/agent-prompt.md +12 -13
- package/dist/.claude-template/skills/export-table-ddl/SKILL.md +167 -0
- package/dist/.claude-template/skills/export-table-ddl/closed-loop.html +173 -0
- package/dist/.claude-template/skills/export-table-ddl/evals/evals.json +26 -0
- package/dist/.claude-template/skills/export-table-ddl/scripts/export-ddl.mjs +163 -0
- package/dist/dbquery/cli.d.ts.map +1 -1
- package/dist/dbquery/cli.js +20 -3
- package/dist/dbquery/cli.js.map +1 -1
- package/dist/dbquery/executor.d.ts.map +1 -1
- package/dist/dbquery/executor.js +15 -23
- package/dist/dbquery/executor.js.map +1 -1
- package/dist/dbquery/format.d.ts +15 -1
- package/dist/dbquery/format.d.ts.map +1 -1
- package/dist/dbquery/format.js +86 -23
- package/dist/dbquery/format.js.map +1 -1
- package/dist/dbquery/identifiers.d.ts +19 -0
- package/dist/dbquery/identifiers.d.ts.map +1 -0
- package/dist/dbquery/identifiers.js +37 -0
- package/dist/dbquery/identifiers.js.map +1 -0
- package/dist/dbquery/index.d.ts +1 -1
- package/dist/dbquery/index.d.ts.map +1 -1
- package/dist/dbquery/index.js.map +1 -1
- package/dist/dbquery/queries.d.ts +23 -3
- package/dist/dbquery/queries.d.ts.map +1 -1
- package/dist/dbquery/queries.js +46 -27
- package/dist/dbquery/queries.js.map +1 -1
- package/dist/dbquery/types.d.ts +2 -15
- package/dist/dbquery/types.d.ts.map +1 -1
- package/dist/markdown/cli.d.ts.map +1 -1
- package/dist/markdown/cli.js +42 -0
- package/dist/markdown/cli.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>db schema skills 闭环</title>
|
|
6
|
+
<style>
|
|
7
|
+
:root {
|
|
8
|
+
--green: #16a34a; /* 本地知识库(便宜) */
|
|
9
|
+
--green-bg: #dcfce7;
|
|
10
|
+
--blue: #2563eb; /* DB 连接(贵) */
|
|
11
|
+
--blue-bg: #dbeafe;
|
|
12
|
+
--orange: #ea580c; /* 探索补充 */
|
|
13
|
+
--orange-bg: #ffedd5;
|
|
14
|
+
--red: #dc2626;
|
|
15
|
+
--gray: #6b7280;
|
|
16
|
+
--gray-bg: #f3f4f6;
|
|
17
|
+
--border: #d1d5db;
|
|
18
|
+
}
|
|
19
|
+
* { box-sizing: border-box; }
|
|
20
|
+
body {
|
|
21
|
+
font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;
|
|
22
|
+
max-width: 1100px; margin: 0 auto; padding: 32px 24px 80px;
|
|
23
|
+
color: #111827; line-height: 1.6;
|
|
24
|
+
}
|
|
25
|
+
h1 { font-size: 28px; margin: 0 0 8px; }
|
|
26
|
+
h2 { font-size: 20px; margin: 40px 0 12px; border-bottom: 2px solid var(--border); padding-bottom: 6px; }
|
|
27
|
+
h3 { font-size: 15px; margin: 20px 0 8px; color: var(--gray); font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; }
|
|
28
|
+
.subtitle { color: var(--gray); font-size: 15px; margin-bottom: 32px; }
|
|
29
|
+
.tag { display: inline-block; padding: 2px 8px; border-radius: 4px; font-size: 12px; font-weight: 600; margin-right: 6px; }
|
|
30
|
+
.tag-green { background: var(--green-bg); color: var(--green); }
|
|
31
|
+
.tag-blue { background: var(--blue-bg); color: var(--blue); }
|
|
32
|
+
.tag-orange { background: var(--orange-bg); color: var(--orange); }
|
|
33
|
+
|
|
34
|
+
/* 角色卡 */
|
|
35
|
+
.roles { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 16px 0; }
|
|
36
|
+
.role-card { border: 1px solid var(--border); border-radius: 8px; padding: 16px 20px; }
|
|
37
|
+
.role-card.init { border-left: 4px solid var(--blue); background: var(--blue-bg); }
|
|
38
|
+
.role-card.daily { border-left: 4px solid var(--green); background: var(--green-bg); }
|
|
39
|
+
.role-card h3 { margin: 0 0 8px; color: inherit; text-transform: none; letter-spacing: 0; font-size: 16px; }
|
|
40
|
+
.role-card .when { font-size: 13px; color: var(--gray); margin-top: 8px; }
|
|
41
|
+
|
|
42
|
+
/* 目录树 */
|
|
43
|
+
.tree {
|
|
44
|
+
background: var(--gray-bg); border: 1px solid var(--border); border-radius: 8px;
|
|
45
|
+
padding: 16px 20px; font-family: "SF Mono", Menlo, monospace; font-size: 13px; line-height: 1.8;
|
|
46
|
+
margin: 12px 0; white-space: pre;
|
|
47
|
+
}
|
|
48
|
+
.tree .hl { background: var(--green-bg); padding: 1px 4px; border-radius: 3px; color: var(--green); font-weight: 600; }
|
|
49
|
+
.tree .hlo { background: var(--orange-bg); padding: 1px 4px; border-radius: 3px; color: var(--orange); font-weight: 600; }
|
|
50
|
+
|
|
51
|
+
/* 数据流图 */
|
|
52
|
+
.flow {
|
|
53
|
+
display: grid; grid-template-columns: 1fr auto 1fr; gap: 12px 8px; align-items: center;
|
|
54
|
+
margin: 16px 0;
|
|
55
|
+
}
|
|
56
|
+
.box {
|
|
57
|
+
border: 2px solid var(--border); border-radius: 8px; padding: 12px 16px; text-align: center;
|
|
58
|
+
background: white;
|
|
59
|
+
}
|
|
60
|
+
.box.db { border-color: var(--blue); background: var(--blue-bg); }
|
|
61
|
+
.box.kb { border-color: var(--green); background: var(--green-bg); }
|
|
62
|
+
.box.agent { border-color: var(--gray); background: var(--gray-bg); }
|
|
63
|
+
.box .label { font-weight: 600; font-size: 14px; }
|
|
64
|
+
.box .sub { font-size: 12px; color: var(--gray); margin-top: 4px; }
|
|
65
|
+
.arrow {
|
|
66
|
+
text-align: center; font-size: 24px; color: var(--gray); font-weight: bold;
|
|
67
|
+
position: relative;
|
|
68
|
+
}
|
|
69
|
+
.arrow .a-label {
|
|
70
|
+
position: absolute; top: -8px; left: 50%; transform: translateX(-50%);
|
|
71
|
+
font-size: 11px; white-space: nowrap; background: white; padding: 0 4px; color: var(--gray);
|
|
72
|
+
}
|
|
73
|
+
.arrow.green { color: var(--green); }
|
|
74
|
+
.arrow.blue { color: var(--blue); }
|
|
75
|
+
.arrow.orange { color: var(--orange); }
|
|
76
|
+
.arrow-row { display: contents; }
|
|
77
|
+
|
|
78
|
+
/* 时序 */
|
|
79
|
+
.timeline { position: relative; padding-left: 24px; margin: 16px 0; }
|
|
80
|
+
.timeline::before { content: ''; position: absolute; left: 8px; top: 8px; bottom: 8px; width: 2px; background: var(--border); }
|
|
81
|
+
.tl-item { position: relative; padding: 8px 0 16px 24px; }
|
|
82
|
+
.tl-item::before {
|
|
83
|
+
content: ''; position: absolute; left: -20px; top: 14px; width: 12px; height: 12px;
|
|
84
|
+
border-radius: 50%; background: white; border: 2px solid var(--gray);
|
|
85
|
+
}
|
|
86
|
+
.tl-item.init::before { border-color: var(--blue); background: var(--blue); }
|
|
87
|
+
.tl-item.read::before { border-color: var(--green); background: var(--green); }
|
|
88
|
+
.tl-item.write::before { border-color: var(--orange); background: var(--orange); }
|
|
89
|
+
.tl-item .tl-title { font-weight: 600; }
|
|
90
|
+
.tl-item .tl-body { font-size: 14px; color: var(--gray); margin-top: 2px; }
|
|
91
|
+
.tl-item code { background: var(--gray-bg); padding: 1px 5px; border-radius: 3px; font-size: 12px; }
|
|
92
|
+
|
|
93
|
+
/* 枢纽表对比 */
|
|
94
|
+
.compare { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 16px 0; }
|
|
95
|
+
.compare-card { border: 1px solid var(--border); border-radius: 8px; padding: 16px; }
|
|
96
|
+
.compare-card.bad { border-color: var(--red); background: #fef2f2; }
|
|
97
|
+
.compare-card.good { border-color: var(--green); background: var(--green-bg); }
|
|
98
|
+
.compare-card .head { font-weight: 600; margin-bottom: 8px; }
|
|
99
|
+
.compare-card.bad .head::before { content: "✗ "; color: var(--red); font-weight: bold; }
|
|
100
|
+
.compare-card.good .head::before { content: "✓ "; color: var(--green); font-weight: bold; }
|
|
101
|
+
|
|
102
|
+
/* 规则卡 */
|
|
103
|
+
.rules { display: grid; gap: 10px; margin: 16px 0; }
|
|
104
|
+
.rule { display: flex; gap: 12px; padding: 12px 16px; border-left: 3px solid var(--green); background: var(--gray-bg); border-radius: 4px; }
|
|
105
|
+
.rule .num { font-weight: 700; color: var(--green); font-size: 18px; flex-shrink: 0; }
|
|
106
|
+
.rule .body { font-size: 14px; }
|
|
107
|
+
.rule .body b { color: #111827; }
|
|
108
|
+
|
|
109
|
+
code { font-family: "SF Mono", Menlo, monospace; }
|
|
110
|
+
.footer { margin-top: 60px; padding-top: 16px; border-top: 1px solid var(--border); color: var(--gray); font-size: 12px; }
|
|
111
|
+
</style>
|
|
112
|
+
</head>
|
|
113
|
+
<body>
|
|
114
|
+
|
|
115
|
+
<h1>db schema skills 闭环</h1>
|
|
116
|
+
<p class="subtitle">两个 skill + 一个共享知识库,让 agent 越用越懂业务数据</p>
|
|
117
|
+
|
|
118
|
+
<h2>1. 共享的目录结构(知识库本体)</h2>
|
|
119
|
+
<div class="tree">docs/schema-knowledge/
|
|
120
|
+
├── order-svc/
|
|
121
|
+
│ ├── <span class="hl">INDEX.md</span> ← agent 进目录第一件事读(表清单+注释)
|
|
122
|
+
│ ├── pending-comments.sql ← DBA 待执行 COMMENT SQL(action 队列,不在 agent 读路径)
|
|
123
|
+
│ └── ddl/
|
|
124
|
+
│ ├── work_order.sql ← DDL + <span class="hlo">DISCOVERED 块</span>(积累的隐式关系/含义/陷阱)
|
|
125
|
+
│ ├── users.sql ← DDL + DISCOVERED 块
|
|
126
|
+
│ └── payment.sql
|
|
127
|
+
└── cust-svc/
|
|
128
|
+
├── INDEX.md
|
|
129
|
+
├── pending-comments.sql
|
|
130
|
+
└── ddl/...</div>
|
|
131
|
+
<p style="font-size:14px;color:var(--gray);">
|
|
132
|
+
<b style="color:var(--green)">绿色</b> = agent 必经节点(INDEX.md 是入口,ddl/<table>.sql 是详情);
|
|
133
|
+
<b style="color:var(--orange)">橙色</b> = db-query 探索补充的部分,export 重 dump 时会保留;
|
|
134
|
+
<b style="color:var(--gray)">灰色</b> pending-comments.sql = DBA action 队列,不在 agent 读路径上(所以可以独立文件)。
|
|
135
|
+
</p>
|
|
136
|
+
|
|
137
|
+
<h2>2. 时序:知识怎么积累起来</h2>
|
|
138
|
+
<div class="timeline">
|
|
139
|
+
<div class="tl-item init">
|
|
140
|
+
<div class="tl-title">T0 · 跑 export-table-ddl</div>
|
|
141
|
+
<div class="tl-body">建基线 → <code>ddl/work_order.sql</code> 只有 DDL,无 DISCOVERED 块</div>
|
|
142
|
+
</div>
|
|
143
|
+
<div class="tl-item read">
|
|
144
|
+
<div class="tl-title">T1 · db-query 任务:"查 work_order 待派单的数据"</div>
|
|
145
|
+
<div class="tl-body"><code>Read ddl/work_order.sql</code>(首选)→ <code>cgraphx db query --sql "SELECT ... LIMIT 5"</code>(查数据)</div>
|
|
146
|
+
</div>
|
|
147
|
+
<div class="tl-item write">
|
|
148
|
+
<div class="tl-title">T1 续 · 发现 work_order.assignee_id 实际对应 users.staff_code</div>
|
|
149
|
+
<div class="tl-body">
|
|
150
|
+
知识 → append 到 <code>ddl/work_order.sql</code> 和 <code>ddl/users.sql</code> 的 DISCOVERED 块(双向)<br>
|
|
151
|
+
DB 注释缺失 → action 进 <code>pending-comments.sql</code>(DBA 待执行)
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
<div class="tl-item init">
|
|
155
|
+
<div class="tl-title">T2 · DBA 改了 schema,重跑 export-table-ddl</div>
|
|
156
|
+
<div class="tl-body">DDL 部分刷新(拿新结构),<b style="color:var(--orange)">DISCOVERED 块自动保留</b>(不覆盖);pending-comments.sql 不动</div>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="tl-item write">
|
|
159
|
+
<div class="tl-title">T2 续 · DBA 执行 pending-comments.sql 里的 COMMENT</div>
|
|
160
|
+
<div class="tl-body">DB 注释固化 → 删 pending-comments.sql 里那条 + 删 DISCOVERED 对应的 <code>[字段含义]</code> 行(DB 已是单一事实源)</div>
|
|
161
|
+
</div>
|
|
162
|
+
<div class="tl-item read">
|
|
163
|
+
<div class="tl-title">T3 · 下一次 db-query 读 work_order</div>
|
|
164
|
+
<div class="tl-body"><code>Read ddl/work_order.sql</code> → 看到 DDL + DISCOVERED 块(<b>积累生效,不用重新踩坑</b>)</div>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
<div class="footer">
|
|
169
|
+
闭环核心:知识库是 <b style="color:var(--green)">便宜 + 丰富</b> 的首选信息源(本地读 + DISCOVERED 块),DB 是 <b style="color:var(--blue)">昂贵 + 不可替代</b> 的兜底(连库 + 只读铁律)。agent 默认走知识库,只在"知识库没有"或"要实际数据"时连库 —— 这样新沉淀的知识才会被读到,闭环才转得起来。
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
</body>
|
|
173
|
+
</html>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "export-table-ddl",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"name": "single-project-from-code",
|
|
7
|
+
"prompt": "我在做一个客户管理服务的代码理解,项目根目录在 ~/work/customer-svc,用 zqassis 这个 pg profile。帮我把这个项目用到的所有表的 DDL 导出来,放到 docs/schema-dump/ 下,工程名就叫 customer-svc。表名从代码里 grep 出来就行,导出前先给我看一眼表清单确认。",
|
|
8
|
+
"expected_output": "docs/schema-dump/customer-svc/INDEX.md + ddl/*.sql;INDEX.md 列出所有表名+注释;导出前用户确认过表清单",
|
|
9
|
+
"files": []
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": 2,
|
|
13
|
+
"name": "multi-project-monorepo",
|
|
14
|
+
"prompt": "我们的 monorepo 在 ~/work/platform,下面 services/order-svc 和 services/cust-svc 两个工程,各自有自己的表。用 xw-order 和 xw-cust 两个 mysql profile 分别导出(每个工程对应一个 profile),放到 docs/schema-dump/ 下按工程分目录。表清单用全库导出(--tables all)。",
|
|
15
|
+
"expected_output": "docs/schema-dump/order-svc/ + docs/schema-dump/cust-svc/,各自 INDEX.md + ddl/,两个工程用了各自的 profile",
|
|
16
|
+
"files": []
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": 3,
|
|
20
|
+
"name": "user-provided-table-list",
|
|
21
|
+
"prompt": "我有一个表清单文件 /tmp/核心表.txt,每行一个表名,大概 30 张表。用 zqassis profile 导出到 docs/schema-dump/core/ 下,工程名 core。直接导出不用让我确认表清单了。",
|
|
22
|
+
"expected_output": "docs/schema-dump/core/INDEX.md + ddl/*.sql;跳过表清单确认步骤直接导出;清单里不存在于 DB 的表在 INDEX 里标 missing",
|
|
23
|
+
"files": []
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* export-ddl.mjs — 批量导出项目表的 DDL 到可检索目录。
|
|
4
|
+
*
|
|
5
|
+
* 流程:
|
|
6
|
+
* 1. `cgraphx db schema --mode=tables --profile=P` 拿全表 + 表注释(1 次调用)
|
|
7
|
+
* 2. 过滤到请求的表清单(--tables all 时跳过过滤)
|
|
8
|
+
* 3. 对每张表 `cgraphx db schema --mode=ddl --table=X --profile=P` 拿 DDL 文本(N 次调用)
|
|
9
|
+
* 4. 写 <out>/<project>/INDEX.md(表名 + 注释 + DDL 链接)+ <out>/<project>/ddl/<table>.sql
|
|
10
|
+
*
|
|
11
|
+
* 用法:
|
|
12
|
+
* node export-ddl.mjs \
|
|
13
|
+
* --profile zqassis \
|
|
14
|
+
* --tables ./tables.txt \ # 或 --tables all(全库导出)
|
|
15
|
+
* --out ./schema-dump \
|
|
16
|
+
* --project customer-svc
|
|
17
|
+
*
|
|
18
|
+
* tables 文件格式:每行一个表名,# 开头注释行忽略;或 JSON 数组 ["t1","t2"]。
|
|
19
|
+
*/
|
|
20
|
+
import { execFileSync } from 'node:child_process';
|
|
21
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
22
|
+
import { resolve, join } from 'node:path';
|
|
23
|
+
|
|
24
|
+
function parseArgs(argv) {
|
|
25
|
+
const args = {};
|
|
26
|
+
for (let i = 0; i < argv.length; i++) {
|
|
27
|
+
const k = argv[i];
|
|
28
|
+
if (k.startsWith('--')) {
|
|
29
|
+
const v = argv[i + 1] && !argv[i + 1].startsWith('--') ? argv[++i] : 'true';
|
|
30
|
+
args[k.slice(2)] = v;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return args;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function readTableList(spec) {
|
|
37
|
+
if (spec === 'all') return null; // null = 不过滤
|
|
38
|
+
const raw = readFileSync(spec, 'utf8');
|
|
39
|
+
const trimmed = raw.trim();
|
|
40
|
+
if (trimmed.startsWith('[')) {
|
|
41
|
+
return JSON.parse(trimmed);
|
|
42
|
+
}
|
|
43
|
+
return trimmed
|
|
44
|
+
.split('\n')
|
|
45
|
+
.map(l => l.trim())
|
|
46
|
+
.filter(l => l && !l.startsWith('#'));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function runCgraphx(cmdArgs, { expectJson = false } = {}) {
|
|
50
|
+
const env = { ...process.env, CGRAPHX_WASM_RELAUNCHED: '1' };
|
|
51
|
+
const bin = process.env.CGRAPHX_BIN || 'cgraphx';
|
|
52
|
+
const out = execFileSync(bin, ['db', ...cmdArgs], {
|
|
53
|
+
encoding: 'utf8',
|
|
54
|
+
env,
|
|
55
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
56
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
57
|
+
});
|
|
58
|
+
if (expectJson) return JSON.parse(out);
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* 提取 db-query 探索补充的 DISCOVERED 块(含起止标记行),供重 dump 时保留。
|
|
64
|
+
* 块格式见 db-query/SKILL.md。无块返回 null。
|
|
65
|
+
*/
|
|
66
|
+
function extractDiscoveredBlock(content) {
|
|
67
|
+
const start = content.indexOf('-- === DISCOVERED');
|
|
68
|
+
if (start === -1) return null;
|
|
69
|
+
const endMarker = '-- === END DISCOVERED ===';
|
|
70
|
+
const end = content.indexOf(endMarker, start);
|
|
71
|
+
if (end === -1) return content.slice(start).replace(/\n*$/, '\n');
|
|
72
|
+
return content.slice(start, end + endMarker.length).replace(/\n*$/, '\n');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function main() {
|
|
76
|
+
const args = parseArgs(process.argv.slice(2));
|
|
77
|
+
const profile = args.profile;
|
|
78
|
+
const tablesSpec = args.tables;
|
|
79
|
+
const outDir = args.out;
|
|
80
|
+
const project = args.project;
|
|
81
|
+
if (!profile || !tablesSpec || !outDir || !project) {
|
|
82
|
+
process.stderr.write(
|
|
83
|
+
'Usage: export-ddl.mjs --profile <name> --tables <file|all> --out <dir> --project <name>\n',
|
|
84
|
+
);
|
|
85
|
+
process.exit(5);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// 1. 拿全表 + 注释
|
|
89
|
+
process.stderr.write(`[export-ddl] 拉取 ${profile} 的表清单...\n`);
|
|
90
|
+
const tablesResult = runCgraphx(
|
|
91
|
+
['schema', '--mode=tables', `--profile=${profile}`, '--format=json'],
|
|
92
|
+
{ expectJson: true },
|
|
93
|
+
);
|
|
94
|
+
const allTables = new Map(tablesResult.tables.map(t => [t.name, t.comment ?? '']));
|
|
95
|
+
|
|
96
|
+
// 2. 过滤
|
|
97
|
+
const requested = readTableList(tablesSpec);
|
|
98
|
+
const targets = requested === null
|
|
99
|
+
? [...allTables.keys()]
|
|
100
|
+
: requested.filter(Boolean);
|
|
101
|
+
process.stderr.write(`[export-ddl] 共 ${targets.length} 张表待导出。\n`);
|
|
102
|
+
|
|
103
|
+
// 3. 逐表拉 DDL
|
|
104
|
+
const projectDir = resolve(outDir, project);
|
|
105
|
+
const ddlDir = join(projectDir, 'ddl');
|
|
106
|
+
mkdirSync(ddlDir, { recursive: true });
|
|
107
|
+
|
|
108
|
+
const indexRows = [];
|
|
109
|
+
let ok = 0, missing = 0, failed = 0, preserved = 0;
|
|
110
|
+
for (const table of targets) {
|
|
111
|
+
const comment = allTables.get(table);
|
|
112
|
+
if (comment === undefined) {
|
|
113
|
+
indexRows.push({ table, comment: '(表中不存在)', status: 'missing' });
|
|
114
|
+
missing++;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
const ddl = runCgraphx(
|
|
119
|
+
['schema', '--mode=ddl', `--table=${table}`, `--profile=${profile}`],
|
|
120
|
+
);
|
|
121
|
+
const filePath = join(ddlDir, `${table}.sql`);
|
|
122
|
+
// 重 dump 时保留 db-query 探索补充的 -- === DISCOVERED === 块
|
|
123
|
+
let out = ddl;
|
|
124
|
+
if (existsSync(filePath)) {
|
|
125
|
+
const old = readFileSync(filePath, 'utf8');
|
|
126
|
+
const discovered = extractDiscoveredBlock(old);
|
|
127
|
+
if (discovered) {
|
|
128
|
+
out = ddl.replace(/\n*$/, '\n') + '\n' + discovered;
|
|
129
|
+
preserved++;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
writeFileSync(filePath, out);
|
|
133
|
+
indexRows.push({ table, comment, status: 'ok' });
|
|
134
|
+
ok++;
|
|
135
|
+
} catch (err) {
|
|
136
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
137
|
+
process.stderr.write(`[export-ddl] ${table} 失败: ${msg}\n`);
|
|
138
|
+
indexRows.push({ table, comment, status: `failed: ${msg.split('\n')[0]}` });
|
|
139
|
+
failed++;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// 4. 写 INDEX.md
|
|
144
|
+
const lines = [
|
|
145
|
+
`# ${project} 表清单`,
|
|
146
|
+
'',
|
|
147
|
+
`共 ${targets.length} 张表(成功 ${ok} / 缺失 ${missing} / 失败 ${failed}),DDL 见 \`ddl/\` 目录。${preserved > 0 ? ` 保留 ${preserved} 张表的 DISCOVERED 补充。` : ''}`,
|
|
148
|
+
'',
|
|
149
|
+
'| 表名 | 注释 | 状态 |',
|
|
150
|
+
'|---|---|---|',
|
|
151
|
+
];
|
|
152
|
+
for (const r of indexRows) {
|
|
153
|
+
const status = r.status === 'ok' ? '✓' : r.status;
|
|
154
|
+
lines.push(`| \`${r.table}\` | ${r.comment || ''} | ${status} |`);
|
|
155
|
+
}
|
|
156
|
+
writeFileSync(join(projectDir, 'INDEX.md'), lines.join('\n') + '\n');
|
|
157
|
+
|
|
158
|
+
process.stderr.write(
|
|
159
|
+
`[export-ddl] 完成 → ${projectDir}/ (成功 ${ok} / 缺失 ${missing} / 失败 ${failed})\n`,
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
main();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/dbquery/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/dbquery/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyHzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4GzD"}
|
package/dist/dbquery/cli.js
CHANGED
|
@@ -21,6 +21,7 @@ exports.registerDbCommands = registerDbCommands;
|
|
|
21
21
|
const node_path_1 = __importDefault(require("node:path"));
|
|
22
22
|
const index_1 = require("./index");
|
|
23
23
|
const init_1 = require("./init");
|
|
24
|
+
const identifiers_1 = require("./identifiers");
|
|
24
25
|
function parseFormat(s) {
|
|
25
26
|
if (!s || s === 'json')
|
|
26
27
|
return 'json';
|
|
@@ -75,8 +76,16 @@ function outputQueryResult(result, format) {
|
|
|
75
76
|
}
|
|
76
77
|
}
|
|
77
78
|
}
|
|
78
|
-
function outputSchemaResult(result, format) {
|
|
79
|
-
|
|
79
|
+
function outputSchemaResult(result, mode, format) {
|
|
80
|
+
if (mode === 'ddl' && 'ddl' in result) {
|
|
81
|
+
// ddl emits the raw CREATE TABLE DDL text, not JSON.
|
|
82
|
+
if (format !== 'json') {
|
|
83
|
+
process.stderr.write(`[db-query] --format=${format} ignored for ddl output (always DDL text).\n`);
|
|
84
|
+
}
|
|
85
|
+
process.stdout.write(result.ddl + '\n');
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// For other schema results, json is the only first-class format; table/csv
|
|
80
89
|
// fall back to json because the shape varies per mode.
|
|
81
90
|
if (format !== 'json') {
|
|
82
91
|
process.stderr.write(`[db-query] --format=${format} not supported for schema output; using json.\n`);
|
|
@@ -151,8 +160,16 @@ function registerDbCommands(program) {
|
|
|
151
160
|
const projectRoot = process.cwd();
|
|
152
161
|
try {
|
|
153
162
|
const format = parseFormat(options.format);
|
|
163
|
+
if (mode === 'ddl' && options.table) {
|
|
164
|
+
try {
|
|
165
|
+
(0, identifiers_1.validateIdentifier)(options.table, 'table');
|
|
166
|
+
}
|
|
167
|
+
catch (e) {
|
|
168
|
+
throw new ArgError(e instanceof Error ? e.message : String(e));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
154
171
|
const result = await (0, index_1.runSchema)({ mode, table: options.table, profile: options.profile }, projectRoot);
|
|
155
|
-
outputSchemaResult(result, format);
|
|
172
|
+
outputSchemaResult(result, mode, format);
|
|
156
173
|
}
|
|
157
174
|
catch (err) {
|
|
158
175
|
renderErrorAndExit(err);
|
package/dist/dbquery/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/dbquery/cli.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;;;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/dbquery/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/dbquery/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,OAAO,EAGL,oBAAoB,EAErB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/dbquery/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,OAAO,EAGL,oBAAoB,EAErB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EAEZ,aAAa,EACb,cAAc,EAKf,MAAM,SAAS,CAAC;AAqDjB;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAoD3F;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAmG9F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAuBrG;AAGD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
package/dist/dbquery/executor.js
CHANGED
|
@@ -148,40 +148,32 @@ async function runSchema(input, projectRoot) {
|
|
|
148
148
|
? await (0, mysql_1.createMysqlConnection)(profile)
|
|
149
149
|
: await (0, postgres_1.createPostgresConnection)(profile);
|
|
150
150
|
try {
|
|
151
|
-
//
|
|
151
|
+
// ddl: MySQL uses SHOW CREATE TABLE (single query, server-rendered DDL);
|
|
152
|
+
// PG assembles from column query + pg_get_constraintdef + table comment.
|
|
152
153
|
if (mode === 'ddl') {
|
|
153
|
-
let
|
|
154
|
+
let result;
|
|
154
155
|
if (profile.type === 'mysql') {
|
|
155
|
-
const
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
colsRaw = await driver.execute(colsQ.sql, constants_1.QUERY_TIMEOUT_MS, colsQ.params);
|
|
159
|
-
pkRaw = await driver.execute(pkQ.sql, constants_1.QUERY_TIMEOUT_MS, pkQ.params);
|
|
160
|
-
consRaw = await driver.execute(consQ.sql, constants_1.QUERY_TIMEOUT_MS, consQ.params);
|
|
156
|
+
const showQ = (0, queries_1.mysqlSchemaQuery)('ddl', table, profile.database);
|
|
157
|
+
const raw = await driver.execute(showQ.sql, constants_1.QUERY_TIMEOUT_MS, showQ.params);
|
|
158
|
+
result = (0, format_1.extractMysqlDdl)(raw, table, profile.name, elapsedMs(start));
|
|
161
159
|
}
|
|
162
160
|
else {
|
|
163
|
-
|
|
164
|
-
colsRaw = await driver.execute(parametrized.sql, constants_1.QUERY_TIMEOUT_MS, parametrized.params);
|
|
165
|
-
const
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
'WHEN c.contype = \'u\' THEN \'UNIQUE\' ' +
|
|
173
|
-
'WHEN c.contype = \'f\' THEN \'FOREIGN KEY\' ' +
|
|
174
|
-
'WHEN c.contype = \'c\' THEN \'CHECK\' ELSE c.contype::text END AS type ' +
|
|
175
|
-
'FROM pg_constraint c WHERE c.conrelid = $1::regclass ORDER BY c.conname', constants_1.QUERY_TIMEOUT_MS, [regclass]);
|
|
161
|
+
const schema = profile.schema ?? 'public';
|
|
162
|
+
const colsRaw = await driver.execute(parametrized.sql, constants_1.QUERY_TIMEOUT_MS, parametrized.params);
|
|
163
|
+
const consQ = (0, queries_1.postgresConstraintDefsSql)(table, schema);
|
|
164
|
+
const consRaw = await driver.execute(consQ.sql, constants_1.QUERY_TIMEOUT_MS, consQ.params);
|
|
165
|
+
const idxQ = (0, queries_1.postgresIndexDefsSql)(table, schema);
|
|
166
|
+
const idxRaw = await driver.execute(idxQ.sql, constants_1.QUERY_TIMEOUT_MS, idxQ.params);
|
|
167
|
+
const tcQ = (0, queries_1.postgresTableCommentSql)(table, schema);
|
|
168
|
+
const tcRaw = await driver.execute(tcQ.sql, constants_1.QUERY_TIMEOUT_MS, tcQ.params);
|
|
169
|
+
result = (0, format_1.renderPostgresDdl)(colsRaw, consRaw, idxRaw, tcRaw, table, schema, profile.name, elapsedMs(start));
|
|
176
170
|
}
|
|
177
|
-
const result = (0, format_1.formatDdlResult)(colsRaw, pkRaw, consRaw, table, profile.name, elapsedMs(start));
|
|
178
171
|
(0, logging_1.logQuery)(projectRoot, {
|
|
179
172
|
timestamp: nowIso(),
|
|
180
173
|
profile: profile.name,
|
|
181
174
|
mode,
|
|
182
175
|
sql: parametrized.sql,
|
|
183
176
|
durationMs: elapsedMs(start),
|
|
184
|
-
rowCount: result.columns.length,
|
|
185
177
|
status: 'ok',
|
|
186
178
|
});
|
|
187
179
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/dbquery/executor.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/dbquery/executor.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAwFH,4BAoDC;AAKD,8BAmGC;AAKD,oCAuBC;AA9QD,2CAA0D;AAC1D,qCAAwD;AACxD,qCAAuC;AACvC,uCAAqC;AACrC,qCAA0K;AAC1K,uCAA4I;AAC5I,2CAAwD;AACxD,iDAA8D;AAC9D,qCAKkB;AAqQT,qGAvQP,6BAAoB,OAuQO;AAtP7B,SAAS,MAAM;IACb,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AAC5B,CAAC;AAED,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,GAAG,YAAY,qBAAY,EAAE,CAAC;QAChC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,kBAAkB,CAAC;YACxB,KAAK,mBAAmB;gBACtB,OAAO,cAAc,CAAC;YACxB,KAAK,iBAAiB;gBACpB,OAAO,iBAAiB,CAAC;YAC3B,KAAK,mBAAmB;gBACtB,OAAO,mBAAmB,CAAC;YAC7B,KAAK,eAAe;gBAClB,OAAO,SAAS,CAAC;YACnB,KAAK,cAAc;gBACjB,OAAO,cAAc,CAAC;YACxB,KAAK,oBAAoB;gBACvB,OAAO,UAAU,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,gBAAgB,CACvB,WAAmB,EACnB,KAAa,EACb,IAA4B,EAC5B,WAAmB,EACnB,GAAuB,EACvB,GAAY;IAEZ,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtE,IAAA,kBAAQ,EAAC,WAAW,EAAE;QACpB,SAAS,EAAE,MAAM,EAAE;QACnB,OAAO,EAAE,WAAW;QACpB,IAAI;QACJ,GAAG;QACH,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC;QAC5B,MAAM;QACN,YAAY;KACb,CAAC,CAAC;IACH,MAAM,GAAG,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,QAAQ,CAAC,KAAiB,EAAE,WAAmB;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,OAAgB,CAAC;IAE9B,kDAAkD;IAClD,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,WAAW,CAAC,CAAC;IAEtC,0CAA0C;IAC1C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,+BAAsB,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,sBAAsB;IACtB,IAAI,OAAkB,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,GAAG,IAAA,uBAAc,EAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,WAAW,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3F,CAAC;IAED,mBAAmB;IACnB,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACpF,CAAC;IAED,yBAAyB;IACzB,MAAM,MAAM,GACV,OAAO,CAAC,IAAI,KAAK,OAAO;QACtB,CAAC,CAAC,MAAM,IAAA,6BAAqB,EAAC,OAAO,CAAC;QACtC,CAAC,CAAC,MAAM,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,4BAAgB,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC;QACxF,MAAM,MAAM,GAAG,IAAA,0BAAiB,EAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;QACjF,IAAA,kBAAQ,EAAC,WAAW,EAAE;YACpB,SAAS,EAAE,MAAM,EAAE;YACnB,OAAO,EAAE,OAAO,CAAC,IAAI;YACrB,IAAI;YACJ,GAAG,EAAE,MAAM,CAAC,aAAa;YACzB,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC;YAC5B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACtF,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAAC,KAAkB,EAAE,WAAmB;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAExB,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,WAAW,CAAC,CAAC;IAEtC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,+BAAsB,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,IAAI,OAAkB,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,GAAG,IAAA,uBAAc,EAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvF,gBAAgB,CACd,WAAW,EACX,KAAK,EACL,IAAI,EACJ,OAAO,CAAC,IAAI,EACZ,SAAS,EACT,IAAI,4BAAmB,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAChE,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAEhC,qBAAqB;IACrB,MAAM,YAAY,GAChB,OAAO,CAAC,IAAI,KAAK,OAAO;QACtB,CAAC,CAAC,IAAA,0BAAgB,EAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;QACjD,CAAC,CAAC,IAAA,6BAAmB,EAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC;IAEnE,MAAM,MAAM,GACV,OAAO,CAAC,IAAI,KAAK,OAAO;QACtB,CAAC,CAAC,MAAM,IAAA,6BAAqB,EAAC,OAAO,CAAC;QACtC,CAAC,CAAC,MAAM,IAAA,mCAAwB,EAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,yEAAyE;QACzE,yEAAyE;QACzE,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,IAAI,MAAiB,CAAC;YACtB,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,IAAA,0BAAgB,EAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC/D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,4BAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC5E,MAAM,GAAG,IAAA,wBAAe,EAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;gBAC1C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,4BAAgB,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC9F,MAAM,KAAK,GAAG,IAAA,mCAAyB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACvD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,4BAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAChF,MAAM,IAAI,GAAG,IAAA,8BAAoB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,4BAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7E,MAAM,GAAG,GAAG,IAAA,iCAAuB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,4BAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC1E,MAAM,GAAG,IAAA,0BAAiB,EACxB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAC/E,CAAC;YACJ,CAAC;YACD,IAAA,kBAAQ,EAAC,WAAW,EAAE;gBACpB,SAAS,EAAE,MAAM,EAAE;gBACnB,OAAO,EAAE,OAAO,CAAC,IAAI;gBACrB,IAAI;gBACJ,GAAG,EAAE,YAAY,CAAC,GAAG;gBACrB,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC;gBAC5B,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,wDAAwD;QACxD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,4BAAgB,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1F,IAAI,MAAoB,CAAC;QACzB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,GAAG,IAAA,2BAAkB,EAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,GAAG,IAAA,4BAAmB,EAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAA,iCAAwB,EAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAChF,CAAC;QACD,IAAA,kBAAQ,EAAC,WAAW,EAAE;YACpB,SAAS,EAAE,MAAM,EAAE;YACnB,OAAO,EAAE,OAAO,CAAC,IAAI;YACrB,IAAI;YACJ,GAAG,EAAE,YAAY,CAAC,GAAG;YACrB,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC;YAC5B,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClF,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY,CAAC,KAAoB,EAAE,WAAmB;IAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,UAAmB,CAAC;IAEjC,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,WAAW,CAAC,CAAC;IAEtC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,iEAAiE;QACjE,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,+BAAsB,EAAE,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,6BAAoB,EAAC,GAAG,CAAC,CAAC;IACzC,IAAA,kBAAQ,EAAC,WAAW,EAAE;QACpB,SAAS,EAAE,MAAM,EAAE;QACnB,OAAO,EAAE,QAAQ;QACjB,IAAI;QACJ,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;QAChC,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,KAAK,KAAK,CAAC;IACX,KAAK,qBAAS,CAAC;IACf,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/dbquery/format.d.ts
CHANGED
|
@@ -8,7 +8,21 @@
|
|
|
8
8
|
import type { ProfilesConfig, ProfilesResult, QueryResult, RawResult, TablesResult, DdlResult, IndexesResult, TableCommentResult } from './types';
|
|
9
9
|
export declare function formatQueryResult(raw: RawResult, profileName: string, durationMs: number, truncated: boolean): QueryResult;
|
|
10
10
|
export declare function formatTablesResult(raw: RawResult, profileName: string, durationMs: number): TablesResult;
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* MySQL DDL — extract the `Create Table` column from `SHOW CREATE TABLE`
|
|
13
|
+
* output. `SHOW CREATE TABLE` returns two columns: `Table` (name) and
|
|
14
|
+
* `Create Table` (the DDL). Access by position to be version-safe (the
|
|
15
|
+
* second column's name varies across MySQL/MariaDB versions).
|
|
16
|
+
*/
|
|
17
|
+
export declare function extractMysqlDdl(raw: RawResult, table: string, profileName: string, durationMs: number): DdlResult;
|
|
18
|
+
/**
|
|
19
|
+
* PostgreSQL DDL — assemble `CREATE TABLE "schema"."tbl" (...)` from the
|
|
20
|
+
* column query + `pg_get_constraintdef` rows + optional table comment.
|
|
21
|
+
* Column comments emit `COMMENT ON COLUMN` statements after the CREATE TABLE
|
|
22
|
+
* (PG comments cannot go inline in CREATE TABLE). Secondary indexes
|
|
23
|
+
* (non-constraint-backed) emit as `CREATE INDEX ...` statements last.
|
|
24
|
+
*/
|
|
25
|
+
export declare function renderPostgresDdl(columnRows: RawResult, constraintDefRows: RawResult, indexDefRows: RawResult, tableCommentRows: RawResult, table: string, schema: string, profileName: string, durationMs: number): DdlResult;
|
|
12
26
|
export declare function formatIndexesResult(raw: RawResult, table: string, profileName: string, durationMs: number): IndexesResult;
|
|
13
27
|
export declare function formatTableCommentResult(raw: RawResult, table: string, profileName: string, durationMs: number): TableCommentResult;
|
|
14
28
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/dbquery/format.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,aAAa,EACb,kBAAkB,
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/dbquery/format.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,aAAa,EACb,kBAAkB,EAEnB,MAAM,SAAS,CAAC;AAyCjB,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,GACjB,WAAW,CAUb;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,YAAY,CAQd;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,SAAS,CAWX;AAYD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,SAAS,EACrB,iBAAiB,EAAE,SAAS,EAC5B,YAAY,EAAE,SAAS,EACvB,gBAAgB,EAAE,SAAS,EAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,SAAS,CA4DX;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,aAAa,CA0Cf;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,kBAAkB,CAMpB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAe3E"}
|