feat: v0.7.0 参数化查询 + 事务增量 flush + 复合主键语义硬化 + EXPLAIN 真实索引信息
- 参数化查询 db.query(sql, params):词法层 ? 绑定 + SQL 字面量安全编码 ('' 转义/注入防护);参数计数不匹配 PARAM_ERROR;对象参数显式拒绝 - KVStoreEngine 事务增量 flush:行级变更追踪,commit 仅写改动行 (1000 行表改 1 行:日志 1 条目 vs 整表 1000 条目);级联影响表漏写修复 (txFullTables 同步加入 txDirtyTables);移除每次 commit 全量 checkpoint (阈值自动 checkpoint + close 统一截断) - 复合主键显式拒绝:createSchema 校验期 SCHEMA_ERROR + ALTER ADD 主键列防护 (此前静默取第一个主键,其余标记失效) - EXPLAIN usingIndex 真实命中信息:pk / index:col / none 测试 1126 → 1147(72 套件);行覆盖率 89.8%;版本 0.7.0
This commit is contained in:
@@ -44,6 +44,16 @@ export function validateColumns(columns: Record<string, ColumnDef>): void {
|
||||
if (primaryKeyCount === 0) {
|
||||
throw new DatabaseError('Table must have at least one primary key column', 'SCHEMA_ERROR');
|
||||
}
|
||||
// v0.7.0: 复合主键(多列 primaryKey)当前不支持 —— 所有引擎的存储布局与
|
||||
// 外键引用均为单主键假设(此前静默取第一个主键,其余标记被忽略 → 语义陷阱)。
|
||||
// 显式拒绝避免用户误用;复合主键列入 v0.8 路线图。
|
||||
if (primaryKeyCount > 1) {
|
||||
throw new DatabaseError(
|
||||
`Composite primary keys are not supported yet: table has ${primaryKeyCount} primary key columns. ` +
|
||||
'Use a single primary key column (or a unique column combination) instead.',
|
||||
'SCHEMA_ERROR',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/** 获取主键列名 */
|
||||
|
||||
Reference in New Issue
Block a user