add hive sql automComplate
This commit is contained in:
		
							
								
								
									
										9277
									
								
								core/sqlAutoCompleteParser.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9277
									
								
								core/sqlAutoCompleteParser.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										36
									
								
								jison/hue-sql-autocomplete.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										36
									
								
								jison/hue-sql-autocomplete.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,36 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
# Licensed to Cloudera, Inc. under one
 | 
			
		||||
# or more contributor license agreements.  See the NOTICE file
 | 
			
		||||
# distributed with this work for additional information
 | 
			
		||||
# regarding copyright ownership.  Cloudera, Inc. licenses this file
 | 
			
		||||
# to you under the Apache License, Version 2.0 (the
 | 
			
		||||
# "License"); you may not use this file except in compliance
 | 
			
		||||
# with the License.  You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
echo "Make sure you install jison first (npm install jison -g)"
 | 
			
		||||
echo ""
 | 
			
		||||
echo "Generating parser..."
 | 
			
		||||
 | 
			
		||||
pushd jison
 | 
			
		||||
 | 
			
		||||
# For quick version of just SELECT statements without value expressions
 | 
			
		||||
# cat autocomplete_header.jison sql_main.jison autocomplete_footer.jison > sqlAutocompleteParser.jison
 | 
			
		||||
cat autocomplete_header.jison sql_main.jison sql_valueExpression.jison sql_error.jison sql_alter.jison sql_analyze.jison sql_create.jison sql_drop.jison sql_grant.jison sql_insert.jison sql_load.jison sql_set.jison sql_show.jison sql_update.jison sql_use.jison autocomplete_footer.jison > sqlAutocompleteParser.jison
 | 
			
		||||
 | 
			
		||||
echo "Creating SQL autocomplete parser..."
 | 
			
		||||
jison sqlAutocompleteParser.jison sql.jisonlex
 | 
			
		||||
grunt uglify:sqlAutocompleteParser
 | 
			
		||||
cat sqlParseSupport.js sqlAutocompleteParser.js > ../core/sqlAutoCompleteParser.js
 | 
			
		||||
rm sqlAutocompleteParser.jison
 | 
			
		||||
rm sqlAutocompleteParser.js
 | 
			
		||||
 | 
			
		||||
popd
 | 
			
		||||
echo "Done!"
 | 
			
		||||
@ -1,20 +1,21 @@
 | 
			
		||||
const Parser = require('../core/astParser');
 | 
			
		||||
const Cache = require("../core/cache");
 | 
			
		||||
const dtSqlParser=require("../core/sqlSyntaxParser");
 | 
			
		||||
const sqlSyntaxParser = require("../core/sqlSyntaxParser");
 | 
			
		||||
const sqlAutoCompleteParser = require("../core/sqlAutoCompleteParser");
 | 
			
		||||
const filter = require("./filter");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const astCache=new Cache();
 | 
			
		||||
const astCache = new Cache();
 | 
			
		||||
 | 
			
		||||
function parse(sql){
 | 
			
		||||
    const cleanSql=filter.cleanSql(sql);
 | 
			
		||||
function parse(sql) {
 | 
			
		||||
    const cleanSql = filter.cleanSql(sql);
 | 
			
		||||
    console.log(cleanSql)
 | 
			
		||||
    let ast=astCache.get(cleanSql);
 | 
			
		||||
    if(ast){
 | 
			
		||||
    let ast = astCache.get(cleanSql);
 | 
			
		||||
    if (ast) {
 | 
			
		||||
        return ast
 | 
			
		||||
    }else{
 | 
			
		||||
        ast=Parser.parse(cleanSql).ast;
 | 
			
		||||
        astCache.set(cleanSql,ast);
 | 
			
		||||
    } else {
 | 
			
		||||
        ast = Parser.parse(cleanSql).ast;
 | 
			
		||||
        astCache.set(cleanSql, ast);
 | 
			
		||||
        return ast;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -24,12 +25,20 @@ function parse(sql){
 | 
			
		||||
 * type 语法类型。默认hive
 | 
			
		||||
 * return 返回解析对象
 | 
			
		||||
 */
 | 
			
		||||
function parseSyntax(sql,type){
 | 
			
		||||
    if(typeof type=="undefined"){
 | 
			
		||||
        type="hive"
 | 
			
		||||
function parseSyntax(sql, type) {
 | 
			
		||||
    if (typeof type == "undefined") {
 | 
			
		||||
        type = "hive"
 | 
			
		||||
    }
 | 
			
		||||
    return dtSqlParser.parser.parseSyntax(sql,'',type,false)
 | 
			
		||||
    return sqlSyntaxParser.parser.parseSyntax(sql, '', type, false)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.parse=parse;
 | 
			
		||||
exports.parseSyntax=parseSyntax;
 | 
			
		||||
function parserSql(sql, type) {
 | 
			
		||||
    if (typeof type == "undefined") {
 | 
			
		||||
        type = "hive"
 | 
			
		||||
    }
 | 
			
		||||
    return sqlAutoCompleteParser.parser.parseSql(sql, '', type, false)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.parse = parse;
 | 
			
		||||
exports.parseSyntax = parseSyntax;
 | 
			
		||||
exports.parserSql = parserSql;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										0
									
								
								peg/autoComplete.pegjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								peg/autoComplete.pegjs
									
									
									
									
									
										Normal file
									
								
							
		Reference in New Issue
	
	Block a user