sqlite-parser 软件
要生成的 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)) (中文(简体) ).
捐款
欢迎捐款! 你可以先检查一下 提供指南。 。 。 .