@appland/sql-parser

中文文档
1.5.1发布于 2022/03/08MITCommonJS零依赖近 30 天下载 8.4万

JavaScript 执行 SQLite 3 查询解析器

中文使用文档
文档目录8 节
  1. 安装
  2. 作为全局模块安装 (自v1.0.0起) (中文(简体) )
  3. 基本用途
  4. 在节点流中使用剖析器 (实验性) (自v1.0.0起) (中文(简体) )
  5. 辅助
  6. 示例
  7. 语法错误
  8. 捐款

sqlite-parser 软件

NPM Version Image dependencies Status Image devDependencies Status Image License Type Image

要生成的 JavaScript 库解析 SQLite 查询 抽象语法树 (AST)解析发言的表述. 它还剖析一些非 SQLite 构造, 如 PostgreSQL 自定义运算符, 尽管 非 SQLite 解析由于语法上的细微差异不能100%准确 (例如,不同的操作者优先级)所以角上的案件可能会被分析出错误.

试试看 交互式演示 让它行动起来.

此解析器是针对 SQLite 3 光谱。 。 。 .

安装

npm install sqlite-parser

作为全局模块安装 (自v1.0.0起) (中文(简体) )

使用解析器的指令行界面,将其安装为全局模块. 这个 sqlite-parser 命令然后可用于解析输入 SQL 文件以及 将结果写入 stdout 或 JSON 文件 。 其他用途 指令和选项 sqlite-parser --help。 。 。 .

npm i -g sqlite-parser

基本用途

库显示一个接受两个参数的函数: SQL 用于解析和调用函数 。 如果 AST 无法从 输入字符串后生成描述性错误.

如果引用时没有调用函数, 解析器将同步运行 返回生成的 AST 或发生出错时投出出出错.

var sqliteParser = require('sqlite-parser');
var query = 'select pants from laundry;';
// sync
var ast = sqliteParser(query);
console.log(ast);

// async
sqliteParser(query, function (err, ast) {
  if (err) {
    console.error(err);
    return;
  }
  console.log(ast);
});

在节点流中使用剖析器 (实验性) (自v1.0.0起) (中文(简体) )

该图书馆还包括: 实验 作为支助 流变换 可以接受一个 可读 sQL 语句流并生成 JSON 字符串, 代表 每个声明的AST,因为它被读取和转换。 用这种方法, 解析器可以处理包含上百或上千个查询的文件 一次没有遇到记忆限制 每次发言的AST是: 读完并解析 而不是读完 在解析开始前将整个文件输入内存.

var parserTransform = require('sqlite-parser').createParser();
var readStream = require('fs').createReadStream('./large-input-file.sql');

readStream.pipe(parserTransform);
parserTransform.pipe(process.stdout);

parserTransform.on('error', function (err) {
  console.error(err);
  process.exit(1);
});

parserTransform.on('finish', function () {
  process.exit(0);
});

要将输出输入包含一个单一有效 JSON 结构的文件,请 解析器蒸汽变换的输出需要被语句列表节点所包裹 其中每个语句用逗号相隔.

var fs = require('fs');
var sqliteParser = require('sqlite-parser');
var parserTransform = sqliteParser.createParser();
var singleNodeTransform = sqliteParser.createStitcher();
var readStream = fs.createReadStream('./large-input-file.sql');
var writeStream = fs.createWriteStream('./large-output-file.json');

readStream.pipe(parserTransform);
parserTransform.pipe(singleNodeTransform);
singleNodeTransform.pipe(writeStream);

parserTransform.on('error', function (err) {
  console.error(err);
  process.exit(1);
});

writeStream.on('finish', function () {
  process.exit(0);
});

辅助

AST在释放时是稳定的 1.0.0但是,如果需要修改 提高节点类型之间的一致性,它们将在 变化。 。 。 .

示例

您可以一次提供一个或多个 SQL 语句 。 生成的 AST 对象 在最高级别上,有一个包含一系列 发言.

输入 SQL

SELECT
 MAX(honey) AS "Max Honey"
FROM
 BeeHive

结果 AST

{
  "type": "statement",
  "variant": "list",
  "statement": [
    {
      "type": "statement",
      "variant": "select",
      "result": [
        {
          "type": "function",
          "name": {
            "type": "identifier",
            "variant": "function",
            "name": "max"
          },
          "args": {
            "type": "expression",
            "variant": "list",
            "expression": [
              {
                "type": "identifier",
                "variant": "column",
                "name": "honey"
              }
            ]
          },
          "alias": "Max Honey"
        }
      ],
      "from": {
        "type": "identifier",
        "variant": "table",
        "name": "beehive"
      }
    }
  ]
}

语法错误

此解析器将尝试创建 说明 当信件无法解析时出错 一些输入 SQL. 除了语法错误的大致位置外, 解析器将试图描述关注领域 (例如: Syntax error found near Column Identifier (WHERE Clause)) (中文(简体) ).

捐款

欢迎捐款! 你可以先检查一下 提供指南。 。 。 .

版本与发布记录

@appland/sql-parser 共发布 6 个版本,首次发布于 2021/12/09;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.5.1latest2022/03/084 年前
1.5.02022/02/174 年前
1.4.02022/02/134 年前
1.3.02022/02/094 年前
1.2.02022/02/054 年前
1.1.12021/12/094 年前

关于 @appland/sql-parser 的常见问题

@appland/sql-parser 是什么?

JavaScript 执行 SQLite 3 查询解析器

如何安装 @appland/sql-parser?

在项目目录运行 npm install @appland/sql-parser,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 sqlite-parser,可以用 npx sqlite-parser 直接运行。

@appland/sql-parser 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/appland__sql-parser 是否存在。

@appland/sql-parser 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@appland/sql-parser 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=4。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@appland/sql-parser 可以商用吗?

@appland/sql-parser 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@appland/sql-parser 的下载量有多少?

根据 npm 官方下载统计,@appland/sql-parser 在 2026/10/07 – 2026/11/05 这 30 天内被下载 83,781 次,日均约 2,793 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@appland/sql-parser 还在维护吗?

最新版本 1.5.1 发布于 2022/03/08(4 年前);至今共发布 6 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/12/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。