🐛 fix(sqlite): 修复表概览行数与大小统计

- 通过 driver-agent 为 SQLite 表列表补充精确行数与存储占用
- 使用 dbstat 区分数据页和索引页并支持相对大小展示
- 区分未知统计与真实零值并补充前后端回归测试
This commit is contained in:
AutumnNazi
2026-07-16 12:44:18 +08:00
parent 695fad283c
commit 2400823ca4
6 changed files with 233 additions and 19 deletions

View File

@@ -168,6 +168,47 @@ func TestOptionalDriverAgentDBQueryWithMessagesParsesAgentMessages(t *testing.T)
}
}
func TestOptionalDriverAgentDBProvidesSQLiteTableStats(t *testing.T) {
var stdin optionalAgentTestWriteCloser
stdout := strings.Join([]string{
`{"id":1,"success":true,"data":[{"table_rows":2}],"fields":["table_rows"]}`,
`{"id":2,"success":true,"data":[{"table_name":"orders","data_length":4096,"index_length":8192}],"fields":["table_name","data_length","index_length"]}`,
}, "\n") + "\n"
dbInst := &OptionalDriverAgentDB{
driverType: "sqlite",
client: &optionalDriverAgentClient{
stdin: &stdin,
reader: bufio.NewReader(strings.NewReader(stdout)),
driver: "sqlite",
},
}
rowCounts, err := dbInst.GetTableRowCounts("main", []string{"orders"})
if err != nil {
t.Fatalf("GetTableRowCounts 返回错误: %v", err)
}
if rowCounts["orders"] != 2 {
t.Fatalf("SQLite driver-agent 行数异常: %#v", rowCounts)
}
storageStats, err := dbInst.GetTableStorageStats("main", []string{"orders"})
if err != nil {
t.Fatalf("GetTableStorageStats 返回错误: %v", err)
}
if storageStats["orders"].DataLength != 4096 || storageStats["orders"].IndexLength != 8192 {
t.Fatalf("SQLite driver-agent 存储统计异常: %#v", storageStats)
}
requests := stdin.String()
if !strings.Contains(requests, `SELECT COUNT(*) AS table_rows FROM \"orders\"`) {
t.Fatalf("driver-agent 未执行 SQLite 行数查询: %s", requests)
}
if !strings.Contains(requests, "FROM dbstat") {
t.Fatalf("driver-agent 未执行 SQLite dbstat 查询: %s", requests)
}
}
func TestOptionalDriverAgentDBQueryMultiWithMessagesParsesResultSets(t *testing.T) {
var stdin optionalAgentTestWriteCloser
stdout := `{"id":1,"success":true,"data":[{"statementIndex":1,"rows":[{"name":"master"}],"columns":["name"]},{"statementIndex":1,"rows":[],"columns":[],"messages":["PRINT generated sql"]}],"messages":["batch top-level message"]}` + "\n"