2.7 KiB
2.7 KiB
Changelog
本文档记录 StarDB 的主要变更。
[Unreleased] - 2026-03-20
Added
- 新增可判定错误类型(
errors.Is友好):- 生命周期:
ErrDBNotInitializedErrTxNotInitializedErrStmtNotInitialized - 参数/目标校验:
ErrQueryEmptyErrTargetNilErrTargetNotPointer等 - 映射与批量写入:
ErrColumnNotFoundErrNoInsertValuesErrBatchRowValueCountMismatch等
- 生命周期:
- 新增流式查询能力(DB / Tx / Stmt):
QueryRaw/QueryRawContextScanEach/ScanEachContextScanEachORM/ScanEachORMContext
- 新增 NULL 安全取值:
GetNullStringGetNullInt64GetNullFloat64GetNullBoolGetNullTime
- 新增 ORM 行为开关:
SetStrictORM(true)启用严格列检查ClearReflectCache()清理反射缓存
- 新增 SQL 运行时可观测能力:
- Hook:
SetSQLHooksSetSQLBeforeHookSetSQLAfterHook - 慢 SQL 阈值:
SetSQLSlowThreshold - 指纹:
SetSQLFingerprintEnabledSetSQLFingerprintModeSetSQLFingerprintKeepComments - 指纹计数:
SetSQLFingerprintCounterEnabledSQLFingerprintCountersResetSQLFingerprintCounters - Context 元信息:
SQLHookMetaFromContextBatchExecMetaFromContext
- Hook:
- 新增占位符方言适配:
SetPlaceholderStyle(PlaceholderQuestion|PlaceholderDollar)(?/$1,$2...)
- 新增批量插入分片控制:
SetBatchInsertMaxRowsSetBatchInsertMaxParams- 常见驱动参数上限自动识别(SQLite / PostgreSQL / MySQL / SQL Server)
Changed
- 批量写入在开启分片或触发参数阈值时,改为事务内多分片执行,降低单条 SQL 过大风险。
- 分片批量写入结果语义明确:
RowsAffected()返回分片累计值LastInsertId()返回最后一个分片的 insert id
- 内部结构按模块归档到
internal/,保持外部 API 稳定:internal/convertinternal/scanutilinternal/sqlplaceholderinternal/sqlruntime
- README 重写为面向使用场景的说明,补齐能力边界、接入顺序和 API 细节。
Behavior Notes
- 默认查询
Query仍为内存模式(解析到StarRows)。 - 关闭内存预读时,使用
QueryRaw/ScanEach/ScanEachORM。 - SQL Hook、指纹与指纹计数默认关闭,需显式开启。
- 批量分片关闭条件:
maxRows <= 0且maxParams <= 0且未命中驱动自动阈值。
Tests
- 新增/补强测试覆盖:
- 流式查询与流式 ORM
- NULL 安全取值
- 严格 ORM 行为
- 占位符转换
- SQL Hook、慢 SQL 阈值、指纹模式、注释保留开关、指纹计数
- BatchInsert 分片(按行数/参数)、失败回滚与结果语义