Go to file
2018-12-29 12:01:33 +08:00
core complie autoComplete parser 2018-12-29 12:01:33 +08:00
jison support insert overwrite values syntax 2018-12-29 11:47:29 +08:00
lib .gitignore is working, fixed untracked files 2018-12-13 14:23:40 +08:00
peg add sparksql pegjs file 2018-11-10 14:58:36 +08:00
utils init 2018-07-02 18:01:01 +08:00
.gitignore ignore .vscode 2018-12-13 14:14:45 +08:00
.npmignore publish npm 2018-08-16 19:47:13 +08:00
index.js add new comment 2018-07-02 19:36:09 +08:00
package.json support insert overwrite values syntax 2018-12-29 11:47:29 +08:00
README.md update log 2018-12-10 16:15:47 +08:00

dt-sql-parser

本项目用于处理sql目前含有功能

  1. 解析sql生成语法树(不支持CREATE等语句具体可以查看core/astParser文件)支持单条sql语句
  2. 校验sqlhive sqlimpala sql等语法并给予错误信息与建议提示
  3. sql分割,根据;将sql分割为数组
  4. 去除sql中的的注释(目前支持--,/**/类型注释)

用法

过滤注释 / sql分割

const dtFilter=require("dt-sql-parser").filter;
const sql=`
/*sttttttttart*/create table /*hhhhhhhh
hhhhhh
aaaaaa*/ sql_task_comment_test(id int comment 'id') comment 'sql test';
    --eeeeeeeend
`
console.log(dtFilter.filterComments(sql))//过滤注释
console.log(dtFilter.splitSql(sql));//分割sql

生成ast树

const dtFilter=require("dt-sql-parser").parser;
const sql=`
/*sttttttttart*/select userId as id,name /*hhhhhhhh
hhhhhh
aaaaaa*/ from user where isDeleted=0
    --eeeeeeeend
`
console.log(dtFilter.parse(sql))//注意目前只支持单条sql语句所以需要自己调用sql分割一条一条处理

校验hive sql语法

const dtSqlParser=require("dt-sql-parser").parser;

console.log(dtSqlParser.parseSyntax("selet  * form",'hive'));

/*
{
  "text": "selet",//错误部分
  "token": "REGULAR_IDENTIFIER",//类型
  "line": 0,
  "loc": {//错误位置信息
    "first_line": 1,
    "last_line": 1,
    "first_column": 0,
    "last_column": 5
  },
  "ruleId": "0",
  "expected": [//建议输入内容
    {
      "text": "select",//建议内容
      "distance": 1//建议优先级
    },
    {
      "text": "delete",
      "distance": 2
    }
  ],
  "recoverable": false,
  "incompleteStatement": true
}
*/

API

filter

function filterComments(sql:string):string

过滤sql注释(支持/*和--)

function splitSql(sql:string):Array

自动去除注释并且提取出各个sql

parser

function parseSyntax(sql:string|Array, type?:string):Object|boolean

校验sql语法如果没错误则返回false否则返回错误详细信息

可以提供一个含有两个字符串的数组代表被光标分割的两个sql片段

function parserSql(sql:string|Array, type?:string):Object

解析sql语法根据上下文提示补全字段与其它辅助信息

可以提供一个含有两个字符串的数组代表被光标分割的两个sql片段


ast生成代码来自nquery

hiveimpala等语法解析文件来自Hue


ChangeLog

  • 1.1.8 添加转义字符支持
  • 1.1.9 添加函数的中括号语法支持( split(nameList)[0] )