add flinksql

This commit is contained in:
HSunboy
2019-09-25 15:43:36 +08:00
parent e79a5a3d07
commit 8d7040d04b
26 changed files with 60721 additions and 1076 deletions

57
src/lib/flinkParser.ts Normal file
View File

@ -0,0 +1,57 @@
import * as antlr4 from 'antlr4'
import { ErrorListener } from 'antlr4/error';
import { sqlLexer } from '../antlr4/flinksql/sqlLexer';
import { sqlParser } from '../antlr4/flinksql/sqlParser';
import { sqlVisitor } from '../antlr4/flinksql/sqlVisitor';
import { splitSql } from '../utils'
interface SyntaxError {
line: number;
column: number;
token: antlr4.Token;
errorMsg: string;
}
class SqlErrorListener extends ErrorListener {
error: SyntaxError = null;
syntaxError (recognizer: antlr4.Recognizer, offendingSymbol: antlr4.Token, line: number, charPositionInLine: number, msg: string, e: any) {
this.error = {
line,
column: charPositionInLine,
token: offendingSymbol,
errorMsg: msg
};
}
}
function parserSingle (sql: string,) {
if (!sql || !sql.trim()) {
return null;
}
const inputStream = new antlr4.InputStream(sql.toUpperCase());
const lexer = <unknown>new sqlLexer(inputStream) as antlr4.Lexer;
const tokenStream = new antlr4.CommonTokenStream(lexer);
const parser: any = new sqlParser(tokenStream);
parser.buildParseTrees = true;
let listener = new SqlErrorListener();
parser.addErrorListener(listener)
parser.singleStatement();
return listener.error;
}
function parserSyntax (sql: sql): SyntaxError {
let runSql = typeof sql == 'string' ? sql : sql.join('');
const sqls = splitSql(runSql);
for (let i = 0, index = 0; i < sqls.length; i++) {
/**
* 这边不取分号
*/
let sql = new Array(index).fill(' ').join('') + runSql.substring(index, sqls[i]);
let err = parserSingle(sql);
if (err) {
return err;
}
index = sqls[i] + 1;
}
return null;
}
export default parserSyntax;

View File

@ -2,7 +2,6 @@
import * as sqlSyntaxParser from '../core/sqlSyntaxParser';
import * as sqlAutoCompleteParser from '../core/sqlAutoCompleteParser';
type sql = string | string [];
enum sqlType {
Hive = 'hive',
None = 'sql',
@ -29,12 +28,13 @@ function parseSyntax(sql: sql, type:sqlType = sqlType.Hive): sqlSyntaxParser.Syn
/**
* 自动补全提示
*/
function parserSql(sql: sql, type:sqlType = sqlType.Hive): sqlAutoCompleteParser.CompleteResult {
function parserSql(sql: sql, type: sqlType = sqlType.Hive): sqlAutoCompleteParser.CompleteResult {
const parserArgs = sqlToParserArgs(sql);
return sqlAutoCompleteParser.parser.parseSql(parserArgs[0], parserArgs[1], type, false)
}
export {
parseSyntax,
parserSql
parserSql,
sqlType
}