feat: v0.1.13 — 事务回滚 + 子查询 + 外键级联 + 连接池
This commit is contained in:
Vendored
+61
-3
@@ -24,6 +24,10 @@ interface ColumnDef {
|
||||
index?: boolean;
|
||||
/** 外键引用: 'table.column' */
|
||||
references?: string;
|
||||
/** 删除级联: 'CASCADE' | 'SET NULL' | 'RESTRICT' */
|
||||
onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT';
|
||||
/** 更新级联: 'CASCADE' | 'SET NULL' | 'RESTRICT' */
|
||||
onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT';
|
||||
/** 字符串最大长度 */
|
||||
maxLength?: number;
|
||||
/** 数字最小值 */
|
||||
@@ -106,7 +110,7 @@ interface MetonaPlugin {
|
||||
/** 销毁 */
|
||||
destroy(): void;
|
||||
}
|
||||
declare const VERSION = "0.1.12";
|
||||
declare const VERSION = "0.1.13";
|
||||
|
||||
/**
|
||||
* metona-sqlark Plugin — 插件系统
|
||||
@@ -171,6 +175,12 @@ interface IStorageEngine {
|
||||
count(tableName: string, query?: QueryPlan): Promise<number>;
|
||||
/** 清空表数据(保留结构) */
|
||||
clear(tableName: string): Promise<void>;
|
||||
/** 开始事务 */
|
||||
beginTransaction(): Promise<void>;
|
||||
/** 提交事务 */
|
||||
commitTransaction(): Promise<void>;
|
||||
/** 回滚事务 */
|
||||
rollbackTransaction(): Promise<void>;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -203,6 +213,12 @@ interface ASTColumnDef {
|
||||
maxLength?: number;
|
||||
min?: number;
|
||||
max?: number;
|
||||
/** 外键引用 */
|
||||
references?: string;
|
||||
/** 级联删除 */
|
||||
onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT';
|
||||
/** 级联更新 */
|
||||
onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT';
|
||||
}
|
||||
interface CreateTableStatement {
|
||||
type: 'CREATE_TABLE';
|
||||
@@ -275,6 +291,15 @@ declare class QueryExecutor {
|
||||
private executeCreateTable;
|
||||
private executeDropTable;
|
||||
getEngine(): IStorageEngine;
|
||||
/**
|
||||
* 递归扫描 WHERE 条件,找到 $subquery 标记并执行子查询,
|
||||
* 将结果替换为具体值。
|
||||
*/
|
||||
private resolveSubqueries;
|
||||
/**
|
||||
* 解析操作符值中嵌套的子查询
|
||||
*/
|
||||
private resolveOperatorSubqueries;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -369,8 +394,7 @@ declare class Table<T = Record<string, unknown>> {
|
||||
* metona-sqlark Transaction — 事务管理
|
||||
* @module transaction
|
||||
*
|
||||
* 封装多操作事务,保证原子性。
|
||||
* v0.0.1: 基于引擎层操作实现,IndexedDB 引擎利用原生事务。
|
||||
* v0.1.13: 支持真正的回滚 — 利用引擎层 begin/commit/rollback 实现原子性。
|
||||
*/
|
||||
|
||||
declare class Transaction {
|
||||
@@ -464,6 +488,7 @@ declare class MemoryEngine implements IStorageEngine {
|
||||
private schemas;
|
||||
private indexes;
|
||||
private opened;
|
||||
private snapshot;
|
||||
open(_dbName: string, _version: number): Promise<void>;
|
||||
close(): Promise<void>;
|
||||
isOpen(): boolean;
|
||||
@@ -478,6 +503,11 @@ declare class MemoryEngine implements IStorageEngine {
|
||||
delete(tableName: string, query: QueryPlan): Promise<number>;
|
||||
count(tableName: string, query?: QueryPlan): Promise<number>;
|
||||
clear(tableName: string): Promise<void>;
|
||||
beginTransaction(): Promise<void>;
|
||||
commitTransaction(): Promise<void>;
|
||||
rollbackTransaction(): Promise<void>;
|
||||
private deepCloneMapMap;
|
||||
private deepCloneIndexes;
|
||||
private ensureTable;
|
||||
private getPrimaryKey;
|
||||
private validateRow;
|
||||
@@ -488,11 +518,18 @@ declare class MemoryEngine implements IStorageEngine {
|
||||
private tryIndexLookup;
|
||||
/** 更新索引 */
|
||||
private updateIndexes;
|
||||
/**
|
||||
* 级联删除:查找引用 tableName.pkValue 的所有表的行并删除。
|
||||
* @returns 级联删除的行数
|
||||
*/
|
||||
private cascadeDelete;
|
||||
}
|
||||
|
||||
/**
|
||||
* metona-sqlark IndexedDB Engine — 基于 IndexedDB 的持久化存储引擎
|
||||
* @module engine/indexeddb
|
||||
*
|
||||
* v0.1.13: 支持事务 — beginTransaction 延迟 IDB 写入,commit 批量刷盘,rollback 恢复快照。
|
||||
*/
|
||||
|
||||
declare class IndexedDBEngine implements IStorageEngine {
|
||||
@@ -501,6 +538,7 @@ declare class IndexedDBEngine implements IStorageEngine {
|
||||
private dbName;
|
||||
private version;
|
||||
private memoryCache;
|
||||
private txActive;
|
||||
open(dbName: string, version: number): Promise<void>;
|
||||
close(): Promise<void>;
|
||||
isOpen(): boolean;
|
||||
@@ -515,6 +553,18 @@ declare class IndexedDBEngine implements IStorageEngine {
|
||||
delete(tableName: string, query: QueryPlan): Promise<number>;
|
||||
count(tableName: string, query?: QueryPlan): Promise<number>;
|
||||
clear(tableName: string): Promise<void>;
|
||||
beginTransaction(): Promise<void>;
|
||||
commitTransaction(): Promise<void>;
|
||||
rollbackTransaction(): Promise<void>;
|
||||
private idbCreateTable;
|
||||
private idbDropTable;
|
||||
private idbInsert;
|
||||
private idbFind;
|
||||
private idbUpdate;
|
||||
private idbDelete;
|
||||
private idbClear;
|
||||
/** 将内存缓存中的所有表数据刷新到 IndexedDB */
|
||||
private flushToIDB;
|
||||
private ensureDB;
|
||||
}
|
||||
|
||||
@@ -546,6 +596,9 @@ declare class OPFSEngine implements IStorageEngine {
|
||||
delete(tableName: string, query: QueryPlan): Promise<number>;
|
||||
count(tableName: string, query?: QueryPlan): Promise<number>;
|
||||
clear(tableName: string): Promise<void>;
|
||||
beginTransaction(): Promise<void>;
|
||||
commitTransaction(): Promise<void>;
|
||||
rollbackTransaction(): Promise<void>;
|
||||
private ensureDir;
|
||||
private writeTableData;
|
||||
private readTableData;
|
||||
@@ -583,6 +636,9 @@ declare class HybridEngine implements IStorageEngine {
|
||||
delete(tableName: string, query: QueryPlan): Promise<number>;
|
||||
count(tableName: string, query?: QueryPlan): Promise<number>;
|
||||
clear(tableName: string): Promise<void>;
|
||||
beginTransaction(): Promise<void>;
|
||||
commitTransaction(): Promise<void>;
|
||||
rollbackTransaction(): Promise<void>;
|
||||
/** 获取磁盘引擎类型 */
|
||||
getDiskEngineType(): DiskEngine;
|
||||
/** 获取内存引擎(供内部使用) */
|
||||
@@ -634,6 +690,8 @@ declare enum TokenType {
|
||||
DEFAULT = "DEFAULT",
|
||||
NULL = "NULL",
|
||||
TRUE = "TRUE",
|
||||
REFERENCES = "REFERENCES",
|
||||
CASCADE = "CASCADE",
|
||||
FALSE = "FALSE",
|
||||
INNER = "INNER",
|
||||
LEFT = "LEFT",
|
||||
|
||||
Reference in New Issue
Block a user