docs: README + site 更新 v0.1.13 新特性(事务回滚/子查询/外键级联/连接池)
This commit is contained in:
+44
-18
@@ -151,7 +151,7 @@
|
||||
<!-- Hero -->
|
||||
<section class="hero">
|
||||
<div class="container">
|
||||
<div class="badge" style="margin-bottom:24px;"><span class="dot"></span> v0.1.12 已发布</div>
|
||||
<div class="badge" style="margin-bottom:24px;"><span class="dot"></span> v0.1.13 已发布 — 事务回滚 · 子查询 · 外键级联 · 连接池</div>
|
||||
<h1>前端的 <span class="gradient-text">SQL 数据库</span></h1>
|
||||
<p>TypeScript 原生构建,内存与磁盘双模式,支持完整 SQL 查询。<br>零运行时依赖,开箱即用。</p>
|
||||
<div class="actions">
|
||||
@@ -237,32 +237,42 @@ npm install @metona-team/metona-sqlark
|
||||
<div class="feature-card">
|
||||
<div class="icon">⚡</div>
|
||||
<h3>完整 SQL 解析器</h3>
|
||||
<p>手写递归下降 SQL 解析器,无第三方依赖。支持 SELECT / INSERT / UPDATE / DELETE / CREATE TABLE / DROP TABLE / JOIN / GROUP BY / HAVING / DISTINCT。</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="icon">🔗</div>
|
||||
<h3>Query Builder</h3>
|
||||
<p>链式 API + TypeScript 泛型支持。.select().where().innerJoin().orderBy().limit() — IDE 自动补全,类型安全。</p>
|
||||
<p>手写递归下降 SQL 解析器。SELECT / INSERT / UPDATE / DELETE / JOIN / GROUP BY / HAVING / DISTINCT / 子查询。</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="icon">🔒</div>
|
||||
<h3>事务支持</h3>
|
||||
<p>原子性操作,事务内任意步骤失败自动回滚。IndexedDB 引擎原生事务 + Memory 引擎模拟事务。</p>
|
||||
<h3>事务回滚 <span style="font-size:0.65rem;color:var(--accent);vertical-align:super;">NEW</span></h3>
|
||||
<p>beginTransaction / commitTransaction / rollbackTransaction 三件套。失败自动回滚,Memory 快照 + IndexedDB 延迟写入。</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="icon">🔍</div>
|
||||
<h3>子查询 <span style="font-size:0.65rem;color:var(--accent);vertical-align:super;">NEW</span></h3>
|
||||
<p>IN (SELECT ...) + 标量子查询。递归执行,自动将子查询结果替换为具体值。</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="icon">🔗</div>
|
||||
<h3>外键级联 <span style="font-size:0.65rem;color:var(--accent);vertical-align:super;">NEW</span></h3>
|
||||
<p>references + ON DELETE CASCADE / SET NULL / RESTRICT。递归级联删除,自动维护引用完整性。</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="icon">🏊</div>
|
||||
<h3>连接池 <span style="font-size:0.65rem;color:var(--accent);vertical-align:super;">NEW</span></h3>
|
||||
<p>MetonaSqlark.connect() 单例复用,引用计数管理。避免重复打开 IndexedDB,自动释放资源。</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="icon">🧩</div>
|
||||
<h3>插件系统</h3>
|
||||
<p>14 种生命周期钩子:beforeCreateTable / afterInsert / beforeQuery / afterTransaction……按优先级注册,完整生命周期管理。</p>
|
||||
<p>14 种生命周期钩子:beforeCreateTable / afterInsert / beforeQuery / afterTransaction……按优先级注册。</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="icon">📦</div>
|
||||
<h3>零运行时依赖</h3>
|
||||
<p>纯 TypeScript 实现,不依赖任何第三方库。Tree-shakable,UMD/ESM/CJS 多格式输出,最小体积 ~10KB gzip。</p>
|
||||
<p>纯 TypeScript 实现,不依赖任何第三方库。Tree-shakable,UMD/ESM/CJS 多格式输出,~10KB gzip。</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="icon">📊</div>
|
||||
<h3>聚合 & 分组</h3>
|
||||
<p>COUNT / SUM / AVG / MIN / MAX 五大聚合函数,GROUP BY + HAVING 子句,DISTINCT 去重,完整的数据分析能力。</p>
|
||||
<p>COUNT / SUM / AVG / MIN / MAX 五大聚合函数,GROUP BY + HAVING 子句,DISTINCT 去重。</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="icon">🔄</div>
|
||||
@@ -271,8 +281,13 @@ npm install @metona-team/metona-sqlark
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="icon">📡</div>
|
||||
<h3>发布订阅</h3>
|
||||
<p>subscribe() 订阅表变更事件,emit() 触发通知。React useQuery / Vue useSqlarkQuery 开箱即用。</p>
|
||||
<h3>发布订阅 + 框架集成</h3>
|
||||
<p>subscribe() 订阅表变更。React useQuery / Vue useSqlarkQuery 开箱即用。</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="icon">🔗</div>
|
||||
<h3>Query Builder</h3>
|
||||
<p>链式 API + TypeScript 泛型。.select().where().innerJoin().orderBy().limit() — 类型安全,IDE 友好。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -312,13 +327,13 @@ npm install @metona-team/metona-sqlark
|
||||
<div class="container">
|
||||
<div class="section-title">
|
||||
<h2>5 行<span>代码</span>开始</h2>
|
||||
<p>像写 SQL 一样操作前端数据 — 或使用 Query Builder 链式 API</p>
|
||||
<p>像写 SQL 一样操作前端数据 — v0.1.13 新增子查询、外键级联、事务回滚</p>
|
||||
</div>
|
||||
<div class="code-block">
|
||||
<pre><span class="comment">// 创建数据库 — MeSqlark 是别名,完全等价</span>
|
||||
<span class="keyword">const</span> db = <span class="keyword">await</span> <span class="func">MetonaSqlark.create</span>({ <span class="string">name</span>: <span class="string">'my-app'</span>, <span class="string">mode</span>: <span class="string">'hybrid'</span> });
|
||||
|
||||
<span class="comment">// 定义表结构</span>
|
||||
<span class="comment">// 定义表结构 — 支持外键级联</span>
|
||||
<span class="keyword">await</span> db.<span class="func">defineTable</span>(<span class="string">'users'</span>, {
|
||||
<span class="string">id</span>: { <span class="string">type</span>: <span class="string">'string'</span>, <span class="string">primaryKey</span>: <span class="keyword">true</span> },
|
||||
<span class="string">name</span>: { <span class="string">type</span>: <span class="string">'string'</span>, <span class="string">required</span>: <span class="keyword">true</span> },
|
||||
@@ -344,11 +359,22 @@ npm install @metona-team/metona-sqlark
|
||||
<span class="keyword">await</span> db.<span class="func">query</span>(<span class="string">`SELECT dept, COUNT(*) as cnt, AVG(salary) as avg
|
||||
FROM employees GROUP BY dept HAVING COUNT(*) > 1`</span>);
|
||||
|
||||
<span class="comment">// 事务 — 原子操作</span>
|
||||
<span class="comment">// 事务 — 失败自动回滚</span>
|
||||
<span class="keyword">await</span> db.<span class="func">transaction</span>(<span class="keyword">async</span> (trx) => {
|
||||
<span class="keyword">await</span> trx.<span class="func">table</span>(<span class="string">'users'</span>).<span class="func">insert</span>({ id: <span class="string">'3'</span>, name: <span class="string">'Charlie'</span> });
|
||||
<span class="keyword">await</span> trx.<span class="func">table</span>(<span class="string">'orders'</span>).<span class="func">insert</span>({ id: <span class="string">'o1'</span>, userId: <span class="string">'3'</span>, amount: <span class="number">99</span> });
|
||||
});</pre>
|
||||
<span class="comment">// 任何一步失败 → 自动回滚</span>
|
||||
});
|
||||
|
||||
<span class="comment">// 子查询 — IN (SELECT ...)</span>
|
||||
<span class="keyword">await</span> db.<span class="func">query</span>(<span class="string">`SELECT * FROM users
|
||||
WHERE id IN (SELECT user_id FROM orders WHERE amount > 100)`</span>);
|
||||
|
||||
<span class="comment">// 连接池 — 单例复用,避免重复打开 IndexedDB</span>
|
||||
<span class="keyword">const</span> db1 = <span class="keyword">await</span> <span class="func">MetonaSqlark.connect</span>({ name: <span class="string">'my-app'</span> });
|
||||
<span class="keyword">const</span> db2 = <span class="keyword">await</span> <span class="func">MetonaSqlark.connect</span>({ name: <span class="string">'my-app'</span> });
|
||||
<span class="comment">// db1 === db2(复用已有实例)</span>
|
||||
<span class="keyword">await</span> db2.<span class="func">disconnect</span>(); <span class="comment">// 引用计数 -1,归零时自动 close</span></pre>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
Reference in New Issue
Block a user