Commit Graph
18 Commits
Author SHA1 Message Date
what 9c6bb5a835 feat: SelectDataset 新增 Exists/ExistsContext
生成 SELECT 1 FROM ... LIMIT 1 判断是否存在符合条件的行,不用调用方自己拼
COUNT(*) 或者查完整行再判断长度。
2026-08-20 17:09:48 +08:00
what 6ed2803158 feat: Hooks 新增 UseTx,Before/After 改用类型化的 HookError
之前 Hooks.Before/After 返回裸 error,调用方没法区分"钩子本身失败"和"SQL
执行失败"。改成返回 *HookError(包一层 exec.HookError),配合 errors.As
能精确识别。

同时给 Hooks 加一个 UseTx(dataset) (QueryFactory, error) 方法,在 Before
之前调用,允许钩子在写操作真正执行前替换掉默认连接(比如需要自动开事务包住
写操作和写后回调的场景),返回 nil, nil 表示沿用默认连接。目前只有
InsertDataset/UpdateDataset/DeleteDataset 会调用 UseTx,SelectDataset
(只读)不需要。
2026-08-20 17:08:29 +08:00
what c8d1d2f219 chore: 从版本控制里移除 CLAUDE.md,加入 .gitignore
这是本地开发指引文件,不应该进仓库历史,之前误提交进去了。
2026-08-20 16:52:57 +08:00
what 82f57deec8 docs: 补充 README,说明整体架构与 v1-legacy 分支的关系
老代码库(git.fsdpf.net/go/db 现在的 master)用的是链式字符串拼接的 db.Builder,
这个仓库是另开的新项目,架构 fork 自 doug-martin/goqu(表达式树 + 方言渲染),
两边历史不相关。记录当前仓库的整体能力(SelectDataset 系列、exp 表达式树、
engine 连接管理、schema 建表迁移),并说明还在用老 API 的项目应该去 v1-legacy
分支。
2026-08-20 16:47:34 +08:00
what 1e9a16b693 refactor: 移除 ScanStruct 中 time.Time 直接存储的特殊处理,同步更新测试精度预期 2026-06-02 17:24:10 +08:00
what 2a3f0afa6e fix: DuckDB REGEXP_MATCHES 函数名改为大写 2026-06-02 15:57:13 +08:00
what e7fabd282f fix: 修复 *time.Time 字段扫描失败及 time.Time 精度丢失问题
- createColumnScans: *time.Time 等指针到结构体类型改用 *interface{} 扫描目标,
  避免 database/sql 因无法将 []byte 转换为 *time.Time 而报 scan error
- ScanStruct: time.Time 值直接存入 record,跳过 toJSONRawMessage 格式化,
  保留纳秒精度和时区 Location
- SafeSetVarValue: 新增 T→*T 赋值路径(适用于 time.Time→*time.Time 等场景),
  以及从 *json.RawMessage 解析 *time.Time 的路径(处理 []byte datetime 字符串)
- 新增 parseTimeFromRaw 支持 MySQL datetime、date-only、ISO8601、RFC3339 等格式
- 新增测试:覆盖 time.Time/[]byte 驱动值、date-only 格式、NULL 指针等场景
2026-06-02 15:57:10 +08:00
what 37581f3a65 feat: 新增 BooleanFunctionLookup 支持函数式操作符
- sqlgen: 新增 BooleanFunctionLookup,生成 FUNC(LHS, RHS) 格式,优先级高于 BooleanOperatorLookup
- dialect/duckdb: 使用 regexp_matches 替代 ~ 实现部分匹配,等价于 MySQL REGEXP
- sqlgen/expression_sql_generator_test: 补充 BooleanFunctionLookup 测试用例,修正 encode_error 前缀
- sqlgen/sql_dialect_options_test: 验证 BooleanFunctionLookup 默认为 nil
- dialect/duckdb_test: 新增 regexp_matches SQL 生成测试
2026-05-21 13:34:04 +08:00
what 1288c4919c merge: 合并 feature/sqlite3-vtab 到 master 2026-05-20 17:52:37 +08:00
what 21b80bdea4 feat: 完善扫描器、exec 及 schema 相关功能
- exec/scanner: 用 *interface{} 替换 **json.RawMessage 扫描目标,兼容 DuckDB 返回 map[string]interface{} 的场景;新增 toJSONRawMessage 转换函数
- exec/scanner: ScanVal 支持结构体指针,通过 JSON 中间层转换(DuckDB STRUCT 列)
- exec/scanner: 将 *sql.RawBytes 和 *[]byte 的处理从 ScanValContext 移入 scanner.ScanVal
- exec/query_executor: 简化 ScanValContext,移除私有 scan 方法
- exec: 补充 scanner 级别 ScanVal 测试用例
- internal/util/reflect: 重写 SafeSetVarValue,修复非指针 src 及 nil 指针字段的 panic
- internal/util/column_map: 恢复非匿名带标签结构体字段的展开逻辑
- schema: 新增 vector 列类型支持
- engine: 补充 DuckDB 相关配置
- dialect/sqlite3/vtab: 完善虚拟表适配器
- 各方言测试改用 sqlmock 虚拟连接
2026-05-20 17:52:28 +08:00
what ac81f1ff0b feat: 新增 SQLite3 虚拟表框架及方言扩展
- 新增 dialect/sqlite3/vtab 包,提供干净的虚拟表接口(Module/Table/Cursor)
- 适配层自动将 BestIndex 约束与 Filter 值绑定(ConstraintInfo.Value),无需手动编解码 IdxStr
- 支持 OpLIMIT/OpOFFSET 约束下推
- 新增 SupportsDistinct 方言选项,控制 SELECT 级和表达式级 DISTINCT 生成
- sqlite3 方言注册 IF() 函数支持
2026-04-18 13:41:41 +08:00
what 2221ca0ddb feat: 新增 DuckDB 方言支持及 SQLite3 自动注册 IF 函数
- 新增 dialect/duckdb 方言,支持 DuckDB SQL 语法
- 新增 schema/dialect/duckdb DDL 操作支持
- dialect/sqlite3: 注册 sqlite3_with_if 驱动,连接时自动注册 IF() 函数
- engine: MakeConnection 对 sqlite3 自动使用带 IF 支持的驱动
- engine: 新增 DBConfig DuckDB 配置项及相关 Option 函数
- 统一各方言测试引用路径
2026-04-16 10:14:46 +08:00
what c4590cf592 [feat] 移除对 db 库的直接依赖 2025-11-28 09:58:43 +08:00
whatandClaude 304d553b3c docs: Add CLAUDE.md with codebase guidance
Create comprehensive documentation for future Claude Code instances working in this repository, including:
- Development commands for testing, building, and code quality
- Core architecture overview of the SQL query builder system
- Directory structure and component explanations
- Testing patterns and conventions
- Key dependencies and their purposes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 15:47:28 +08:00
what 764eccfafd [feat] 新增 表结构操作 2025-03-24 16:58:37 +08:00
what f9ca4a49ce [feat] 增加解决 converting NULL to string is unsupported 的类型 2025-03-22 23:31:12 +08:00
what 717ae359bc 处理 string 和 int, converting NULL to string is unsupported 2025-03-22 23:04:29 +08:00
what f14642a736 fork github.com/doug-martin 2025-03-22 23:02:05 +08:00