dsh-db-tool 1.5.7 → 1.5.9

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.
Files changed (2) hide show
  1. package/client/client.js +25 -19
  2. package/package.json +1 -1
package/client/client.js CHANGED
@@ -389,7 +389,7 @@ window.__ModuleLoader__.load({
389
389
  ".dbt-browse-main{flex:1;min-height:0;display:flex;flex-direction:column;gap:8px;}",
390
390
  ".dbt-browse-tabs{flex:none;}",
391
391
  ".dbt-browse-content{flex:1;min-height:0;position:relative;display:flex;flex-direction:column;}",
392
- ".dbt-browse-tablewrap{flex:none;max-height:320px;overflow:auto;border:none;border-radius:var(--dbt-radius-card);background:var(--dbt-surface);}",
392
+ ".dbt-browse-tablewrap{flex:1 1 auto;min-height:120px;overflow:auto;border:none;border-radius:var(--dbt-radius-card);background:var(--dbt-surface);}",
393
393
  ".dbt-browse-footer{flex:none;display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--dbt-surface);border-radius:var(--dbt-radius-ctrl);}",
394
394
  ".dbt-browse-empty{display:flex;align-items:center;justify-content:center;color:var(--dbt-text-secondary);font-size:13px;padding:24px 12px;}",
395
395
  ".dbt-browse-errorbox{display:flex;flex-direction:column;gap:8px;align-items:flex-start;}",
@@ -399,7 +399,8 @@ window.__ModuleLoader__.load({
399
399
  "/* ===== 浏览面板:单元格按钮与详情底栏(Apple 分区卡) ===== */",
400
400
  ".dbt-cellbtn{border:none;background:transparent;color:inherit;font:inherit;padding:0;margin:0;cursor:pointer;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;width:100%;text-align:left;}",
401
401
  ".dbt-cellbtn:focus-visible{outline:2px solid var(--dbt-accent);outline-offset:-1px;border-radius:2px;}",
402
- ".dbt-celldetail{margin-top:10px;padding:12px;background:var(--dbt-surface);border-radius:var(--dbt-radius-card);display:flex;flex-direction:column;gap:8px;}",
402
+ ".dbt-celldetail{flex:none;margin-top:10px;padding:12px;background:#2c2c2e;border-radius:var(--dbt-radius-card);display:flex;flex-direction:column;gap:8px;}",
403
+ "@media (prefers-color-scheme: light){.dbt-celldetail{background:#f5f5f7;}}",
403
404
  ".dbt-celldetail-input{font-family:var(--dbt-mono);font-size:12px;min-height:72px;resize:vertical;background:var(--dbt-surface-strong);border:none;color:inherit;border-radius:var(--dbt-radius-ctrl);padding:8px;width:100%;box-sizing:border-box;}",
404
405
  ".dbt-celldetail-input:focus{outline:2px solid var(--dbt-accent);outline-offset:-1px;}",
405
406
  ".dbt-celledit{display:flex;flex-direction:column;gap:8px;}",
@@ -531,6 +532,7 @@ window.__ModuleLoader__.load({
531
532
  }
532
533
  // 表全限定:pg/gauss 用 schema 前缀(库由 execute 的 database 参数路由,语句内不写库名);
533
534
  // mysql 带库名(adapter 无 database 路由);oracle/dmdb 的 dbRef 即 OWNER;sqlite 仅表名
535
+ // execute 的 database 参数只传库名(db.schema 形态取点前段),连接目标只能是库,schema 靠语句内全限定
534
536
  let table;
535
537
  if (kind === "postgresql" || kind === "gaussdb") {
536
538
  table = schemaName
@@ -559,7 +561,7 @@ window.__ModuleLoader__.load({
559
561
  ops: [{
560
562
  statement: "UPDATE " + table + " SET " + setSql + " WHERE " + wheres.join(" AND "),
561
563
  params,
562
- database: kind === "sqlite" ? undefined : dbRef,
564
+ database: kind === "sqlite" ? undefined : dbRef.split(".")[0],
563
565
  }],
564
566
  };
565
567
  }
@@ -1249,6 +1251,8 @@ window.__ModuleLoader__.load({
1249
1251
  ),
1250
1252
  ),
1251
1253
  ),
1254
+ // 分页条(BrowsePane 传入)在详情栏之上,详情栏钉在面板最底部
1255
+ props.children,
1252
1256
  // 底部详情栏(Navicat/检查器式):预览表格下方一栏,textarea 直接可编辑,点保存写回
1253
1257
  sel ? React.createElement(
1254
1258
  "div",
@@ -1353,6 +1357,16 @@ window.__ModuleLoader__.load({
1353
1357
  // Navicat 式单元格网格:kind/可编辑性由当前连接与授权决定(rw=可编辑),保存后重拉当前页
1354
1358
  const conn = conns.find((c) => c.id === sel.connId);
1355
1359
  const grant = (grants || []).find((g) => g.connId === sel.connId);
1360
+ // 分页条作为 children 传入:渲染顺序 表格 → 分页 → 详情栏(详情栏钉在面板最底部)
1361
+ const footer = sel && view === "preview" && !loadErr ? React.createElement(
1362
+ "div",
1363
+ { className: "dbt-browse-footer" },
1364
+ React.createElement("button", { className: "dbt-btn", disabled: page <= 1 || busy === "open", onClick: () => openTable(sel, page - 1) }, "‹ " + t("prevPage")),
1365
+ React.createElement("span", { className: "dbt-muted" }, t("pageInfo", { page })),
1366
+ React.createElement("span", { style: { flex: 1 } }),
1367
+ preview && preview.truncated ? React.createElement("span", { className: "dbt-muted" }, t("previewTruncated")) : null,
1368
+ React.createElement("button", { className: "dbt-btn", disabled: (preview && preview.truncated) === false || busy === "open", onClick: () => openTable(sel, page + 1) }, t("nextPage") + " ›"),
1369
+ ) : null;
1356
1370
  return React.createElement(PreviewGrid, {
1357
1371
  preview, schema,
1358
1372
  kind: conn ? conn.kind : undefined,
@@ -1364,13 +1378,14 @@ window.__ModuleLoader__.load({
1364
1378
  connId: sel.connId, projectPath,
1365
1379
  onSaved: () => openTable(sel, page),
1366
1380
  askConfirm,
1367
- });
1381
+ }, footer);
1368
1382
  }
1369
1383
 
1370
- // 内嵌面板纵向布局:上半对象树(限高滚动,容器类名留给样式层),下半预览主区 + 分页
1384
+ // 内嵌面板纵向布局:撑满面板高度(.dbt-panel 为 height:100% 的 flex column),
1385
+ // 树限高 / main flex:1 内滚 / 分页与详情栏依次钉底
1371
1386
  return React.createElement(
1372
1387
  "div",
1373
- { className: "dbt-view" },
1388
+ { className: "dbt-view", style: { flex: "1 1 auto", minHeight: 0 } },
1374
1389
  React.createElement(
1375
1390
  "div",
1376
1391
  { style: { maxHeight: 280, overflowY: "auto" } },
@@ -1394,19 +1409,9 @@ window.__ModuleLoader__.load({
1394
1409
  v === "structure" ? t("structure") : t("preview"))),
1395
1410
  ),
1396
1411
  ),
1397
- // 限高兜底:无固定高度弹窗壳后给内容区可视上限,预览表在容器内滚动、单元格浮层贴底可见
1398
- React.createElement("div", { className: "dbt-browse-content", style: { maxHeight: 420 } }, rightPane()),
1412
+ // 内容区由 flex 吃满 main 剩余高度(表格外滚),不再用固定 maxHeight 兜底
1413
+ React.createElement("div", { className: "dbt-browse-content" }, rightPane()),
1399
1414
  ),
1400
- // 分页条(仅已选表的数据预览视图;空选中态不显示)
1401
- sel && view === "preview" && !loadErr ? React.createElement(
1402
- "div",
1403
- { className: "dbt-browse-footer" },
1404
- React.createElement("button", { className: "dbt-btn", disabled: page <= 1 || busy === "open", onClick: () => openTable(sel, page - 1) }, "‹ " + t("prevPage")),
1405
- React.createElement("span", { className: "dbt-muted" }, t("pageInfo", { page })),
1406
- React.createElement("span", { style: { flex: 1 } }),
1407
- preview && preview.truncated ? React.createElement("span", { className: "dbt-muted" }, t("previewTruncated")) : null,
1408
- React.createElement("button", { className: "dbt-btn", disabled: (preview && preview.truncated) === false || busy === "open", onClick: () => openTable(sel, page + 1) }, t("nextPage") + " ›"),
1409
- ) : null,
1410
1415
  );
1411
1416
  }
1412
1417
 
@@ -1625,7 +1630,8 @@ window.__ModuleLoader__.load({
1625
1630
  error ? React.createElement("div", { className: "dbt-err" }, t("error") + ": " + error) : null,
1626
1631
  message ? React.createElement("div", { className: "dbt-msg" }, message) : null,
1627
1632
  // 视图切换:key=view 触发 dbt-in 进入动画(opacity + 4px 上移,.22s)
1628
- React.createElement("div", { className: "dbt-view", key: view },
1633
+ // browse 视图撑满面板剩余高度(BrowsePane 内详情栏才能钉在面板最底部)
1634
+ React.createElement("div", { className: "dbt-view", key: view, style: view === "browse" ? { flex: "1 1 auto", minHeight: 0 } : undefined },
1629
1635
  view === "manage" ? React.createElement(ManageView, shared) : null,
1630
1636
  view === "grants" ? React.createElement(GrantsView, shared) : null,
1631
1637
  // browse:内嵌浏览面板(对象树 + 结构/数据预览,点表即看)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-db-tool",
3
- "version": "1.5.7",
3
+ "version": "1.5.9",
4
4
  "description": "DSH community plugin: chat-operated multi-database admin tool with sidebar management, project-scoped grants, ro/rw modes and dangerous-operation confirmation",
5
5
  "type": "module",
6
6
  "license": "MIT",