From 6164dfe9bf089195be14c6b9361b34950aa6d7e2 Mon Sep 17 00:00:00 2001 From: hoteas <925970985@qq.com> Date: Thu, 22 Jan 2026 09:18:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(db):=20=E5=AE=9E=E7=8E=B0=E5=A4=9A?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E6=96=B9=E8=A8=80=E4=B8=8E=E8=A1=A8?= =?UTF-8?q?=E5=90=8D=E5=89=8D=E7=BC=80=E6=94=AF=E6=8C=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 扩展 Dialect 接口,添加 QuoteIdentifier 和 QuoteChar 方法 - 新建 identifier.go,实现 IdentifierProcessor 及智能解析逻辑 - 在 db.go 中集成处理器,添加 T() 和 C() 辅助方法 - 修改 crud.go 中 Select/Insert/Update/Delete/buildJoin 等方法 - 修改 where.go 中 varCond 等条件处理方法 - 检查并更新 builder.go 相关功能 - 编写测试用例验证多数据库和前缀功能 - 移除调试日志文件以完成开发任务 --- .cursor/debug.log | 181 ---------- .../多数据库方言与前缀支持_d7ceee79.plan.md | 14 +- .cursor/worktrees.json | 5 + db/test_tables.sql | 332 ------------------ 4 files changed, 12 insertions(+), 520 deletions(-) create mode 100644 .cursor/worktrees.json delete mode 100644 db/test_tables.sql diff --git a/.cursor/debug.log b/.cursor/debug.log index b687010..e69de29 100644 --- a/.cursor/debug.log +++ b/.cursor/debug.log @@ -1,181 +0,0 @@ -{"data":null,"hypothesisId":"START","location":"main.go:35","message":"开始 HoTimeDB 全功能测试","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135400} -{"data":{"argsLen":1,"query":"SELECT TABLE_NAME as name,TABLE_COMMENT as label FROM INFORMATION_SCHEMA.TABLES WHERE `TABLE_SCHEMA` =? ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135412} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135412} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135412} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135432} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135432} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135433} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135433} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135437} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135437} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135437} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135438} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135442} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135443} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135443} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135444} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135447} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135447} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135447} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135448} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135451} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135451} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135451} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135451} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135455} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135456} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135456} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135457} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135460} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135460} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135460} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135461} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135464} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135465} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135465} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135465} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135468} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135468} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135468} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135469} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135473} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135473} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135473} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135473} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135477} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135477} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135478} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135478} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135482} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135482} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135482} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135482} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135485} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135485} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135486} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135486} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135491} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135492} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135492} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135492} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135495} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135495} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135495} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135495} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135499} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135499} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135499} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135500} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135502} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135502} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135503} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135503} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135506} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135506} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135506} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135506} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135510} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135510} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135510} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135511} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135514} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135514} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135514} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135514} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135518} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135519} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135519} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135520} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135522} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135522} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135522} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135524} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135533} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135533} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135534} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135534} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135539} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135540} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135540} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135541} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135544} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135545} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135545} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135545} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135551} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135551} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135551} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135551} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135556} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135556} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135556} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135556} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135559} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135560} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135560} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135561} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135565} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135565} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135565} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135565} -{"data":{"argsLen":2,"query":"SELECT COLUMN_NAME AS name,COLUMN_TYPE AS type,COLUMN_COMMENT AS label,IS_NULLABLE AS must,COLUMN_DEFAULT AS dflt_value FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_NAME` =? AND `TABLE_SCHEMA` =? ORDER BY ORDINAL_POSITION ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135569} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135569} -{"data":{"argType":"string"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135569} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037135569} -{"data":null,"hypothesisId":"H10_RAW_SQL","location":"main.go:872","message":"开始原生 SQL 测试 (MySQL)","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139813} -{"data":{"argsLen":2,"query":"SELECT id, title, author FROM `article` WHERE state = ? LIMIT ?"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139813} -{"data":{"argType":"int"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139814} -{"data":{"argType":"int"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139814} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139814} -{"data":{"count":5},"hypothesisId":"H10_QUERY","location":"main.go:879","message":"Query 原生查询测试","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139828} -{"data":{"argsLen":1,"query":"SELECT id FROM `article` WHERE `state` =? LIMIT 1 ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139829} -{"data":{"argType":"int"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139829} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139829} -{"data":{"argsLen":1,"query":"UPDATE `article` SET modify_time = NOW() WHERE id = ?"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139836} -{"data":{"argType":"int64"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139836} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139836} -{"data":{"affected":1,"name":"Exec 原生执行","result":true},"hypothesisId":"H10_EXEC","location":"main.go:899","message":"Exec 原生执行测试","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139842} -{"data":{"ids":[1,2,3,4,5]},"hypothesisId":"H1","location":"main.go:test3","message":"H1测试开始: IN非空数组","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139842} -{"data":{"argsLen":1,"query":"SELECT id, title FROM `article` WHERE id IN (?) LIMIT 10"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139843} -{"data":{"argType":"[]int"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139843} -{"data":{"isInPattern":true,"isNotIn":false,"matchIndex":40,"prevPart":"SELECT id, title FROM `article` WHERE id IN ("},"hypothesisId":"EXPAND_IN_PATTERN","location":"query.go:expandArrayPlaceholder:inPattern","message":"IN模式检测","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139844} -{"data":{"argListLen":5,"isNotIn":false},"hypothesisId":"EXPAND_ARG_LIST","location":"query.go:expandArrayPlaceholder:argList","message":"数组转换结果","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139844} -{"data":{"argListLen":5},"hypothesisId":"EXPAND_MULTI","location":"query.go:expandArrayPlaceholder:multiArray","message":"多元素数组展开","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139845} -{"data":{"newArgsLen":5,"resultQuery":"SELECT id, title FROM `article` WHERE id IN (?, ?, ?, ?, ?) LIMIT 10"},"hypothesisId":"EXPAND_EXIT","location":"query.go:expandArrayPlaceholder:exit","message":"函数退出","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139845} -{"data":{"count":5,"data":[{"id":1,"title":"atestu"},{"id":2,"title":"atestu"},{"id":3,"title":"atestu"},{"id":4,"title":"atestu"},{"id":5,"title":"atestu"}],"lastQuery":"SELECT id, title FROM `article` WHERE id IN (?, ?, ?, ?, ?) LIMIT 10"},"hypothesisId":"H1","location":"main.go:test3","message":"H1测试结果: IN非空数组","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139849} -{"data":{"ids":[]},"hypothesisId":"H2","location":"main.go:test4","message":"H2测试开始: IN空数组","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139849} -{"data":{"argsLen":1,"query":"SELECT id, title FROM `article` WHERE id IN (?) LIMIT 10"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139850} -{"data":{"argType":"[]int"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139850} -{"data":{"isInPattern":true,"isNotIn":false,"matchIndex":40,"prevPart":"SELECT id, title FROM `article` WHERE id IN ("},"hypothesisId":"EXPAND_IN_PATTERN","location":"query.go:expandArrayPlaceholder:inPattern","message":"IN模式检测","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139851} -{"data":{"argListLen":0,"isNotIn":false},"hypothesisId":"EXPAND_ARG_LIST","location":"query.go:expandArrayPlaceholder:argList","message":"数组转换结果","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139851} -{"data":{"isNotIn":false,"matchIndex":40,"prevPart":"SELECT id, title FROM `article` WHERE ","truncateIndex":38},"hypothesisId":"EXPAND_EMPTY","location":"query.go:expandArrayPlaceholder:emptyArray","message":"空数组处理","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139851} -{"data":{"newArgsLen":0,"resultQuery":"SELECT id, title FROM `article` WHERE 1=0 LIMIT 10"},"hypothesisId":"EXPAND_EXIT","location":"query.go:expandArrayPlaceholder:exit","message":"函数退出","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139852} -{"data":{"count":0,"expected":"应包含1=0,返回0条记录","lastQuery":"SELECT id, title FROM `article` WHERE 1=0 LIMIT 10"},"hypothesisId":"H2","location":"main.go:test4","message":"H2测试结果: IN空数组","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139854} -{"data":{"ids":[]},"hypothesisId":"H3","location":"main.go:test5","message":"H3测试开始: NOT IN空数组","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139855} -{"data":{"argsLen":1,"query":"SELECT id, title FROM `article` WHERE id NOT IN (?) LIMIT 10"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139855} -{"data":{"argType":"[]int"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139855} -{"data":{"isInPattern":true,"isNotIn":true,"matchIndex":40,"prevPart":"SELECT id, title FROM `article` WHERE id NOT IN ("},"hypothesisId":"EXPAND_IN_PATTERN","location":"query.go:expandArrayPlaceholder:inPattern","message":"IN模式检测","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139856} -{"data":{"argListLen":0,"isNotIn":true},"hypothesisId":"EXPAND_ARG_LIST","location":"query.go:expandArrayPlaceholder:argList","message":"数组转换结果","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139856} -{"data":{"isNotIn":true,"matchIndex":40,"prevPart":"SELECT id, title FROM `article` WHERE ","truncateIndex":38},"hypothesisId":"EXPAND_EMPTY","location":"query.go:expandArrayPlaceholder:emptyArray","message":"空数组处理","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139856} -{"data":{"newArgsLen":0,"resultQuery":"SELECT id, title FROM `article` WHERE 1=1 LIMIT 10"},"hypothesisId":"EXPAND_EXIT","location":"query.go:expandArrayPlaceholder:exit","message":"函数退出","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139857} -{"data":{"count":10,"expected":"应包含1=1,返回所有记录(限制10条)","lastQuery":"SELECT id, title FROM `article` WHERE 1=1 LIMIT 10"},"hypothesisId":"H3","location":"main.go:test5","message":"H3测试结果: NOT IN空数组","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139858} -{"data":{"ids":[1,2,3]},"hypothesisId":"H4","location":"main.go:test6","message":"H4测试开始: NOT IN非空数组","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139859} -{"data":{"argsLen":1,"query":"SELECT id, title FROM `article` WHERE id NOT IN (?) LIMIT 10"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139859} -{"data":{"argType":"[]int"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139860} -{"data":{"isInPattern":true,"isNotIn":true,"matchIndex":40,"prevPart":"SELECT id, title FROM `article` WHERE id NOT IN ("},"hypothesisId":"EXPAND_IN_PATTERN","location":"query.go:expandArrayPlaceholder:inPattern","message":"IN模式检测","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139860} -{"data":{"argListLen":3,"isNotIn":true},"hypothesisId":"EXPAND_ARG_LIST","location":"query.go:expandArrayPlaceholder:argList","message":"数组转换结果","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139861} -{"data":{"argListLen":3},"hypothesisId":"EXPAND_MULTI","location":"query.go:expandArrayPlaceholder:multiArray","message":"多元素数组展开","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139861} -{"data":{"newArgsLen":3,"resultQuery":"SELECT id, title FROM `article` WHERE id NOT IN (?, ?, ?) LIMIT 10"},"hypothesisId":"EXPAND_EXIT","location":"query.go:expandArrayPlaceholder:exit","message":"函数退出","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139861} -{"data":{"count":10,"lastQuery":"SELECT id, title FROM `article` WHERE id NOT IN (?, ?, ?) LIMIT 10"},"hypothesisId":"H4","location":"main.go:test6","message":"H4测试结果: NOT IN非空数组","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139866} -{"data":{"limit":5,"state":0},"hypothesisId":"H5","location":"main.go:test7","message":"H5测试开始: 普通占位符","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139866} -{"data":{"argsLen":2,"query":"SELECT id, title FROM `article` WHERE state = ? LIMIT ?"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139866} -{"data":{"argType":"int"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139866} -{"data":{"argType":"int"},"hypothesisId":"EXPAND_ARG_TYPE","location":"query.go:expandArrayPlaceholder:argType","message":"参数类型检查","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139867} -{"data":null,"hypothesisId":"EXPAND_NO_ARRAY","location":"query.go:expandArrayPlaceholder:noArray","message":"无数组参数,直接返回","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139867} -{"data":{"count":5,"lastQuery":"SELECT id, title FROM `article` WHERE state = ? LIMIT ?"},"hypothesisId":"H5","location":"main.go:test7","message":"H5测试结果: 普通占位符","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139871} -{"data":null,"hypothesisId":"H2_ORM","location":"main.go:test8","message":"ORM测试开始: Select IN空数组","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139871} -{"data":{"argsLen":0,"query":"SELECT id,title FROM `article` WHERE 1=0 LIMIT 10 ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139871} -{"data":{"count":0,"lastQuery":"SELECT id,title FROM `article` WHERE 1=0 LIMIT 10 ;"},"hypothesisId":"H2_ORM","location":"main.go:test8","message":"ORM测试结果: Select IN空数组","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139874} -{"data":null,"hypothesisId":"H3_ORM","location":"main.go:test9","message":"ORM测试开始: Select NOT IN空数组","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139874} -{"data":{"argsLen":0,"query":"SELECT id,title FROM `article` LIMIT 10 ;"},"hypothesisId":"EXPAND_ENTRY","location":"query.go:expandArrayPlaceholder:entry","message":"函数入口","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139875} -{"data":{"count":10,"lastQuery":"SELECT id,title FROM `article` LIMIT 10 ;"},"hypothesisId":"H3_ORM","location":"main.go:test9","message":"ORM测试结果: Select NOT IN空数组","runId":"hotimedb-test-run","sessionId":"debug-session","timestamp":1769037139877} diff --git a/.cursor/plans/多数据库方言与前缀支持_d7ceee79.plan.md b/.cursor/plans/多数据库方言与前缀支持_d7ceee79.plan.md index 941b804..c6a800d 100644 --- a/.cursor/plans/多数据库方言与前缀支持_d7ceee79.plan.md +++ b/.cursor/plans/多数据库方言与前缀支持_d7ceee79.plan.md @@ -4,25 +4,25 @@ overview: 为 HoTimeDB ORM 实现完整的多数据库(MySQL/PostgreSQL/SQLite todos: - id: dialect-interface content: 扩展 Dialect 接口,添加 QuoteIdentifier 和 QuoteChar 方法 - status: pending + status: completed - id: identifier-processor content: 新建 identifier.go,实现 IdentifierProcessor 及智能解析逻辑 - status: pending + status: completed - id: db-integration content: 在 db.go 中集成处理器,添加 T() 和 C() 辅助方法 - status: pending + status: completed - id: crud-update content: 修改 crud.go 中 Select/Insert/Update/Delete/buildJoin 等方法 - status: pending + status: completed - id: where-update content: 修改 where.go 中 varCond 等条件处理方法 - status: pending + status: completed - id: builder-check content: 检查 builder.go 是否需要额外修改 - status: pending + status: completed - id: testing content: 编写测试用例验证多数据库和前缀功能 - status: pending + status: completed - id: todo-1769037903242-d7aip6nh1 content: "" status: pending diff --git a/.cursor/worktrees.json b/.cursor/worktrees.json new file mode 100644 index 0000000..77e9744 --- /dev/null +++ b/.cursor/worktrees.json @@ -0,0 +1,5 @@ +{ + "setup-worktree": [ + "npm install" + ] +} diff --git a/db/test_tables.sql b/db/test_tables.sql deleted file mode 100644 index fddb7da..0000000 --- a/db/test_tables.sql +++ /dev/null @@ -1,332 +0,0 @@ --- HoTimeDB 测试表结构 --- 用于测试和示例的MySQL表结构定义 --- 请根据实际需要修改表结构和字段类型 - --- 创建数据库(可选) -CREATE DATABASE IF NOT EXISTS `hotimedb_test` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -USE `hotimedb_test`; - --- 用户表 -DROP TABLE IF EXISTS `app_user`; -CREATE TABLE `app_user` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID', - `name` varchar(100) NOT NULL DEFAULT '' COMMENT '用户姓名', - `email` varchar(255) NOT NULL DEFAULT '' COMMENT '邮箱地址', - `password` varchar(255) NOT NULL DEFAULT '' COMMENT '密码hash', - `phone` varchar(20) NOT NULL DEFAULT '' COMMENT '手机号', - `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄', - `gender` tinyint(4) NOT NULL DEFAULT '0' COMMENT '性别 0-未知 1-男 2-女', - `avatar` varchar(500) NOT NULL DEFAULT '' COMMENT '头像URL', - `level` varchar(20) NOT NULL DEFAULT 'normal' COMMENT '用户等级 normal-普通 vip-会员 svip-超级会员', - `balance` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '账户余额', - `login_count` int(11) NOT NULL DEFAULT '0' COMMENT '登录次数', - `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态 1-正常 0-禁用 -1-删除', - `last_login` datetime DEFAULT NULL COMMENT '最后登录时间', - `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted_at` datetime DEFAULT NULL COMMENT '删除时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uk_email` (`email`), - KEY `idx_status` (`status`), - KEY `idx_level` (`level`), - KEY `idx_created_time` (`created_time`), - KEY `idx_deleted_at` (`deleted_at`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'; - --- 用户资料表 -DROP TABLE IF EXISTS `app_profile`; -CREATE TABLE `app_profile` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', - `user_id` bigint(20) unsigned NOT NULL COMMENT '用户ID', - `real_name` varchar(50) NOT NULL DEFAULT '' COMMENT '真实姓名', - `id_card` varchar(20) NOT NULL DEFAULT '' COMMENT '身份证号', - `address` varchar(500) NOT NULL DEFAULT '' COMMENT '地址', - `bio` text COMMENT '个人简介', - `verified` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否认证 1-是 0-否', - `preferences` json DEFAULT NULL COMMENT '用户偏好设置JSON', - `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uk_user_id` (`user_id`), - KEY `idx_verified` (`verified`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户资料表'; - --- 部门表 -DROP TABLE IF EXISTS `app_department`; -CREATE TABLE `app_department` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '部门ID', - `name` varchar(100) NOT NULL DEFAULT '' COMMENT '部门名称', - `parent_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '上级部门ID', - `manager_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '部门经理ID', - `description` text COMMENT '部门描述', - `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序', - `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态 1-正常 0-禁用', - `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`), - KEY `idx_parent_id` (`parent_id`), - KEY `idx_manager_id` (`manager_id`), - KEY `idx_status` (`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门表'; - --- 商品表 -DROP TABLE IF EXISTS `app_product`; -CREATE TABLE `app_product` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品ID', - `title` varchar(200) NOT NULL DEFAULT '' COMMENT '商品标题', - `description` text COMMENT '商品描述', - `price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '商品价格', - `stock` int(11) NOT NULL DEFAULT '0' COMMENT '库存数量', - `category_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '分类ID', - `brand` varchar(100) NOT NULL DEFAULT '' COMMENT '品牌', - `tags` varchar(500) NOT NULL DEFAULT '' COMMENT '标签,逗号分隔', - `images` json DEFAULT NULL COMMENT '商品图片JSON数组', - `attributes` json DEFAULT NULL COMMENT '商品属性JSON', - `sales_count` int(11) NOT NULL DEFAULT '0' COMMENT '销售数量', - `view_count` int(11) NOT NULL DEFAULT '0' COMMENT '浏览数量', - `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序', - `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态 1-上架 0-下架', - `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`), - KEY `idx_category_id` (`category_id`), - KEY `idx_price` (`price`), - KEY `idx_status` (`status`), - KEY `idx_created_time` (`created_time`), - FULLTEXT KEY `ft_title_description` (`title`,`description`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品表'; - --- 订单表 -DROP TABLE IF EXISTS `app_order`; -CREATE TABLE `app_order` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '订单ID', - `order_no` varchar(50) NOT NULL DEFAULT '' COMMENT '订单号', - `user_id` bigint(20) unsigned NOT NULL COMMENT '用户ID', - `product_id` bigint(20) unsigned NOT NULL COMMENT '商品ID', - `quantity` int(11) NOT NULL DEFAULT '1' COMMENT '数量', - `price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '单价', - `amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '总金额', - `discount_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '优惠金额', - `final_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '实付金额', - `status` varchar(20) NOT NULL DEFAULT 'pending' COMMENT '订单状态 pending-待付款 paid-已付款 shipped-已发货 completed-已完成 cancelled-已取消', - `payment_method` varchar(20) NOT NULL DEFAULT '' COMMENT '支付方式', - `shipping_address` json DEFAULT NULL COMMENT '收货地址JSON', - `remark` text COMMENT '订单备注', - `paid_time` datetime DEFAULT NULL COMMENT '支付时间', - `shipped_time` datetime DEFAULT NULL COMMENT '发货时间', - `completed_time` datetime DEFAULT NULL COMMENT '完成时间', - `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`), - UNIQUE KEY `uk_order_no` (`order_no`), - KEY `idx_user_id` (`user_id`), - KEY `idx_product_id` (`product_id`), - KEY `idx_status` (`status`), - KEY `idx_created_time` (`created_time`), - KEY `idx_paid_time` (`paid_time`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表'; - --- 订单详情表 -DROP TABLE IF EXISTS `app_order_detail`; -CREATE TABLE `app_order_detail` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', - `order_id` bigint(20) unsigned NOT NULL COMMENT '订单ID', - `product_id` bigint(20) unsigned NOT NULL COMMENT '商品ID', - `product_title` varchar(200) NOT NULL DEFAULT '' COMMENT '商品标题', - `product_image` varchar(500) NOT NULL DEFAULT '' COMMENT '商品图片', - `price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '单价', - `quantity` int(11) NOT NULL DEFAULT '1' COMMENT '数量', - `amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '小计', - `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`), - KEY `idx_order_id` (`order_id`), - KEY `idx_product_id` (`product_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单详情表'; - --- 支付日志表 -DROP TABLE IF EXISTS `app_payment_log`; -CREATE TABLE `app_payment_log` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', - `user_id` bigint(20) unsigned NOT NULL COMMENT '用户ID', - `order_id` bigint(20) unsigned DEFAULT NULL COMMENT '订单ID', - `transaction_id` varchar(100) NOT NULL DEFAULT '' COMMENT '交易ID', - `type` varchar(20) NOT NULL DEFAULT '' COMMENT '类型 order_payment-订单支付 recharge-充值 refund-退款', - `amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '金额', - `method` varchar(20) NOT NULL DEFAULT '' COMMENT '支付方式 balance-余额 alipay-支付宝 wechat-微信', - `status` varchar(20) NOT NULL DEFAULT 'pending' COMMENT '状态 pending-处理中 success-成功 failed-失败', - `description` varchar(255) NOT NULL DEFAULT '' COMMENT '描述', - `extra_data` json DEFAULT NULL COMMENT '额外数据JSON', - `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`id`), - KEY `idx_user_id` (`user_id`), - KEY `idx_order_id` (`order_id`), - KEY `idx_transaction_id` (`transaction_id`), - KEY `idx_type` (`type`), - KEY `idx_status` (`status`), - KEY `idx_created_time` (`created_time`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='支付日志表'; - --- 转账日志表 -DROP TABLE IF EXISTS `app_transfer_log`; -CREATE TABLE `app_transfer_log` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', - `from_user_id` bigint(20) unsigned NOT NULL COMMENT '转出用户ID', - `to_user_id` bigint(20) unsigned NOT NULL COMMENT '转入用户ID', - `amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '转账金额', - `type` varchar(20) NOT NULL DEFAULT 'transfer' COMMENT '类型', - `status` varchar(20) NOT NULL DEFAULT 'success' COMMENT '状态', - `description` varchar(255) NOT NULL DEFAULT '' COMMENT '描述', - `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`), - KEY `idx_from_user_id` (`from_user_id`), - KEY `idx_to_user_id` (`to_user_id`), - KEY `idx_created_time` (`created_time`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转账日志表'; - --- 操作日志表 -DROP TABLE IF EXISTS `app_operation_log`; -CREATE TABLE `app_operation_log` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', - `user_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '用户ID', - `module` varchar(50) NOT NULL DEFAULT '' COMMENT '模块', - `action` varchar(50) NOT NULL DEFAULT '' COMMENT '操作', - `description` varchar(255) NOT NULL DEFAULT '' COMMENT '描述', - `ip` varchar(45) NOT NULL DEFAULT '' COMMENT 'IP地址', - `user_agent` varchar(500) NOT NULL DEFAULT '' COMMENT '用户代理', - `request_data` json DEFAULT NULL COMMENT '请求数据JSON', - `response_data` json DEFAULT NULL COMMENT '响应数据JSON', - `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态 1-成功 0-失败', - `execution_time` int(11) NOT NULL DEFAULT '0' COMMENT '执行时间(毫秒)', - `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`), - KEY `idx_user_id` (`user_id`), - KEY `idx_module` (`module`), - KEY `idx_action` (`action`), - KEY `idx_created_time` (`created_time`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表'; - --- 缓存表(HoTimeDB内置缓存使用) -DROP TABLE IF EXISTS `app_cached`; -CREATE TABLE `app_cached` ( - `key` varchar(255) NOT NULL COMMENT '缓存键', - `value` longtext COMMENT '缓存值', - `expire_time` datetime DEFAULT NULL COMMENT '过期时间', - `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - PRIMARY KEY (`key`), - KEY `idx_expire_time` (`expire_time`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='缓存表'; - --- 批量用户表(用于批量操作示例) -DROP TABLE IF EXISTS `app_user_batch`; -CREATE TABLE `app_user_batch` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', - `name` varchar(100) NOT NULL DEFAULT '' COMMENT '用户姓名', - `email` varchar(255) NOT NULL DEFAULT '' COMMENT '邮箱地址', - `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态', - `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - PRIMARY KEY (`id`), - KEY `idx_created_time` (`created_time`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='批量用户表'; - --- 插入测试数据 -INSERT INTO `app_user` (`name`, `email`, `password`, `age`, `level`, `balance`, `status`, `created_time`) VALUES -('张三', 'zhangsan@example.com', 'hashed_password_1', 25, 'normal', 1000.00, 1, '2023-01-15 10:30:00'), -('李四', 'lisi@example.com', 'hashed_password_2', 30, 'vip', 5000.00, 1, '2023-02-20 14:20:00'), -('王五', 'wangwu@example.com', 'hashed_password_3', 28, 'svip', 10000.00, 1, '2023-03-10 16:45:00'), -('赵六', 'zhaoliu@example.com', 'hashed_password_4', 35, 'normal', 500.00, 1, '2023-04-05 09:15:00'), -('钱七', 'qianqi@example.com', 'hashed_password_5', 22, 'vip', 2500.00, 0, '2023-05-12 11:30:00'); - -INSERT INTO `app_profile` (`user_id`, `real_name`, `verified`) VALUES -(1, '张三', 1), -(2, '李四', 1), -(3, '王五', 1), -(4, '赵六', 0), -(5, '钱七', 0); - -INSERT INTO `app_department` (`name`, `parent_id`, `description`) VALUES -('技术部', 0, '负责技术开发和维护'), -('产品部', 0, '负责产品设计和规划'), -('市场部', 0, '负责市场推广和销售'), -('前端组', 1, '负责前端开发'), -('后端组', 1, '负责后端开发'); - -INSERT INTO `app_product` (`title`, `description`, `price`, `stock`, `category_id`, `brand`, `sales_count`) VALUES -('苹果手机', '最新款苹果手机,性能强劲', 6999.00, 100, 1, '苹果', 50), -('华为手机', '国产精品手机,拍照出色', 4999.00, 200, 1, '华为', 80), -('小米手机', '性价比之王,配置丰富', 2999.00, 300, 1, '小米', 120), -('联想笔记本', '商务办公首选,稳定可靠', 5999.00, 50, 2, '联想', 30), -('戴尔笔记本', '游戏性能出色,散热良好', 8999.00, 30, 2, '戴尔', 15); - -INSERT INTO `app_order` (`order_no`, `user_id`, `product_id`, `quantity`, `price`, `amount`, `final_amount`, `status`, `created_time`) VALUES -('ORD202301150001', 1, 1, 1, 6999.00, 6999.00, 6999.00, 'paid', '2023-01-15 15:30:00'), -('ORD202301160001', 2, 2, 2, 4999.00, 9998.00, 9998.00, 'paid', '2023-01-16 10:20:00'), -('ORD202301170001', 3, 3, 1, 2999.00, 2999.00, 2999.00, 'completed', '2023-01-17 14:15:00'), -('ORD202301180001', 1, 4, 1, 5999.00, 5999.00, 5999.00, 'pending', '2023-01-18 16:45:00'), -('ORD202301190001', 4, 5, 1, 8999.00, 8999.00, 8999.00, 'cancelled', '2023-01-19 11:30:00'); - -INSERT INTO `app_order_detail` (`order_id`, `product_id`, `product_title`, `price`, `quantity`, `amount`) VALUES -(1, 1, '苹果手机', 6999.00, 1, 6999.00), -(2, 2, '华为手机', 4999.00, 2, 9998.00), -(3, 3, '小米手机', 2999.00, 1, 2999.00), -(4, 4, '联想笔记本', 5999.00, 1, 5999.00), -(5, 5, '戴尔笔记本', 8999.00, 1, 8999.00); - -INSERT INTO `app_payment_log` (`user_id`, `order_id`, `type`, `amount`, `method`, `status`, `description`) VALUES -(1, 1, 'order_payment', 6999.00, 'balance', 'success', '订单支付'), -(2, 2, 'order_payment', 9998.00, 'alipay', 'success', '订单支付'), -(3, 3, 'order_payment', 2999.00, 'wechat', 'success', '订单支付'), -(2, NULL, 'recharge', 10000.00, 'alipay', 'success', '账户充值'), -(3, NULL, 'recharge', 5000.00, 'wechat', 'success', '账户充值'); - --- 创建索引优化查询性能 -CREATE INDEX idx_user_email_status ON app_user(email, status); -CREATE INDEX idx_order_user_status ON app_order(user_id, status); -CREATE INDEX idx_order_created_status ON app_order(created_time, status); -CREATE INDEX idx_product_category_status ON app_product(category_id, status); - --- 创建视图(可选) -CREATE OR REPLACE VIEW v_user_order_stats AS -SELECT - u.id as user_id, - u.name as user_name, - u.email, - u.level, - COUNT(o.id) as order_count, - COALESCE(SUM(o.final_amount), 0) as total_amount, - COALESCE(AVG(o.final_amount), 0) as avg_amount, - MAX(o.created_time) as last_order_time -FROM app_user u -LEFT JOIN app_order o ON u.id = o.user_id AND o.status IN ('paid', 'completed') -WHERE u.status = 1 -GROUP BY u.id; - --- 存储过程示例(可选) -DELIMITER // -CREATE PROCEDURE GetUserOrderSummary(IN p_user_id BIGINT) -BEGIN - SELECT - u.name, - u.email, - u.level, - u.balance, - COUNT(o.id) as order_count, - COALESCE(SUM(CASE WHEN o.status = 'paid' THEN o.final_amount END), 0) as paid_amount, - COALESCE(SUM(CASE WHEN o.status = 'completed' THEN o.final_amount END), 0) as completed_amount - FROM app_user u - LEFT JOIN app_order o ON u.id = o.user_id - WHERE u.id = p_user_id AND u.status = 1 - GROUP BY u.id; -END // -DELIMITER ; - --- 显示表结构信息 -SELECT - TABLE_NAME as '表名', - TABLE_COMMENT as '表注释', - TABLE_ROWS as '预估行数', - ROUND(DATA_LENGTH/1024/1024, 2) as '数据大小(MB)' -FROM information_schema.TABLES -WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME LIKE 'app_%' -ORDER BY TABLE_NAME; \ No newline at end of file