新增: - AriaEngine 外键级联(CASCADE/SET NULL/RESTRICT)+ clearAll() 重置 API - 引擎级 alterTable:Aria DROP COLUMN 重写存储行 + schema 持久化 - 流式查询 queryStream / findStream(LSM 惰性扫描不物化) - FROM 派生表 / 多列 ON 哈希连接 / COUNT(DISTINCT) / NULLS FIRST/LAST - 普通列别名 + ORDER BY 别名 + 无表查询 + 字符串常量列 - 演示页引擎切换器(Memory/Aria)+ 预设自动重置 修复: - Aria WAL DROP_TABLE 崩溃恢复(删表复活)+ 恢复后 WAL 截断 - Memory update/delete 索引维护(unique 约束绕过) - 关联 EXISTS 绑定失效 / HAVING 标量子查询 / INSERT SELECT 位置错位 - 裸布尔列条件(WHERE done / CASE WHEN done) - Aria $in 重复行 / JOIN 主表 WHERE 下推 / DROP INDEX 报错 - ORDER BY/GROUP BY/SELECT 表前缀列 + SQL '' 标准转义 质量:894 测试 · 47 套件 · 81.5% 覆盖率
92 lines
2.7 KiB
TypeScript
92 lines
2.7 KiB
TypeScript
/**
|
|
* metona-sqlark — 入口文件
|
|
* @module metona-sqlark
|
|
* @version 0.4.1
|
|
*
|
|
* 前端关系型数据库,内存与磁盘双模式。
|
|
* 支持 Query Builder 链式 API 和 SQL 字符串查询。
|
|
*/
|
|
|
|
import { MetonaSqlark } from './core';
|
|
import type { DatabaseConfig } from './constants';
|
|
import { VERSION } from './constants';
|
|
|
|
// 连接池管理器(side-effect: 注入 MetonaSqlark.connect / disconnect 等静态方法)
|
|
import './connection-manager';
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// 工厂函数
|
|
// ---------------------------------------------------------------------------
|
|
|
|
/**
|
|
* 创建数据库实例并初始化
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* const db = await MetonaSqlark.create({
|
|
* name: 'my-app',
|
|
* mode: 'hybrid',
|
|
* });
|
|
*
|
|
* await db.defineTable('users', {
|
|
* id: { type: 'string', primaryKey: true },
|
|
* name: { type: 'string', required: true },
|
|
* });
|
|
*
|
|
* await db.table('users').insert({ id: '1', name: 'Alice' });
|
|
* const results = await db.query('SELECT * FROM users');
|
|
* ```
|
|
*/
|
|
async function create(config: DatabaseConfig): Promise<MetonaSqlark> {
|
|
const db = new MetonaSqlark(config);
|
|
await db.init();
|
|
return db;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// 全局 API
|
|
// ---------------------------------------------------------------------------
|
|
|
|
const api = {
|
|
VERSION,
|
|
version: VERSION,
|
|
create,
|
|
MetonaSqlark,
|
|
MeSqlark: MetonaSqlark,
|
|
};
|
|
|
|
// 浏览器全局挂载
|
|
declare global { interface Window { MetonaSqlark: typeof api; MeSqlark: typeof api; } }
|
|
if (typeof window !== 'undefined') {
|
|
window.MetonaSqlark = api;
|
|
window.MeSqlark = api;
|
|
}
|
|
|
|
export default api;
|
|
export {
|
|
api,
|
|
VERSION,
|
|
create,
|
|
MetonaSqlark,
|
|
};
|
|
|
|
// 别名
|
|
export const MeSqlark = MetonaSqlark;
|
|
|
|
// 类型导出
|
|
export type { DatabaseConfig, TableSchema, ColumnDef, FieldType, StorageMode, DiskEngine } from './constants';
|
|
export type { IStorageEngine } from './engine/interface';
|
|
export type { Statement, SelectStatement, InsertStatement, UpdateStatement, DeleteStatement } from './query/ast';
|
|
export { MemoryEngine } from './engine/memory';
|
|
export { IndexedDBEngine } from './engine/indexeddb';
|
|
export { OPFSEngine } from './engine/opfs';
|
|
export { AriaEngine } from './engine/aria/index';
|
|
export { HybridEngine } from './hybrid/index';
|
|
export { Table } from './table/table';
|
|
export { parse, parseAll } from './sql/parser';
|
|
export { tokenize } from './sql/lexer';
|
|
|
|
// AriaEngine 类型 & 后端
|
|
export type { AriaEngineConfig } from './engine/aria/types';
|
|
export { OPFSBackend } from './engine/aria/store/opfs_backend';
|