资讯详情

AlaSQL 版本演进全解析:从 CHANGELOG 看 JavaScript SQL 数据库的核心能力地图

📅 2026/9/28 3:59:02 | 华诺云谱 👁 阅读
AlaSQL 版本演进全解析:从 CHANGELOG 看 JavaScript SQL 数据库的核心能力地图
嵌入式数据库数据工程【免费下载链接】alasqlAlaSQL.js - JavaScript SQL database for browser and Node.js. Handles both traditional relational tables and nested JSON data (NoSQL). Export, store, and import data from localStorage, IndexedDB, or Excel.项目地址https://gitcode.com/gh_mirrors/al/alasql点击查看免费下载AlaSQL 是一个运行在浏览器、Node.js 与移动端的 JavaScript SQL 数据库引擎支持传统关系表与嵌套 JSONNoSQL数据的混合查询并可导入、导出 ExcelXLS/XLSX、CSV、TAB、JSON、IndexedDB、LocalStorage 与 SQLite 等数据源。本文以仓库根目录的 CHANGELOG.md 为主线骨架逐版本梳理其功能迭代脉络并结合 src 源码、test 测试与 package.json 印证各能力的真实实现帮助你快速建立对 AlaSQL 核心功能、语法演进与使用边界的地图式认知。CHANGELOG 全貌与阅读方法仓库根目录的 CHANGELOG.md 记录了从 0.0.12014 年 10 月到 0.7.12021 年 3 月的全部版本发布信息最新条目为0.7.12021-03-05更新 lodash 依赖0.7.02021-03-03修复处理字面量时的代码注入漏洞空输入执行 GROUP BY 时返回空结果issue #9270.6.52020-11-11COUNT 与 AVG 不再计入 null 值issue #12510.6.42020-09-24支持 String 与 Number 对象作为值JOIN USING支持 String/Number 对象修复导出到 Excel 时的文件命名问题注意CHANGELOG 顶部明确说明“完整发布信息请见 GitHub Releases”因此本文只引用仓库内可核验的内容当前仓库 package.json 中的版本为 4.19.1说明 CHANGELOG 记录的 0.x 系列属于早期版本线阅读时需结合版本号判断功能的新旧程度。SQL 语法与表达式能力演进条件与比较表达式BETWEEN / NOT BETWEEN 免括号写法0.6.2 允许NOT BETWEEN不带括号0.6.1 允许BETWEEN不带括号。在语法文件 src/alasqlparser.jison 中BETWEEN与NOT\sBETWEEN被定义为独立 token并在优先级表中与AND并列解析时通过 BETWEEN1 中间节点处理运算符优先级问题。GLOB 与 LIKE 增强0.2.2 引入GLOB运算符0.2.1 支持_作为 LIKE 的单字符通配符、LIKE ESCAPE转义语法以及类似 MySQL 的REGEXP运算符和类似 Oracle 的REGEXP_LIKE()函数。NULLS FIRST/LAST排序子句0.6.0 加入语法定义于 src/alasqlparser.jison。在 src/426orderby.js 的编译逻辑中nullsOrder FIRST或LAST会生成专门的 null 比较分支控制 null 值在结果集中的位置。null null语义0.3.2 明确null null返回 nullSQL 三值逻辑而非布尔真值。数值、字符串与类型函数二进制与逻辑运算符0.2.3 引入^作为 XOR、~作为二进制 NOT0.2.2 加入、、、|二进制运算与||字符串拼接。字符串函数0.2.2 加入CONCAT、CONCAT_WS()、DATEADD()、DATEDIFF()T-SQL 风格与REPLACE()0.4.2 新增LTRIM、RTRIM0.2.1 为 SQLite 兼容加入SUBSTR()作为MID()的别名。GUID 与随机值0.2.3 加入NEWID()、UUID()、GEN_RANDOM_UUID()0.2.2 支持列DEFAULT直接使用函数如DEFAULT NEWID()。类型系统0.2.2 加入DATETIME2类型T-SQL 兼容0.1.9 引入SERIAL类型0.1.4 支持VARCHAR(MAX)与OBJECT_ID()0.3.0 支持由超过两个单词组成的列类型。查询修饰与排序OFFSET 语义修正破坏性变更0.4.0 明确OFFSET从跳过前 N 行改为跳过前 N-1 行之前的行为修正为“跳过前 N 行后才开始返回结果”这是 0.x 中重要的语义变更。ORDER BY参数支持0.5.3 修复ORDER BY支持参数issue #1100。SELECT 输出形状0.1.6 起支持SELECT VALUE、SELECT ROW、SELECT COLUMN、SELECT MATRIX、SELECT RECORDSET、SELECT TEXTSTRING、SELECT INDEX等多种输出形态。聚合函数从基础到分位数CHANGELOG 中聚合能力的迭代非常密集对应实现集中在 src/55functions.js基础聚合0.1.7 修复SUM()/AVG()对 NULLundefined元素的处理0.1.0 加入STD()、STDEV()、STDEVP()、VAR()、VARP()。NULL 语义细化0.3.1 让MEDIAN与STDEV忽略 null 值0.6.5 让COUNT与AVG不再计入 null。分位数聚合0.4.0 加入QUART、QUART2、QUART3。源码中alasql.aggr.QUARTsrc/55functions.js采用nth * (r.length 1) / 4的插值位置公式QUART2与QUART3分别委托QUART(..., 2)与QUART(..., 3)src/55functions.js。MEDIAN 与 ROLLUP 组合0.4.0 修复MEDIAN、STDEV在ROLLUP下的工作。DISTINCT 聚合0.1.0 起支持STD(DISTINCT a)等自定义聚合上的DISTINCT/ALL。自定义聚合器0.2.3 与 0.3.8 分别支持 JavaScript 自定义聚合器与通过 SQL 语句创建用户自定义聚合函数0.0.36 引入REDUCE聚合模式。MEDIAN实现src/55functions.js通过三阶段状态机收集非 null 值后排序取中位这也是 AlaSQL 自定义聚合的统一约定stage1初始化、stage2累积、stage3收敛。JOIN、子查询与集合操作连接类型0.0.14.3 起支持RIGHT / OUTER / SEMI / ANTI JOIN0.5.1 支持链式OUTER JOINissue #1105并修复 OUTER JOIN bugissue #11010.3.4 修复JOIN子查询。CROSS APPLY / OUTER APPLY0.0.39 引入。其底层数据展开逻辑位于 src/84from.js源码注释明确说明该函数用于配合CROSS APPLY/OUTER APPLY展平嵌套数组。集合运算0.0.14 支持INTERSECT、EXCEPT0.0.10 支持UNION0.0.22 支持SELECT MINUS SELECT与SELECT UNIQUE。条件比较与子查询0.0.14 加入IN (Subquery)、NOT IN、x ALL/ANY/SOME (subquery)0.0.12 支持WHERE EXISTS(SELECT ...)。GROUP BY 与 HAVING0.0.36 起支持GROUP BY公式、HAVING公式、COUNT(DISTINCT ...)、SUM(DISTINCT a)0.5.6 支持在嵌套数组数据集/参数内执行GroupByissue #1167。PIVOT / UNPIVOT0.2.2 加入0.5.1 修复 PIVOT 函数对SUM/AVG的类型转换。DDL、约束与触发器的演进表结构与索引CREATE TABLE0.0.43 起支持不带列类型直接CREATE TABLE one(two,three)0.0.16 支持CREATE TABLE table (column type DEFAULT value)与INSERT INTO table DEFAULT VALUES。列约束0.2.2 支持COLLATE、UNIQUE KEYissue #452、ON UPDATE列约束、NOT NULL表达式运算符0.0.36 支持列NULL约束0.1.4 加入列级/表级CHECK、列级/表级FOREIGN KEY、UNIQUE整表约束、NOT NULL校验。复合外键0.5.9 实现复合外键issue #11790.5.3 改进外键约束失败的错误信息issue #1009。索引0.2.2 修复REINDEX与CREATE INDEXissues #509、#4700.0.7 实现WHERE column expression的自动索引优化。ALTER / DROP / RENAME0.0.22 支持RENAME TABLE table TO literal、ALTER TABLE ... RENAME COLUMN、ALTER TABLE ... DROP COLUMN0.6.1 修复ADD COLUMN使用给定dbtypeid。0.0.39 支持CREATE FILE DATABASE IF NOT EXISTS filename.json与DROP FILE DATABASE IF EXISTS0.5.9 修复按数据库名删除 Filestorage 数据库issue #1184。视图与触发器视图0.0.37 起支持CREATE VIEW、DROP VIEW、SELECT FROM VIEW、JOIN VIEW0.2.6 修复 localStorage 引擎下的视图选择与CREATE VIEW。触发器0.2.2 加入 TRIGGER 框架0.3.4 加入AFTER DELETE触发器0.5.3 修复DROP TRIGGERissue #11130.2.2 支持 T-SQL 风格的SELECT * FROM INSERTED。事务0.0.28 起支持SET AUTOCOMMIT ON|OFF0.1.0 修复 localStorage 在AUTOCOMMIT OFF下的 dropTable0.0.29 修复 localStorageAUTOCOMMIT ON模式下的 INSERT/DELETE/UPDATE 与 ROLLBACK。数据源Excel、CSV 与文件读写Excel0.0.32 起可通过 xlsx 包读取 XLS/XLSX0.3.8 起.xlsx可经浏览器“上传”导入并声明仅需xlsx包即可0.3.5 修复false negatives for deepequaling of extended primitives与 CSV 输出双引号0.4.10 支持多 sheet 的 xlsxml 文件0.4.11 支持在不指定名称的情况下读取指定的 XLSX sheet0.6.4 修复导出到 Excel 的文件命名。CSV/TAB0.0.34 重写带分隔符与引号处理的 CSV/TAB 解析器0.3.3 支持从字符串加载 CSV 数据0.5.3 支持从 buffer 读取 CSV0.2.5 修复导入 CSV 时字段前导空白0.3.0破坏性变更带表头的 CSV 默认添加 BOM提升 UTF-8 支持。文件读写0.0.36 引入fileExists()与 FILESTORAGE 引擎Node.js/Cordova0.3.8 支持文件名读写自动扩展名0.2.6 支持进度回调0.1.6 起支持 alasql.path0.0.40 支持alasql(#sql1)、alasql(document.querySelector(#sql))与函数注释内嵌 SQL。JSON 与 NoSQL 能力JSON 查询0.1.6 支持SELECT * FROM Json0.0.34 移除 Angular.js 集成的$$hashKey字段。JSON 操作符0.0.25 支持JSON({a:1,b:[2,3]})-b-1 2属性链操作与-运算符0.0.37 支持SET a-property-0-(11) 100。表/行名以数字开头0.6.0 支持以数字开头的表名/行名。字符串与数字对象作为值0.6.4 支持 String/Number 对象作为值。SEARCH、图与 NoSQL 扩展SEARCH 语句0.1.2 起支持简单编译、SUM()/COUNT()/MIN()/MAX()/FIRST()/LAST()搜索聚合0.1.3 加入 ORDER BY、DISTINCT、UNION、UNION ALL、WITH()括号选择器、PATH()选择器0.1.4 加入EQ()、LIKE、RETURNS、ALL()、ANY()选择器0.2.2 加入OF()选择器。图数据0.1.0 支持CREATE VERTEX、CREATE EDGE0.1.4 增加alasql.options.autovertex标志自动创建缺失顶点与#运算符0.0.49 支持CREATE CLASS、INSERT INTO class。编程接口与运行环境适配Promise 与异步异步接口0.0.30 提供异步版本0.1.6 引入基于 es6-promises 的alasql.async()0.2.7 让.promise返回全部响应而非仅最后一条0.2.6 声明异步调用不再需要空 params。Promise 链与懒求值0.2.5 支持查询 Promise 链0.3.8 加入懒 Promise 写法lazy promise notation0.3.0 让 Web Worker 支持.promise写法。用户自定义函数与参数alasql.fn0.0.15 用alasql.fn取代alasql.userlib0.3.1 允许之后在alasql.fn上定义未知函数0.0.12 支持用户自定义函数alasql.usrlib。参数绑定0.0.15 起支持alasql(sql, params, callback)与SELECT * FROM ? AS t0.1.4 修复$[0] - $0参数写法0.0.36 支持FROM localvariable、SELECT INTO localvariable、DECLARE locarvariable type0.0.37 支持DECLARE one int 123多变量初始值。变量作用域0.0.37 支持SET localvariable expression与localvariable。模块系统与类型定义模块化0.0.15 支持 CommonJS/AMD/UMD 与 require.js 测试0.4.2 提供开箱即用的 Webpack/Browserify 兼容0.3.8 移除对xls.js包的依赖。TypeScript0.1.9 提供 alasql.d.tstypes/alasql.d.ts0.3.2 修复 d.ts 格式0.4.3 移除定义文件中的隐式 any0.4.0 支持扩展的 TypeScript 定义0.5.1 与 0.5.5 持续改进类型。运行环境浏览器/Node 检测0.4.7 “总是找到全局对象”0.4.6 使用 JavaScriptuse strict模式0.2.4 加入集中式环境检测browserify、phonegap、cordova。移动端0.3.9 支持 React Native0.2.1 修复 iOS Cordova 运行问题0.0.38 支持 Apache Cordova for Windows 8。CLIalacon/alaserver0.0.25 引入 alacon 控制台node alacon sql params...与 alaserver0.2.1 为 CLI 增加--version标志、退出码支持缺失文件不再抛异常而改为记录错误0.2.6 让 CLI 默认 pretty print 并保证输出为合法 JSON。CLI 入口位于 bin/alasql-cli.js。安全与稳定性从修复到加固CHANGELOG 中相当比例条目属于安全与正确性修复值得重点关注安全0.7.0 修复处理字面量时的代码注入漏洞这是所有用户应尽快升级的理由。空集合与 null 语义0.4.5 修复聚合函数作用于空集合issue #9640.7.0 修复空输入 GROUP BY 返回非空结果的问题issue #9270.6.5 修复 COUNT/AVG 计入 nullissue #12510.1.7 修复 SUM()/AVG() 对 null 元素的处理。存储引擎正确性0.5.3 修复 FilestorageDELETE FROMissue #6240.4.9 修复 localstorage 下AUTO_INCREMENT与单行 CSV 读取的 Promise 错误0.3.4 让TRUNCATE TABLE支持 localStorage 数据库0.4.9 修复dbprecision对 select 查询的影响。导出与序列化0.4.5 修复toString()丢失 ORDER BY 方向issue #970与多 JOIN 语法树转回 SQL 的问题issue #9720.5.9 修复 Insert 的toString()issue #11770.3.6 修复Select.toString()的 bug。破坏性变更速查表升级时需特别注意以下语义变化版本破坏性变更影响0.4.0OFFSET 改为跳过前 N 行后再返回结果原有分页逻辑结果偏移一行0.3.0带表头 CSV 默认输出 BOM面向 UTF-8 的导出文件头字节变化0.2.7FROM/INTO 语句默认headers: trueCSV 导入导出表头行为变化0.2.3{headers:true}成为默认选项与上一条协同影响 CSV 行为0.3.4移除 HELP 命令依赖HELP的脚本需要改写0.2.3^从幂运算改为 XOR、~引入依赖旧^语义的表达式行为改变0.2.2MAX()/MIN()更名为GREATEST()/LEAST()旧函数名不再指向数学最值从 CHANGELOG 到源码的验证路径如果想亲自验证上述条目推荐按以下路径在仓库中对照阅读语法层BETWEEN、NULLS FIRST/LAST、REGEXP等关键字均在 src/alasqlparser.jison 中定义 token 与产生式改动该文件后需执行yarn jison重新生成 src/alasqlparser.js。执行层排序与 null 处理逻辑在 src/426orderby.js聚合器实现集中在 src/55functions.jsSELECT 各阶段编译分散于 src/40select.js、src/424select.js 与 src/423groupby.js。验证层CHANGELOG 中多数 issue 编号如 #927、#1100、#1105、#1167、#1179、#1187、#1251都能在 test 目录下找到对应的回归测试文件如 test927.js、test1100.js 等编号与 issue 对应。工程层构建脚本、lint 与发布流程定义于 package.json 的 scripts 字段例如yarn build-only执行 build.sh 汇总所有 src 下的分片文件。小结AlaSQL 的 CHANGELOG 是一部浓缩的能力演进史从 2014 年基于 Jison 的重写起步逐步覆盖关系代数JOIN、子查询、集合运算、窗口函数雏形、NoSQLJSON 导航、图、SEARCH、多存储引擎IndexedDB、LocalStorage、SQLite、Filestorage、Excel/CSV以及工程化Promise、TypeScript、模块打包、CLI等方方面面。对使用者而言这张版本地图的价值在于既能看到“哪些语法可用”如NULLS FIRST/LAST、QUART、CROSS APPLY也能定位“哪些行为会变”如 OFFSET 语义、BOM 默认值还能顺着 issue 编号在 test 中找到对应的回归用例从而安全地评估升级风险与迁移工作量。赞分享嵌入式数据库数据工程【免费下载链接】alasqlAlaSQL.js - JavaScript SQL database for browser and Node.js. Handles both traditional relational tables and nested JSON data (NoSQL). Export, store, and import data from localStorage, IndexedDB, or Excel.项目地址https://gitcode.com/gh_mirrors/al/alasql点击查看免费下载相关推荐chroma.js 版本演进全解从 CHANGELOG 看 JavaScript 颜色库的核心能力迭代chroma.js 版本演进全解从 CHANGELOG 看 JavaScript 颜色库的核心能力迭代 本文以 chroma.js 官方变更日志 CHANG前端数据可视化react-sketchapp 版本演进全解析从 CHANGELOG 看 3.x 核心能力与源码实现react sketchapp 版本演进全解析从 CHANGELOG 看 3.x 核心能力与源码实现 导读 本文以 react sketchapp 仓库根目录开发工具前端bpftrace 版本演进全解析从 CHANGELOG 看 Linux 动态追踪语言的能力地图bpftrace 版本演进全解析从 CHANGELOG 看 Linux 动态追踪语言的能力地图 本文以 bpftrace 仓库根目录的 CHANGELOG.m可观测性性能剖析eBPF上一篇YOLOv10 基准测试指南深入解析 ultralytics/utils/benchmarks.py 的 benchmark 与 ProfileModels下一篇LMCache RESP 存储后端实战基于原生 C 连接器把 Redis/Valkey 打造成高性能 KV Cache 层创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑