# @appland/sql-parser 中文文档

规范地址：https://npmcn.com/package/%40appland/sql-parser/

版本：1\.5\.1
npm 元数据更新时间：2022-04-04T14:50:33.833Z
中文译文更新时间：2026-11-06T11:36:17.112Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40appland/sql-parser
原文对照：https://npmcn.com/package/%40appland/sql-parser/?lang=original
项目主页：https://github.com/applandinc/sqlite-parser#readme
源码仓库：https://github.com/applandinc/sqlite-parser

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：330 kB，11 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=4
- 运行依赖：0 个
- 首次发布：2021-12-09T15:52:11.352Z
- 最新版本发布：2022-03-07T17:52:41.071Z
- 近 30 天下载量：83781（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：6（近 12 个月 0 个）

## 中文简介

JavaScript 执行 SQLite 3 查询解析器

## 安装

```sh
npm install @appland/sql-parser
```

也可以使用：`pnpm add @appland/sql-parser`、`yarn add @appland/sql-parser`、`bun add @appland/sql-parser`

## README

# sqlite-parser 软件

[![NPM Version Image](https://img.shields.io/npm/v/sqlite-parser.svg)](https://www.npmjs.com/package/sqlite-parser) [![dependencies Status Image](https://img.shields.io/david/codeschool/sqlite-parser.svg)](https://github.com/codeschool/sqlite-parser/) [![devDependencies Status Image](https://img.shields.io/david/dev/codeschool/sqlite-parser.svg)](https://github.com/codeschool/sqlite-parser/) [![License Type Image](https://img.shields.io/github/license/codeschool/sqlite-parser.svg)](https://github.com/codeschool/sqlite-parser/blob/master/LICENSE)

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

试试看 [交互式演示](http://codeschool.github.io/sqlite-parser/demo/) 让它行动起来.

**此解析器是针对 [SQLite 3 光谱](https://www.sqlite.org/lang.html)。 。 。 .**

## 安装

```
npm install sqlite-parser
```

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

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

```
npm i -g sqlite-parser
```

## 基本用途

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

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

```javascript
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起) (中文(简体) )**

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

```javascript
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 结构的文件,请 解析器蒸汽变换的输出需要被语句列表节点所包裹 其中每个语句用逗号相隔.

```javascript
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`但是,如果需要修改 提高节点类型之间的一致性,它们将在 [变化](https://github.com/codeschool/sqlite-parser/blob/master/CHANGELOG.md)。 。 。 .

### 示例

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

#### 输入 SQL

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

#### 结果 AST

```json
{
  "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)`) (中文(简体) ).

## 捐款

欢迎捐款! 你可以先检查一下 [提供指南](https://github.com/codeschool/sqlite-parser/blob/master/CONTRIBUTING.md)。 。 。 .

## 常见问题

### @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 和提交记录判断。

