# dt-sql-parser 本项目用于处理sql,目前含有功能 1. 校验sql,hive sql,impala sql,flinksql 等语法,并给予错误信息与建议提示 2. sql分割,根据`;`将sql分割为数组 3. 去除sql中的的注释(目前支持`--`,`/**/`类型注释) ## 用法 ### 过滤注释 / sql分割 ``` javascript 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 ``` ### 校验hive sql语法 ``` javascript 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片段 ### flinksqlParser #### function flinksqlParser (sql: sql): SyntaxError 校验 `flinksql` 语法。 >本项目文档不是很详细,也不准确(暂时没精力写),项目功能可以满足 hivesql,sql,impala,flinksql 的语法检查和提示功能。 具体使用方式可以参照代码中的 ts 类型。 ---- hive,impala语法解析文件来自[Hue](https://github.com/cloudera/hue) ---- ### ChangeLog - 1.1.8 添加转义字符支持 - 1.1.9 添加函数的中括号语法支持( split(nameList)[0] ) - 1.2.0 添加 ts,添加测试 - 2.0.0 添加flinksql语法检查