2018-08-27 11:03:13 +08:00
// 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.
var SqlParseSupport = ( function ( ) {
// endsWith polyfill from hue_utils.js, needed as workers live in their own js environment
if ( ! String . prototype . endsWith ) {
String . prototype . endsWith = function ( searchString , position ) {
var subjectString = this . toString ( ) ;
if ( typeof position !== 'number' || ! isFinite ( position ) || Math . floor ( position ) !== position || position > subjectString . length ) {
position = subjectString . length ;
}
position -= searchString . length ;
var lastIndex = subjectString . lastIndexOf ( searchString , position ) ;
return lastIndex !== - 1 && lastIndex === position ;
} ;
}
/ * *
* Calculates the Optimal String Alignment distance between two strings . Returns 0 when the strings are equal and the
* distance when not , distances is less than or equal to the length of the longest string .
*
* @ param strA
* @ param strB
* @ param [ ignoreCase ]
* @ returns { number } The similarity
* /
var stringDistance = function ( strA , strB , ignoreCase ) {
if ( ignoreCase ) {
strA = strA . toLowerCase ( ) ;
strB = strB . toLowerCase ( ) ;
}
// TODO: Consider other algorithms for performance
var strALength = strA . length ;
var strBLength = strB . length ;
if ( strALength === 0 ) {
return strBLength ;
}
if ( strBLength === 0 ) {
return strALength ;
}
var distances = new Array ( strALength ) ;
var cost , deletion , insertion , substitution , transposition ;
for ( var i = 0 ; i <= strALength ; i ++ ) {
distances [ i ] = new Array ( strBLength ) ;
distances [ i ] [ 0 ] = i ;
for ( var j = 1 ; j <= strBLength ; j ++ ) {
if ( ! i ) {
distances [ 0 ] [ j ] = j ;
} else {
cost = strA [ i - 1 ] === strB [ j - 1 ] ? 0 : 1 ;
deletion = distances [ i - 1 ] [ j ] + 1 ;
insertion = distances [ i ] [ j - 1 ] + 1 ;
substitution = distances [ i - 1 ] [ j - 1 ] + cost ;
if ( deletion <= insertion && deletion <= substitution ) {
distances [ i ] [ j ] = deletion ;
} else if ( insertion <= deletion && insertion <= substitution ) {
distances [ i ] [ j ] = insertion ;
} else {
distances [ i ] [ j ] = substitution ;
}
if ( i > 1 && j > 1 && strA [ i ] === strB [ j - 1 ] && strA [ i - 1 ] === strB [ j ] ) {
transposition = distances [ i - 2 ] [ j - 2 ] + cost ;
if ( transposition < distances [ i ] [ j ] ) {
distances [ i ] [ j ] = transposition ;
}
}
}
}
}
return distances [ strALength ] [ strBLength ] ;
} ;
var equalIgnoreCase = function ( a , b ) {
return a && b && a . toLowerCase ( ) === b . toLowerCase ( ) ;
} ;
var initSqlParser = function ( parser ) {
var SIMPLE _TABLE _REF _SUGGESTIONS = [ 'suggestJoinConditions' , 'suggestAggregateFunctions' , 'suggestFilters' , 'suggestGroupBys' , 'suggestOrderBys' ] ;
parser . prepareNewStatement = function ( ) {
linkTablePrimaries ( ) ;
parser . commitLocations ( ) ;
delete parser . yy . lateralViews ;
delete parser . yy . latestCommonTableExpressions ;
delete parser . yy . correlatedSubQuery ;
parser . yy . subQueries = [ ] ;
parser . yy . selectListAliases = [ ] ;
parser . yy . latestTablePrimaries = [ ] ;
prioritizeSuggestions ( ) ;
} ;
parser . yy . parseError = function ( message , error ) {
parser . yy . errors . push ( error ) ;
return message ;
} ;
parser . addCommonTableExpressions = function ( identifiers ) {
parser . yy . result . commonTableExpressions = identifiers ;
parser . yy . latestCommonTableExpressions = identifiers ;
} ;
parser . isInSubquery = function ( ) {
return ! ! parser . yy . primariesStack . length
} ;
parser . pushQueryState = function ( ) {
parser . yy . resultStack . push ( parser . yy . result ) ;
parser . yy . locationsStack . push ( parser . yy . locations ) ;
parser . yy . lateralViewsStack . push ( parser . yy . lateralViews ) ;
parser . yy . selectListAliasesStack . push ( parser . yy . selectListAliases ) ;
parser . yy . primariesStack . push ( parser . yy . latestTablePrimaries ) ;
parser . yy . subQueriesStack . push ( parser . yy . subQueries ) ;
parser . yy . result = { } ;
parser . yy . locations = [ ] ;
parser . yy . selectListAliases = [ ] ; // Not allowed in correlated sub-queries
parser . yy . lateralViews = [ ] ; // Not allowed in correlated sub-queries
if ( parser . yy . correlatedSubQuery ) {
parser . yy . latestTablePrimaries = parser . yy . latestTablePrimaries . concat ( ) ;
parser . yy . subQueries = parser . yy . subQueries . concat ( ) ;
} else {
parser . yy . latestTablePrimaries = [ ] ;
parser . yy . subQueries = [ ] ;
}
} ;
parser . popQueryState = function ( subQuery ) {
linkTablePrimaries ( ) ;
parser . commitLocations ( ) ;
if ( Object . keys ( parser . yy . result ) . length === 0 ) {
parser . yy . result = parser . yy . resultStack . pop ( ) ;
} else {
parser . yy . resultStack . pop ( ) ;
}
var oldSubQueries = parser . yy . subQueries ;
parser . yy . subQueries = parser . yy . subQueriesStack . pop ( ) ;
if ( subQuery ) {
if ( oldSubQueries . length > 0 ) {
subQuery . subQueries = oldSubQueries ;
}
parser . yy . subQueries . push ( subQuery ) ;
}
parser . yy . lateralViews = parser . yy . lateralViewsStack . pop ( ) ;
parser . yy . latestTablePrimaries = parser . yy . primariesStack . pop ( ) ;
parser . yy . locations = parser . yy . locationsStack . pop ( ) ;
parser . yy . selectListAliases = parser . yy . selectListAliasesStack . pop ( ) ;
} ;
parser . suggestSelectListAliases = function ( ) {
if ( parser . yy . selectListAliases && parser . yy . selectListAliases . length > 0 && parser . yy . result . suggestColumns
&& ( typeof parser . yy . result . suggestColumns . identifierChain === 'undefined' || parser . yy . result . suggestColumns . identifierChain . length === 0 ) ) {
parser . yy . result . suggestColumnAliases = parser . yy . selectListAliases ;
}
} ;
parser . isHive = function ( ) {
return parser . yy . activeDialect === 'hive' ;
} ;
parser . isImpala = function ( ) {
return parser . yy . activeDialect === 'impala' ;
} ;
parser . mergeSuggestKeywords = function ( ) {
var result = [ ] ;
Array . prototype . slice . call ( arguments ) . forEach ( function ( suggestion ) {
if ( typeof suggestion !== 'undefined' && typeof suggestion . suggestKeywords !== 'undefined' ) {
result = result . concat ( suggestion . suggestKeywords ) ;
}
} ) ;
if ( result . length > 0 ) {
return { suggestKeywords : result } ;
}
return { } ;
} ;
parser . suggestValueExpressionKeywords = function ( valueExpression , extras ) {
var expressionKeywords = parser . getValueExpressionKeywords ( valueExpression , extras ) ;
parser . suggestKeywords ( expressionKeywords . suggestKeywords ) ;
if ( expressionKeywords . suggestColRefKeywords ) {
parser . suggestColRefKeywords ( expressionKeywords . suggestColRefKeywords ) ;
}
if ( valueExpression . lastType ) {
parser . addColRefIfExists ( valueExpression . lastType ) ;
} else {
parser . addColRefIfExists ( valueExpression ) ;
}
} ;
parser . getSelectListKeywords = function ( excludeAsterisk ) {
var keywords = [ { value : 'CASE' , weight : 450 } , 'FALSE' , 'TRUE' , 'NULL' ] ;
if ( ! excludeAsterisk ) {
keywords . push ( { value : '*' , weight : 10000 } ) ;
}
if ( parser . isHive ( ) ) {
keywords = keywords . concat ( [ 'EXISTS' , 'NOT' ] ) ;
}
return keywords ;
} ;
parser . getValueExpressionKeywords = function ( valueExpression , extras ) {
var types = valueExpression . lastType ? valueExpression . lastType . types : valueExpression . types ;
// We could have valueExpression.columnReference to suggest based on column type
var keywords = [ '<' , '<=' , '<=>' , '<>' , '=' , '>' , '>=' , 'BETWEEN' , 'IN' , 'IS NOT NULL' , 'IS NULL' , 'IS NOT TRUE' , 'IS TRUE' , 'IS NOT FALSE' , 'IS FALSE' , 'NOT BETWEEN' , 'NOT IN' ] ;
if ( parser . isImpala ( ) ) {
keywords = keywords . concat ( [ 'IS DISTINCT FROM' , 'IS NOT DISTINCT FROM' , 'IS NOT UNKNOWN' , 'IS UNKNOWN' ] ) ;
}
if ( extras ) {
keywords = keywords . concat ( extras ) ;
}
if ( valueExpression . suggestKeywords ) {
keywords = keywords . concat ( valueExpression . suggestKeywords ) ;
}
if ( types . length === 1 && types [ 0 ] === 'COLREF' ) {
return {
suggestKeywords : keywords ,
suggestColRefKeywords : {
BOOLEAN : [ 'AND' , 'OR' ] ,
NUMBER : [ '+' , '-' , '*' , '/' , '%' , 'DIV' ] ,
STRING : parser . isImpala ( ) ? [ 'ILIKE' , 'IREGEXP' , 'LIKE' , 'NOT LIKE' , 'REGEXP' , 'RLIKE' ] : [ 'LIKE' , 'NOT LIKE' , 'REGEXP' , 'RLIKE' ]
}
}
}
if ( typeof SqlFunctions === 'undefined' || SqlFunctions . matchesType ( parser . yy . activeDialect , [ 'BOOLEAN' ] , types ) ) {
keywords = keywords . concat ( [ 'AND' , 'OR' ] ) ;
}
if ( typeof SqlFunctions === 'undefined' || SqlFunctions . matchesType ( parser . yy . activeDialect , [ 'NUMBER' ] , types ) ) {
keywords = keywords . concat ( [ '+' , '-' , '*' , '/' , '%' , 'DIV' ] ) ;
}
if ( typeof SqlFunctions === 'undefined' || SqlFunctions . matchesType ( parser . yy . activeDialect , [ 'STRING' ] , types ) ) {
keywords = keywords . concat ( parser . isImpala ( ) ? [ 'ILIKE' , 'IREGEXP' , 'LIKE' , 'NOT LIKE' , 'REGEXP' , 'RLIKE' ] : [ 'LIKE' , 'NOT LIKE' , 'REGEXP' , 'RLIKE' ] ) ;
}
return { suggestKeywords : keywords } ;
} ;
parser . getTypeKeywords = function ( ) {
if ( parser . isHive ( ) ) {
return [ 'BIGINT' , 'BINARY' , 'BOOLEAN' , 'CHAR' , 'DATE' , 'DECIMAL' , 'DOUBLE' , 'DOUBLE PRECISION' , 'FLOAT' , 'INT' , 'SMALLINT' , 'TIMESTAMP' , 'STRING' , 'TINYINT' , 'VARCHAR' ] ;
}
if ( parser . isImpala ( ) ) {
return [ 'BIGINT' , 'BOOLEAN' , 'CHAR' , 'DECIMAL' , 'DOUBLE' , 'FLOAT' , 'INT' , 'REAL' , 'SMALLINT' , 'TIMESTAMP' , 'STRING' , 'TINYINT' , 'VARCHAR' ] ;
}
return [ 'BIGINT' , 'BOOLEAN' , 'CHAR' , 'DECIMAL' , 'DOUBLE' , 'FLOAT' , 'INT' , 'SMALLINT' , 'TIMESTAMP' , 'STRING' , 'TINYINT' , 'VARCHAR' ] ;
} ;
parser . getColumnDataTypeKeywords = function ( ) {
if ( parser . isHive ( ) ) {
return parser . getTypeKeywords ( ) . concat ( [ 'ARRAY<>' , 'MAP<>' , 'STRUCT<>' , 'UNIONTYPE<>' ] ) ;
}
if ( parser . isImpala ( ) ) {
return parser . getTypeKeywords ( ) . concat ( [ 'ARRAY<>' , 'MAP<>' , 'STRUCT<>' ] ) ;
}
return parser . getTypeKeywords ( ) ;
} ;
parser . addColRefIfExists = function ( valueExpression ) {
if ( valueExpression . columnReference ) {
parser . yy . result . colRef = { identifierChain : valueExpression . columnReference } ;
}
} ;
parser . selectListNoTableSuggest = function ( selectListEdit , hasDistinctOrAll ) {
if ( selectListEdit . cursorAtStart ) {
var keywords = parser . getSelectListKeywords ( ) ;
if ( ! hasDistinctOrAll ) {
keywords = keywords . concat ( [ { value : 'ALL' , weight : 2 } , { value : 'DISTINCT' , weight : 2 } ] ) ;
}
if ( parser . isImpala ( ) ) {
keywords . push ( 'STRAIGHT_JOIN' ) ;
}
parser . suggestKeywords ( keywords ) ;
} else {
parser . checkForKeywords ( selectListEdit ) ;
}
if ( selectListEdit . suggestFunctions ) {
parser . suggestFunctions ( ) ;
}
if ( selectListEdit . suggestColumns ) {
parser . suggestColumns ( ) ;
}
if ( selectListEdit . suggestAggregateFunctions && ( ! hasDistinctOrAll || hasDistinctOrAll === 'ALL' ) ) {
parser . suggestAggregateFunctions ( ) ;
parser . suggestAnalyticFunctions ( ) ;
}
} ;
parser . suggestJoinConditions = function ( details ) {
parser . yy . result . suggestJoinConditions = details || { } ;
if ( parser . yy . latestTablePrimaries && ! parser . yy . result . suggestJoinConditions . tablePrimaries ) {
parser . yy . result . suggestJoinConditions . tablePrimaries = parser . yy . latestTablePrimaries . concat ( ) ;
}
} ;
parser . suggestJoins = function ( details ) {
parser . yy . result . suggestJoins = details || { } ;
} ;
parser . valueExpressionSuggest = function ( oppositeValueExpression , operator ) {
if ( oppositeValueExpression && oppositeValueExpression . columnReference ) {
parser . suggestValues ( ) ;
parser . yy . result . colRef = { identifierChain : oppositeValueExpression . columnReference } ;
}
parser . suggestColumns ( ) ;
parser . suggestFunctions ( ) ;
var keywords = [ { value : 'CASE' , weight : 450 } , { value : 'FALSE' , weight : 450 } , { value : 'NULL' , weight : 450 } , { value : 'TRUE' , weight : 450 } ] ;
if ( parser . isHive ( ) || typeof oppositeValueExpression === 'undefined' || typeof operator === 'undefined' ) {
keywords = keywords . concat ( [ 'EXISTS' , 'NOT' ] ) ;
}
if ( oppositeValueExpression && oppositeValueExpression . types [ 0 ] === 'NUMBER' ) {
parser . applyTypeToSuggestions ( [ 'NUMBER' ] ) ;
} else if ( parser . isImpala ( ) && ( typeof operator === 'undefined' || operator === '-' || operator === '+' ) ) {
keywords . push ( 'INTERVAL' ) ;
}
parser . suggestKeywords ( keywords ) ;
} ;
parser . applyTypeToSuggestions = function ( types ) {
if ( types [ 0 ] === 'BOOLEAN' ) {
return ;
}
if ( parser . yy . result . suggestFunctions && ! parser . yy . result . suggestFunctions . types ) {
parser . yy . result . suggestFunctions . types = types ;
}
if ( parser . yy . result . suggestColumns && ! parser . yy . result . suggestColumns . types ) {
parser . yy . result . suggestColumns . types = types ;
}
} ;
parser . findCaseType = function ( whenThenList ) {
var types = { } ;
whenThenList . caseTypes . forEach ( function ( valueExpression ) {
valueExpression . types . forEach ( function ( type ) {
types [ type ] = true ;
} ) ;
} ) ;
if ( Object . keys ( types ) . length === 1 ) {
return { types : [ Object . keys ( types ) [ 0 ] ] } ;
}
return { types : [ 'T' ] } ;
} ;
parser . findReturnTypes = function ( functionName ) {
return typeof SqlFunctions === 'undefined' ? [ 'T' ] : SqlFunctions . getReturnTypes ( parser . yy . activeDialect , functionName . toLowerCase ( ) ) ;
} ;
parser . applyArgumentTypesToSuggestions = function ( functionName , position ) {
var foundArguments = typeof SqlFunctions === 'undefined' ? [ 'T' ] : SqlFunctions . getArgumentTypes ( parser . yy . activeDialect , functionName . toLowerCase ( ) , position ) ;
if ( foundArguments . length == 0 && parser . yy . result . suggestColumns ) {
delete parser . yy . result . suggestColumns ;
delete parser . yy . result . suggestKeyValues ;
delete parser . yy . result . suggestValues ;
delete parser . yy . result . suggestFunctions ;
delete parser . yy . result . suggestIdentifiers ;
delete parser . yy . result . suggestKeywords ;
} else {
parser . applyTypeToSuggestions ( foundArguments ) ;
}
} ;
var getCleanImpalaPrimaries = function ( primaries ) {
var cleanPrimaries = [ ] ;
for ( var i = primaries . length - 1 ; i >= 0 ; i -- ) {
var cleanPrimary = primaries [ i ] ;
if ( cleanPrimary . identifierChain && cleanPrimary . identifierChain . length > 0 ) {
for ( var j = i - 1 ; j >= 0 ; j -- ) {
var parentPrimary = primaries [ j ] ;
if ( parentPrimary . alias && cleanPrimary . identifierChain [ 0 ] . name === parentPrimary . alias ) {
var restOfChain = cleanPrimary . identifierChain . concat ( ) ;
restOfChain . shift ( ) ;
if ( cleanPrimary . alias ) {
cleanPrimary = { identifierChain : parentPrimary . identifierChain . concat ( restOfChain ) , alias : cleanPrimary . alias , impalaComplex : true } ;
} else {
cleanPrimary = { identifierChain : parentPrimary . identifierChain . concat ( restOfChain ) , impalaComplex : true } ;
}
}
}
}
cleanPrimaries . push ( cleanPrimary ) ;
}
return cleanPrimaries ;
} ;
parser . commitLocations = function ( ) {
if ( parser . yy . locations . length === 0 ) {
return ;
}
var tablePrimaries = parser . yy . latestTablePrimaries ;
if ( parser . isImpala ( ) ) {
tablePrimaries = [ ] ;
getCleanImpalaPrimaries ( parser . yy . latestTablePrimaries ) . forEach ( function ( primary ) {
var cleanPrimary = primary ;
if ( primary . identifierChain && primary . identifierChain . length > 0 ) {
for ( var j = parser . yy . primariesStack . length - 1 ; j >= 0 ; j -- ) {
getCleanImpalaPrimaries ( parser . yy . primariesStack [ j ] ) . every ( function ( parentPrimary ) {
if ( parentPrimary . alias && parentPrimary . alias === primary . identifierChain [ 0 ] . name ) {
var identifierChain = primary . identifierChain . concat ( ) ;
identifierChain . shift ( ) ;
cleanPrimary = { identifierChain : parentPrimary . identifierChain . concat ( identifierChain ) } ;
if ( primary . alias ) {
cleanPrimary . alias = primary . alias ;
}
return false ;
}
return true ;
} ) ;
}
}
tablePrimaries . unshift ( cleanPrimary ) ;
} ) ;
}
var i = parser . yy . locations . length ;
while ( i -- ) {
var location = parser . yy . locations [ i ] ;
if ( location . type === 'variable' && location . colRef ) {
parser . expandIdentifierChain ( { wrapper : location . colRef , tablePrimaries : tablePrimaries , isColumnWrapper : true } ) ;
delete location . colRef . linked ;
}
// Impala can have references to previous tables after FROM, i.e. FROM testTable t, t.testArray
// In this testArray would be marked a type table so we need to switch it to column.
if ( location . type === 'table' && typeof location . identifierChain !== 'undefined' && location . identifierChain . length > 1 && tablePrimaries ) {
var allPrimaries = tablePrimaries ;
parser . yy . primariesStack . forEach ( function ( parentPrimaries ) {
allPrimaries = getCleanImpalaPrimaries ( parentPrimaries ) . concat ( allPrimaries ) ;
} ) ;
var found = allPrimaries . filter ( function ( primary ) {
return equalIgnoreCase ( primary . alias , location . identifierChain [ 0 ] . name ) ;
} ) ;
if ( found . length > 0 ) {
location . type = 'column' ;
}
}
if ( location . type === 'database' && typeof location . identifierChain !== 'undefined' && location . identifierChain . length > 0 && tablePrimaries ) {
var allPrimaries = tablePrimaries ;
parser . yy . primariesStack . forEach ( function ( parentPrimaries ) {
allPrimaries = getCleanImpalaPrimaries ( parentPrimaries ) . concat ( allPrimaries ) ;
} ) ;
var foundAlias = allPrimaries . filter ( function ( primary ) {
return equalIgnoreCase ( primary . alias , location . identifierChain [ 0 ] . name ) ;
} ) ;
if ( foundAlias . length > 0 && parser . isImpala ( ) ) {
// Impala complex reference in FROM clause, i.e. FROM testTable t, t.testMap tm
location . type = 'table' ;
parser . expandIdentifierChain ( { tablePrimaries : allPrimaries , wrapper : location , anyOwner : true } ) ;
location . type = location . identifierChain . length === 1 ? 'table' : 'complex' ;
continue ;
}
}
if ( location . type === 'unknown' ) {
if ( typeof location . identifierChain !== 'undefined' && location . identifierChain . length > 0 && location . identifierChain . length <= 2 && tablePrimaries ) {
var found = tablePrimaries . filter ( function ( primary ) {
return equalIgnoreCase ( primary . alias , location . identifierChain [ 0 ] . name ) || ( primary . identifierChain && equalIgnoreCase ( primary . identifierChain [ 0 ] . name , location . identifierChain [ 0 ] . name ) ) ;
} ) ;
if ( ! found . length && location . firstInChain ) {
found = tablePrimaries . filter ( function ( primary ) {
return ! primary . alias && primary . identifierChain && equalIgnoreCase ( primary . identifierChain [ primary . identifierChain . length - 1 ] . name , location . identifierChain [ 0 ] . name ) ;
} ) ;
}
if ( found . length ) {
if ( found [ 0 ] . identifierChain . length > 1 && location . identifierChain . length === 1 && equalIgnoreCase ( found [ 0 ] . identifierChain [ 0 ] . name , location . identifierChain [ 0 ] . name ) ) {
location . type = 'database' ;
} else if ( found [ 0 ] . alias && equalIgnoreCase ( location . identifierChain [ 0 ] . name , found [ 0 ] . alias ) && location . identifierChain . length > 1 ) {
location . type = 'column' ;
parser . expandIdentifierChain ( { tablePrimaries : tablePrimaries , wrapper : location , anyOwner : true } ) ;
} else if ( ! found [ 0 ] . alias && found [ 0 ] . identifierChain && equalIgnoreCase ( location . identifierChain [ 0 ] . name , found [ 0 ] . identifierChain [ found [ 0 ] . identifierChain . length - 1 ] . name ) && location . identifierChain . length > 1 ) {
location . type = 'column' ;
parser . expandIdentifierChain ( { tablePrimaries : tablePrimaries , wrapper : location , anyOwner : true } ) ;
} else {
location . type = found [ 0 ] . impalaComplex ? 'column' : 'table' ;
parser . expandIdentifierChain ( { tablePrimaries : tablePrimaries , wrapper : location , anyOwner : true } ) ;
}
} else {
if ( parser . yy . subQueries ) {
found = parser . yy . subQueries . filter ( function ( subQuery ) {
return equalIgnoreCase ( subQuery . alias , location . identifierChain [ 0 ] . name ) ;
} ) ;
if ( found . length > 0 ) {
location . type = 'subQuery' ;
location . identifierChain = [ { subQuery : found [ 0 ] . alias } ] ;
}
}
}
}
}
if ( location . type === 'asterisk' && ! location . linked ) {
if ( tablePrimaries && tablePrimaries . length > 0 ) {
location . tables = [ ] ;
location . linked = false ;
if ( ! location . identifierChain ) {
location . identifierChain = [ { asterisk : true } ] ;
}
parser . expandIdentifierChain ( { tablePrimaries : tablePrimaries , wrapper : location , anyOwner : false } ) ;
if ( location . tables . length === 0 ) {
parser . yy . locations . splice ( i , 1 ) ;
}
} else {
parser . yy . locations . splice ( i , 1 ) ;
}
}
if ( location . type === 'table' && typeof location . identifierChain !== 'undefined' && location . identifierChain . length === 1 && location . identifierChain [ 0 ] . name ) {
// Could be a cte reference
parser . yy . locations . some ( function ( otherLocation ) {
if ( otherLocation . type === 'alias' && otherLocation . source === 'cte' && SqlUtils . identifierEquals ( otherLocation . alias , location . identifierChain [ 0 ] . name ) ) {
// TODO: Possibly add the other location if we want to show the link in the future.
// i.e. highlight select definition on hover over alias, also for subquery references.
location . type = 'alias' ;
location . target = 'cte' ;
location . alias = location . identifierChain [ 0 ] . name ;
delete location . identifierChain ;
return true ;
}
} ) ;
}
if ( location . type === 'table' && ( typeof location . identifierChain === 'undefined' || location . identifierChain . length === 0 ) ) {
parser . yy . locations . splice ( i , 1 ) ;
}
if ( location . type === 'unknown' ) {
location . type = 'column' ;
}
// A column location might refer to a previously defined alias, i.e. last 'foo' in "SELECT cast(id AS int) foo FROM tbl ORDER BY foo;"
if ( location . type === 'column' ) {
for ( var j = i - 1 ; j >= 0 ; j -- ) {
var otherLocation = parser . yy . locations [ j ] ;
if ( otherLocation . type === 'alias' && otherLocation . source === 'column' && location . identifierChain && location . identifierChain . length === 1 && location . identifierChain [ 0 ] . name && otherLocation . alias && location . identifierChain [ 0 ] . name . toLowerCase ( ) === otherLocation . alias . toLowerCase ( ) ) {
location . type = 'alias' ;
location . source = 'column' ;
location . alias = location . identifierChain [ 0 ] . name ;
delete location . identifierChain ;
location . parentLocation = otherLocation . parentLocation ;
break ;
}
}
}
if ( location . type === 'column' ) {
if ( parser . isHive ( ) && ! location . linked ) {
location . identifierChain = parser . expandLateralViews ( parser . yy . lateralViews , location . identifierChain ) ;
}
var initialIdentifierChain = location . identifierChain ? location . identifierChain . concat ( ) : undefined ;
parser . expandIdentifierChain ( { tablePrimaries : tablePrimaries , wrapper : location , anyOwner : true , isColumnWrapper : true , isColumnLocation : true } ) ;
if ( typeof location . identifierChain === 'undefined' ) {
parser . yy . locations . splice ( i , 1 ) ;
} else if ( location . identifierChain . length === 0 && initialIdentifierChain && initialIdentifierChain . length === 1 ) {
// This is for the case "SELECT tblOrColName FROM db.tblOrColName";
location . identifierChain = initialIdentifierChain ;
}
}
if ( location . type === 'column' && location . identifierChain ) {
if ( location . identifierChain . length > 1 && location . tables && location . tables . length > 0 ) {
location . type = 'complex' ;
}
}
delete location . firstInChain ;
if ( location . type !== 'column' && location . type !== 'complex' ) {
delete location . qualified ;
} else if ( typeof location . qualified === 'undefined' ) {
location . qualified = false ;
}
}
if ( parser . yy . locations . length > 0 ) {
parser . yy . allLocations = parser . yy . allLocations . concat ( parser . yy . locations ) ;
parser . yy . locations = [ ] ;
}
} ;
var prioritizeSuggestions = function ( ) {
parser . yy . result . lowerCase = parser . yy . lowerCase || false ;
var cteIndex = { } ;
if ( typeof parser . yy . latestCommonTableExpressions !== 'undefined' ) {
parser . yy . latestCommonTableExpressions . forEach ( function ( cte ) {
cteIndex [ cte . alias . toLowerCase ( ) ] = cte ;
} )
}
SIMPLE _TABLE _REF _SUGGESTIONS . forEach ( function ( suggestionType ) {
if ( suggestionType !== 'suggestAggregateFunctions' && typeof parser . yy . result [ suggestionType ] !== 'undefined' && parser . yy . result [ suggestionType ] . tables . length === 0 ) {
delete parser . yy . result [ suggestionType ] ;
} else if ( typeof parser . yy . result [ suggestionType ] !== 'undefined' && typeof parser . yy . result [ suggestionType ] . tables !== 'undefined' ) {
for ( var i = parser . yy . result [ suggestionType ] . tables . length - 1 ; i >= 0 ; i -- ) {
var table = parser . yy . result [ suggestionType ] . tables [ i ] ;
if ( table . identifierChain . length === 1 && typeof table . identifierChain [ 0 ] . name !== 'undefined' && typeof cteIndex [ table . identifierChain [ 0 ] . name . toLowerCase ( ) ] !== 'undefined' ) {
parser . yy . result [ suggestionType ] . tables . splice ( i , 1 ) ;
}
}
}
} ) ;
if ( typeof parser . yy . result . colRef !== 'undefined' ) {
if ( ! parser . yy . result . colRef . linked || typeof parser . yy . result . colRef . identifierChain === 'undefined' || parser . yy . result . colRef . identifierChain . length === 0 ) {
delete parser . yy . result . colRef ;
if ( typeof parser . yy . result . suggestColRefKeywords !== 'undefined' ) {
Object . keys ( parser . yy . result . suggestColRefKeywords ) . forEach ( function ( type ) {
parser . yy . result . suggestKeywords = parser . yy . result . suggestKeywords . concat ( parser . createWeightedKeywords ( parser . yy . result . suggestColRefKeywords [ type ] , - 1 ) ) ;
} ) ;
delete parser . yy . result . suggestColRefKeywords ;
}
if ( parser . yy . result . suggestColumns && parser . yy . result . suggestColumns . types . length === 1 && parser . yy . result . suggestColumns . types [ 0 ] === 'COLREF' ) {
parser . yy . result . suggestColumns . types = [ 'T' ] ;
}
delete parser . yy . result . suggestValues ;
}
}
if ( typeof parser . yy . result . colRef !== 'undefined' ) {
if ( ! parser . yy . result . suggestValues && ! parser . yy . result . suggestColRefKeywords &&
( ! parser . yy . result . suggestColumns ||
parser . yy . result . suggestColumns . types [ 0 ] !== 'COLREF' ) ) {
delete parser . yy . result . colRef ;
}
}
if ( typeof parser . yy . result . suggestIdentifiers !== 'undefined' && parser . yy . result . suggestIdentifiers . length > 0 ) {
delete parser . yy . result . suggestTables ;
delete parser . yy . result . suggestDatabases ;
}
if ( typeof parser . yy . result . suggestColumns !== 'undefined' ) {
var suggestColumns = parser . yy . result . suggestColumns ;
if ( typeof suggestColumns . tables === 'undefined' || suggestColumns . tables . length === 0 ) {
// Impala supports statements like SELECT * FROM tbl1, tbl2 WHERE db.tbl1.col = tbl2.bla
if ( parser . yy . result . suggestColumns . linked && parser . isImpala ( ) && typeof suggestColumns . identifierChain !== 'undefined' && suggestColumns . identifierChain . length > 0 ) {
if ( suggestColumns . identifierChain . length === 1 ) {
parser . yy . result . suggestTables = suggestColumns ;
delete parser . yy . result . suggestColumns
} else {
suggestColumns . tables = [ { identifierChain : suggestColumns . identifierChain } ] ;
delete suggestColumns . identifierChain ;
}
} else {
delete parser . yy . result . suggestColumns ;
delete parser . yy . result . subQueries ;
}
} else {
delete parser . yy . result . suggestTables ;
delete parser . yy . result . suggestDatabases ;
suggestColumns . tables . forEach ( function ( table ) {
if ( typeof table . identifierChain !== 'undefined' && table . identifierChain . length === 1 && typeof table . identifierChain [ 0 ] . name !== 'undefined' ) {
var cte = cteIndex [ table . identifierChain [ 0 ] . name . toLowerCase ( ) ] ;
if ( typeof cte !== 'undefined' ) {
delete table . identifierChain [ 0 ] . name ;
table . identifierChain [ 0 ] . cte = cte . alias ;
}
} else if ( typeof table . identifierChain === 'undefined' && table . subQuery ) {
table . identifierChain = [ { subQuery : table . subQuery } ] ;
delete table . subQuery ;
}
} ) ;
if ( typeof suggestColumns . identifierChain !== 'undefined' && suggestColumns . identifierChain . length === 0 ) {
delete suggestColumns . identifierChain ;
}
}
} else {
delete parser . yy . result . subQueries ;
}
if ( typeof parser . yy . result . suggestJoinConditions !== 'undefined' ) {
if ( typeof parser . yy . result . suggestJoinConditions . tables === 'undefined' || parser . yy . result . suggestJoinConditions . tables . length === 0 ) {
delete parser . yy . result . suggestJoinConditions ;
}
}
if ( typeof parser . yy . result . suggestTables !== 'undefined' && typeof parser . yy . latestCommonTableExpressions !== 'undefined' ) {
var ctes = [ ] ;
parser . yy . latestCommonTableExpressions . forEach ( function ( cte ) {
var suggestion = { name : cte . alias } ;
if ( parser . yy . result . suggestTables . prependFrom ) {
suggestion . prependFrom = true
}
if ( parser . yy . result . suggestTables . prependQuestionMark ) {
suggestion . prependQuestionMark = true ;
}
ctes . push ( suggestion ) ;
} ) ;
if ( ctes . length > 0 ) {
parser . yy . result . suggestCommonTableExpressions = ctes ;
}
}
} ;
/ * *
* Impala supports referencing maps and arrays in the the table reference list i . e .
*
* SELECT m [ 'foo' ] . bar . | FROM someDb . someTable t , t . someMap m ;
*
* From this the tablePrimaries would look like :
*
* [ { alias : 't' , identifierChain : [ { name : 'someDb' } , { name : 'someTable' } ] } ,
* { alias : 'm' , identifierChain : [ { name : 't' } , { name : 'someMap' } ] } ]
*
* with an identifierChain from the select list :
*
* [ { name : 'm' , keySet : true } , { name : 'bar' } ]
*
* Calling this would return an expanded identifierChain , given the above it would be :
*
* [ { name : 't' } , { name : 'someMap' , keySet : true } , { name : 'bar' } ]
* /
parser . expandImpalaIdentifierChain = function ( tablePrimaries , identifierChain ) {
var expandedChain = identifierChain . concat ( ) ; // Clone in case it's called multiple times.
if ( typeof expandedChain === 'undefined' || expandedChain . length === 0 ) {
return identifierChain ;
}
var expand = function ( identifier , expandedChain ) {
var foundPrimary = tablePrimaries . filter ( function ( tablePrimary ) {
var primaryIdentifier = tablePrimary . alias ;
if ( ! primaryIdentifier && tablePrimary . identifierChain && tablePrimary . identifierChain . length > 0 ) {
primaryIdentifier = tablePrimary . identifierChain [ tablePrimary . identifierChain . length - 1 ] . name ;
}
return equalIgnoreCase ( primaryIdentifier , identifier ) ;
} ) ;
if ( foundPrimary . length === 1 && foundPrimary [ 0 ] . identifierChain ) {
var parentPrimary = tablePrimaries . filter ( function ( tablePrimary ) {
return equalIgnoreCase ( tablePrimary . alias , foundPrimary [ 0 ] . identifierChain [ 0 ] . name ) ;
} ) ;
if ( parentPrimary . length === 1 ) {
var keySet = expandedChain [ 0 ] . keySet ;
var secondPart = expandedChain . slice ( 1 ) ;
var firstPart = [ ] ;
// Clone to make sure we don't add keySet to the primaries
foundPrimary [ 0 ] . identifierChain . forEach ( function ( identifier ) {
firstPart . push ( { name : identifier . name } ) ;
} ) ;
if ( keySet && firstPart . length > 0 ) {
firstPart [ firstPart . length - 1 ] . keySet = true ;
}
if ( firstPart . length === 0 || typeof secondPart === 'undefined' || secondPart . length === 0 ) {
return firstPart ;
}
var result = firstPart . concat ( secondPart ) ;
if ( result . length > 0 ) {
return expand ( firstPart [ 0 ] . name , result ) ;
} else {
return result ;
}
}
}
return expandedChain ;
} ;
return expand ( expandedChain [ 0 ] . name , expandedChain ) ;
} ;
parser . identifyPartials = function ( beforeCursor , afterCursor ) {
var beforeMatch = beforeCursor . match ( /[0-9a-zA-Z_]*$/ ) ;
var afterMatch = afterCursor . match ( /^[0-9a-zA-Z_]*(?:\((?:[^)]*\))?)?/ ) ;
return { left : beforeMatch ? beforeMatch [ 0 ] . length : 0 , right : afterMatch ? afterMatch [ 0 ] . length : 0 } ;
} ;
parser . expandLateralViews = function ( lateralViews , originalIdentifierChain , columnSuggestion ) {
var identifierChain = originalIdentifierChain . concat ( ) ; // Clone in case it's re-used
var firstIdentifier = identifierChain [ 0 ] ;
if ( typeof lateralViews !== 'undefined' ) {
lateralViews . concat ( ) . reverse ( ) . forEach ( function ( lateralView ) {
if ( ! lateralView . udtf . expression . columnReference ) {
return ;
}
if ( equalIgnoreCase ( firstIdentifier . name , lateralView . tableAlias ) && identifierChain . length > 1 ) {
identifierChain . shift ( ) ;
firstIdentifier = identifierChain [ 0 ] ;
if ( columnSuggestion ) {
delete parser . yy . result . suggestKeywords ;
}
} else if ( equalIgnoreCase ( firstIdentifier . name , lateralView . tableAlias ) && identifierChain . length === 1 && typeof parser . yy . result . suggestColumns !== 'undefined' ) {
if ( columnSuggestion ) {
if ( typeof parser . yy . result . suggestIdentifiers === 'undefined' ) {
parser . yy . result . suggestIdentifiers = [ ] ;
}
lateralView . columnAliases . forEach ( function ( columnAlias ) {
parser . yy . result . suggestIdentifiers . push ( { name : columnAlias , type : 'alias' } ) ;
} ) ;
delete parser . yy . result . suggestColumns ;
delete parser . yy . result . suggestKeywords ;
}
return identifierChain ;
}
if ( lateralView . columnAliases . indexOf ( firstIdentifier . name ) !== - 1 ) {
if ( lateralView . columnAliases . length === 2 && lateralView . udtf . function . toLowerCase ( ) === 'explode' && equalIgnoreCase ( firstIdentifier . name , lateralView . columnAliases [ 0 ] ) ) {
identifierChain [ 0 ] = { name : 'key' } ;
} else if ( lateralView . columnAliases . length === 2 && lateralView . udtf . function . toLowerCase ( ) === 'explode' && equalIgnoreCase ( firstIdentifier . name , lateralView . columnAliases [ 1 ] ) ) {
identifierChain [ 0 ] = { name : 'value' } ;
} else {
identifierChain [ 0 ] = { name : 'item' } ;
}
identifierChain = lateralView . udtf . expression . columnReference . concat ( identifierChain ) ;
firstIdentifier = identifierChain [ 0 ] ;
}
} ) ;
}
return identifierChain ;
} ;
var addCleanTablePrimary = function ( tables , tablePrimary ) {
if ( tablePrimary . alias ) {
tables . push ( { alias : tablePrimary . alias , identifierChain : tablePrimary . identifierChain } ) ;
} else {
tables . push ( { identifierChain : tablePrimary . identifierChain } ) ;
}
} ;
parser . expandIdentifierChain = function ( options ) {
var wrapper = options . wrapper ;
var anyOwner = options . anyOwner ;
var isColumnWrapper = options . isColumnWrapper ;
var isColumnLocation = options . isColumnLocation ;
var tablePrimaries = options . tablePrimaries || parser . yy . latestTablePrimaries ;
if ( typeof wrapper . identifierChain === 'undefined' || typeof tablePrimaries === 'undefined' ) {
return ;
}
var identifierChain = wrapper . identifierChain . concat ( ) ;
if ( tablePrimaries . length === 0 ) {
delete wrapper . identifierChain ;
return ;
}
if ( ! anyOwner ) {
tablePrimaries = filterTablePrimariesForOwner ( tablePrimaries , wrapper . owner ) ;
}
if ( identifierChain . length > 0 && identifierChain [ identifierChain . length - 1 ] . asterisk ) {
var tables = [ ] ;
tablePrimaries . forEach ( function ( tablePrimary ) {
if ( identifierChain . length > 1 && ! tablePrimary . subQueryAlias ) {
if ( identifierChain . length === 2 && equalIgnoreCase ( tablePrimary . alias , identifierChain [ 0 ] . name ) ) {
addCleanTablePrimary ( tables , tablePrimary ) ;
} else if ( identifierChain . length === 2 && equalIgnoreCase ( tablePrimary . identifierChain [ 0 ] . name , identifierChain [ 0 ] . name ) ) {
addCleanTablePrimary ( tables , tablePrimary ) ;
} else if ( identifierChain . length === 3 && tablePrimary . identifierChain . length > 1 &&
equalIgnoreCase ( tablePrimary . identifierChain [ 0 ] . name , identifierChain [ 0 ] . name ) &&
equalIgnoreCase ( tablePrimary . identifierChain [ 1 ] . name , identifierChain [ 1 ] . name ) ) {
addCleanTablePrimary ( tables , tablePrimary ) ;
}
} else {
if ( tablePrimary . subQueryAlias ) {
tables . push ( { identifierChain : [ { subQuery : tablePrimary . subQueryAlias } ] } ) ;
} else {
addCleanTablePrimary ( tables , tablePrimary ) ;
}
}
} ) ;
// Possible Joins
if ( tables . length > 0 ) {
wrapper . tables = tables ;
delete wrapper . identifierChain ;
return ;
}
}
// Impala can have references to maps or array, i.e. FROM table t, t.map m
// We need to replace those in the identifierChain
if ( parser . isImpala ( ) ) {
var lengthBefore = identifierChain . length ;
identifierChain = parser . expandImpalaIdentifierChain ( tablePrimaries , identifierChain ) ;
// Change type of any locations marked as table
if ( wrapper . type === 'table' && identifierChain . length > lengthBefore ) {
wrapper . type = 'column' ;
}
wrapper . identifierChain = identifierChain ;
}
// Expand exploded views in the identifier chain
if ( parser . isHive ( ) && identifierChain . length > 0 ) {
identifierChain = parser . expandLateralViews ( parser . yy . lateralViews , identifierChain ) ;
wrapper . identifierChain = identifierChain ;
}
// IdentifierChain contains a possibly started identifier or empty, example: a.b.c = ['a', 'b', 'c']
// Reduce the tablePrimaries to the one that matches the first identifier if found
var foundPrimary ;
var doubleMatch = false ;
var aliasMatch = false ;
if ( identifierChain . length > 0 ) {
for ( var i = 0 ; i < tablePrimaries . length ; i ++ ) {
if ( tablePrimaries [ i ] . subQueryAlias ) {
if ( equalIgnoreCase ( tablePrimaries [ i ] . subQueryAlias , identifierChain [ 0 ] . name ) ) {
foundPrimary = tablePrimaries [ i ] ;
}
} else if ( equalIgnoreCase ( tablePrimaries [ i ] . alias , identifierChain [ 0 ] . name ) ) {
foundPrimary = tablePrimaries [ i ] ;
aliasMatch = true ;
break ;
} else if ( tablePrimaries [ i ] . identifierChain . length > 1 && identifierChain . length > 1 &&
equalIgnoreCase ( tablePrimaries [ i ] . identifierChain [ 0 ] . name , identifierChain [ 0 ] . name ) &&
equalIgnoreCase ( tablePrimaries [ i ] . identifierChain [ 1 ] . name , identifierChain [ 1 ] . name ) ) {
foundPrimary = tablePrimaries [ i ] ;
doubleMatch = true ;
break ;
} else if ( ! foundPrimary && equalIgnoreCase ( tablePrimaries [ i ] . identifierChain [ 0 ] . name , identifierChain [ 0 ] . name ) && identifierChain . length > ( isColumnLocation ? 1 : 0 ) ) {
foundPrimary = tablePrimaries [ i ] ;
// No break as first two can still match.
} else if ( ! foundPrimary && tablePrimaries [ i ] . identifierChain . length > 1 && ! tablePrimaries [ i ] . alias
&& equalIgnoreCase ( tablePrimaries [ i ] . identifierChain [ tablePrimaries [ i ] . identifierChain . length - 1 ] . name , identifierChain [ 0 ] . name ) ) {
// This is for the case SELECT baa. FROM bla.baa, blo.boo;
foundPrimary = tablePrimaries [ i ] ;
break ;
}
}
}
if ( foundPrimary ) {
if ( foundPrimary . impalaComplex && wrapper . type === 'column' ) {
wrapper . type = 'complex' ;
}
identifierChain . shift ( ) ;
if ( doubleMatch ) {
identifierChain . shift ( ) ;
}
} else if ( tablePrimaries . length === 1 && ! isColumnWrapper ) {
foundPrimary = tablePrimaries [ 0 ] ;
}
if ( foundPrimary ) {
if ( isColumnWrapper ) {
wrapper . identifierChain = identifierChain ;
if ( foundPrimary . subQueryAlias ) {
wrapper . tables = [ { subQuery : foundPrimary . subQueryAlias } ] ;
} else if ( foundPrimary . alias ) {
if ( ! isColumnLocation && isColumnWrapper && aliasMatch ) {
// TODO: add alias on table in suggestColumns (needs support in sqlAutocomplete3.js)
// the case is: SELECT cu.| FROM customers cu;
// This prevents alias from being added automatically in sqlAutocompleter3.js
wrapper . tables = [ { identifierChain : foundPrimary . identifierChain } ] ;
} else {
wrapper . tables = [ { identifierChain : foundPrimary . identifierChain , alias : foundPrimary . alias } ] ;
}
} else {
wrapper . tables = [ { identifierChain : foundPrimary . identifierChain } ] ;
}
} else {
if ( foundPrimary . subQueryAlias ) {
identifierChain . unshift ( { subQuery : foundPrimary . subQueryAlias } ) ;
} else {
identifierChain = foundPrimary . identifierChain . concat ( identifierChain ) ;
}
if ( wrapper . tables ) {
wrapper . tables . push ( { identifierChain : identifierChain } ) ;
delete wrapper . identifierChain ;
} else {
wrapper . identifierChain = identifierChain ;
}
}
} else {
if ( isColumnWrapper ) {
wrapper . tables = [ ] ;
}
tablePrimaries . forEach ( function ( tablePrimary ) {
var targetTable = tablePrimary . subQueryAlias ? { subQuery : tablePrimary . subQueryAlias } : { identifierChain : tablePrimary . identifierChain } ;
if ( tablePrimary . alias ) {
targetTable . alias = tablePrimary . alias ;
}
if ( wrapper . tables ) {
wrapper . tables . push ( targetTable )
}
} ) ;
}
delete wrapper . owner ;
wrapper . linked = true ;
} ;
var suggestLateralViewAliasesAsIdentifiers = function ( ) {
if ( typeof parser . yy . lateralViews === 'undefined' || parser . yy . lateralViews . length === 0 ) {
return ;
}
if ( typeof parser . yy . result . suggestIdentifiers === 'undefined' ) {
parser . yy . result . suggestIdentifiers = [ ] ;
}
parser . yy . lateralViews . forEach ( function ( lateralView ) {
if ( typeof lateralView . tableAlias !== 'undefined' ) {
parser . yy . result . suggestIdentifiers . push ( { name : lateralView . tableAlias + '.' , type : 'alias' } ) ;
}
lateralView . columnAliases . forEach ( function ( columnAlias ) {
parser . yy . result . suggestIdentifiers . push ( { name : columnAlias , type : 'alias' } ) ;
} ) ;
} ) ;
if ( parser . yy . result . suggestIdentifiers . length === 0 ) {
delete parser . yy . result . suggestIdentifiers ;
}
} ;
var filterTablePrimariesForOwner = function ( tablePrimaries , owner ) {
var result = [ ] ;
tablePrimaries . forEach ( function ( primary ) {
if ( typeof owner === 'undefined' && typeof primary . owner === 'undefined' ) {
result . push ( primary ) ;
} else if ( owner === primary . owner ) {
result . push ( primary ) ;
}
} ) ;
return result ;
} ;
var convertTablePrimariesToSuggestions = function ( tablePrimaries ) {
var tables = [ ] ;
var identifiers = [ ] ;
tablePrimaries . forEach ( function ( tablePrimary ) {
if ( tablePrimary . identifierChain && tablePrimary . identifierChain . length > 0 ) {
var table = { identifierChain : tablePrimary . identifierChain } ;
if ( tablePrimary . alias ) {
table . alias = tablePrimary . alias ;
identifiers . push ( { name : table . alias + '.' , type : 'alias' } ) ;
if ( parser . isImpala ( ) ) {
var testForImpalaAlias = [ { name : table . alias } ] ;
var result = parser . expandImpalaIdentifierChain ( tablePrimaries , testForImpalaAlias ) ;
if ( result . length > 1 ) {
// Continue if it's a reference to a complex type
return ;
}
}
} else {
var lastIdentifier = tablePrimary . identifierChain [ tablePrimary . identifierChain . length - 1 ] ;
if ( typeof lastIdentifier . name !== 'undefined' ) {
identifiers . push ( { name : lastIdentifier . name + '.' , type : 'table' } ) ;
} else if ( typeof lastIdentifier . subQuery !== 'undefined' ) {
identifiers . push ( { name : lastIdentifier . subQuery + '.' , type : 'sub-query' } ) ;
}
}
tables . push ( table ) ;
} else if ( tablePrimary . subQueryAlias ) {
identifiers . push ( { name : tablePrimary . subQueryAlias + '.' , type : 'sub-query' } ) ;
tables . push ( { identifierChain : [ { subQuery : tablePrimary . subQueryAlias } ] } ) ;
}
} ) ;
if ( identifiers . length > 0 ) {
if ( typeof parser . yy . result . suggestIdentifiers === 'undefined' ) {
parser . yy . result . suggestIdentifiers = identifiers ;
} else {
parser . yy . result . suggestIdentifiers = identifiers . concat ( parser . yy . result . suggestIdentifiers ) ;
}
}
parser . yy . result . suggestColumns . tables = tables ;
if ( parser . yy . result . suggestColumns . identifierChain && parser . yy . result . suggestColumns . identifierChain . length === 0 ) {
delete parser . yy . result . suggestColumns . identifierChain ;
}
parser . yy . result . suggestColumns . linked = true ;
} ;
var linkTablePrimaries = function ( ) {
if ( ! parser . yy . cursorFound || typeof parser . yy . latestTablePrimaries === 'undefined' ) {
return ;
}
SIMPLE _TABLE _REF _SUGGESTIONS . forEach ( function ( suggestionType ) {
if ( typeof parser . yy . result [ suggestionType ] !== 'undefined' && parser . yy . result [ suggestionType ] . tablePrimaries && ! parser . yy . result [ suggestionType ] . linked ) {
parser . yy . result [ suggestionType ] . tables = [ ] ;
parser . yy . result [ suggestionType ] . tablePrimaries . forEach ( function ( tablePrimary ) {
if ( ! tablePrimary . subQueryAlias ) {
parser . yy . result [ suggestionType ] . tables . push ( tablePrimary . alias ? {
identifierChain : tablePrimary . identifierChain . concat ( ) ,
alias : tablePrimary . alias
} : { identifierChain : tablePrimary . identifierChain . concat ( ) } ) ;
}
} ) ;
delete parser . yy . result [ suggestionType ] . tablePrimaries ;
parser . yy . result [ suggestionType ] . linked = true ;
}
} ) ;
if ( typeof parser . yy . result . suggestColumns !== 'undefined' && ! parser . yy . result . suggestColumns . linked ) {
var tablePrimaries = filterTablePrimariesForOwner ( parser . yy . latestTablePrimaries , parser . yy . result . suggestColumns . owner ) ;
if ( ! parser . yy . result . suggestColumns . tables ) {
parser . yy . result . suggestColumns . tables = [ ] ;
}
if ( parser . yy . subQueries . length > 0 ) {
parser . yy . result . subQueries = parser . yy . subQueries ;
}
if ( typeof parser . yy . result . suggestColumns . identifierChain === 'undefined' || parser . yy . result . suggestColumns . identifierChain . length === 0 ) {
if ( tablePrimaries . length > 1 ) {
convertTablePrimariesToSuggestions ( tablePrimaries ) ;
} else {
suggestLateralViewAliasesAsIdentifiers ( ) ;
if ( tablePrimaries . length === 1 && ( tablePrimaries [ 0 ] . alias || tablePrimaries [ 0 ] . subQueryAlias ) ) {
convertTablePrimariesToSuggestions ( tablePrimaries ) ;
}
parser . expandIdentifierChain ( { wrapper : parser . yy . result . suggestColumns , anyOwner : false , isColumnWrapper : true } ) ;
}
} else {
// Expand exploded views in the identifier chain
if ( parser . isHive ( ) && ! parser . yy . result . suggestColumns . linked ) {
var originalLength = parser . yy . result . suggestColumns . identifierChain . length ;
parser . yy . result . suggestColumns . identifierChain = parser . expandLateralViews ( parser . yy . lateralViews , parser . yy . result . suggestColumns . identifierChain , true ) ;
// Drop '*' keyword for lateral views
if ( typeof parser . yy . result . suggestColumns !== 'undefined' ) {
if ( parser . yy . result . suggestColumns . identifierChain . length > originalLength &&
typeof parser . yy . result . suggestKeywords !== 'undefined' &&
parser . yy . result . suggestKeywords . length === 1 &&
parser . yy . result . suggestKeywords [ 0 ] . value === '*' ) {
delete parser . yy . result . suggestKeywords ;
}
parser . expandIdentifierChain ( { wrapper : parser . yy . result . suggestColumns , anyOwner : false , isColumnWrapper : true } ) ;
}
} else {
parser . expandIdentifierChain ( { wrapper : parser . yy . result . suggestColumns , anyOwner : false , isColumnWrapper : true } ) ;
}
}
}
if ( typeof parser . yy . result . colRef !== 'undefined' && ! parser . yy . result . colRef . linked ) {
parser . expandIdentifierChain ( { wrapper : parser . yy . result . colRef } ) ;
var primaries = filterTablePrimariesForOwner ( parser . yy . latestTablePrimaries ) ;
if ( primaries . length === 0 || ( primaries . length > 1 && parser . yy . result . colRef . identifierChain . length === 1 ) ) {
parser . yy . result . colRef . identifierChain = [ ] ;
}
}
if ( typeof parser . yy . result . suggestKeyValues !== 'undefined' && ! parser . yy . result . suggestKeyValues . linked ) {
parser . expandIdentifierChain ( { wrapper : parser . yy . result . suggestKeyValues } ) ;
}
} ;
parser . getSubQuery = function ( cols ) {
var columns = [ ] ;
cols . selectList . forEach ( function ( col ) {
var result = { } ;
if ( col . alias ) {
result . alias = col . alias ;
}
if ( col . valueExpression && col . valueExpression . columnReference ) {
result . identifierChain = col . valueExpression . columnReference
} else if ( col . asterisk ) {
result . identifierChain = [ { asterisk : true } ] ;
}
if ( col . valueExpression && col . valueExpression . types && col . valueExpression . types . length === 1 ) {
result . type = col . valueExpression . types [ 0 ] ;
}
columns . push ( result ) ;
} ) ;
return {
columns : columns
} ;
} ;
parser . addTablePrimary = function ( ref ) {
if ( typeof parser . yy . latestTablePrimaries === 'undefined' ) {
parser . yy . latestTablePrimaries = [ ] ;
}
parser . yy . latestTablePrimaries . push ( ref ) ;
} ;
parser . suggestFileFormats = function ( ) {
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'AVRO' , 'INPUTFORMAT' , 'ORC' , 'PARQUET' , 'RCFILE' , 'SEQUENCEFILE' , 'TEXTFILE' ] ) ;
} else {
parser . suggestKeywords ( [ 'AVRO' , 'KUDU' , 'ORC' , 'PARQUET' , 'RCFILE' , 'SEQUENCEFILE' , 'TEXTFILE' ] ) ;
}
} ;
parser . getKeywordsForOptionalsLR = function ( optionals , keywords , override ) {
var result = [ ] ;
for ( var i = 0 ; i < optionals . length ; i ++ ) {
if ( ! optionals [ i ] && ( typeof override === 'undefined' || override [ i ] ) ) {
if ( keywords [ i ] instanceof Array ) {
result = result . concat ( keywords [ i ] ) ;
} else {
result . push ( keywords [ i ] ) ;
}
} else if ( optionals [ i ] ) {
break ;
}
}
return result ;
} ;
parser . suggestDdlAndDmlKeywords = function ( extraKeywords ) {
var keywords = [ 'ALTER' , 'CREATE' , 'DESCRIBE' , 'DROP' , 'GRANT' , 'INSERT' , 'REVOKE' , 'SELECT' , 'SET' , 'SHOW' , 'TRUNCATE' , 'UPDATE' , 'USE' , 'WITH' ] ;
if ( extraKeywords ) {
keywords = keywords . concat ( extraKeywords ) ;
}
if ( parser . isHive ( ) ) {
keywords = keywords . concat ( [ 'ABORT' , 'ANALYZE TABLE' , 'DELETE' , 'EXPORT' , 'IMPORT' , 'LOAD' , 'MERGE' , 'MSCK' , 'RELOAD FUNCTION' , 'RESET' ] ) ;
}
if ( parser . isImpala ( ) ) {
keywords = keywords . concat ( [ 'COMMENT ON' , 'COMPUTE' , 'DELETE' , 'INVALIDATE METADATA' , 'LOAD' , 'REFRESH' , 'UPSERT' ] ) ;
}
parser . suggestKeywords ( keywords ) ;
} ;
parser . checkForSelectListKeywords = function ( selectList ) {
if ( selectList . length === 0 ) {
return ;
}
var last = selectList [ selectList . length - 1 ] ;
if ( ! last || ! last . valueExpression ) {
return ;
}
var valueExpressionKeywords = parser . getValueExpressionKeywords ( last . valueExpression ) ;
var keywords = [ ] ;
if ( last . suggestKeywords ) {
keywords = keywords . concat ( last . suggestKeywords ) ;
}
if ( valueExpressionKeywords . suggestKeywords ) {
keywords = keywords . concat ( valueExpressionKeywords . suggestKeywords ) ;
}
if ( valueExpressionKeywords . suggestColRefKeywords ) {
parser . suggestColRefKeywords ( valueExpressionKeywords . suggestColRefKeywords ) ;
parser . addColRefIfExists ( last . valueExpression ) ;
}
if ( ! last . alias ) {
keywords . push ( 'AS' ) ;
}
if ( keywords . length > 0 ) {
parser . suggestKeywords ( keywords ) ;
}
} ;
parser . checkForKeywords = function ( expression ) {
if ( expression ) {
if ( expression . suggestKeywords && expression . suggestKeywords . length > 0 ) {
parser . suggestKeywords ( expression . suggestKeywords ) ;
}
if ( expression . suggestColRefKeywords ) {
parser . suggestColRefKeywords ( expression . suggestColRefKeywords ) ;
parser . addColRefIfExists ( expression ) ;
}
}
} ;
parser . createWeightedKeywords = function ( keywords , weight ) {
var result = [ ] ;
keywords . forEach ( function ( keyword ) {
if ( typeof keyword . weight !== 'undefined' ) {
keyword . weight = weight + ( keyword . weight / 10 ) ;
result . push ( keyword ) ;
} else {
result . push ( { value : keyword , weight : weight } ) ;
}
} ) ;
return result ;
} ;
parser . suggestKeywords = function ( keywords ) {
var weightedKeywords = [ ] ;
if ( keywords . length == 0 ) {
return ;
}
keywords . forEach ( function ( keyword ) {
if ( typeof keyword . weight !== 'undefined' ) {
weightedKeywords . push ( keyword ) ;
} else {
weightedKeywords . push ( { value : keyword , weight : - 1 } )
}
} ) ;
weightedKeywords . sort ( function ( a , b ) {
if ( a . weight !== b . weight ) {
return b . weight - a . weight ;
}
return a . value . localeCompare ( b . value ) ;
} ) ;
parser . yy . result . suggestKeywords = weightedKeywords ;
} ;
parser . suggestColRefKeywords = function ( colRefKeywords ) {
parser . yy . result . suggestColRefKeywords = colRefKeywords ;
} ;
parser . suggestTablesOrColumns = function ( identifier ) {
if ( typeof parser . yy . latestTablePrimaries == 'undefined' ) {
parser . suggestTables ( { identifierChain : [ { name : identifier } ] } ) ;
return ;
}
var tableRef = parser . yy . latestTablePrimaries . filter ( function ( tablePrimary ) {
return equalIgnoreCase ( tablePrimary . alias , identifier ) ;
} ) ;
if ( tableRef . length > 0 ) {
parser . suggestColumns ( { identifierChain : [ { name : identifier } ] } ) ;
} else {
parser . suggestTables ( { identifierChain : [ { name : identifier } ] } ) ;
}
} ;
parser . suggestFunctions = function ( details ) {
parser . yy . result . suggestFunctions = details || { } ;
} ;
parser . suggestAggregateFunctions = function ( ) {
var primaries = [ ] ;
var aliases = { } ;
parser . yy . latestTablePrimaries . forEach ( function ( primary ) {
if ( typeof primary . alias !== 'undefined' ) {
aliases [ primary . alias ] = true ;
}
// Drop if the first one refers to a table alias (...FROM tbl t, t.map tm ...)
if ( typeof primary . identifierChain !== 'undefined' && ! aliases [ primary . identifierChain [ 0 ] . name ] && typeof primary . owner === 'undefined' ) {
primaries . push ( primary ) ;
}
} ) ;
parser . yy . result . suggestAggregateFunctions = { tablePrimaries : primaries } ;
} ;
parser . suggestAnalyticFunctions = function ( ) {
parser . yy . result . suggestAnalyticFunctions = true ;
} ;
parser . suggestSetOptions = function ( ) {
parser . yy . result . suggestSetOptions = true ;
} ;
parser . suggestIdentifiers = function ( identifiers ) {
parser . yy . result . suggestIdentifiers = identifiers ;
} ;
parser . suggestColumns = function ( details ) {
if ( typeof details === 'undefined' ) {
details = { identifierChain : [ ] } ;
} else if ( typeof details . identifierChain === 'undefined' ) {
details . identifierChain = [ ] ;
}
parser . yy . result . suggestColumns = details ;
} ;
parser . suggestGroupBys = function ( details ) {
parser . yy . result . suggestGroupBys = details || { } ;
} ;
parser . suggestOrderBys = function ( details ) {
parser . yy . result . suggestOrderBys = details || { } ;
} ;
parser . suggestFilters = function ( details ) {
parser . yy . result . suggestFilters = details || { } ;
} ;
parser . suggestKeyValues = function ( details ) {
parser . yy . result . suggestKeyValues = details || { } ;
} ;
parser . suggestTables = function ( details ) {
parser . yy . result . suggestTables = details || { } ;
} ;
var adjustLocationForCursor = function ( location ) {
// columns are 0-based and lines not, so add 1 to cols
var newLocation = {
first _line : location . first _line ,
last _line : location . last _line ,
first _column : location . first _column + 1 ,
last _column : location . last _column + 1
} ;
if ( parser . yy . cursorFound ) {
if ( parser . yy . cursorFound . first _line === newLocation . first _line && parser . yy . cursorFound . last _column <= newLocation . first _column ) {
var additionalSpace = parser . yy . partialLengths . left + parser . yy . partialLengths . right ;
additionalSpace -= parser . yy . partialCursor ? 1 : 3 ; // For some reason the normal cursor eats 3 positions.
newLocation . first _column = newLocation . first _column + additionalSpace ;
newLocation . last _column = newLocation . last _column + additionalSpace ;
}
}
return newLocation ;
} ;
parser . addFunctionLocation = function ( location , functionName ) {
// Remove trailing '(' from location
var adjustedLocation = {
first _line : location . first _line ,
last _line : location . last _line ,
first _column : location . first _column ,
last _column : location . last _column - 1
} ;
parser . yy . locations . push ( {
type : 'function' ,
location : adjustLocationForCursor ( adjustedLocation ) ,
function : functionName . toLowerCase ( )
} ) ;
} ;
parser . addStatementLocation = function ( location ) {
// Don't report lonely cursor as a statement
if ( location . first _line === location . last _line && Math . abs ( location . last _column - location . first _column ) === 1 ) {
return ;
}
var adjustedLocation ;
if ( parser . yy . cursorFound && parser . yy . cursorFound . last _line === location . last _line &&
parser . yy . cursorFound . first _column >= location . first _column && parser . yy . cursorFound . last _column <= location . last _column ) {
var additionalSpace = parser . yy . partialLengths . left + parser . yy . partialLengths . right ;
adjustedLocation = {
first _line : location . first _line ,
last _line : location . last _line ,
first _column : location . first _column + 1 ,
last _column : location . last _column + additionalSpace - ( parser . yy . partialCursor ? 0 : 2 )
}
} else {
adjustedLocation = {
first _line : location . first _line ,
last _line : location . last _line ,
first _column : location . first _column + 1 ,
last _column : location . last _column + 1
}
}
parser . yy . locations . push ( {
type : 'statement' ,
location : adjustedLocation
} ) ;
} ;
parser . firstDefined = function ( ) {
for ( var i = 0 ; i + 1 < arguments . length ; i += 2 ) {
if ( arguments [ i ] ) {
return arguments [ i + 1 ] ;
}
}
} ;
parser . addClauseLocation = function ( type , precedingLocation , locationIfPresent , isCursor ) {
var location ;
if ( isCursor ) {
if ( parser . yy . partialLengths . left === 0 && parser . yy . partialLengths . right === 0 ) {
location = {
type : type ,
missing : true ,
location : adjustLocationForCursor ( {
first _line : precedingLocation . last _line ,
first _column : precedingLocation . last _column ,
last _line : precedingLocation . last _line ,
last _column : precedingLocation . last _column
} )
}
} else {
location = {
type : type ,
missing : false ,
location : {
first _line : locationIfPresent . last _line ,
first _column : locationIfPresent . last _column - 1 ,
last _line : locationIfPresent . last _line ,
last _column : locationIfPresent . last _column - 1 + parser . yy . partialLengths . right + parser . yy . partialLengths . left
}
}
}
} else {
location = {
type : type ,
missing : ! locationIfPresent ,
location : adjustLocationForCursor ( locationIfPresent || {
first _line : precedingLocation . last _line ,
first _column : precedingLocation . last _column ,
last _line : precedingLocation . last _line ,
last _column : precedingLocation . last _column
} )
} ;
}
if ( parser . isInSubquery ( ) ) {
location . subquery = true ;
}
parser . yy . locations . push ( location )
} ;
parser . addStatementTypeLocation = function ( identifier , location , additionalText ) {
if ( ! parser . isImpala ( ) ) {
return ;
}
var loc = {
type : 'statementType' ,
location : adjustLocationForCursor ( location ) ,
identifier : identifier
} ;
if ( typeof additionalText !== 'undefined' ) {
switch ( identifier ) {
case 'ALTER' :
if ( /ALTER\s+VIEW/i . test ( additionalText ) ) {
loc . identifier = 'ALTER VIEW' ;
} else {
loc . identifier = 'ALTER TABLE' ;
}
break ;
case 'COMPUTE' :
loc . identifier = 'COMPUTE STATS' ;
break ;
case 'CREATE' :
if ( /CREATE\s+VIEW/i . test ( additionalText ) ) {
loc . identifier = 'CREATE VIEW' ;
} else if ( /CREATE\s+TABLE/i . test ( additionalText ) ) {
loc . identifier = 'CREATE TABLE' ;
} else if ( /CREATE\s+DATABASE/i . test ( additionalText ) ) {
loc . identifier = 'CREATE DATABASE' ;
} else if ( /CREATE\s+ROLE/i . test ( additionalText ) ) {
loc . identifier = 'CREATE ROLE' ;
} else if ( /CREATE\s+FUNCTION/i . test ( additionalText ) ) {
loc . identifier = 'CREATE FUNCTION' ;
} else {
loc . identifier = 'CREATE TABLE' ;
}
break ;
case 'DROP' :
if ( /DROP\s+VIEW/i . test ( additionalText ) ) {
loc . identifier = 'DROP VIEW' ;
} else if ( /DROP\s+TABLE/i . test ( additionalText ) ) {
loc . identifier = 'DROP TABLE' ;
} else if ( /DROP\s+DATABASE/i . test ( additionalText ) ) {
loc . identifier = 'DROP DATABASE' ;
} else if ( /DROP\s+ROLE/i . test ( additionalText ) ) {
loc . identifier = 'DROP ROLE' ;
} else if ( /DROP\s+STATS/i . test ( additionalText ) ) {
loc . identifier = 'DROP STATS' ;
} else if ( /DROP\s+FUNCTION/i . test ( additionalText ) ) {
loc . identifier = 'DROP FUNCTION' ;
} else {
loc . identifier = 'DROP TABLE' ;
}
break ;
case 'INVALIDATE' :
loc . identifier = 'INVALIDATE METADATA' ;
break ;
case 'LOAD' :
loc . identifier = 'LOAD DATA' ;
break ;
case 'TRUNCATE' :
loc . identifier = 'TRUNCATE TABLE' ;
break ;
default :
}
}
parser . yy . locations . push ( loc ) ;
} ;
parser . addFileLocation = function ( location , path ) {
parser . yy . locations . push ( {
type : 'file' ,
location : adjustLocationForCursor ( location ) ,
path : path
} ) ;
} ;
parser . addDatabaseLocation = function ( location , identifierChain ) {
parser . yy . locations . push ( {
type : 'database' ,
location : adjustLocationForCursor ( location ) ,
identifierChain : identifierChain
} ) ;
} ;
parser . addTableLocation = function ( location , identifierChain ) {
parser . yy . locations . push ( {
type : 'table' ,
location : adjustLocationForCursor ( location ) ,
identifierChain : identifierChain
} ) ;
} ;
parser . addColumnAliasLocation = function ( location , alias , parentLocation ) {
var aliasLocation = {
type : 'alias' ,
source : 'column' ,
alias : alias ,
location : adjustLocationForCursor ( location ) ,
parentLocation : adjustLocationForCursor ( parentLocation )
} ;
if ( parser . yy . locations . length && parser . yy . locations [ parser . yy . locations . length - 1 ] . type === 'column' ) {
var closestColumn = parser . yy . locations [ parser . yy . locations . length - 1 ] ;
if ( closestColumn . location . first _line === aliasLocation . parentLocation . first _line &&
closestColumn . location . last _line === aliasLocation . parentLocation . last _line &&
closestColumn . location . first _column === aliasLocation . parentLocation . first _column &&
closestColumn . location . last _column === aliasLocation . parentLocation . last _column ) {
parser . yy . locations [ parser . yy . locations . length - 1 ] . alias = alias ;
}
}
parser . yy . locations . push ( aliasLocation ) ;
} ;
parser . addTableAliasLocation = function ( location , alias , identifierChain ) {
parser . yy . locations . push ( {
type : 'alias' ,
source : 'table' ,
alias : alias ,
location : adjustLocationForCursor ( location ) ,
identifierChain : identifierChain
} ) ;
} ;
parser . addSubqueryAliasLocation = function ( location , alias ) {
parser . yy . locations . push ( {
type : 'alias' ,
source : 'subquery' ,
alias : alias ,
location : adjustLocationForCursor ( location )
} ) ;
} ;
parser . addAsteriskLocation = function ( location , identifierChain ) {
parser . yy . locations . push ( {
type : 'asterisk' ,
location : adjustLocationForCursor ( location ) ,
identifierChain : identifierChain
} ) ;
} ;
parser . addVariableLocation = function ( location , value ) {
if ( /\$\{[^}]*\}/ . test ( value ) ) {
parser . yy . locations . push ( {
type : 'variable' ,
location : adjustLocationForCursor ( location ) ,
value : value
} ) ;
}
} ;
parser . addColumnLocation = function ( location , identifierChain ) {
var isVariable = identifierChain . length && /\$\{[^}]*\}/ . test ( identifierChain [ identifierChain . length - 1 ] . name ) ;
if ( isVariable ) {
parser . yy . locations . push ( {
type : 'variable' ,
location : adjustLocationForCursor ( location ) ,
value : identifierChain [ identifierChain . length - 1 ] . name
} ) ;
} else {
parser . yy . locations . push ( {
type : 'column' ,
location : adjustLocationForCursor ( location ) ,
identifierChain : identifierChain ,
qualified : identifierChain . length > 1
} ) ;
}
} ;
parser . addCteAliasLocation = function ( location , alias ) {
parser . yy . locations . push ( {
type : 'alias' ,
source : 'cte' ,
alias : alias ,
location : adjustLocationForCursor ( location )
} ) ;
} ;
parser . addUnknownLocation = function ( location , identifierChain ) {
var isVariable = identifierChain . length && /\$\{[^}]*\}/ . test ( identifierChain [ identifierChain . length - 1 ] . name ) ;
var loc ;
if ( isVariable ) {
loc = {
type : 'variable' ,
location : adjustLocationForCursor ( location ) ,
value : identifierChain [ identifierChain . length - 1 ] . name
} ;
} else {
loc = {
type : 'unknown' ,
location : adjustLocationForCursor ( location ) ,
identifierChain : identifierChain ,
qualified : identifierChain . length > 1
} ;
}
parser . yy . locations . push ( loc ) ;
return loc ;
} ;
parser . addColRefToVariableIfExists = function ( left , right ) {
if ( left && left . columnReference && left . columnReference . length && right && right . columnReference && right . columnReference . length && parser . yy . locations . length > 1 ) {
var addColRefToVariableLocation = function ( variableValue , colRef ) {
// See if colref is actually an alias
if ( colRef . length === 1 && colRef [ 0 ] . name ) {
parser . yy . locations . some ( function ( location ) {
if ( location . type === 'column' && location . alias === colRef [ 0 ] . name ) {
colRef = location . identifierChain ;
return true ;
}
} ) ;
}
for ( var i = parser . yy . locations . length - 1 ; i > 0 ; i -- ) {
var location = parser . yy . locations [ i ] ;
if ( location . type === 'variable' && location . value === variableValue ) {
location . colRef = { identifierChain : colRef } ;
break ;
}
}
} ;
if ( /\$\{[^}]*\}/ . test ( left . columnReference [ 0 ] . name ) ) {
// left is variable
addColRefToVariableLocation ( left . columnReference [ 0 ] . name , right . columnReference ) ;
} else if ( /\$\{[^}]*\}/ . test ( right . columnReference [ 0 ] . name ) ) {
// right is variable
addColRefToVariableLocation ( right . columnReference [ 0 ] . name , left . columnReference ) ;
}
}
} ;
parser . suggestDatabases = function ( details ) {
parser . yy . result . suggestDatabases = details || { } ;
} ;
parser . suggestHdfs = function ( details ) {
parser . yy . result . suggestHdfs = details || { } ;
} ;
parser . suggestValues = function ( details ) {
parser . yy . result . suggestValues = details || { } ;
} ;
parser . determineCase = function ( text ) {
if ( ! parser . yy . caseDetermined ) {
parser . yy . lowerCase = text . toLowerCase ( ) === text ;
parser . yy . caseDetermined = true ;
}
} ;
parser . handleQuotedValueWithCursor = function ( lexer , yytext , yylloc , quoteChar ) {
if ( yytext . indexOf ( '\u2020' ) !== - 1 || yytext . indexOf ( '\u2021' ) !== - 1 ) {
parser . yy . partialCursor = yytext . indexOf ( '\u2021' ) !== - 1 ;
var cursorIndex = parser . yy . partialCursor ? yytext . indexOf ( '\u2021' ) : yytext . indexOf ( '\u2020' ) ;
parser . yy . cursorFound = {
first _line : yylloc . first _line ,
last _line : yylloc . last _line ,
first _column : yylloc . first _column + cursorIndex ,
last _column : yylloc . first _column + cursorIndex + 1
} ;
var remainder = yytext . substring ( cursorIndex + 1 ) ;
var remainingQuotes = ( lexer . upcomingInput ( ) . match ( new RegExp ( quoteChar , 'g' ) ) || [ ] ) . length ;
if ( remainingQuotes > 0 && remainingQuotes & 1 != 0 ) {
parser . yy . missingEndQuote = false ;
lexer . input ( ) ;
} else {
parser . yy . missingEndQuote = true ;
lexer . unput ( remainder ) ;
}
lexer . popState ( ) ;
return true ;
}
return false ;
} ;
var lexerModified = false ;
/ * *
* Main parser function
* /
parser . parseSql = function ( beforeCursor , afterCursor , dialect , debug ) {
// Jison counts CRLF as two lines in the locations
beforeCursor = beforeCursor . replace ( /\r\n|\n\r/gm , '\n' ) ;
afterCursor = afterCursor . replace ( /\r\n|\n\r/gm , '\n' ) ;
parser . yy . result = { locations : [ ] } ;
parser . yy . lowerCase = false ;
parser . yy . locations = [ ] ;
parser . yy . allLocations = [ ] ;
parser . yy . subQueries = [ ] ;
parser . yy . errors = [ ] ;
parser . yy . selectListAliases = [ ] ;
parser . yy . locationsStack = [ ] ;
parser . yy . primariesStack = [ ] ;
parser . yy . lateralViewsStack = [ ] ;
parser . yy . subQueriesStack = [ ] ;
parser . yy . resultStack = [ ] ;
parser . yy . selectListAliasesStack = [ ] ;
delete parser . yy . caseDetermined ;
delete parser . yy . cursorFound ;
delete parser . yy . partialCursor ;
parser . prepareNewStatement ( ) ;
var REASONABLE _SURROUNDING _LENGTH = 150000 ; // About 3000 lines before and after
if ( beforeCursor . length > REASONABLE _SURROUNDING _LENGTH ) {
if ( ( beforeCursor . length - beforeCursor . lastIndexOf ( ';' ) ) > REASONABLE _SURROUNDING _LENGTH ) {
// Bail out if the last complete statement is more than 150000 chars before
return { } ;
}
// Cut it at the first statement found within 150000 chars before
var lastReasonableChunk = beforeCursor . substring ( beforeCursor . length - REASONABLE _SURROUNDING _LENGTH ) ;
beforeCursor = lastReasonableChunk . substring ( lastReasonableChunk . indexOf ( ';' ) + 1 ) ;
}
if ( afterCursor . length > REASONABLE _SURROUNDING _LENGTH ) {
if ( ( afterCursor . length - afterCursor . indexOf ( ';' ) ) > REASONABLE _SURROUNDING _LENGTH ) {
// No need to bail out for what's comes after, we can still get keyword completion
afterCursor = '' ;
} else {
// Cut it at the last statement found within 150000 chars after
var firstReasonableChunk = afterCursor . substring ( 0 , REASONABLE _SURROUNDING _LENGTH ) ;
afterCursor = firstReasonableChunk . substring ( 0 , firstReasonableChunk . lastIndexOf ( ';' ) ) ;
}
}
parser . yy . partialLengths = parser . identifyPartials ( beforeCursor , afterCursor ) ;
if ( parser . yy . partialLengths . left > 0 ) {
beforeCursor = beforeCursor . substring ( 0 , beforeCursor . length - parser . yy . partialLengths . left ) ;
}
if ( parser . yy . partialLengths . right > 0 ) {
afterCursor = afterCursor . substring ( parser . yy . partialLengths . right ) ;
}
parser . yy . activeDialect = ( dialect !== 'hive' && dialect !== 'impala' ) ? undefined : dialect ;
// Hack to set the inital state of the lexer without first having to hit a token
// has to be done as the first token found can be dependant on dialect
if ( ! lexerModified ) {
var originalSetInput = parser . lexer . setInput ;
parser . lexer . setInput = function ( input , yy ) {
var lexer = originalSetInput . bind ( parser . lexer ) ( input , yy ) ;
if ( typeof parser . yy . activeDialect !== 'undefined' ) {
lexer . begin ( parser . yy . activeDialect ) ;
}
return lexer ;
} ;
lexerModified = true ;
}
var result ;
try {
// Add |CURSOR| or |PARTIAL_CURSOR| to represent the different cursor states in the lexer
result = parser . parse ( beforeCursor + ( beforeCursor . length == 0 || /[\s\(]$$/ . test ( beforeCursor ) ? ' \u2020 ' : '\u2021' ) + afterCursor ) ;
} catch ( err ) {
// On any error try to at least return any existing result
if ( typeof parser . yy . result === 'undefined' ) {
throw err ;
}
if ( debug ) {
console . log ( err ) ;
console . error ( err . stack ) ;
}
result = parser . yy . result ;
}
if ( parser . yy . errors . length > 0 ) {
parser . yy . result . errors = parser . yy . errors ;
if ( debug ) {
console . log ( parser . yy . errors ) ;
}
}
try {
linkTablePrimaries ( ) ;
parser . commitLocations ( ) ;
// Clean up and prioritize
prioritizeSuggestions ( ) ;
} catch ( err ) {
if ( debug ) {
console . log ( err ) ;
console . error ( err . stack ) ;
}
}
parser . yy . allLocations . sort ( function ( a , b ) {
if ( a . location . first _line !== b . location . first _line ) {
return a . location . first _line - b . location . first _line ;
}
if ( a . location . first _column !== b . location . first _column ) {
return a . location . first _column - b . location . first _column ;
}
if ( a . location . last _column !== b . location . last _column ) {
return b . location . last _column - a . location . last _column ;
}
return b . type . localeCompare ( a . type ) ;
} ) ;
parser . yy . result . locations = parser . yy . allLocations ;
parser . yy . result . locations . forEach ( function ( location ) {
delete location . linked ;
} ) ;
if ( typeof parser . yy . result . suggestColumns !== 'undefined' ) {
delete parser . yy . result . suggestColumns . linked ;
}
SIMPLE _TABLE _REF _SUGGESTIONS . forEach ( function ( suggestionType ) {
if ( typeof parser . yy . result [ suggestionType ] !== 'undefined' ) {
delete parser . yy . result [ suggestionType ] . linked ;
}
} ) ;
if ( typeof parser . yy . result . colRef !== 'undefined' ) {
delete parser . yy . result . colRef . linked ;
}
if ( typeof parser . yy . result . suggestKeyValues !== 'undefined' ) {
delete parser . yy . result . suggestKeyValues . linked ;
}
if ( typeof result . error !== 'undefined' && typeof result . error . expected !== 'undefined' ) {
// Remove any expected tokens from other dialects, jison doesn't remove tokens from other lexer states.
var actualExpected = { } ;
result . error . expected . forEach ( function ( expected ) {
var match = expected . match ( /\<([a-z]+)\>(.*)/ ) ;
if ( match !== null ) {
if ( typeof parser . yy . activeDialect !== 'undefined' && parser . yy . activeDialect === match [ 1 ] ) {
actualExpected [ ( "'" + match [ 2 ] ) ] = true ;
}
} else if ( expected . indexOf ( 'CURSOR' ) == - 1 ) {
actualExpected [ expected ] = true ;
}
} ) ;
result . error . expected = Object . keys ( actualExpected ) ;
}
if ( typeof result . error !== 'undefined' && result . error . recoverable ) {
delete result . error ;
}
// Adjust all the statement locations to include white space surrounding them
var lastStatementLocation = null ;
result . locations . forEach ( function ( location ) {
if ( location . type === 'statement' ) {
if ( lastStatementLocation === null ) {
location . location . first _line = 1 ;
location . location . first _column = 1 ;
} else {
location . location . first _line = lastStatementLocation . location . last _line ;
location . location . first _column = lastStatementLocation . location . last _column + 1 ;
}
lastStatementLocation = location ;
}
} ) ;
return result ;
} ;
} ;
var SYNTAX _PARSER _NOOP _FUNCTIONS = [ 'prepareNewStatement' , 'addCommonTableExpressions' , 'pushQueryState' , 'popQueryState' , 'suggestSelectListAliases' ,
'suggestValueExpressionKeywords' , 'getSelectListKeywords' , 'getValueExpressionKeywords' , 'addColRefIfExists' , 'selectListNoTableSuggest' , 'suggestJoinConditions' ,
'suggestJoins' , 'valueExpressionSuggest' , 'applyTypeToSuggestions' , 'applyArgumentTypesToSuggestions' , 'commitLocations' , 'identifyPartials' ,
'getSubQuery' , 'addTablePrimary' , 'suggestFileFormats' , 'suggestDdlAndDmlKeywords' , 'checkForSelectListKeywords' , 'checkForKeywords' ,
'suggestKeywords' , 'suggestColRefKeywords' , 'suggestTablesOrColumns' , 'suggestFunctions' , 'suggestAggregateFunctions' , 'suggestAnalyticFunctions' ,
'suggestColumns' , 'suggestGroupBys' , 'suggestIdentifiers' , 'suggestOrderBys' , 'suggestFilters' , 'suggestKeyValues' , 'suggestTables' , 'addFunctionLocation' ,
'addStatementLocation' , 'firstDefined' , 'addClauseLocation' , 'addStatementTypeLocation' , 'addFileLocation' , 'addDatabaseLocation' , 'addColumnAliasLocation' ,
'addTableAliasLocation' , 'addSubqueryAliasLocation' , 'addTableLocation' , 'addAsteriskLocation' , 'addVariableLocation' , 'addColumnLocation' , 'addCteAliasLocation' ,
'addUnknownLocation' , 'addColRefToVariableIfExists' , 'suggestDatabases' , 'suggestHdfs' , 'suggestValues' ] ;
var SYNTAX _PARSER _NOOP = function ( ) { } ;
var initSyntaxParser = function ( parser ) {
// Noop functions for compatibility with the autocomplete parser as the grammar is shared
SYNTAX _PARSER _NOOP _FUNCTIONS . forEach ( function ( noopFn ) {
parser [ noopFn ] = SYNTAX _PARSER _NOOP
} ) ;
parser . yy . locations = [ { } ] ;
parser . determineCase = function ( text ) {
if ( ! parser . yy . caseDetermined ) {
parser . yy . lowerCase = text . toLowerCase ( ) === text ;
parser . yy . caseDetermined = true ;
}
} ;
parser . getKeywordsForOptionalsLR = function ( ) {
return [ ] ;
} ;
parser . mergeSuggestKeywords = function ( ) {
return { } ;
} ;
parser . getTypeKeywords = function ( ) {
return [ ] ;
} ;
parser . getColumnDataTypeKeywords = function ( ) {
return [ ] ;
} ;
parser . findCaseType = function ( ) {
return { types : [ 'T' ] } ;
} ;
parser . findReturnTypes = function ( functionName ) {
return [ 'T' ] ;
} ;
parser . isHive = function ( ) {
return parser . yy . activeDialect === 'hive' ;
} ;
parser . isImpala = function ( ) {
return parser . yy . activeDialect === 'impala' ;
} ;
parser . expandImpalaIdentifierChain = function ( ) {
return [ ] ;
} ;
parser . expandIdentifierChain = function ( ) {
return [ ] ;
} ;
parser . expandLateralViews = function ( ) {
return [ ] ;
} ;
parser . createWeightedKeywords = function ( ) {
return [ ] ;
} ;
parser . handleQuotedValueWithCursor = function ( lexer , yytext , yylloc , quoteChar ) {
if ( yytext . indexOf ( '\u2020' ) !== - 1 || yytext . indexOf ( '\u2021' ) !== - 1 ) {
parser . yy . partialCursor = yytext . indexOf ( '\u2021' ) !== - 1 ;
var cursorIndex = parser . yy . partialCursor ? yytext . indexOf ( '\u2021' ) : yytext . indexOf ( '\u2020' ) ;
parser . yy . cursorFound = {
first _line : yylloc . first _line ,
last _line : yylloc . last _line ,
first _column : yylloc . first _column + cursorIndex ,
last _column : yylloc . first _column + cursorIndex + 1
} ;
var remainder = yytext . substring ( cursorIndex + 1 ) ;
var remainingQuotes = ( lexer . upcomingInput ( ) . match ( new RegExp ( quoteChar , 'g' ) ) || [ ] ) . length ;
if ( remainingQuotes > 0 && remainingQuotes & 1 != 0 ) {
parser . yy . missingEndQuote = false ;
lexer . input ( ) ;
} else {
parser . yy . missingEndQuote = true ;
lexer . unput ( remainder ) ;
}
lexer . popState ( ) ;
return true ;
}
return false ;
} ;
var lexerModified = false ;
parser . yy . parseError = function ( str , hash ) {
parser . yy . error = hash ;
} ;
var IGNORED _EXPECTED = {
';' : true ,
'.' : true ,
'EOF' : true ,
'UNSIGNED_INTEGER' : true ,
'UNSIGNED_INTEGER_E' : true ,
'REGULAR_IDENTIFIER' : true , // TODO: Indicate that an identifier was expected
'CURSOR' : true ,
'PARTIAL_CURSOR' : true ,
'HDFS_START_QUOTE' : true ,
'HDFS_PATH' : true ,
'HDFS_END_QUOTE' : true ,
'COMPARISON_OPERATOR' : true , // TODO: Expand in results when found
'ARITHMETIC_OPERATOR' : true , // TODO: Expand in results when found
'VARIABLE_REFERENCE' : true ,
'BACKTICK' : true ,
'VALUE' : true ,
'PARTIAL_VALUE' : true ,
'SINGLE_QUOTE' : true ,
'DOUBLE_QUOTE' : true
} ;
var CLEAN _EXPECTED = {
'BETWEEN_AND' : 'AND' ,
'OVERWRITE_DIRECTORY' : 'OVERWRITE' ,
'STORED_AS_DIRECTORIES' : 'STORED' ,
'LIKE_PARQUET' : 'LIKE' ,
'PARTITION_VALUE' : 'PARTITION'
} ;
parser . parseSyntax = function ( beforeCursor , afterCursor , dialect , debug ) {
parser . yy . caseDetermined = false ;
parser . yy . error = undefined ;
parser . yy . latestTablePrimaries = [ ] ;
parser . yy . subQueries = [ ] ;
parser . yy . selectListAliases = [ ] ;
parser . yy . latestTablePrimaries = [ ] ;
parser . yy . activeDialect = ( dialect !== 'hive' && dialect !== 'impala' ) ? undefined : dialect ;
// Hack to set the inital state of the lexer without first having to hit a token
// has to be done as the first token found can be dependant on dialect
if ( ! lexerModified ) {
var originalSetInput = parser . lexer . setInput ;
parser . lexer . setInput = function ( input , yy ) {
var lexer = originalSetInput . bind ( parser . lexer ) ( input , yy ) ;
if ( typeof parser . yy . activeDialect !== 'undefined' ) {
lexer . begin ( parser . yy . activeDialect ) ;
}
return lexer ;
} ;
lexerModified = true ;
}
// TODO: Find a way around throwing an exception when the parser finds a syntax error
try {
parser . yy . error = false ;
parser . parse ( beforeCursor + afterCursor ) ;
} catch ( err ) {
if ( debug ) {
console . log ( err ) ;
console . error ( err . stack ) ;
console . log ( parser . yy . error ) ;
}
}
if ( parser . yy . error && ( parser . yy . error . loc . last _column < beforeCursor . length || ! beforeCursor . endsWith ( parser . yy . error . text ) ) ) {
var weightedExpected = [ ] ;
var addedExpected = { } ;
var isLowerCase = parser . yy . caseDetermined && parser . yy . lowerCase || parser . yy . error . text . toLowerCase ( ) === parser . yy . error . text ;
if ( parser . yy . error . expected . length == 2 && parser . yy . error . expected . indexOf ( '\';\'' ) !== - 1 && parser . yy . error . expected . indexOf ( '\'EOF\'' ) !== - 1 ) {
parser . yy . error . expected = [ ] ;
parser . yy . error . expectedStatementEnd = true ;
return parser . yy . error ;
}
for ( var i = 0 ; i < parser . yy . error . expected . length ; i ++ ) {
var expected = parser . yy . error . expected [ i ] ;
// Strip away the surrounding ' chars
expected = expected . substring ( 1 , expected . length - 1 ) ;
// TODO: Only suggest alphanumeric?
if ( ! IGNORED _EXPECTED [ expected ] && /[a-z_]+/i . test ( expected ) ) {
if ( dialect && expected . indexOf ( '<' + dialect + '>' ) == 0 ) {
expected = expected . substring ( dialect . length + 2 ) ;
} else if ( /^<[a-z]+>/ . test ( expected ) ) {
continue ;
}
expected = CLEAN _EXPECTED [ expected ] || expected ;
if ( expected === parser . yy . error . text . toUpperCase ( ) ) {
// Can happen when the lexer entry for a rule contains multiple words like 'stored' in 'stored as parquet'
return false ;
}
var text = isLowerCase ? expected . toLowerCase ( ) : expected ;
if ( text && ! addedExpected [ text ] ) {
addedExpected [ text ] = true ;
weightedExpected . push ( {
text : text ,
distance : stringDistance ( parser . yy . error . text , text , true )
} ) ;
}
}
}
if ( weightedExpected . length === 0 ) {
parser . yy . error . expected = [ ] ;
parser . yy . error . incompleteStatement = true ;
return parser . yy . error ;
}
weightedExpected . sort ( function ( a , b ) {
if ( a . distance === b . distance ) {
return a . text . localeCompare ( b . text ) ;
}
return a . distance - b . distance
} ) ;
parser . yy . error . expected = weightedExpected ;
parser . yy . error . incompleteStatement = true ;
return parser . yy . error ;
} else if ( parser . yy . error ) {
parser . yy . error . expected = [ ] ;
parser . yy . error . incompleteStatement = true ;
return parser . yy . error ;
}
return false ;
}
} ;
var initGlobalSearchParser = function ( parser ) {
parser . identifyPartials = function ( beforeCursor , afterCursor ) {
var beforeMatch = beforeCursor . match ( /[0-9a-zA-Z_]*$/ ) ;
var afterMatch = afterCursor . match ( /^[0-9a-zA-Z_]*(?:\((?:[^)]*\))?)?/ ) ;
return { left : beforeMatch ? beforeMatch [ 0 ] . length : 0 , right : afterMatch ? afterMatch [ 0 ] . length : 0 } ;
} ;
parser . mergeFacets = function ( a , b ) {
if ( ! a . facets ) {
a . facets = { } ;
}
if ( ! b . facets ) {
return ;
}
Object . keys ( b . facets ) . forEach ( function ( key ) {
if ( a . facets [ key ] ) {
Object . keys ( b . facets [ key ] ) . forEach ( function ( val ) {
a . facets [ key ] [ val . toLowerCase ( ) ] = true ;
} ) ;
} else {
a . facets [ key ] = b . facets [ key ] ;
}
} ) ;
} ;
parser . mergeText = function ( a , b ) {
if ( ! a . text ) {
a . text = [ ] ;
}
if ( ! b . text ) {
return ;
}
a . text = a . text . concat ( b . text ) ;
} ;
parser . handleQuotedValueWithCursor = function ( lexer , yytext , yylloc , quoteChar ) {
if ( yytext . indexOf ( '\u2020' ) !== - 1 || yytext . indexOf ( '\u2021' ) !== - 1 ) {
var cursorIndex = yytext . indexOf ( '\u2020' ) ;
parser . yy . cursorFound = {
first _line : yylloc . first _line ,
last _line : yylloc . last _line ,
first _column : yylloc . first _column + cursorIndex ,
last _column : yylloc . first _column + cursorIndex + 1
} ;
var remainder = yytext . substring ( cursorIndex + 1 ) ;
var remainingQuotes = ( lexer . upcomingInput ( ) . match ( new RegExp ( quoteChar , 'g' ) ) || [ ] ) . length ;
if ( remainingQuotes > 0 && remainingQuotes & 1 != 0 ) {
parser . yy . missingEndQuote = false ;
lexer . input ( ) ;
} else {
parser . yy . missingEndQuote = true ;
lexer . unput ( remainder ) ;
}
lexer . popState ( ) ;
return true ;
}
return false ;
} ;
parser . parseGlobalSearch = function ( beforeCursor , afterCursor , debug ) {
delete parser . yy . cursorFound ;
var result ;
try {
result = parser . parse ( beforeCursor + '\u2020' + afterCursor ) ;
} catch ( err ) {
if ( debug ) {
console . log ( err ) ;
console . error ( err . stack ) ;
console . log ( parser . yy . error ) ;
}
return {
facets : { } ,
text : [ ]
}
}
return result ;
} ;
} ;
return {
initSqlParser : initSqlParser ,
initSyntaxParser : initSyntaxParser ,
stringDistance : stringDistance ,
initGlobalSearchParser : initGlobalSearchParser
} ;
} ) ( ) ;
/* parser generated by jison 0.4.18 */
/ *
Returns a Parser object of the following structure :
Parser : {
yy : { }
}
Parser . prototype : {
yy : { } ,
trace : function ( ) ,
symbols _ : { associative list : name == > number } ,
terminals _ : { associative list : number == > name } ,
productions _ : [ ... ] ,
performAction : function anonymous ( yytext , yyleng , yylineno , yy , yystate , $$ , _$ ) ,
table : [ ... ] ,
defaultActions : { ... } ,
parseError : function ( str , hash ) ,
parse : function ( input ) ,
lexer : {
EOF : 1 ,
parseError : function ( str , hash ) ,
setInput : function ( input ) ,
input : function ( ) ,
unput : function ( str ) ,
more : function ( ) ,
less : function ( n ) ,
pastInput : function ( ) ,
upcomingInput : function ( ) ,
showPosition : function ( ) ,
test _match : function ( regex _match _array , rule _index ) ,
next : function ( ) ,
lex : function ( ) ,
begin : function ( condition ) ,
popState : function ( ) ,
_currentRules : function ( ) ,
topState : function ( ) ,
pushState : function ( condition ) ,
options : {
ranges : boolean ( optional : true == > token location info will include a . range [ ] member )
flex : boolean ( optional : true == > flex - like lexing behaviour where the rules are tested exhaustively to find the longest match )
backtrack _lexer : boolean ( optional : true == > lexer regexes are tested in order and for each matching regex the action code is invoked ; the lexer terminates the scan when a token is returned by the action code )
} ,
performAction : function ( yy , yy _ , $avoiding _name _collisions , YY _START ) ,
rules : [ ... ] ,
conditions : { associative list : name == > set } ,
}
}
token location info ( @ $ , _$ , etc . ) : {
first _line : n ,
last _line : n ,
first _column : n ,
last _column : n ,
range : [ start _number , end _number ] ( where the numbers are indexes into the input string , regular zero - based )
}
the parseError function receives a 'hash' object with these members for lexer and parser errors : {
text : ( matched text )
token : ( the produced terminal token , if any )
line : ( yylineno )
}
while parser ( grammar ) errors will also provide these members , i . e . parser errors deliver a superset of attributes : {
loc : ( yylloc )
expected : ( string describing the set of expected tokens )
recoverable : ( boolean : TRUE when the parser has a error recovery rule available for this particular error )
}
* /
var sqlAutocompleteParser = ( function ( ) {
2018-09-26 17:21:26 +08:00
var o = function ( k , v , o , l ) { for ( o = o || { } , l = k . length ; l -- ; o [ k [ l ] ] = v ) ; return o } , $V0 = [ 2 , 6 , 10 , 19 , 24 , 26 , 28 , 30 , 32 , 33 , 34 , 37 , 38 , 39 , 40 , 42 , 43 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 54 , 56 , 58 , 59 , 60 , 61 , 64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 95 , 96 , 97 , 98 , 99 , 100 , 101 , 106 , 107 , 108 , 109 , 110 , 111 , 112 , 113 , 114 , 115 , 116 , 117 , 118 , 119 , 120 , 121 , 122 , 123 , 124 , 125 , 126 , 128 , 130 , 131 , 132 , 133 , 134 , 135 , 136 , 137 , 138 , 139 , 140 , 141 , 142 , 143 , 144 , 145 , 146 , 147 , 148 , 149 , 150 , 156 , 157 , 158 , 160 , 161 , 163 , 164 , 165 , 166 , 167 , 168 , 169 , 170 , 171 , 172 , 173 , 174 , 175 , 176 , 177 , 178 , 179 , 180 , 181 , 182 , 183 , 184 , 185 , 186 , 187 , 188 , 189 , 190 , 191 , 192 , 193 , 194 , 195 , 196 , 197 , 198 , 199 , 200 , 201 , 202 , 203 , 204 , 205 , 206 , 207 , 208 , 209 , 210 , 211 , 212 , 213 , 214 , 215 , 216 , 217 , 218 , 219 , 220 , 221 , 222 , 223 , 224 , 225 , 226 , 227 , 228 , 229 , 230 , 231 , 232 , 233 , 234 , 235 , 236 , 237 , 238 , 239 , 240 , 241 , 242 , 243 , 244 , 245 , 246 , 247 , 248 , 249 , 250 , 251 , 252 , 253 , 254 , 255 , 256 , 257 , 258 , 259 , 260 , 261 , 262 , 263 , 264 , 265 , 266 , 267 , 268 , 269 , 270 , 271 , 272 , 273 , 274 , 275 , 276 , 277 , 278 , 279 , 280 , 281 , 282 , 283 , 284 , 285 , 286 , 287 , 288 , 289 , 290 , 291 , 292 , 293 , 294 , 295 , 296 , 297 , 298 , 299 , 300 , 301 , 302 , 303 , 304 , 305 , 306 , 307 , 308 , 309 , 310 , 311 , 312 , 313 , 314 , 315 , 316 , 317 , 318 , 319 , 320 , 321 , 322 , 323 , 324 , 325 , 326 , 327 , 328 , 329 , 330 , 331 , 332 , 333 , 334 , 335 , 336 , 337 , 338 , 339 , 340 , 341 , 342 , 343 , 344 , 345 , 346 , 347 , 348 , 349 , 350 , 351 , 352 , 353 , 354 , 355 , 356 , 357 , 358 , 359 , 360 , 361 , 362 , 363 , 364 , 365 , 366 , 367 , 368 , 369 , 370 , 371 , 372 , 373 , 374 , 375 , 376 , 377 , 378 , 379 , 380 , 381 , 382 , 383 , 384 , 385 , 386 , 387 , 388 , 389 , 390 , 391 , 392 , 393 , 394 , 395 , 396 , 397 , 398 , 399 , 400 , 401 , 402 , 403 , 404 , 438 , 439 , 440 , 441 , 452 , 569 , 570 , 571 , 577 , 763 , 825 , 867 , 929 , 930 , 932 , 1165 , 1189 , 1190 , 1191 , 1192 , 1194 , 1212 , 1227 , 1252 , 1253 , 1278 , 1314 ] , $V1 = [ 2 , 4 ] , $V2 = [ 6 , 10 ] , $V3 = [ 2 , 5 ] , $V4 = [ 1 , 6 ] , $V5 = [ 1 , 385 ] , $V6 = [ 1 , 359 ] , $V7 = [ 1 , 442 ] , $V8 = [ 1 , 13 ] , $V9 = [ 1 , 422 ] , $Va = [ 1 , 17 ] , $Vb = [ 1 , 19 ] , $Vc = [ 1 , 20 ] , $Vd = [ 1 , 23 ] , $Ve = [ 1 , 24 ] , $Vf = [ 1 , 78 ] , $Vg = [ 1 , 79 ] , $Vh = [ 1 , 80 ] , $Vi = [ 1 , 25 ] , $Vj = [ 1 , 81 ] , $Vk = [ 1 , 82 ] , $Vl = [ 1 , 30 ] , $Vm = [ 1 , 32 ] , $Vn = [ 1 , 83 ] , $Vo = [ 1 , 33 ] , $Vp = [ 1 , 34 ] , $Vq = [ 1 , 35 ] , $Vr = [ 1 , 38 ] , $Vs = [ 1 , 39 ] , $Vt = [ 1 , 383 ] , $Vu = [ 1 , 473 ] , $Vv = [ 1 , 42 ] , $Vw = [ 1 , 43 ] , $Vx = [ 1 , 46 ] , $Vy = [ 1 , 85 ] , $Vz = [ 1 , 88 ] , $VA = [ 1 , 89 ] , $VB = [ 1 , 91 ] , $VC = [ 1 , 50 ] , $VD = [ 1 , 90 ] , $VE = [ 1 , 51 ] , $VF = [ 1 , 92 ] , $VG = [ 1 , 93 ] , $VH = [ 1 , 545 ] , $VI = [ 1 , 94 ] , $VJ = [ 1 , 95 ] , $VK = [ 1 , 56 ] , $VL = [ 1 , 96 ] , $VM = [ 1 , 562 ] , $VN = [ 1 , 531 ] , $VO = [ 1 , 98 ] , $VP = [ 1 , 58 ] , $VQ = [ 1 , 100 ] , $VR = [ 1 , 102 ] , $VS = [ 1 , 59 ] , $VT = [ 1 , 60 ] , $VU = [ 1 , 103 ] , $VV = [ 1 , 104 ] , $VW = [ 1 , 105 ] , $VX = [ 1 , 62 ] , $VY = [ 1 , 63 ] , $VZ = [ 1 , 106 ] , $V _ = [ 1 , 65 ] , $V$ = [ 1 , 532 ] , $V01 = [ 1 , 67 ] , $V11 = [ 1 , 57 ] , $V21 = [ 1 , 68 ] , $V31 = [ 1 , 69 ] , $V41 = [ 1 , 107 ] , $V51 = [ 1 , 108 ] , $V61 = [ 1 , 110 ] , $V71 = [ 1 , 111 ] , $V81 = [ 1 , 112 ] , $V91 = [ 1 , 113 ] , $Va1 = [ 1 , 71 ] , $Vb1 = [ 1 , 559 ] , $Vc1 = [ 1 , 114 ] , $Vd1 = [ 1 , 115 ] , $Ve1 = [ 1 , 72 ] , $Vf1 = [ 1 , 116 ] , $Vg1 = [ 1 , 118 ] , $Vh1 = [ 1 , 278 ] , $Vi1 = [ 1 , 119 ] , $Vj1 = [ 1 , 121 ] , $Vk1 = [ 1 , 122 ] , $Vl1 = [ 1 , 123 ] , $Vm1 = [ 1 , 124 ] , $Vn1 = [ 1 , 75 ] , $Vo1 = [ 1 , 125 ] , $Vp1 = [ 1 , 126 ] , $Vq1 = [ 1 , 127 ] , $Vr1 = [ 1 , 542 ] , $Vs1 = [ 1 , 76 ] , $Vt1 = [ 1 , 129 ] , $Vu1 = [ 1 , 131 ] , $Vv1 = [ 1 , 307 ] , $Vw1 = [ 1 , 310 ] , $Vx1 = [ 1 , 311 ] , $Vy1 = [ 1 , 312 ] , $Vz1 = [ 1 , 316 ] , $VA1 = [ 1 , 317 ] , $VB1 = [ 1 , 318 ] , $VC1 = [ 1 , 319 ] , $VD1 = [ 1 , 196 ] , $VE1 = [ 1 , 198 ] , $VF1 = [ 1 , 199 ] , $VG1 = [ 1 , 179 ] , $VH1 = [ 1 , 204 ] , $VI1 = [ 1 , 205 ] , $VJ1 = [ 1 , 194 ] , $VK1 = [ 1 , 186 ] , $VL1 = [ 1 , 166 ] , $VM1 = [ 1 , 290 ] , $VN1 = [ 1 , 260 ] , $VO1 = [ 1 , 330 ] , $VP1 = [ 1 , 349 ] , $VQ1 = [ 1 , 384 ] , $VR1 = [ 1 , 16 ] , $VS1 = [ 1 , 40 ] , $VT1 = [ 1 , 14 ] , $VU1 = [ 1 , 15 ] , $VV1 = [ 1 , 18 ] , $VW1 = [ 1 , 21 ] , $VX1 = [ 1 , 22 ] , $VY1 = [ 1 , 26 ] , $VZ1 = [ 1 , 27 ] , $V _1 = [ 1 , 28 ] , $V$1 = [ 1 , 29 ] , $V02 = [ 1 , 31 ] , $V12 = [ 1 , 36 ] , $V22 = [ 1 , 37 ] , $V32 = [ 1 , 41 ] , $V42 = [ 1 , 44 ] , $V52 = [ 1 , 45 ] , $V62 = [ 1 , 47 ] , $V72 = [ 1 , 48 ] , $V82 = [ 1 , 49 ] , $V92 = [ 1 , 52 ] , $Va2 = [ 1 , 53 ] , $Vb2 = [ 1 , 54 ] , $Vc2 = [ 1 , 55 ] , $Vd2 = [ 1 , 61 ] , $Ve2 = [ 1 , 64 ] , $Vf2 = [ 1 , 66 ] , $Vg2 = [ 1 , 70 ] , $Vh2 = [ 1 , 73 ] , $Vi2 = [ 1 , 74 ] , $Vj2 = [ 1 , 77 ] , $Vk2 = [ 1 , 84 ] , $Vl2 = [ 1 , 86 ] , $Vm2 = [ 1 , 87 ] , $Vn2 = [ 1 , 97 ] , $Vo2 = [ 1 , 99 ] , $Vp2 = [ 1 , 101 ] , $Vq2 = [ 1 , 109 ] , $Vr2 = [ 1 , 117 ] , $Vs2 = [ 1 , 120 ] , $Vt2 = [ 1 , 128 ] , $Vu2 = [ 1 , 130 ] , $Vv2 = [ 1 , 132 ] , $Vw2 = [ 1 , 133 ] , $Vx2 = [ 1 , 134 ] , $Vy2 = [ 1 , 135 ] , $Vz2 = [ 1 , 136 ] , $VA2 = [ 1 , 137 ] , $VB2 = [ 1 , 138 ] , $VC2 = [ 1 , 139 ] , $VD2 = [ 1 , 140 ] , $VE2 = [ 1 , 141 ] , $VF2 = [ 1 , 142 ] , $VG2 = [ 1 , 143 ] , $VH2 = [ 1 , 144 ] , $VI2 = [ 1 , 145 ] , $VJ2 = [ 1 , 146 ] , $VK2 = [ 1 , 147 ] , $VL2 = [ 1 , 148 ] , $VM2 = [ 1 , 149 ] , $VN2 = [ 1 , 150 ] , $VO2 = [ 1 , 151 ] , $VP2 = [ 1 , 152 ] , $VQ2 = [ 1 , 153 ] , $VR2 = [ 1 , 154 ] , $VS2 = [ 1 , 155 ] , $VT2 = [ 1 , 156 ] , $VU2 = [ 1 , 157 ] , $VV2 = [ 1 , 158 ] , $VW2 = [ 1 , 159 ] , $VX2 = [ 1 , 160 ] , $VY2 = [ 1 , 161 ] , $VZ2 = [ 1 , 162 ] , $V _2 = [ 1 , 163 ] , $V$2 = [ 1 , 164 ] , $V03 = [ 1 , 165 ] , $V13 = [ 1 , 167 ] , $V23 = [ 1 , 168 ] , $V33 = [ 1 , 169 ] , $V43 = [ 1 , 170 ] , $V53 = [ 1 , 171 ] , $V63 = [ 1 , 172 ] , $V73 = [ 1 , 173 ] , $V83 = [ 1 , 174 ] , $V93 = [ 1 , 175 ] , $Va3 = [ 1 , 176 ] , $Vb3 = [ 1 , 177 ] , $Vc3 = [ 1 , 178 ] , $Vd3 = [ 1 , 180 ] , $Ve3 = [ 1 , 181 ] , $Vf3 = [ 1 , 182 ] , $Vg3 =
2018-08-27 11:03:13 +08:00
var parser = { trace : function trace ( ) { } ,
yy : { } ,
2018-09-26 17:21:26 +08:00
symbols _ : { "error" : 2 , "SqlSyntax" : 3 , "NewStatement" : 4 , "SqlStatements" : 5 , "EOF" : 6 , "SqlAutocomplete" : 7 , "SqlStatements_EDIT" : 8 , "SqlStatement" : 9 , ";" : 10 , "NonStartingToken" : 11 , "SqlStatement_EDIT" : 12 , "DataDefinition" : 13 , "DataManipulation" : 14 , "QuerySpecification" : 15 , "ExplainClause" : 16 , "AnyCursor" : 17 , "CommonTableExpression" : 18 , "CURSOR" : 19 , "ExplainClause_EDIT" : 20 , "DataDefinition_EDIT" : 21 , "DataManipulation_EDIT" : 22 , "QuerySpecification_EDIT" : 23 , "SetSpecification_EDIT" : 24 , "NonReservedKeyword" : 25 , "<hive>ABORT" : 26 , "<hive>ADD" : 27 , "<hive>ADMIN" : 28 , "<hive>AFTER" : 29 , "<hive>ANALYZE" : 30 , "<hive>ARCHIVE" : 31 , "<hive>AVRO" : 32 , "<hive>BUCKET" : 33 , "<hive>BUCKETS" : 34 , "<hive>CASCADE" : 35 , "<hive>CHANGE" : 36 , "<hive>CLUSTERED" : 37 , "<hive>COLLECTION" : 38 , "<hive>COLUMNS" : 39 , "<hive>COMMENT" : 40 , "<hive>COMPACT" : 41 , "<hive>COMPACTIONS" : 42 , "<hive>COMPUTE" : 43 , "<hive>CONCATENATE" : 44 , "<hive>DATA" : 45 , "<hive>DATABASES" : 46 , "<hive>DBPROPERTIES" : 47 , "<hive>DEFERRED" : 48 , "<hive>DEFINED" : 49 , "<hive>DELIMITED" : 50 , "<hive>DEPENDENCY" : 51 , "<hive>DIRECTORY" : 52 , "<hive>DISABLE" : 53 , "<hive>DOUBLE_PRECISION" : 54 , "<hive>ENABLE" : 55 , "<hive>ESCAPED" : 56 , "<hive>EXCHANGE" : 57 , "<hive>EXPLAIN" : 58 , "<hive>EXPORT" : 59 , "<hive>FIELDS" : 60 , "<hive>FILE" : 61 , "<hive>FILEFORMAT" : 62 , "<hive>FIRST" : 63 , "<hive>FORMAT" : 64 , "<hive>FUNCTIONS" : 65 , "<hive>INPATH" : 66 , "<hive>INPUTFORMAT" : 67 , "<hive>JAR" : 68 , "<hive>IDXPROPERTIES" : 69 , "<hive>ITEMS" : 70 , "<hive>KEY" : 71 , "<hive>KEYS" : 72 , "<hive>LINES" : 73 , "<hive>LOAD" : 74 , "<hive>LOCATION" : 75 , "<hive>LOCKS" : 76 , "<hive>MATCHED" : 77 , "<hive>METADATA" : 78 , "<hive>MERGE" : 79 , "<hive>MSCK" : 80 , "<hive>NOSCAN" : 81 , "<hive>NOVALIDATE" : 82 , "<hive>NO_DROP" : 83 , "<hive>OFFLINE" : 84 , "<hive>ORC" : 85 , "<hive>OUTPUTFORMAT" : 86 , "<hive>OVERWRITE" : 87 , "<hive>OWNER" : 88 , "<hive>PARQUET" : 89 , "<hive>PARTITIONED" : 90 , "<hive>PARTITIONS" : 91 , "<hive>PERCENT" : 92 , "<hive>PRIVILEGES" : 93 , "<hive>PURGE" : 94 , "<hive>RCFILE" : 95 , "<hive>REBUILD" : 96 , "<hive>RELOAD" : 97 , "<hive>RELY" : 98 , "<hive>NORELY" : 99 , "<hive>REPAIR" : 100 , "<hive>REPLICATION" : 101 , "<hive>RECOVER" : 102 , "<hive>RENAME" : 103 , "<hive>REPLACE" : 104 , "<hive>RESTRICT" : 105 , "<hive>ROLE" : 106 , "<hive>ROLES" : 107 , "<hive>SCHEMAS" : 108 , "<hive>SEQUENCEFILE" : 109 , "<hive>SERDE" : 110 , "<hive>SERDEPROPERTIES" : 111 , "<hive>SETS" : 112 , "<hive>SHOW" : 113 , "<hive>SKEWED" : 114 , "<hive>SORTED" : 115 , "<hive>STATISTICS" : 116 , "<hive>STORED" : 117 , "<hive>STRING" : 118 , "STRUCT" : 119 , "<hive>TABLES" : 120 , "<hive>TBLPROPERTIES" : 121 , "<hive>TEMPORARY" : 122 , "<hive>TERMINATED" : 123 , "<hive>TEXTFILE" : 124 , "<hive>TIMESTAMP" : 125 , "<hive>TINYINT" : 126 , "<hive>TOUCH" : 127 , "<hive>TRANSACTIONS" : 128 , "<hive>UNARCHIVE" : 129 , "<hive>UNIONTYPE" : 130 , "<hive>USE" : 131 , "<hive>USER" : 132 , "<hive>VIEW" : 133 , "<hive>WAIT" : 134 , "<hive>DAY" : 135 , "<hive>HOUR" : 136 , "<hive>MINUTE" : 137 , "<hive>MONTH" : 138 , "<hive>QUARTER" : 139 , "<hive>SECOND" : 140 , "<hive>WEEK" : 141 , "<hive>YEAR" : 142 , "<impala>ANALYTIC" : 143 , "<impala>CURRENT" : 144 , "<impala>GRANT" : 145 , "<impala>RECOVER" : 146 , "<impala>ROLE" : 147 , "<impala>ROLES" : 148 , "<impala>URI" : 149 , "<impala>SERVER" : 150 , "<impala>UNKNOWN" : 151 , "<impala>BLOCK_SIZE" : 152 , "<impala>COMPRESSION" : 153 , "<impala>DEFAULT" : 154 , "<impala>ENCODING" : 155 , "<impala>KEY" : 156 , "ROLE" : 157 , "OPTION" : 158 , "RegularIdentifier" : 159 , "REGULAR_IDENTIFIER" : 160 , "VARIABLE_REFERENCE" : 161 , "OptionalHiveExplainTypes" : 162 , "<impala>EXPLAIN" : 163 , "<hive>AUTHORIZATION" : 164 , "<hive>EXTENDED" : 165 , "<hive>ALL" : 166 , "<hive>AS" : 167 , "<hive>BINARY" : 168 , "<hive>CACHE" : 169 , "<hive>CLUSTER" : 170 , "<hive>CONF" : 171 , "<hive>CONSTRAINT" : 172 , "<hive>CUBE" : 173 , "<hive>CURRENT" : 174 , "<hive>DATE" : 175 , "<hive>DISTRIBUTE" : 176 , "<hive>DISTRIBUTED" : 177 , "<hive>EXTERNAL" : 178 , "<hive>FOR" : 179 , "<hive>FOREIGN" : 180 , "<hive>FUNCTION" : 181 , "<hive>GRANT" : 182 , "<hive>GROUPING" : 183 , "<hive>LATERAL" : 184 , "<hive>LOCAL" : 185 , "<hive>LOCK" : 186 , "<hive>MACRO" : 187 , "<hive>PARTITION" : 188 , "<hive>PRIMARY" : 189 , "<hive>REFERENCES" : 190 , "<hive>ROLLUP" : 191 , "<hive>SHOW_DATABASE" : 192 , "<hive>TABLE" : 193 , "<hive>ASC" : 194 , "<hive>FORMATTED" : 195 , "<hive>INDEX" : 196 , "<hive>INDEXES" : 197 , "<hive>NONE" : 198 , "<hive>OF" : 199 , "<hive>OUT" : 200 , "<hive>SCHEMA" : 201 , "<hive>STORED_AS_DIRECTORIES" : 202 , "<hive>TABLESAMPLE" : 203 , "<hive>USING" : 204 , "<hive>VIEWS" : 205 , "<hive>WINDOW" : 206 , "<hive>." : 207 , "<hive>[" : 208 , "<hive>]" : 209 , " < impala
terminals _ : { 2 : "error" , 6 : "EOF" , 10 : ";" , 19 : "CURSOR" , 24 : "SetSpecification_EDIT" , 26 : "<hive>ABORT" , 27 : "<hive>ADD" , 28 : "<hive>ADMIN" , 29 : "<hive>AFTER" , 30 : "<hive>ANALYZE" , 31 : "<hive>ARCHIVE" , 32 : "<hive>AVRO" , 33 : "<hive>BUCKET" , 34 : "<hive>BUCKETS" , 35 : "<hive>CASCADE" , 36 : "<hive>CHANGE" , 37 : "<hive>CLUSTERED" , 38 : "<hive>COLLECTION" , 39 : "<hive>COLUMNS" , 40 : "<hive>COMMENT" , 41 : "<hive>COMPACT" , 42 : "<hive>COMPACTIONS" , 43 : "<hive>COMPUTE" , 44 : "<hive>CONCATENATE" , 45 : "<hive>DATA" , 46 : "<hive>DATABASES" , 47 : "<hive>DBPROPERTIES" , 48 : "<hive>DEFERRED" , 49 : "<hive>DEFINED" , 50 : "<hive>DELIMITED" , 51 : "<hive>DEPENDENCY" , 52 : "<hive>DIRECTORY" , 53 : "<hive>DISABLE" , 54 : "<hive>DOUBLE_PRECISION" , 55 : "<hive>ENABLE" , 56 : "<hive>ESCAPED" , 57 : "<hive>EXCHANGE" , 58 : "<hive>EXPLAIN" , 59 : "<hive>EXPORT" , 60 : "<hive>FIELDS" , 61 : "<hive>FILE" , 62 : "<hive>FILEFORMAT" , 63 : "<hive>FIRST" , 64 : "<hive>FORMAT" , 65 : "<hive>FUNCTIONS" , 66 : "<hive>INPATH" , 67 : "<hive>INPUTFORMAT" , 68 : "<hive>JAR" , 69 : "<hive>IDXPROPERTIES" , 70 : "<hive>ITEMS" , 71 : "<hive>KEY" , 72 : "<hive>KEYS" , 73 : "<hive>LINES" , 74 : "<hive>LOAD" , 75 : "<hive>LOCATION" , 76 : "<hive>LOCKS" , 77 : "<hive>MATCHED" , 78 : "<hive>METADATA" , 79 : "<hive>MERGE" , 80 : "<hive>MSCK" , 81 : "<hive>NOSCAN" , 82 : "<hive>NOVALIDATE" , 83 : "<hive>NO_DROP" , 84 : "<hive>OFFLINE" , 85 : "<hive>ORC" , 86 : "<hive>OUTPUTFORMAT" , 87 : "<hive>OVERWRITE" , 88 : "<hive>OWNER" , 89 : "<hive>PARQUET" , 90 : "<hive>PARTITIONED" , 91 : "<hive>PARTITIONS" , 92 : "<hive>PERCENT" , 93 : "<hive>PRIVILEGES" , 94 : "<hive>PURGE" , 95 : "<hive>RCFILE" , 96 : "<hive>REBUILD" , 97 : "<hive>RELOAD" , 98 : "<hive>RELY" , 99 : "<hive>NORELY" , 100 : "<hive>REPAIR" , 101 : "<hive>REPLICATION" , 102 : "<hive>RECOVER" , 103 : "<hive>RENAME" , 104 : "<hive>REPLACE" , 105 : "<hive>RESTRICT" , 106 : "<hive>ROLE" , 107 : "<hive>ROLES" , 108 : "<hive>SCHEMAS" , 109 : "<hive>SEQUENCEFILE" , 110 : "<hive>SERDE" , 111 : "<hive>SERDEPROPERTIES" , 112 : "<hive>SETS" , 113 : "<hive>SHOW" , 114 : "<hive>SKEWED" , 115 : "<hive>SORTED" , 116 : "<hive>STATISTICS" , 117 : "<hive>STORED" , 118 : "<hive>STRING" , 119 : "STRUCT" , 120 : "<hive>TABLES" , 121 : "<hive>TBLPROPERTIES" , 122 : "<hive>TEMPORARY" , 123 : "<hive>TERMINATED" , 124 : "<hive>TEXTFILE" , 125 : "<hive>TIMESTAMP" , 126 : "<hive>TINYINT" , 127 : "<hive>TOUCH" , 128 : "<hive>TRANSACTIONS" , 129 : "<hive>UNARCHIVE" , 130 : "<hive>UNIONTYPE" , 131 : "<hive>USE" , 132 : "<hive>USER" , 133 : "<hive>VIEW" , 134 : "<hive>WAIT" , 135 : "<hive>DAY" , 136 : "<hive>HOUR" , 137 : "<hive>MINUTE" , 138 : "<hive>MONTH" , 139 : "<hive>QUARTER" , 140 : "<hive>SECOND" , 141 : "<hive>WEEK" , 142 : "<hive>YEAR" , 143 : "<impala>ANALYTIC" , 144 : "<impala>CURRENT" , 145 : "<impala>GRANT" , 146 : "<impala>RECOVER" , 147 : "<impala>ROLE" , 148 : "<impala>ROLES" , 149 : "<impala>URI" , 150 : "<impala>SERVER" , 151 : "<impala>UNKNOWN" , 152 : "<impala>BLOCK_SIZE" , 153 : "<impala>COMPRESSION" , 154 : "<impala>DEFAULT" , 155 : "<impala>ENCODING" , 156 : "<impala>KEY" , 157 : "ROLE" , 158 : "OPTION" , 160 : "REGULAR_IDENTIFIER" , 161 : "VARIABLE_REFERENCE" , 163 : "<impala>EXPLAIN" , 164 : "<hive>AUTHORIZATION" , 165 : "<hive>EXTENDED" , 166 : "<hive>ALL" , 167 : "<hive>AS" , 168 : "<hive>BINARY" , 169 : "<hive>CACHE" , 170 : "<hive>CLUSTER" , 171 : "<hive>CONF" , 172 : "<hive>CONSTRAINT" , 173 : "<hive>CUBE" , 174 : "<hive>CURRENT" , 175 : "<hive>DATE" , 176 : "<hive>DISTRIBUTE" , 177 : "<hive>DISTRIBUTED" , 178 : "<hive>EXTERNAL" , 179 : "<hive>FOR" , 180 : "<hive>FOREIGN" , 181 : "<hive>FUNCTION" , 182 : "<hive>GRANT" , 183 : "<hive>GROUPING" , 184 : "<hive>LATERAL" , 185 : "<hive>LOCAL" , 186 : "<hive>LOCK" , 187 : "<hive>MACRO" , 188 : "<hive>PARTITION" , 189 : "<hive>PRIMARY" , 190 : "<hive>REFERENCES" , 191 : "<hive>ROLLUP" , 192 : "<hive>SHOW_DATABASE" , 193 : "<hive>TABLE" , 194 : "<hive>ASC" , 195 : "<hive>FORMATTED" , 196 : "<hive>INDEX" , 197 : "<hive>INDEXES" , 198 : "<hive>NONE" , 199 : "<hive>OF" , 200 : "<hive>OUT" , 201 : "<hive>SCHEMA" , 202 : "<hive>STORED_AS_DIRECTORIES" , 203 : "<hive>TABLESAMPLE" , 204 : "<hive>USING" , 205 : "<hive>VIEWS" , 206 : "<hive>WINDOW" , 207 : "<hive>." , 208 : "<hive>[" , 209 : "<hive>]" , 210 : "<impala>AGGREGATE" , 211 : "<impala>AVRO" , 212 : "<impala>CACHED" , 213 : "<impala>CASCADE" , 214 : "<impala>CLOSE_FN" , 215 : "<impala>COLUMN" , 216 : "<impala>DATA" , 217 : "<impala>DATABASES" , 218 : "<impala>DELETE" , 219 : "<impala>DELIMITED" , 220 : "<impala>ESCAPED" , 221 : "<impala>EXTENDED" , 222 : "<impala>EXTERNAL" , 223 : "<impala>FIELDS" , 224 : "<impala>FILES" , 225 : "<impala>FINALIZE_FN" , 226 : "<impala>FIRST" , 227 : "<impala>FORMAT" , 228 : "<impala>FORMATTED" , 229 : "<impala>FUNCTION" , 230 : "<impala>FUNCTIONS" , 231 : " <
productions _ : [ 0 , [ 3 , 3 ] , [ 7 , 3 ] , [ 7 , 3 ] , [ 4 , 0 ] , [ 5 , 0 ] , [ 5 , 1 ] , [ 5 , 4 ] , [ 5 , 1 ] , [ 5 , 2 ] , [ 8 , 1 ] , [ 8 , 4 ] , [ 8 , 4 ] , [ 8 , 7 ] , [ 9 , 1 ] , [ 9 , 1 ] , [ 9 , 1 ] , [ 9 , 2 ] , [ 9 , 2 ] , [ 9 , 2 ] , [ 12 , 1 ] , [ 12 , 2 ] , [ 12 , 1 ] , [ 12 , 1 ] , [ 12 , 1 ] , [ 12 , 1 ] , [ 12 , 1 ] , [ 12 , 2 ] , [ 12 , 2 ] , [ 12 , 2 ] , [ 12 , 2 ] , [ 12 , 2 ] , [ 12 , 2 ] , [ 12 , 2 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 25 , 1 ] , [ 159 , 1 ] , [ 159 , 1 ] , [ 159 , 1 ] , [ 16 , 2 ] , [ 16 , 1 ] , [ 20 , 3 ] , [ 20 , 2 ] , [ 162 , 0 ] , [ 162 , 1 ] , [ 162 , 1 ] , [ 162 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 11 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 21 , 1 ] , [ 21 , 1 ] , [ 21 , 1 ] , [ 21 , 1 ] , [ 21 , 1 ] , [ 21 , 1 ] , [ 21 , 1 ] , [ 21 , 1 ] , [ 21 , 1 ] , [ 21 , 1 ] , [ 21 , 1 ] , [ 21 , 1 ] , [ 21 , 2 ] , [ 21 , 1 ] , [ 21 , 1 ] , [ 434 , 1 ] , [ 434 , 1 ] , [ 435 , 1 ] , [ 435 , 2 ] , [ 436 , 1 ] , [ 436 , 1 ] , [ 437 , 1 ] , [ 437 , 1 ] , [ 437 , 1 ] , [ 17 , 1 ] , [ 17 , 1 ] , [ 442 , 1 ] , [ 442 , 1 ] , [ 442 , 1 ] , [ 443 , 1 ] , [ 443 , 1 ] , [ 444 , 1 ] , [ 444 , 1 ] , [ 444 , 1 ] , [ 446 , 1 ] , [ 446 , 1 ] , [ 447 , 1 ] , [ 447 , 1 ] , [ 447 , 1 ] , [ 448 , 1 ] , [ 448 , 1 ] , [ 448 , 1 ] , [ 449 , 1 ] , [ 449 , 1 ] , [ 450 , 1 ] , [ 450 , 1 ] , [ 451 , 1 ] , [ 451 , 1 ]
2018-08-27 11:03:13 +08:00
performAction : function anonymous ( yytext , yyleng , yylineno , yy , yystate /* action[1] */ , $$ /* vstack */ , _$ /* lstack */ ) {
/* this == yyval */
var $0 = $$ . length - 1 ;
switch ( yystate ) {
case 2 : case 3 :
return parser . yy . result ;
break ;
case 4 :
parser . prepareNewStatement ( ) ;
break ;
case 6 : case 10 : case 12 :
parser . addStatementLocation ( _$ [ $0 ] ) ;
break ;
case 11 : case 13 :
parser . addStatementLocation ( _$ [ $0 - 3 ] ) ;
break ;
case 20 : case 33 :
if ( parser . isHive ( ) ) {
parser . suggestDdlAndDmlKeywords ( [ 'EXPLAIN' , 'FROM' ] ) ;
} else if ( parser . isImpala ( ) ) {
parser . suggestDdlAndDmlKeywords ( [ 'EXPLAIN' ] ) ;
} else {
parser . suggestDdlAndDmlKeywords ( ) ;
}
break ;
case 21 :
if ( parser . isHive ( ) || parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'INSERT' , 'SELECT' ] ) ;
} else {
parser . suggestKeywords ( [ 'SELECT' ] ) ;
}
break ;
case 172 :
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestDdlAndDmlKeywords ( [ { value : 'AUTHORIZATION' , weight : 2 } , { value : 'DEPENDENCY' , weight : 2 } , { value : 'EXTENDED' , weight : 2 } ] ) ;
} else {
parser . suggestDdlAndDmlKeywords ( ) ;
}
break ;
case 173 :
parser . suggestDdlAndDmlKeywords ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 545 :
2018-08-27 11:03:13 +08:00
parser . suggestSetOptions ( ) ;
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'ROLE' ] ) ;
}
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'ALL' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 613 : case 616 : case 721 : case 762 : case 856 : case 1098 : case 1281 : case 1393 : case 1450 : case 2588 : case 2590 : case 3090 :
2018-08-27 11:03:13 +08:00
this . $ = $$ [ $0 - 1 ] ;
break ;
2018-09-26 17:21:26 +08:00
case 614 : case 617 : case 763 :
2018-08-27 11:03:13 +08:00
this . $ = '' ;
break ;
2018-09-26 17:21:26 +08:00
case 638 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'INDEX' , 'INDEXES' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 639 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FORMATTED' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 656 : case 659 :
2018-08-27 11:03:13 +08:00
parser . yy . correlatedSubQuery = false ;
break ;
2018-09-26 17:21:26 +08:00
case 657 : case 661 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'EXISTS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 660 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'NOT EXISTS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 671 : case 673 : case 674 : case 676 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ '<' , '<=' , '<>' , '=' , '>' , '>=' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 672 : case 675 : case 3117 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'VALUES' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 699 : case 703 : case 707 : case 743 : case 744 : case 789 : case 792 : case 1000 : case 1069 : case 1840 : case 1938 : case 1957 : case 2003 : case 2005 : case 2369 : case 2628 : case 3405 :
2018-08-27 11:03:13 +08:00
parser . suggestColumns ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 711 : case 764 :
2018-08-27 11:03:13 +08:00
parser . addTableLocation ( _$ [ $0 ] , [ { name : $$ [ $0 ] } ] ) ;
this . $ = { identifierChain : [ { name : $$ [ $0 ] } ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 712 : case 765 :
2018-08-27 11:03:13 +08:00
parser . addDatabaseLocation ( _$ [ $0 - 2 ] , [ { name : $$ [ $0 - 2 ] } ] ) ;
parser . addTableLocation ( _$ [ $0 ] , [ { name : $$ [ $0 - 2 ] } , { name : $$ [ $0 ] } ] ) ;
this . $ = { identifierChain : [ { name : $$ [ $0 - 2 ] } , { name : $$ [ $0 ] } ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 713 :
2018-08-27 11:03:13 +08:00
// This is a special case for Impala expression like "SELECT | FROM db.table.col"
this . $ = { identifierChain : [ { name : $$ [ $0 - 3 ] } , { name : $$ [ $0 - 1 ] } ] . concat ( $$ [ $0 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 714 : case 1744 : case 1910 : case 2077 : case 2083 : case 2092 : case 2277 : case 2601 : case 2625 : case 2728 : case 2733 : case 2751 : case 2774 : case 2781 : case 2838 : case 2846 : case 3124 : case 3155 : case 3158 : case 3164 : case 3391 : case 3411 :
2018-08-27 11:03:13 +08:00
parser . suggestTables ( ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 715 : case 729 :
2018-08-27 11:03:13 +08:00
parser . suggestDatabases ( ) ;
this . $ = { identifierChain : [ { name : $$ [ $0 - 2 ] } ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 716 :
2018-08-27 11:03:13 +08:00
// In Impala you can have statements like 'SELECT ... FROM testTable t, t.|'
parser . suggestTablesOrColumns ( $$ [ $0 - 2 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 717 :
2018-08-27 11:03:13 +08:00
// TODO: switch to suggestColumns, it's currently handled in sqlAutocompleter2.js
// Issue is that suggestColumns is deleted if no tables are defined and this is
// Impala only cases like "SELECT | FROM db.table.col"
parser . suggestTables ( { identifierChain : [ { name : $$ [ $0 - 3 ] } , { name : $$ [ $0 - 1 ] } ] . concat ( $$ [ $0 ] ) } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 718 : case 898 :
2018-08-27 11:03:13 +08:00
this . $ = [ $$ [ $0 ] ] ;
break ;
2018-09-26 17:21:26 +08:00
case 719 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 1 ] . push ( $$ [ $0 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 720 : case 723 :
2018-08-27 11:03:13 +08:00
this . $ = [ ] ;
break ;
2018-09-26 17:21:26 +08:00
case 722 : case 858 : case 1283 :
2018-08-27 11:03:13 +08:00
this . $ = $$ [ $0 - 2 ] ;
break ;
2018-09-26 17:21:26 +08:00
case 724 :
2018-08-27 11:03:13 +08:00
this . $ = { name : $$ [ $0 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 728 : case 1795 : case 2022 :
2018-08-27 11:03:13 +08:00
parser . suggestDatabases ( { appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 732 : case 2036 : case 2073 : case 2837 : case 2845 : case 3245 : case 3305 : case 3319 : case 3377 : case 3378 : case 3416 :
2018-08-27 11:03:13 +08:00
parser . suggestDatabases ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 742 : case 1005 : case 1006 : case 1012 : case 1013 : case 1389 : case 1477 : case 3075 : case 3111 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 750 : case 753 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ 'WITH REPLICATION =' ] } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 755 : case 3263 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'IN' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 759 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'REPLICATION =' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 760 : case 1778 : case 1935 : case 2330 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ '=' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 766 : case 3368 :
2018-08-27 11:03:13 +08:00
parser . suggestTables ( ) ;
parser . suggestDatabases ( { prependDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 767 :
2018-08-27 11:03:13 +08:00
parser . suggestTablesOrColumns ( $$ [ $0 - 2 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 769 :
2018-08-27 11:03:13 +08:00
this . $ = { identifierChain : $$ [ $0 - 1 ] . identifierChain , alias : $$ [ $0 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 772 :
2018-08-27 11:03:13 +08:00
parser . yy . locations [ parser . yy . locations . length - 1 ] . type = 'column' ;
break ;
2018-09-26 17:21:26 +08:00
case 773 : case 1234 :
2018-08-27 11:03:13 +08:00
parser . addAsteriskLocation ( _$ [ $0 ] , $$ [ $0 - 2 ] . concat ( { asterisk : true } ) ) ;
break ;
2018-09-26 17:21:26 +08:00
case 775 :
2018-08-27 11:03:13 +08:00
this . $ = [ $$ [ $0 ] . identifier ] ;
parser . yy . firstChainLocation = parser . addUnknownLocation ( $$ [ $0 ] . location , [ $$ [ $0 ] . identifier ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 776 :
2018-08-27 11:03:13 +08:00
if ( parser . yy . firstChainLocation ) {
parser . yy . firstChainLocation . firstInChain = true ;
delete parser . yy . firstChainLocation ;
}
$$ [ $0 - 2 ] . push ( $$ [ $0 ] . identifier ) ;
parser . addUnknownLocation ( $$ [ $0 ] . location , $$ [ $0 - 2 ] . concat ( ) ) ;
break ;
2018-09-26 17:21:26 +08:00
case 777 : case 785 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . insideKey ) {
parser . suggestKeyValues ( { identifierChain : [ $$ [ $0 ] . identifier ] } ) ;
parser . suggestColumns ( ) ;
parser . suggestFunctions ( ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 778 : case 786 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . insideKey ) {
parser . suggestKeyValues ( { identifierChain : $$ [ $0 - 2 ] . concat ( [ $$ [ $0 ] . identifier ] ) } ) ;
parser . suggestColumns ( ) ;
parser . suggestFunctions ( ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 781 :
2018-08-27 11:03:13 +08:00
parser . suggestColumns ( {
identifierChain : $$ [ $0 - 2 ]
} ) ;
this . $ = { suggestKeywords : [ { value : '*' , weight : 10000 } ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 782 :
2018-08-27 11:03:13 +08:00
parser . suggestColumns ( {
identifierChain : $$ [ $0 - 4 ]
} ) ;
this . $ = { suggestKeywords : [ { value : '*' , weight : 10000 } ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 783 :
2018-08-27 11:03:13 +08:00
this . $ = [ $$ [ $0 ] . identifier ] ;
break ;
2018-09-26 17:21:26 +08:00
case 784 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 2 ] . push ( $$ [ $0 ] . identifier ) ;
break ;
2018-09-26 17:21:26 +08:00
case 787 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 2 ] . insideKey ) {
parser . suggestKeyValues ( { identifierChain : $$ [ $0 - 4 ] . concat ( [ $$ [ $0 - 2 ] . identifier ] ) } ) ;
parser . suggestColumns ( ) ;
parser . suggestFunctions ( ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 788 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 2 ] . insideKey ) {
parser . suggestKeyValues ( { identifierChain : [ $$ [ $0 - 2 ] . identifier ] } ) ;
parser . suggestColumns ( ) ;
parser . suggestFunctions ( ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 790 :
2018-08-27 11:03:13 +08:00
parser . suggestColumns ( { identifierChain : $$ [ $0 - 2 ] } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 791 :
2018-08-27 11:03:13 +08:00
parser . suggestColumns ( { identifierChain : $$ [ $0 - 4 ] } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 793 :
2018-08-27 11:03:13 +08:00
this . $ = { identifier : { name : $$ [ $0 ] } , location : _$ [ $0 ] } ; ;
break ;
2018-09-26 17:21:26 +08:00
case 794 :
2018-08-27 11:03:13 +08:00
this . $ = { identifier : { name : $$ [ $0 - 3 ] , keySet : true } , location : _$ [ $0 - 3 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 795 :
2018-08-27 11:03:13 +08:00
this . $ = { identifier : { name : $$ [ $0 - 2 ] , keySet : true } , location : _$ [ $0 - 2 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 796 :
2018-08-27 11:03:13 +08:00
this . $ = { identifier : { name : $$ [ $0 - 3 ] } , insideKey : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 797 :
2018-08-27 11:03:13 +08:00
this . $ = { identifier : { name : $$ [ $0 - 3 ] } } ; ;
break ;
2018-09-26 17:21:26 +08:00
case 830 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
parser . addColumnLocation ( _$ [ $0 - 1 ] , $$ [ $0 - 1 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 831 : case 1746 : case 2045 : case 2067 : case 2081 : case 2095 : case 2279 : case 2727 : case 2737 : case 2738 : case 2763 : case 2769 : case 2772 : case 2777 : case 3118 : case 3127 : case 3128 : case 3157 : case 3167 : case 3262 : case 3308 : case 3309 : case 3321 : case 3323 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 832 : case 848 : case 2068 :
2018-08-27 11:03:13 +08:00
parser . addDatabaseLocation ( _$ [ $0 ] , [ { name : $$ [ $0 ] } ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 835 : case 1742 : case 2080 : case 2087 : case 2088 : case 3310 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 836 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 4 ] ) {
parser . suggestKeywords ( [ 'EXTENDED' , 'FORMATTED' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 837 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 3 ] ) {
parser . suggestKeywords ( [ 'EXTENDED' , 'FORMATTED' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 838 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
parser . suggestColumns ( ) ;
if ( ! $$ [ $0 ] ) {
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 839 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 ] ) {
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 842 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'DATABASE' , 'EXTENDED' , 'FORMATTED' , 'FUNCTION' , 'SCHEMA' ] ) ;
}
parser . suggestTables ( ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 843 : case 845 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'EXTENDED' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 844 : case 846 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ 'EXTENDED' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 847 : case 1940 : case 2023 : case 2026 : case 2075 : case 2597 : case 2726 : case 2747 : case 2757 : case 2761 : case 2835 : case 2836 : case 2842 : case 3091 : case 3160 : case 3232 : case 3248 : case 3307 : case 3320 : case 3322 : case 3365 : case 3394 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 849 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'DATABASE' , weight : 2 } , { value : 'EXTENDED' , weight : 1 } , { value : 'FORMATTED' , weight : 1 } ] ) ;
}
parser . suggestTables ( ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 851 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 ] ) ;
if ( ! $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ { value : 'DATABASE' , weight : 2 } , { value : 'EXTENDED' , weight : 1 } , { value : 'FORMATTED' , weight : 1 } ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 852 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'EXTENDED' , 'FORMATTED' ] ) ;
}
parser . suggestDatabases ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 853 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ 'EXTENDED' , 'FORMATTED' ] ) ;
}
parser . addDatabaseLocation ( _$ [ $0 ] , [ { name : $$ [ $0 ] } ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 861 :
2018-08-27 11:03:13 +08:00
parser . addCommonTableExpressions ( $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 862 : case 863 : case 901 :
2018-08-27 11:03:13 +08:00
parser . addCommonTableExpressions ( $$ [ $0 - 2 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 867 :
2018-08-27 11:03:13 +08:00
parser . addClauseLocation ( 'selectList' , parser . firstDefined ( $$ [ $0 - 1 ] , _$ [ $0 - 1 ] , $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] ) , _$ [ $0 ] ) ;
this . $ = { selectList : $$ [ $0 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 868 :
2018-08-27 11:03:13 +08:00
parser . addClauseLocation ( 'selectList' , parser . firstDefined ( $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] , $$ [ $0 - 4 ] , _$ [ $0 - 4 ] ) , _$ [ $0 - 1 ] ) ;
this . $ = { selectList : $$ [ $0 - 1 ] , tableExpression : $$ [ $0 ] }
break ;
2018-09-26 17:21:26 +08:00
case 881 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ALL' , 'DISTINCT' , 'SELECT' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 882 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ALL' , 'DISTINCT' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 884 :
2018-08-27 11:03:13 +08:00
parser . addClauseLocation ( 'selectList' , parser . firstDefined ( $$ [ $0 - 1 ] , _$ [ $0 - 1 ] , $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] ) , _$ [ $0 ] ) ;
if ( $$ [ $0 ] . cursorAtStart ) {
var keywords = parser . getSelectListKeywords ( ) ;
if ( ! $$ [ $0 - 1 ] && ! $$ [ $0 - 2 ] ) {
keywords . push ( { value : 'ALL' , weight : 2 } ) ;
keywords . push ( { value : 'DISTINCT' , weight : 2 } ) ;
}
if ( parser . isImpala ( ) && ! $$ [ $0 - 1 ] ) {
keywords . push ( { value : 'STRAIGHT_JOIN' , weight : 1 } ) ;
}
parser . suggestKeywords ( keywords ) ;
} else {
parser . checkForSelectListKeywords ( $$ [ $0 ] ) ;
}
if ( $$ [ $0 ] . suggestFunctions ) {
parser . suggestFunctions ( ) ;
}
if ( $$ [ $0 ] . suggestColumns ) {
parser . suggestColumns ( { identifierChain : [ ] , source : 'select' } ) ;
}
if ( $$ [ $0 ] . suggestTables ) {
parser . suggestTables ( { prependQuestionMark : true , prependFrom : true } ) ;
}
if ( $$ [ $0 ] . suggestDatabases ) {
parser . suggestDatabases ( { prependQuestionMark : true , prependFrom : true , appendDot : true } ) ;
}
if ( $$ [ $0 ] . suggestAggregateFunctions && ( ! $$ [ $0 - 2 ] || $$ [ $0 - 2 ] === 'ALL' ) ) {
parser . suggestAggregateFunctions ( ) ;
parser . suggestAnalyticFunctions ( ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 885 :
2018-08-27 11:03:13 +08:00
parser . addClauseLocation ( 'selectList' , parser . firstDefined ( $$ [ $0 - 1 ] , _$ [ $0 - 1 ] , $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] ) , _$ [ $0 ] , true ) ;
var keywords = parser . getSelectListKeywords ( ) ;
if ( ! $$ [ $0 - 2 ] || $$ [ $0 - 2 ] === 'ALL' ) {
parser . suggestAggregateFunctions ( ) ;
parser . suggestAnalyticFunctions ( ) ;
}
if ( ! $$ [ $0 - 1 ] && ! $$ [ $0 - 2 ] ) {
keywords . push ( { value : 'ALL' , weight : 2 } ) ;
keywords . push ( { value : 'DISTINCT' , weight : 2 } ) ;
}
if ( parser . isImpala ( ) && ! $$ [ $0 - 1 ] ) {
keywords . push ( { value : 'STRAIGHT_JOIN' , weight : 1 } ) ;
}
parser . suggestKeywords ( keywords ) ;
parser . suggestFunctions ( ) ;
parser . suggestColumns ( { identifierChain : [ ] , source : 'select' } ) ;
parser . suggestTables ( { prependQuestionMark : true , prependFrom : true } ) ;
parser . suggestDatabases ( { prependQuestionMark : true , prependFrom : true , appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 886 :
2018-08-27 11:03:13 +08:00
parser . addClauseLocation ( 'selectList' , parser . firstDefined ( $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] , $$ [ $0 - 4 ] , _$ [ $0 - 4 ] ) , _$ [ $0 - 1 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 887 :
2018-08-27 11:03:13 +08:00
parser . addClauseLocation ( 'selectList' , parser . firstDefined ( $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] , $$ [ $0 - 4 ] , _$ [ $0 - 4 ] ) , _$ [ $0 - 1 ] ) ;
parser . selectListNoTableSuggest ( $$ [ $0 - 1 ] , $$ [ $0 - 3 ] ) ;
if ( parser . yy . result . suggestColumns ) {
parser . yy . result . suggestColumns . source = 'select' ;
}
break ;
2018-09-26 17:21:26 +08:00
case 888 :
2018-08-27 11:03:13 +08:00
parser . addClauseLocation ( 'selectList' , parser . firstDefined ( $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] , $$ [ $0 - 4 ] , _$ [ $0 - 4 ] ) , _$ [ $0 - 1 ] , true ) ;
var keywords = parser . getSelectListKeywords ( ) ;
if ( ! $$ [ $0 - 3 ] || $$ [ $0 - 3 ] === 'ALL' ) {
parser . suggestAggregateFunctions ( ) ;
parser . suggestAnalyticFunctions ( ) ;
}
if ( ! $$ [ $0 - 2 ] && ! $$ [ $0 - 3 ] ) {
keywords . push ( { value : 'ALL' , weight : 2 } ) ;
keywords . push ( { value : 'DISTINCT' , weight : 2 } ) ;
}
if ( parser . isImpala ( ) && ! $$ [ $0 - 2 ] ) {
keywords . push ( { value : 'STRAIGHT_JOIN' , weight : 1 } ) ;
}
parser . suggestKeywords ( keywords ) ;
parser . suggestFunctions ( ) ;
parser . suggestColumns ( { identifierChain : [ ] , source : 'select' } ) ;
parser . suggestTables ( { prependQuestionMark : true , prependFrom : true } ) ;
parser . suggestDatabases ( { prependQuestionMark : true , prependFrom : true , appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 889 :
2018-08-27 11:03:13 +08:00
parser . addClauseLocation ( 'selectList' , parser . firstDefined ( $$ [ $0 - 3 ] , _$ [ $0 - 3 ] , $$ [ $0 - 4 ] , _$ [ $0 - 4 ] , $$ [ $0 - 5 ] , _$ [ $0 - 5 ] ) , _$ [ $0 - 2 ] ) ;
parser . checkForSelectListKeywords ( $$ [ $0 - 2 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 890 :
2018-08-27 11:03:13 +08:00
parser . addClauseLocation ( 'selectList' , parser . firstDefined ( $$ [ $0 - 4 ] , _$ [ $0 - 4 ] , $$ [ $0 - 5 ] , _$ [ $0 - 5 ] , $$ [ $0 - 6 ] , _$ [ $0 - 6 ] ) , _$ [ $0 - 3 ] ) ;
parser . checkForSelectListKeywords ( $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 891 :
2018-08-27 11:03:13 +08:00
parser . addClauseLocation ( 'selectList' , parser . firstDefined ( $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] , $$ [ $0 - 4 ] , _$ [ $0 - 4 ] ) , _$ [ $0 - 1 ] ) ;
parser . checkForSelectListKeywords ( $$ [ $0 - 1 ] ) ;
var keywords = [ 'FROM' ] ;
if ( parser . yy . result . suggestKeywords ) {
keywords = parser . yy . result . suggestKeywords . concat ( keywords ) ;
}
parser . suggestKeywords ( keywords ) ;
parser . suggestTables ( { prependFrom : true } ) ;
parser . suggestDatabases ( { prependFrom : true , appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 892 :
2018-08-27 11:03:13 +08:00
parser . selectListNoTableSuggest ( $$ [ $0 - 1 ] , $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 896 : case 972 : case 1003 : case 1016 : case 1020 : case 1058 : case 1062 : case 1090 : case 1116 : case 1117 : case 1198 : case 1200 : case 1268 : case 1278 : case 1285 : case 1297 : case 1475 : case 1675 : case 1676 : case 1701 : case 1702 : case 1703 : case 1986 : case 2150 : case 2167 : case 3110 : case 3410 :
2018-08-27 11:03:13 +08:00
this . $ = $$ [ $0 ] ;
break ;
2018-09-26 17:21:26 +08:00
case 899 :
2018-08-27 11:03:13 +08:00
this . $ = $$ [ $0 - 2 ] . concat ( [ $$ [ $0 ] ] ) ; ;
break ;
2018-09-26 17:21:26 +08:00
case 903 :
2018-08-27 11:03:13 +08:00
parser . addCommonTableExpressions ( $$ [ $0 - 4 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 904 :
2018-08-27 11:03:13 +08:00
parser . addCteAliasLocation ( _$ [ $0 - 4 ] , $$ [ $0 - 4 ] ) ;
$$ [ $0 - 1 ] . alias = $$ [ $0 - 4 ] ;
this . $ = $$ [ $0 - 1 ] ;
break ;
2018-09-26 17:21:26 +08:00
case 905 : case 1530 : case 2390 : case 2450 : case 2527 : case 2531 : case 2604 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'AS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 906 : case 1396 : case 2019 : case 2464 : case 2473 : case 3092 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'SELECT' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 912 : case 913 :
2018-08-27 11:03:13 +08:00
parser . addClauseLocation ( 'whereClause' , _$ [ $0 - 1 ] , $$ [ $0 ] . whereClauseLocation ) ;
parser . addClauseLocation ( 'limitClause' , $$ [ $0 ] . limitClausePreceding || _$ [ $0 - 1 ] , $$ [ $0 ] . limitClauseLocation ) ;
break ;
2018-09-26 17:21:26 +08:00
case 914 :
2018-08-27 11:03:13 +08:00
var keywords = [ ] ;
parser . addClauseLocation ( 'whereClause' , _$ [ $0 - 3 ] , $$ [ $0 - 1 ] . whereClauseLocation ) ;
parser . addClauseLocation ( 'limitClause' , $$ [ $0 - 2 ] . limitClausePreceding || _$ [ $0 - 3 ] , $$ [ $0 - 2 ] . limitClauseLocation ) ;
if ( $$ [ $0 - 3 ] ) {
if ( ! $$ [ $0 - 3 ] . hasLateralViews && typeof $$ [ $0 - 3 ] . tableReferenceList . hasJoinCondition !== 'undefined' && ! $$ [ $0 - 3 ] . tableReferenceList . hasJoinCondition ) {
keywords . push ( { value : 'ON' , weight : 3 } ) ;
if ( parser . isImpala ( ) ) {
keywords . push ( { value : 'USING' , weight : 3 } ) ;
}
}
if ( $$ [ $0 - 3 ] . suggestKeywords ) {
keywords = parser . createWeightedKeywords ( $$ [ $0 - 3 ] . suggestKeywords , 3 ) ;
}
if ( $$ [ $0 - 3 ] . tableReferenceList . suggestJoinConditions ) {
parser . suggestJoinConditions ( $$ [ $0 - 3 ] . tableReferenceList . suggestJoinConditions ) ;
}
if ( $$ [ $0 - 3 ] . tableReferenceList . suggestJoins ) {
parser . suggestJoins ( $$ [ $0 - 3 ] . tableReferenceList . suggestJoins ) ;
}
if ( ! $$ [ $0 - 3 ] . hasLateralViews && $$ [ $0 - 3 ] . tableReferenceList . suggestKeywords ) {
keywords = keywords . concat ( parser . createWeightedKeywords ( $$ [ $0 - 3 ] . tableReferenceList . suggestKeywords , 3 ) ) ;
}
// Lower the weights for 'TABLESAMPLE' and 'LATERAL VIEW'
keywords . forEach ( function ( keyword ) {
if ( keyword . value === 'TABLESAMPLE' || keyword . value === 'LATERAL VIEW' ) {
keyword . weight = 1.1 ;
}
} ) ;
if ( ! $$ [ $0 - 3 ] . hasLateralViews && $$ [ $0 - 3 ] . tableReferenceList . types ) {
var veKeywords = parser . getValueExpressionKeywords ( $$ [ $0 - 3 ] . tableReferenceList ) ;
keywords = keywords . concat ( veKeywords . suggestKeywords ) ;
if ( veKeywords . suggestColRefKeywords ) {
parser . suggestColRefKeywords ( veKeywords . suggestColRefKeywords ) ;
parser . addColRefIfExists ( $$ [ $0 - 3 ] . tableReferenceList ) ;
}
}
}
if ( $$ [ $0 - 1 ] . empty && $$ [ $0 ] && $$ [ $0 ] . joinType . toUpperCase ( ) === 'JOIN' ) {
keywords = keywords . concat ( [ 'FULL' , 'FULL OUTER' , 'LEFT' , 'LEFT OUTER' , 'RIGHT' , 'RIGHT OUTER' ] ) ;
if ( parser . isHive ( ) ) {
keywords = keywords . concat ( [ 'CROSS' , 'INNER' , 'LEFT SEMI' ] ) ;
} else if ( parser . isImpala ( ) ) {
keywords = keywords . concat ( [ 'ANTI' , 'CROSS' , 'INNER' , 'LEFT ANTI' , 'LEFT INNER' , 'LEFT SEMI' , 'OUTER' , 'RIGHT ANTI' , 'RIGHT INNER' , 'RIGHT SEMI' , 'SEMI' ] ) ;
} else {
keywords . push ( 'INNER' ) ;
}
parser . suggestKeywords ( keywords ) ;
return ;
}
if ( $$ [ $0 - 1 ] . suggestKeywords ) {
keywords = keywords . concat ( parser . createWeightedKeywords ( $$ [ $0 - 1 ] . suggestKeywords , 2 ) ) ;
}
if ( $$ [ $0 - 1 ] . suggestFilters ) {
parser . suggestFilters ( $$ [ $0 - 1 ] . suggestFilters ) ;
}
if ( $$ [ $0 - 1 ] . suggestGroupBys ) {
parser . suggestGroupBys ( $$ [ $0 - 1 ] . suggestGroupBys ) ;
}
if ( $$ [ $0 - 1 ] . suggestOrderBys ) {
parser . suggestOrderBys ( $$ [ $0 - 1 ] . suggestOrderBys ) ;
}
if ( $$ [ $0 - 1 ] . empty ) {
keywords . push ( { value : 'UNION' , weight : 2.11 } ) ;
}
keywords = keywords . concat ( [
{ value : 'FULL JOIN' , weight : 1 } ,
{ value : 'FULL OUTER JOIN' , weight : 1 } ,
{ value : 'JOIN' , weight : 1 } ,
{ value : 'LEFT JOIN' , weight : 1 } ,
{ value : 'LEFT OUTER JOIN' , weight : 1 } ,
{ value : 'RIGHT JOIN' , weight : 1 } ,
{ value : 'RIGHT OUTER JOIN' , weight : 1 }
] ) ;
if ( parser . isHive ( ) ) {
keywords = keywords . concat ( [
{ value : 'CROSS JOIN' , weight : 1 } ,
{ value : 'INNER JOIN' , weight : 1 } ,
{ value : 'LEFT SEMI JOIN' , weight : 1 }
] ) ;
} else if ( parser . isImpala ( ) ) {
keywords = keywords . concat ( [
{ value : 'ANTI JOIN' , weight : 1 } ,
{ value : 'INNER JOIN' , weight : 1 } ,
{ value : 'LEFT ANTI JOIN' , weight : 1 } ,
{ value : 'LEFT INNER JOIN' , weight : 1 } ,
{ value : 'LEFT SEMI JOIN' , weight : 1 } ,
{ value : 'OUTER JOIN' , weight : 1 } ,
{ value : 'RIGHT ANTI JOIN' , weight : 1 } ,
{ value : 'RIGHT INNER JOIN' , weight : 1 } ,
{ value : 'RIGHT SEMI JOIN' , weight : 1 } ,
{ value : 'SEMI JOIN' , weight : 1 }
] ) ;
} else {
keywords . push ( { value : 'INNER JOIN' , weight : 1 } ) ;
}
parser . suggestKeywords ( keywords ) ;
break ;
2018-09-26 17:21:26 +08:00
case 915 :
2018-08-27 11:03:13 +08:00
// A couple of things are going on here:
// - If there are no SelectConditions (WHERE, GROUP BY, etc.) we should suggest complete join options
// - If there's an OptionalJoin at the end, i.e. 'SELECT * FROM foo | JOIN ...' we should suggest
// different join types
// - The FromClause could end with a valueExpression, in which case we should suggest keywords like '='
// or 'AND' based on type
if ( ! $$ [ $0 - 1 ] ) {
parser . addClauseLocation ( 'whereClause' , _$ [ $0 - 2 ] ) ;
parser . addClauseLocation ( 'limitClause' , _$ [ $0 - 2 ] ) ;
return ;
}
parser . addClauseLocation ( 'whereClause' , _$ [ $0 - 2 ] , $$ [ $0 - 1 ] . whereClauseLocation ) ;
parser . addClauseLocation ( 'limitClause' , $$ [ $0 - 1 ] . limitClausePreceding || _$ [ $0 - 2 ] , $$ [ $0 - 1 ] . limitClauseLocation ) ;
var keywords = [ ] ;
if ( $$ [ $0 - 1 ] . suggestColRefKeywords ) {
parser . suggestColRefKeywords ( $$ [ $0 - 1 ] . suggestColRefKeywords ) ;
parser . addColRefIfExists ( $$ [ $0 - 1 ] ) ;
}
if ( $$ [ $0 - 1 ] . suggestKeywords && $$ [ $0 - 1 ] . suggestKeywords . length ) {
keywords = keywords . concat ( parser . createWeightedKeywords ( $$ [ $0 - 1 ] . suggestKeywords , 2 ) ) ;
}
if ( $$ [ $0 - 1 ] . cursorAtEnd ) {
keywords . push ( { value : 'UNION' , weight : 2.11 } ) ;
}
parser . suggestKeywords ( keywords ) ;
break ;
2018-09-26 17:21:26 +08:00
case 919 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
this . $ = { tableReferenceList : $$ [ $0 - 1 ] , suggestKeywords : [ 'LATERAL VIEW' ] }
} else {
this . $ = { tableReferenceList : $$ [ $0 - 1 ] }
}
if ( parser . isHive ( ) && $$ [ $0 ] ) {
parser . yy . lateralViews = $$ [ $0 ] . lateralViews ;
this . $ . hasLateralViews = true ;
if ( $$ [ $0 ] . suggestKeywords ) {
this . $ . suggestKeywords = this . $ . suggestKeywords . concat ( $$ [ $0 ] . suggestKeywords ) ;
}
}
break ;
2018-09-26 17:21:26 +08:00
case 920 : case 1290 :
2018-08-27 11:03:13 +08:00
parser . suggestTables ( ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 921 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] ) {
parser . yy . lateralViews = $$ [ $0 ] . lateralViews ;
}
break ;
2018-09-26 17:21:26 +08:00
case 923 :
2018-08-27 11:03:13 +08:00
var keywords = parser . getKeywordsForOptionalsLR (
[ $$ [ $0 - 7 ] , $$ [ $0 - 6 ] , $$ [ $0 - 5 ] , $$ [ $0 - 4 ] , $$ [ $0 - 3 ] , $$ [ $0 - 2 ] , $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] ] ,
[ { value : 'WHERE' , weight : 9 } , { value : 'GROUP BY' , weight : 8 } , { value : 'HAVING' , weight : 7 } , { value : 'WINDOW' , weight : 6 } , { value : 'ORDER BY' , weight : 5 } , [ { value : 'CLUSTER BY' , weight : 4 } , { value : 'DISTRIBUTE BY' , weight : 4 } ] , { value : 'SORT BY' , weight : 4 } , { value : 'LIMIT' , weight : 3 } , { value : 'OFFSET' , weight : 2 } ] ,
[ true , true , true , parser . isHive ( ) , true , parser . isHive ( ) , parser . isHive ( ) && ! $$ [ $0 - 3 ] , true , parser . isImpala ( ) ] ) ;
if ( keywords . length > 0 ) {
this . $ = { suggestKeywords : keywords , empty : ! $$ [ $0 - 7 ] && ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] } ;
} else {
this . $ = { } ;
}
this . $ . whereClauseLocation = $$ [ $0 - 7 ] ? _$ [ $0 - 7 ] : undefined ;
this . $ . limitClausePreceding = parser . firstDefined ( $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] , $$ [ $0 - 4 ] , _$ [ $0 - 4 ] , $$ [ $0 - 5 ] , _$ [ $0 - 5 ] , $$ [ $0 - 6 ] , _$ [ $0 - 6 ] , $$ [ $0 - 7 ] , _$ [ $0 - 7 ] ) ;
this . $ . limitClauseLocation = $$ [ $0 - 1 ] ? _$ [ $0 - 1 ] : undefined ;
if ( ! $$ [ $0 - 7 ] && ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ . suggestFilters = { prefix : 'WHERE' , tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ;
}
if ( ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ . suggestGroupBys = { prefix : 'GROUP BY' , tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ;
}
if ( ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ . suggestOrderBys = { prefix : 'ORDER BY' , tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 924 :
2018-08-27 11:03:13 +08:00
if ( parser . yy . result . suggestColumns ) {
parser . yy . result . suggestColumns . source = 'where' ;
}
break ;
2018-09-26 17:21:26 +08:00
case 925 :
2018-08-27 11:03:13 +08:00
if ( parser . yy . result . suggestColumns ) {
parser . yy . result . suggestColumns . source = 'group by' ;
}
break ;
2018-09-26 17:21:26 +08:00
case 928 :
2018-08-27 11:03:13 +08:00
if ( parser . yy . result . suggestColumns ) {
parser . yy . result . suggestColumns . source = 'order by' ;
}
break ;
2018-09-26 17:21:26 +08:00
case 932 :
2018-08-27 11:03:13 +08:00
var keywords = parser . getKeywordsForOptionalsLR (
[ $$ [ $0 - 6 ] , $$ [ $0 - 5 ] , $$ [ $0 - 4 ] , $$ [ $0 - 3 ] , $$ [ $0 - 2 ] , $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] ] ,
[ { value : 'GROUP BY' , weight : 8 } , { value : 'HAVING' , weight : 7 } , { value : 'WINDOW' , weight : 6 } , { value : 'ORDER BY' , weight : 5 } , [ { value : 'CLUSTER BY' , weight : 4 } , { value : 'DISTRIBUTE BY' , weight : 4 } ] , { value : 'SORT BY' , weight : 4 } , { value : 'LIMIT' , weight : 3 } , { value : 'OFFSET' , weight : 2 } ] ,
[ true , true , parser . isHive ( ) , true , parser . isHive ( ) , parser . isHive ( ) && ! $$ [ $0 - 3 ] , true , parser . isImpala ( ) ] ) ;
if ( $$ [ $0 - 8 ] . suggestKeywords ) {
keywords = keywords . concat ( parser . createWeightedKeywords ( $$ [ $0 - 8 ] . suggestKeywords , 1 ) ) ;
}
this . $ = parser . getValueExpressionKeywords ( $$ [ $0 - 8 ] , keywords ) ;
this . $ . cursorAtEnd = ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ;
if ( $$ [ $0 - 8 ] . columnReference ) {
this . $ . columnReference = $$ [ $0 - 8 ] . columnReference ;
}
if ( ! $$ [ $0 - 6 ] ) {
parser . suggestGroupBys ( { prefix : 'GROUP BY' , tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ) ;
}
if ( ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] ) {
parser . suggestOrderBys ( { prefix : 'ORDER BY' , tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ) ;
}
this . $ . whereClauseLocation = $$ [ $0 - 8 ] ? _$ [ $0 - 8 ] : undefined ;
this . $ . limitClausePreceding = parser . firstDefined ( $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] , $$ [ $0 - 4 ] , _$ [ $0 - 4 ] , $$ [ $0 - 5 ] , _$ [ $0 - 5 ] , $$ [ $0 - 6 ] , _$ [ $0 - 6 ] , $$ [ $0 - 8 ] , _$ [ $0 - 8 ] ) ;
this . $ . limitClauseLocation = $$ [ $0 - 1 ] ? _$ [ $0 - 1 ] : undefined ;
break ;
2018-09-26 17:21:26 +08:00
case 933 :
2018-08-27 11:03:13 +08:00
var keywords = parser . getKeywordsForOptionalsLR (
[ $$ [ $0 - 5 ] , $$ [ $0 - 4 ] , $$ [ $0 - 3 ] , $$ [ $0 - 2 ] , $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] ] ,
[ { value : 'HAVING' , weight : 7 } , { value : 'WINDOW' , weight : 6 } , { value : 'ORDER BY' , weight : 5 } , [ { value : 'CLUSTER BY' , weight : 4 } , { value : 'DISTRIBUTE BY' , weight : 4 } ] , { value : 'SORT BY' , weight : 4 } , { value : 'LIMIT' , weight : 3 } , { value : 'OFFSET' , weight : 2 } ] ,
[ true , parser . isHive ( ) , true , parser . isHive ( ) , parser . isHive ( ) && ! $$ [ $0 - 3 ] , true , parser . isImpala ( ) ] ) ;
if ( $$ [ $0 - 7 ] . suggestKeywords ) {
keywords = keywords . concat ( parser . createWeightedKeywords ( $$ [ $0 - 7 ] . suggestKeywords , 8 ) ) ;
}
if ( $$ [ $0 - 7 ] . valueExpression ) {
this . $ = parser . getValueExpressionKeywords ( $$ [ $0 - 7 ] . valueExpression , keywords ) ;
if ( $$ [ $0 - 7 ] . valueExpression . columnReference ) {
this . $ . columnReference = $$ [ $0 - 7 ] . valueExpression . columnReference ;
}
} else {
this . $ = { suggestKeywords : keywords } ;
}
this . $ . cursorAtEnd = ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ;
if ( ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] ) {
parser . suggestOrderBys ( { prefix : 'ORDER BY' , tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ) ;
}
this . $ . whereClauseLocation = $$ [ $0 - 8 ] ? _$ [ $0 - 8 ] : undefined ;
this . $ . limitClausePreceding = parser . firstDefined ( $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] , $$ [ $0 - 4 ] , _$ [ $0 - 4 ] , $$ [ $0 - 5 ] , _$ [ $0 - 5 ] , $$ [ $0 - 7 ] , _$ [ $0 - 7 ] ) ;
this . $ . limitClauseLocation = $$ [ $0 - 1 ] ? _$ [ $0 - 1 ] : undefined ;
break ;
2018-09-26 17:21:26 +08:00
case 934 :
2018-08-27 11:03:13 +08:00
var keywords = parser . getKeywordsForOptionalsLR (
[ $$ [ $0 - 4 ] , $$ [ $0 - 3 ] , $$ [ $0 - 2 ] , $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] ] ,
[ { value : 'WINDOW' , weight : 6 } , { value : 'ORDER BY' , weight : 5 } , [ { value : 'CLUSTER BY' , weight : 4 } , { value : 'DISTRIBUTE BY' , weight : 4 } ] , { value : 'SORT BY' , weight : 4 } , { value : 'LIMIT' , weight : 3 } , { value : 'OFFSET' , weight : 2 } ] ,
[ parser . isHive ( ) , true , parser . isHive ( ) , parser . isHive ( ) && ! $$ [ $0 - 3 ] , true , parser . isImpala ( ) ] ) ;
this . $ = { suggestKeywords : keywords , cursorAtEnd : ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] } ;
if ( ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] ) {
parser . suggestOrderBys ( { prefix : 'ORDER BY' , tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ) ;
}
this . $ . whereClauseLocation = $$ [ $0 - 8 ] ? _$ [ $0 - 8 ] : undefined ;
this . $ . limitClausePreceding = parser . firstDefined ( $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] , $$ [ $0 - 4 ] , _$ [ $0 - 4 ] , $$ [ $0 - 6 ] , _$ [ $0 - 6 ] ) ;
this . $ . limitClauseLocation = $$ [ $0 - 1 ] ? _$ [ $0 - 1 ] : undefined ;
break ;
2018-09-26 17:21:26 +08:00
case 935 :
2018-08-27 11:03:13 +08:00
var keywords = parser . getKeywordsForOptionalsLR ( [ $$ [ $0 - 3 ] , $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] ] , [ { value : 'ORDER BY' , weight : 5 } , [ { value : 'CLUSTER BY' , weight : 4 } , { value : 'DISTRIBUTE BY' , weight : 4 } , { value : 'SORT BY' , weight : 4 } ] , { value : 'LIMIT' , weight : 3 } , { value : 'OFFSET' , weight : 2 } ] , [ true , parser . isHive ( ) , true , parser . isImpala ( ) ] ) ;
this . $ = { suggestKeywords : keywords , cursorAtEnd : ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] } ;
if ( ! $$ [ $0 - 3 ] ) {
parser . suggestOrderBys ( { prefix : 'ORDER BY' , tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ) ;
}
this . $ . whereClauseLocation = $$ [ $0 - 8 ] ? _$ [ $0 - 8 ] : undefined ;
this . $ . limitClausePreceding = parser . firstDefined ( $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 3 ] , _$ [ $0 - 3 ] , $$ [ $0 - 5 ] , _$ [ $0 - 5 ] ) ;
this . $ . limitClauseLocation = $$ [ $0 - 1 ] ? _$ [ $0 - 1 ] : undefined ;
break ;
2018-09-26 17:21:26 +08:00
case 936 :
2018-08-27 11:03:13 +08:00
var keywords = parser . getKeywordsForOptionalsLR ( [ $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] ] , [ [ { value : 'CLUSTER BY' , weight : 4 } , { value : 'DISTRIBUTE BY' , weight : 4 } ] , { value : 'LIMIT' , weight : 3 } , { value : 'OFFSET' , weight : 2 } ] , [ parser . isHive ( ) , true , parser . isImpala ( ) ] ) ;
if ( $$ [ $0 - 4 ] . suggestKeywords ) {
keywords = keywords . concat ( parser . createWeightedKeywords ( $$ [ $0 - 4 ] . suggestKeywords , 5 ) ) ;
}
this . $ = { suggestKeywords : keywords , cursorAtEnd : ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] } ;
this . $ . whereClauseLocation = $$ [ $0 - 8 ] ? _$ [ $0 - 8 ] : undefined ;
this . $ . limitClausePreceding = parser . firstDefined ( $$ [ $0 - 2 ] , _$ [ $0 - 2 ] , $$ [ $0 - 4 ] , _$ [ $0 - 4 ] ) ;
this . $ . limitClauseLocation = $$ [ $0 - 1 ] ? _$ [ $0 - 1 ] : undefined ;
break ;
2018-09-26 17:21:26 +08:00
case 937 :
2018-08-27 11:03:13 +08:00
var keywords = parser . getKeywordsForOptionalsLR ( [ $$ [ $0 - 1 ] , $$ [ $0 ] ] , [ { value : 'LIMIT' , weight : 3 } , { value : 'OFFSET' , weight : 2 } ] , [ true , parser . isImpala ( ) ] ) ;
if ( $$ [ $0 - 3 ] . suggestKeywords ) {
keywords = keywords . concat ( parser . createWeightedKeywords ( $$ [ $0 - 3 ] . suggestKeywords , 4 ) ) ;
}
this . $ = { suggestKeywords : keywords , cursorAtEnd : ! $$ [ $0 - 1 ] && ! $$ [ $0 ] } ;
this . $ . whereClauseLocation = $$ [ $0 - 8 ] ? _$ [ $0 - 8 ] : undefined ;
this . $ . limitClausePreceding = _$ [ $0 - 3 ] ;
this . $ . limitClauseLocation = $$ [ $0 - 1 ] ? _$ [ $0 - 1 ] : undefined ;
break ;
2018-09-26 17:21:26 +08:00
case 938 :
2018-08-27 11:03:13 +08:00
var keywords = parser . getKeywordsForOptionalsLR ( [ $$ [ $0 ] ] , [ { value : 'OFFSET' , weight : 2 } ] , [ parser . isImpala ( ) ] ) ;
this . $ = { suggestKeywords : keywords , cursorAtEnd : ! $$ [ $0 ] } ;
this . $ . whereClauseLocation = $$ [ $0 - 8 ] ? _$ [ $0 - 8 ] : undefined ;
this . $ . limitClausePreceding = parser . firstDefined ( $$ [ $0 - 3 ] , _$ [ $0 - 3 ] , $$ [ $0 - 4 ] , _$ [ $0 - 4 ] , $$ [ $0 - 5 ] , _$ [ $0 - 5 ] , $$ [ $0 - 6 ] , _$ [ $0 - 6 ] , $$ [ $0 - 7 ] , _$ [ $0 - 7 ] , $$ [ $0 - 8 ] , _$ [ $0 - 8 ] ) ;
this . $ . limitClauseLocation = $$ [ $0 - 2 ] ? _$ [ $0 - 2 ] : undefined ;
break ;
2018-09-26 17:21:26 +08:00
case 939 :
2018-08-27 11:03:13 +08:00
this . $ = {
suggestKeywords : parser . getKeywordsForOptionalsLR ( [ $$ [ $0 - 6 ] , $$ [ $0 - 5 ] , $$ [ $0 - 4 ] , $$ [ $0 - 3 ] , $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] ] , [ { value : 'GROUP BY' , weight : 8 } , { value : 'HAVING' , weight : 7 } , { value : 'WINDOW' , weight : 6 } , { value : 'ORDER BY' , weight : 5 } , [ { value : 'CLUSTER BY' , weight : 4 } , { value : 'DISTRIBUTE BY' , weight : 4 } , { value : 'SORT BY' , weight : 4 } ] , { value : 'LIMIT' , weight : 3 } , { value : 'OFFSET' , weight : 2 } ] , [ true , true , parser . isHive ( ) , true , parser . isHive ( ) , true , parser . isImpala ( ) ] ) ,
cursorAtEnd : ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ]
} ;
break ;
2018-09-26 17:21:26 +08:00
case 940 :
2018-08-27 11:03:13 +08:00
this . $ = {
suggestKeywords : parser . getKeywordsForOptionalsLR ( [ $$ [ $0 - 4 ] , $$ [ $0 - 3 ] , $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] ] , [ { value : 'WINDOW' , weight : 6 } , { value : 'ORDER BY' , weight : 5 } , [ { value : 'CLUSTER BY' , weight : 4 } , { value : 'DISTRIBUTE BY' , weight : 4 } , { value : 'SORT BY' , weight : 4 } ] , { value : 'LIMIT' , weight : 3 } , { value : 'OFFSET' , weight : 2 } ] , [ parser . isHive ( ) , true , parser . isHive ( ) , true , parser . isImpala ( ) ] ) ,
cursorAtEnd : ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ]
}
break ;
2018-09-26 17:21:26 +08:00
case 941 :
2018-08-27 11:03:13 +08:00
this . $ = {
suggestKeywords : parser . getKeywordsForOptionalsLR ( [ $$ [ $0 - 3 ] , $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] ] , [ { value : 'ORDER BY' , weight : 5 } , [ { value : 'CLUSTER BY' , weight : 4 } , { value : 'DISTRIBUTE BY' , weight : 4 } , { value : 'SORT BY' , weight : 4 } ] , { value : 'LIMIT' , weight : 3 } , { value : 'OFFSET' , weight : 2 } ] , [ true , parser . isHive ( ) , true , parser . isImpala ( ) ] ) ,
cursorAtEnd : ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ]
}
break ;
2018-09-26 17:21:26 +08:00
case 942 :
2018-08-27 11:03:13 +08:00
this . $ = {
suggestKeywords : parser . getKeywordsForOptionalsLR ( [ $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] ] , [ [ { value : 'CLUSTER BY' , weight : 4 } , { value : 'DISTRIBUTE BY' , weight : 4 } , { value : 'SORT BY' , weight : 4 } ] , { value : 'LIMIT' , weight : 3 } , { value : 'OFFSET' , weight : 2 } ] , [ parser . isHive ( ) , true , parser . isImpala ( ) ] ) ,
cursorAtEnd : ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ]
}
break ;
2018-09-26 17:21:26 +08:00
case 943 :
2018-08-27 11:03:13 +08:00
this . $ = {
suggestKeywords : parser . getKeywordsForOptionalsLR ( [ $$ [ $0 - 1 ] , $$ [ $0 ] ] , [ { value : 'LIMIT' , weight : 3 } , { value : 'OFFSET' , weight : 2 } ] , [ true , parser . isImpala ( ) ] ) ,
cursorAtEnd : ! $$ [ $0 - 1 ] && ! $$ [ $0 ]
}
break ;
2018-09-26 17:21:26 +08:00
case 944 :
2018-08-27 11:03:13 +08:00
this . $ = {
suggestKeywords : parser . getKeywordsForOptionalsLR ( [ $$ [ $0 ] ] , [ { value : 'OFFSET' , weight : 2 } ] , [ parser . isImpala ( ) ] ) ,
cursorAtEnd : ! $$ [ $0 ]
}
break ;
2018-09-26 17:21:26 +08:00
case 973 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . suggestFilters ) {
parser . suggestFilters ( { tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 974 :
2018-08-27 11:03:13 +08:00
parser . suggestFunctions ( ) ;
parser . suggestColumns ( ) ;
parser . suggestKeywords ( [ 'EXISTS' , 'NOT EXISTS' ] ) ;
parser . suggestFilters ( { tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 977 :
2018-08-27 11:03:13 +08:00
this . $ = { valueExpression : $$ [ $0 ] ? false : $$ [ $0 - 1 ] } ;
if ( ! $$ [ $0 ] && parser . isHive ( ) ) {
this . $ . suggestKeywords = [ 'GROUPING SETS' , 'WITH CUBE' , 'WITH ROLLUP' ] ;
}
break ;
2018-09-26 17:21:26 +08:00
case 978 : case 1027 : case 1053 : case 1057 : case 1060 :
2018-08-27 11:03:13 +08:00
parser . suggestSelectListAliases ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 979 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . suggestSelectListAliases ( ) ;
parser . suggestGroupBys ( { tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 980 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'BY' ] ) ;
parser . suggestGroupBys ( { prefix : 'BY' , tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 987 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'CUBE' , 'ROLLUP' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 989 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'SETS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1017 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . emptyOrderBy ) {
parser . suggestOrderBys ( { tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1018 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'BY' ] ) ;
parser . suggestOrderBys ( { prefix : 'BY' , tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1022 :
2018-08-27 11:03:13 +08:00
this . $ = { emptyOrderBy : false }
parser . valueExpressionSuggest ( ) ;
parser . suggestAnalyticFunctions ( ) ;
parser . suggestSelectListAliases ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1023 : case 1024 : case 1025 :
2018-08-27 11:03:13 +08:00
this . $ = { emptyOrderBy : false } ;
break ;
2018-09-26 17:21:26 +08:00
case 1026 :
2018-08-27 11:03:13 +08:00
this . $ = parser . mergeSuggestKeywords ( $$ [ $0 - 1 ] , $$ [ $0 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1029 :
2018-08-27 11:03:13 +08:00
this . $ = { emptyOrderBy : true }
parser . valueExpressionSuggest ( ) ;
parser . suggestAnalyticFunctions ( ) ;
parser . suggestSelectListAliases ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1030 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : [ 'ASC' , 'DESC' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1035 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
this . $ = { suggestKeywords : [ 'NULLS FIRST' , 'NULLS LAST' ] } ;
} else {
this . $ = { } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1038 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FIRST' , 'LAST' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1042 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : [ 'SORT BY' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1051 : case 1055 : case 1059 :
2018-08-27 11:03:13 +08:00
suggestKeywords : [ 'BY' ] ;
break ;
2018-09-26 17:21:26 +08:00
case 1052 : case 1056 :
2018-08-27 11:03:13 +08:00
parser . suggestColumns ( ) ;
parser . suggestSelectListAliases ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1067 :
2018-08-27 11:03:13 +08:00
parser . addColumnLocation ( $$ [ $0 - 1 ] . location , [ $$ [ $0 - 1 ] . identifier ] ) ;
this . $ = $$ [ $0 ] ;
break ;
2018-09-26 17:21:26 +08:00
case 1078 : case 1083 :
2018-08-27 11:03:13 +08:00
parser . suggestFunctions ( { types : [ 'BIGINT' ] } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1079 : case 1084 :
2018-08-27 11:03:13 +08:00
delete parser . yy . result . suggestColumns ;
break ;
2018-09-26 17:21:26 +08:00
case 1088 : case 1089 :
2018-08-27 11:03:13 +08:00
// verifyType($$[$0], 'BOOLEAN');
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1091 :
2018-08-27 11:03:13 +08:00
// verifyType($$[$0], 'NUMBER');
this . $ = $$ [ $0 ] ;
$$ [ $0 ] . types = [ 'NUMBER' ] ;
break ;
2018-09-26 17:21:26 +08:00
case 1092 : case 1093 : case 1094 : case 1095 : case 1096 : case 1103 : case 1104 : case 1105 : case 1106 : case 1107 : case 1108 : case 1114 : case 1115 : case 1136 : case 1194 : case 1195 : case 1257 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1097 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'BOOLEAN' ] } ;
// clear correlated flag after completed sub-query (set by lexer)
parser . yy . correlatedSubQuery = false ;
break ;
2018-09-26 17:21:26 +08:00
case 1099 : case 1100 : case 1101 : case 1102 :
2018-08-27 11:03:13 +08:00
parser . addColRefToVariableIfExists ( $$ [ $0 - 2 ] , $$ [ $0 ] ) ;
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1109 : case 1110 :
2018-08-27 11:03:13 +08:00
// verifyType($$[$0-2], 'BOOLEAN');
// verifyType($$[$0], 'BOOLEAN');
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1111 : case 1112 : case 1113 :
2018-08-27 11:03:13 +08:00
// verifyType($$[$0-2], 'NUMBER');
// verifyType($$[$0], 'NUMBER');
this . $ = { types : [ 'NUMBER' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1119 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'BETWEEN' , 'EXISTS' , 'IN' , 'ILIKE' , 'IREGEXP' , 'LIKE' , 'REGEXP' , 'RLIKE' ] ) ;
} else {
parser . suggestKeywords ( [ 'BETWEEN' , 'EXISTS' , 'IN' , 'LIKE' , 'REGEXP' , 'RLIKE' ] ) ;
}
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1120 : case 1122 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1121 :
2018-08-27 11:03:13 +08:00
parser . suggestFunctions ( ) ;
parser . suggestColumns ( ) ;
parser . suggestKeywords ( [ 'EXISTS' ] ) ;
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1123 :
2018-08-27 11:03:13 +08:00
parser . suggestFunctions ( { types : [ 'BOOLEAN' ] } ) ;
parser . suggestColumns ( { types : [ 'BOOLEAN' ] } ) ;
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1124 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'T' ] , suggestFilters : $$ [ $0 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1125 :
2018-08-27 11:03:13 +08:00
parser . suggestFunctions ( ) ;
parser . suggestColumns ( ) ;
this . $ = { types : [ 'T' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1126 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 ] . typeSet ) {
parser . applyTypeToSuggestions ( 'NUMBER' ) ;
}
this . $ = { types : [ 'NUMBER' ] , suggestFilters : $$ [ $0 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1127 :
2018-08-27 11:03:13 +08:00
parser . suggestFunctions ( { types : [ 'NUMBER' ] } ) ;
parser . suggestColumns ( { types : [ 'NUMBER' ] } ) ;
this . $ = { types : [ 'NUMBER' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1128 :
2018-08-27 11:03:13 +08:00
var keywords = [ 'FALSE' , 'NOT NULL' , 'NOT TRUE' , 'NOT FALSE' , 'NULL' , 'TRUE' ] ;
if ( parser . isImpala ( ) ) {
keywords = keywords . concat ( [ 'DISTINCT FROM' , 'NOT DISTINCT FROM' , 'NOT UNKNOWN' , 'UNKNOWN' ] ) ;
}
parser . suggestKeywords ( keywords ) ;
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1129 :
2018-08-27 11:03:13 +08:00
var keywords = [ 'FALSE' , 'NULL' , 'TRUE' ] ;
if ( parser . isImpala ( ) ) {
keywords = keywords . concat ( [ 'DISTINCT FROM' , 'UNKNOWN' ] ) ;
}
parser . suggestKeywords ( keywords ) ;
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1130 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'FROM' ] ) ;
}
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1131 : case 1132 : case 1133 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'NOT' ] ) ;
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1134 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( $$ [ $0 - 5 ] , $$ [ $0 - 3 ] ? 'IS NOT DISTINCT FROM' : 'IS DISTINCT FROM' ) ;
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1135 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 ] . suggestFilters }
break ;
2018-09-26 17:21:26 +08:00
case 1137 :
2018-08-27 11:03:13 +08:00
this . $ = $$ [ $0 - 1 ] ;
break ;
2018-09-26 17:21:26 +08:00
case 1138 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
this . $ = { types : [ 'T' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1139 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( $$ [ $0 ] , $$ [ $0 - 1 ] ) ;
parser . applyTypeToSuggestions ( $$ [ $0 ] . types ) ;
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1140 : case 1141 : case 1142 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( $$ [ $0 ] , $$ [ $0 - 1 ] ) ;
parser . applyTypeToSuggestions ( $$ [ $0 ] . types ) ;
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1143 : case 1144 : case 1145 : case 1146 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 2 ] . typeSet ) {
parser . applyTypeToSuggestions ( $$ [ $0 ] . types ) ;
parser . addColRefIfExists ( $$ [ $0 ] ) ;
}
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 - 2 ] . suggestFilters }
break ;
2018-09-26 17:21:26 +08:00
case 1147 : case 1149 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( $$ [ $0 - 2 ] , $$ [ $0 - 1 ] ) ;
parser . applyTypeToSuggestions ( $$ [ $0 - 2 ] . types ) ;
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1148 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( $$ [ $0 - 2 ] , $$ [ $0 - 1 ] ) ;
parser . applyTypeToSuggestions ( $$ [ $0 - 2 ] . types ) ;
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true , endsWithLessThanOrEqual : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1150 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( $$ [ $0 - 2 ] , $$ [ $0 - 1 ] ) ;
parser . applyTypeToSuggestions ( $$ [ $0 - 2 ] . types ) ;
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true , endsWithLessThanOrEqual : $$ [ $0 - 1 ] === '<=' } ;
break ;
2018-09-26 17:21:26 +08:00
case 1151 : case 1152 : case 1153 : case 1154 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 ] . typeSet ) {
parser . applyTypeToSuggestions ( $$ [ $0 - 2 ] . types ) ;
parser . addColRefIfExists ( $$ [ $0 - 2 ] ) ;
}
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 ] . suggestFilters }
break ;
2018-09-26 17:21:26 +08:00
case 1155 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . inValueEdit ) {
parser . valueExpressionSuggest ( $$ [ $0 - 3 ] , $$ [ $0 - 2 ] + ' ' + $$ [ $0 - 1 ] ) ;
parser . applyTypeToSuggestions ( $$ [ $0 - 3 ] . types ) ;
}
if ( $$ [ $0 ] . cursorAtStart ) {
parser . suggestKeywords ( [ 'SELECT' ] ) ;
}
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1156 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . inValueEdit ) {
parser . valueExpressionSuggest ( $$ [ $0 - 2 ] , $$ [ $0 - 1 ] ) ;
parser . applyTypeToSuggestions ( $$ [ $0 - 2 ] . types ) ;
}
if ( $$ [ $0 ] . cursorAtStart ) {
parser . suggestKeywords ( [ 'SELECT' ] ) ;
}
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1157 : case 1158 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 - 5 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1159 : case 1160 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 - 4 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1161 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 2 ] . types [ 0 ] === $$ [ $0 ] . types [ 0 ] && ! $$ [ $0 - 5 ] . typeSet ) {
parser . applyTypeToSuggestions ( $$ [ $0 - 2 ] . types ) ;
}
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 - 5 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1162 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 5 ] . types [ 0 ] === $$ [ $0 ] . types [ 0 ] && ! $$ [ $0 - 2 ] . typeSet ) {
parser . applyTypeToSuggestions ( $$ [ $0 - 5 ] . types ) ;
}
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 - 2 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1163 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 5 ] . types [ 0 ] === $$ [ $0 - 2 ] . types [ 0 ] && ! $$ [ $0 ] . typeSet ) {
parser . applyTypeToSuggestions ( $$ [ $0 - 5 ] . types ) ;
}
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1164 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( $$ [ $0 - 5 ] , $$ [ $0 - 1 ] ) ;
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1165 : case 1171 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 1 ] , [ 'AND' ] ) ;
this . $ = { types : [ 'BOOLEAN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1166 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( $$ [ $0 - 3 ] , $$ [ $0 - 2 ] + ' ' + $$ [ $0 - 1 ] ) ;
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1167 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 4 ] . types [ 0 ] === $$ [ $0 - 2 ] . types [ 0 ] && ! $$ [ $0 - 4 ] . typeSet ) {
parser . applyTypeToSuggestions ( $$ [ $0 - 4 ] . types )
}
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 - 4 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1168 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 4 ] . types [ 0 ] === $$ [ $0 - 2 ] . types [ 0 ] && ! $$ [ $0 - 2 ] . typeSet ) {
parser . applyTypeToSuggestions ( $$ [ $0 - 4 ] . types )
}
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 - 2 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1169 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 4 ] . types [ 0 ] === $$ [ $0 - 2 ] . types [ 0 ] && ! $$ [ $0 ] . typeSet ) {
parser . applyTypeToSuggestions ( $$ [ $0 - 4 ] . types )
}
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1170 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( $$ [ $0 - 4 ] , $$ [ $0 - 1 ] ) ;
parser . applyTypeToSuggestions ( $$ [ $0 - 4 ] . types ) ;
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1172 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( $$ [ $0 - 2 ] , $$ [ $0 - 1 ] ) ;
parser . applyTypeToSuggestions ( $$ [ $0 - 2 ] . types ) ;
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1173 : case 1175 : case 1177 : case 1179 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( undefined , $$ [ $0 - 1 ] ) ;
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true , suggestFilters : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1174 : case 1178 :
2018-08-27 11:03:13 +08:00
parser . addColRefIfExists ( $$ [ $0 ] ) ;
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 - 2 ] . suggestFilters }
break ;
2018-09-26 17:21:26 +08:00
case 1176 : case 1180 :
2018-08-27 11:03:13 +08:00
parser . addColRefIfExists ( $$ [ $0 - 2 ] ) ;
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 ] . suggestFilters }
break ;
2018-09-26 17:21:26 +08:00
case 1181 : case 1182 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( undefined , $$ [ $0 - 1 ] ) ;
parser . applyTypeToSuggestions ( [ 'NUMBER' ] ) ;
this . $ = { types : [ 'NUMBER' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1183 : case 1184 : case 1185 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 2 ] . typeSet ) {
parser . applyTypeToSuggestions ( [ 'NUMBER' ] ) ;
parser . addColRefIfExists ( $$ [ $0 ] ) ;
}
this . $ = { types : [ 'NUMBER' ] , suggestFilters : $$ [ $0 - 2 ] . suggestFilters }
break ;
2018-09-26 17:21:26 +08:00
case 1186 : case 1187 : case 1188 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( undefined , $$ [ $0 - 1 ] ) ;
parser . applyTypeToSuggestions ( [ 'NUMBER' ] ) ;
this . $ = { types : [ 'NUMBER' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1189 : case 1190 : case 1191 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 ] . typeSet ) {
parser . applyTypeToSuggestions ( [ 'NUMBER' ] ) ;
parser . addColRefIfExists ( $$ [ $0 - 2 ] ) ;
}
this . $ = { types : [ 'NUMBER' ] , suggestFilters : $$ [ $0 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1192 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 - 1 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1193 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'BOOLEAN' ] , suggestFilters : $$ [ $0 - 2 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1196 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( undefined , $$ [ $0 ] ) ;
parser . applyTypeToSuggestions ( [ 'STRING' ] ) ;
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1197 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( undefined , $$ [ $0 - 1 ] + ' ' + $$ [ $0 ] ) ;
parser . applyTypeToSuggestions ( [ 'STRING' ] ) ;
this . $ = { types : [ 'BOOLEAN' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1199 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . suggestKeywords ( [ 'WHEN' ] ) ;
this . $ = { types : [ 'T' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1201 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 2 ] , [ 'WHEN' ] ) ;
this . $ = { types : [ 'T' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1202 :
2018-08-27 11:03:13 +08:00
this . $ = $$ [ $0 ] ;
this . $ . suggestFilters = $$ [ $0 - 1 ] . suggestFilters ;
break ;
2018-09-26 17:21:26 +08:00
case 1203 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'T' ] , suggestFilters : $$ [ $0 - 1 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1204 : case 1533 : case 1538 : case 1539 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'T' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1205 : case 1207 :
2018-08-27 11:03:13 +08:00
$$ [ $0 ] . position = 1 ;
break ;
2018-09-26 17:21:26 +08:00
case 1206 :
2018-08-27 11:03:13 +08:00
$$ [ $0 ] . position = $$ [ $0 - 2 ] . position + 1 ;
this . $ = $$ [ $0 ] ;
break ;
2018-09-26 17:21:26 +08:00
case 1208 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 2 ] . position += 1 ;
break ;
2018-09-26 17:21:26 +08:00
case 1209 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 2 ] . position = 1 ;
break ;
2018-09-26 17:21:26 +08:00
case 1210 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 4 ] . position += 1 ;
break ;
2018-09-26 17:21:26 +08:00
case 1211 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
$$ [ $0 - 2 ] . position += 1 ;
break ;
2018-09-26 17:21:26 +08:00
case 1212 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
$$ [ $0 - 4 ] . position += 1 ;
break ;
2018-09-26 17:21:26 +08:00
case 1213 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1214 : case 1215 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
this . $ = { cursorAtStart : true , position : 1 } ;
break ;
2018-09-26 17:21:26 +08:00
case 1216 : case 1217 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
this . $ = { position : 2 } ;
break ;
2018-09-26 17:21:26 +08:00
case 1221 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'COLREF' ] , columnReference : $$ [ $0 ] . chain } ;
break ;
2018-09-26 17:21:26 +08:00
case 1222 :
2018-08-27 11:03:13 +08:00
// We need to handle arbitrary UDFs here instead of inside UserDefinedFunction or there will be a conflict
// with columnReference for functions like: db.udf(foo)
2018-09-26 17:21:26 +08:00
var fn = $$ [ $0 - 1 ] . chain [ $$ [ $0 - 1 ] . chain . length - 1 ] . name . toLowerCase ( ) ;
2018-08-27 11:03:13 +08:00
$$ [ $0 - 1 ] . lastLoc . type = 'function' ;
$$ [ $0 - 1 ] . lastLoc . function = fn ;
2018-09-26 17:21:26 +08:00
if ( $$ [ $0 - 1 ] . lastLoc . location ) {
$$ [ $0 - 1 ] . lastLoc . location = {
first _line : $$ [ $0 - 1 ] . lastLoc . location . first _line ,
last _line : $$ [ $0 - 1 ] . lastLoc . location . last _line ,
first _column : $$ [ $0 - 1 ] . lastLoc . location . first _column ,
last _column : $$ [ $0 - 1 ] . lastLoc . location . last _column - 1
}
2018-08-27 11:03:13 +08:00
}
if ( $$ [ $0 - 1 ] . lastLoc !== $$ [ $0 - 1 ] . firstLoc ) {
$$ [ $0 - 1 ] . firstLoc . type = 'database' ;
} else {
delete $$ [ $0 - 1 ] . lastLoc . identifierChain ;
}
if ( $$ [ $0 ] . expression ) {
this . $ = { function : fn , expression : $$ [ $0 ] . expression , types : parser . findReturnTypes ( fn ) }
} else {
this . $ = { function : fn , types : parser . findReturnTypes ( fn ) }
}
break ;
2018-09-26 17:21:26 +08:00
case 1223 :
2018-08-27 11:03:13 +08:00
parser . addFunctionLocation ( _$ [ $0 - 1 ] , $$ [ $0 - 1 ] ) ;
if ( $$ [ $0 ] . expression ) {
this . $ = { function : $$ [ $0 - 1 ] , expression : $$ [ $0 ] . expression , types : parser . findReturnTypes ( $$ [ $0 - 1 ] ) }
} else {
this . $ = { function : $$ [ $0 - 1 ] , types : parser . findReturnTypes ( $$ [ $0 - 1 ] ) }
}
break ;
2018-09-26 17:21:26 +08:00
case 1225 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'NULL' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1226 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'TIMESTAMP' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1228 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . suggestKeywords ) {
this . $ = { types : [ 'COLREF' ] , columnReference : $$ [ $0 ] , suggestKeywords : $$ [ $0 ] . suggestKeywords } ;
} else {
this . $ = { types : [ 'COLREF' ] , columnReference : $$ [ $0 ] } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1229 :
2018-08-27 11:03:13 +08:00
var fn = $$ [ $0 - 1 ] . chain [ $$ [ $0 - 1 ] . chain . length - 1 ] . name . toLowerCase ( ) ;
$$ [ $0 - 1 ] . lastLoc . type = 'function' ;
$$ [ $0 - 1 ] . lastLoc . function = fn ;
$$ [ $0 - 1 ] . lastLoc . location = {
first _line : $$ [ $0 - 1 ] . lastLoc . location . first _line ,
last _line : $$ [ $0 - 1 ] . lastLoc . location . last _line ,
first _column : $$ [ $0 - 1 ] . lastLoc . location . first _column ,
last _column : $$ [ $0 - 1 ] . lastLoc . location . last _column - 1
}
if ( $$ [ $0 - 1 ] . lastLoc !== $$ [ $0 - 1 ] . firstLoc ) {
$$ [ $0 - 1 ] . firstLoc . type = 'database' ;
} else {
delete $$ [ $0 - 1 ] . lastLoc . identifierChain ;
}
if ( $$ [ $0 ] . position ) {
parser . applyArgumentTypesToSuggestions ( fn , $$ [ $0 ] . position ) ;
}
this . $ = { types : parser . findReturnTypes ( fn ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1230 : case 1438 : case 1439 :
2018-08-27 11:03:13 +08:00
parser . addFunctionLocation ( _$ [ $0 - 1 ] , $$ [ $0 - 1 ] ) ;
if ( $$ [ $0 ] . position ) {
parser . applyArgumentTypesToSuggestions ( $$ [ $0 - 1 ] , $$ [ $0 ] . position ) ;
}
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 1 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1233 :
2018-08-27 11:03:13 +08:00
var lastLoc = parser . yy . locations [ parser . yy . locations . length - 1 ] ;
if ( lastLoc . type !== 'variable' ) {
lastLoc . type = 'column' ;
}
// used for function references with db prefix
var firstLoc = parser . yy . locations [ parser . yy . locations . length - $$ [ $0 ] . length ] ;
this . $ = { chain : $$ [ $0 ] , firstLoc : firstLoc , lastLoc : lastLoc }
break ;
2018-09-26 17:21:26 +08:00
case 1237 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'DAYS' , 'HOURS' , 'MICROSECONDS' , 'MILLISECONDS' , 'MINUTES' , 'MONTHS' , 'NANOSECONDS' , 'SECONDS' , 'WEEKS' , 'YEARS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1242 :
2018-08-27 11:03:13 +08:00
parser . suggestValues ( $$ [ $0 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1243 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'NUMBER' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1249 : case 1251 :
2018-08-27 11:03:13 +08:00
this . $ = $$ [ $0 - 1 ] + $$ [ $0 ] ;
break ;
2018-09-26 17:21:26 +08:00
case 1250 :
2018-08-27 11:03:13 +08:00
this . $ = $$ [ $0 - 2 ] + $$ [ $0 - 1 ] + $$ [ $0 ] ;
break ;
2018-09-26 17:21:26 +08:00
case 1255 : case 1256 :
2018-08-27 11:03:13 +08:00
if ( /\$\{[^}]*\}/ . test ( $$ [ $0 ] ) ) {
parser . addVariableLocation ( _$ [ $0 ] , $$ [ $0 ] ) ;
this . $ = { types : [ 'STRING' ] , columnReference : [ { name : $$ [ $0 ] } ] }
} else {
this . $ = { types : [ 'STRING' ] }
}
break ;
2018-09-26 17:21:26 +08:00
case 1258 :
2018-08-27 11:03:13 +08:00
this . $ = { partialQuote : '\'' , missingEndQuote : parser . yy . missingEndQuote } ;
break ;
2018-09-26 17:21:26 +08:00
case 1259 :
2018-08-27 11:03:13 +08:00
this . $ = { partialQuote : '"' , missingEndQuote : parser . yy . missingEndQuote } ;
break ;
2018-09-26 17:21:26 +08:00
case 1264 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] ) {
parser . addColumnAliasLocation ( $$ [ $0 ] . location , $$ [ $0 ] . alias , _$ [ $0 - 1 ] ) ;
this . $ = { valueExpression : $$ [ $0 - 1 ] , alias : $$ [ $0 ] . alias } ;
if ( ! parser . yy . selectListAliases ) {
parser . yy . selectListAliases = [ ] ;
}
parser . yy . selectListAliases . push ( { name : $$ [ $0 ] . alias , types : $$ [ $0 - 1 ] . types || [ 'T' ] } ) ;
} else {
this . $ = { valueExpression : $$ [ $0 - 1 ] }
}
break ;
2018-09-26 17:21:26 +08:00
case 1265 :
2018-08-27 11:03:13 +08:00
parser . addAsteriskLocation ( _$ [ $0 ] , [ { asterisk : true } ] ) ;
this . $ = { asterisk : true }
break ;
2018-09-26 17:21:26 +08:00
case 1266 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] ) {
parser . addColumnAliasLocation ( $$ [ $0 ] . location , $$ [ $0 ] . alias , _$ [ $0 - 1 ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1267 :
2018-08-27 11:03:13 +08:00
parser . suggestFunctions ( ) ;
parser . suggestColumns ( ) ;
parser . addColumnAliasLocation ( _$ [ $0 ] , $$ [ $0 ] , _$ [ $0 - 2 ] ) ;
this . $ = { suggestAggregateFunctions : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1269 : case 1632 :
2018-08-27 11:03:13 +08:00
this . $ = [ $$ [ $0 ] ] ;
break ;
2018-09-26 17:21:26 +08:00
case 1270 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 2 ] . push ( $$ [ $0 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1272 : case 1273 : case 1706 :
2018-08-27 11:03:13 +08:00
this . $ = { cursorAtStart : true , suggestFunctions : true , suggestColumns : true , suggestAggregateFunctions : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1275 :
2018-08-27 11:03:13 +08:00
parser . checkForSelectListKeywords ( $$ [ $0 - 2 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1276 :
2018-08-27 11:03:13 +08:00
parser . checkForSelectListKeywords ( $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1277 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : parser . getSelectListKeywords ( ) , suggestTables : true , suggestDatabases : true , suggestFunctions : true , suggestColumns : true , suggestAggregateFunctions : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1279 : case 1280 : case 1282 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : parser . getSelectListKeywords ( ) , suggestFunctions : true , suggestColumns : true , suggestAggregateFunctions : true , } ;
break ;
2018-09-26 17:21:26 +08:00
case 1293 :
2018-08-27 11:03:13 +08:00
this . $ = $$ [ $0 ] ;
if ( parser . yy . latestTablePrimaries . length > 0 ) {
var idx = parser . yy . latestTablePrimaries . length - 1 ;
var tables = [ ] ;
do {
var tablePrimary = parser . yy . latestTablePrimaries [ idx ] ;
if ( ! tablePrimary . subQueryAlias ) {
tables . unshift ( tablePrimary . alias ? { identifierChain : tablePrimary . identifierChain , alias : tablePrimary . alias } : { identifierChain : tablePrimary . identifierChain } )
}
idx -- ;
} while ( idx >= 0 && tablePrimary . join && ! tablePrimary . subQueryAlias )
if ( tables . length > 0 ) {
this . $ . suggestJoins = {
prependJoin : true ,
tables : tables
} ;
}
}
break ;
2018-09-26 17:21:26 +08:00
case 1300 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] && $$ [ $0 ] . valueExpression ) {
this . $ = $$ [ $0 ] . valueExpression ;
} else {
this . $ = { } ;
}
this . $ . joinType = $$ [ $0 - 3 ] ;
if ( $$ [ $0 ] . noJoinCondition ) {
this . $ . suggestJoinConditions = { prependOn : true , tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) }
}
if ( $$ [ $0 ] . suggestKeywords ) {
this . $ . suggestKeywords = $$ [ $0 ] . suggestKeywords ;
}
if ( parser . yy . latestTablePrimaries . length > 0 ) {
parser . yy . latestTablePrimaries [ parser . yy . latestTablePrimaries . length - 1 ] . join = true ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1301 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] && $$ [ $0 ] . valueExpression ) {
this . $ = $$ [ $0 ] . valueExpression ;
} else {
this . $ = { } ;
}
this . $ . joinType = $$ [ $0 - 4 ] ;
if ( $$ [ $0 ] . noJoinCondition ) {
this . $ . suggestJoinConditions = { prependOn : true , tablePrimaries : parser . yy . latestTablePrimaries . concat ( ) }
}
if ( $$ [ $0 ] . suggestKeywords ) {
this . $ . suggestKeywords = $$ [ $0 ] . suggestKeywords ;
}
if ( parser . yy . latestTablePrimaries . length > 0 ) {
parser . yy . latestTablePrimaries [ parser . yy . latestTablePrimaries . length - 1 ] . join = true ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1302 :
2018-08-27 11:03:13 +08:00
this . $ = { joinType : $$ [ $0 - 1 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1303 :
2018-08-27 11:03:13 +08:00
this . $ = { joinType : $$ [ $0 - 2 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1307 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 3 ] . suggestKeywords ) {
parser . suggestKeywords ( $$ [ $0 - 3 ] . suggestKeywords ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1308 : case 1890 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] . suggestKeywords ) {
parser . suggestKeywords ( $$ [ $0 - 1 ] . suggestKeywords ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1311 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 2 ] && parser . isImpala ( ) ) {
parser . suggestKeywords ( [ '[BROADCAST]' , '[SHUFFLE]' ] ) ;
}
if ( ! $$ [ $0 - 2 ] && parser . yy . latestTablePrimaries . length > 0 ) {
var idx = parser . yy . latestTablePrimaries . length - 1 ;
var tables = [ ] ;
do {
var tablePrimary = parser . yy . latestTablePrimaries [ idx ] ;
if ( ! tablePrimary . subQueryAlias ) {
tables . unshift ( tablePrimary . alias ? { identifierChain : tablePrimary . identifierChain , alias : tablePrimary . alias } : { identifierChain : tablePrimary . identifierChain } )
}
idx -- ;
} while ( idx >= 0 && tablePrimary . join && ! tablePrimary . subQueryAlias )
if ( tables . length > 0 ) {
parser . suggestJoins ( {
prependJoin : false ,
joinType : $$ [ $0 - 3 ] ,
tables : tables
} )
}
}
parser . suggestTables ( ) ;
parser . suggestDatabases ( {
appendDot : true
} ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1316 :
2018-08-27 11:03:13 +08:00
this . $ = 'JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1317 :
2018-08-27 11:03:13 +08:00
this . $ = 'ANTI JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1318 :
2018-08-27 11:03:13 +08:00
this . $ = 'CROSS JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1319 :
2018-08-27 11:03:13 +08:00
this . $ = 'INNER JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1320 :
2018-08-27 11:03:13 +08:00
this . $ = 'OUTER JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1321 :
2018-08-27 11:03:13 +08:00
this . $ = 'SEMI JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1322 :
2018-08-27 11:03:13 +08:00
this . $ = 'FULL JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1323 :
2018-08-27 11:03:13 +08:00
this . $ = 'FULL OUTER JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1324 :
2018-08-27 11:03:13 +08:00
this . $ = 'LEFT JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1325 :
2018-08-27 11:03:13 +08:00
this . $ = 'LEFT ANTI JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1326 :
2018-08-27 11:03:13 +08:00
this . $ = 'LEFT INNER JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1327 :
2018-08-27 11:03:13 +08:00
this . $ = 'LEFT OUTER JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1328 :
2018-08-27 11:03:13 +08:00
this . $ = 'LEFT SEMI JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1329 :
2018-08-27 11:03:13 +08:00
this . $ = 'RIGHT JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1330 :
2018-08-27 11:03:13 +08:00
this . $ = 'RIGHT ANTI JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1331 : case 1332 :
2018-08-27 11:03:13 +08:00
this . $ = 'RIGHT OUTER JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1333 :
2018-08-27 11:03:13 +08:00
this . $ = 'RIGHT SEMI JOIN' ;
break ;
2018-09-26 17:21:26 +08:00
case 1334 : case 1335 : case 1336 : case 1337 : case 1338 : case 1339 : case 1341 : case 1342 : case 1343 : case 1344 : case 1346 : case 1347 : case 1348 : case 1349 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : [ 'JOIN' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1340 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : [ 'OUTER' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1345 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : parser . isImpala ( ) ? [ 'ANTI' , 'INNER' , 'OUTER' , 'SEMI' ] : parser . isHive ( ) ? [ 'OUTER' , 'SEMI' ] : [ 'OUTER' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1350 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : parser . isImpala ( ) ? [ 'ANTI' , 'INNER' , 'OUTER' , 'SEMI' ] : [ 'OUTER' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1351 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'JOIN' , 'OUTER JOIN' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1352 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'JOIN' , 'OUTER JOIN' , 'SEMI JOIN' ] ) ;
} else if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'ANTI JOIN' , 'INNER JOIN' , 'JOIN' , 'OUTER JOIN' , 'SEMI JOIN' ] ) ;
} else {
parser . suggestKeywords ( [ 'JOIN' , 'OUTER JOIN' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1353 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'ANTI JOIN' , 'INNER JOIN' , 'JOIN' , 'OUTER JOIN' , 'SEMI JOIN' ] ) ;
} else {
parser . suggestKeywords ( [ 'JOIN' , 'OUTER JOIN' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1354 :
2018-08-27 11:03:13 +08:00
this . $ = { noJoinCondition : true , suggestKeywords : parser . isImpala ( ) ? [ 'ON' , 'USING' ] : [ 'ON' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1355 :
2018-08-27 11:03:13 +08:00
this . $ = { valueExpression : $$ [ $0 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1356 : case 2180 :
2018-08-27 11:03:13 +08:00
this . $ = { } ;
break ;
2018-09-26 17:21:26 +08:00
case 1360 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . suggestJoinConditions ( { prependOn : false } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1361 :
2018-08-27 11:03:13 +08:00
this . $ = {
primary : $$ [ $0 - 3 ]
}
if ( $$ [ $0 - 3 ] . identifierChain ) {
if ( $$ [ $0 - 1 ] ) {
$$ [ $0 - 3 ] . alias = $$ [ $0 - 1 ] . alias
parser . addTableAliasLocation ( $$ [ $0 - 1 ] . location , $$ [ $0 - 1 ] . alias , $$ [ $0 - 3 ] . identifierChain ) ;
}
parser . addTablePrimary ( $$ [ $0 - 3 ] ) ;
}
var keywords = [ ] ;
if ( $$ [ $0 ] && $$ [ $0 ] . suggestKeywords ) {
keywords = $$ [ $0 ] . suggestKeywords ;
} else {
// Right-to-left for cursor after TablePrimary
keywords = parser . getKeywordsForOptionalsLR ( [ $$ [ $0 ] , $$ [ $0 - 1 ] , $$ [ $0 - 2 ] ] , [ { value : 'TABLESAMPLE' , weight : 1 } , { value : 'AS' , weight : 2 } , { value : 'TABLESAMPLE' , weight : 3 } ] , [ parser . isImpala ( ) , true , parser . isHive ( ) ] ) ;
}
if ( keywords . length > 0 ) {
this . $ . suggestKeywords = keywords ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1362 :
2018-08-27 11:03:13 +08:00
this . $ = {
primary : $$ [ $0 - 2 ]
} ;
if ( $$ [ $0 - 1 ] ) {
2018-09-26 17:21:26 +08:00
if ( this . $ . primary ) {
this . $ . primary . alias = $$ [ $0 - 1 ] . alias ;
parser . addTablePrimary ( { subQueryAlias : $$ [ $0 - 1 ] . alias } ) ;
parser . addSubqueryAliasLocation ( $$ [ $0 - 1 ] . location , $$ [ $0 - 1 ] . alias , $$ [ $0 - 2 ] . identifierChain ) ;
}
2018-08-27 11:03:13 +08:00
}
var keywords = [ ] ;
if ( $$ [ $0 ] && $$ [ $0 ] . suggestKeywords ) {
keywords = $$ [ $0 ] . suggestKeywords ;
} else {
keywords = parser . getKeywordsForOptionalsLR ( [ $$ [ $0 ] , $$ [ $0 - 1 ] ] , [ { value : 'TABLESAMPLE' , weight : 1 } , { value : 'AS' , weight : 2 } ] , [ parser . isImpala ( ) , true ] ) ;
}
if ( keywords . length > 0 ) {
this . $ . suggestKeywords = keywords ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1363 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] ) {
parser . addTableAliasLocation ( $$ [ $0 - 1 ] . location , $$ [ $0 - 1 ] . alias , $$ [ $0 - 3 ] . identifierChain ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1364 : case 1365 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] ) {
$$ [ $0 - 3 ] . alias = $$ [ $0 - 1 ] . alias ;
parser . addTableAliasLocation ( $$ [ $0 - 1 ] . location , $$ [ $0 - 1 ] . alias , $$ [ $0 - 3 ] . identifierChain ) ;
}
parser . addTablePrimary ( $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1366 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] ) {
parser . addTablePrimary ( { subQueryAlias : $$ [ $0 - 1 ] . alias } ) ;
parser . addSubqueryAliasLocation ( $$ [ $0 - 1 ] . location , $$ [ $0 - 1 ] . alias ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1377 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'BUCKET' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1378 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'OUT OF' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1379 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'OF' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1380 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ 'ON' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1382 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 2 ] . indexOf ( '.' ) === - 1 ) {
parser . suggestKeywords ( [ 'PERCENT' , 'ROWS' ] ) ;
} else {
parser . suggestKeywords ( [ 'PERCENT' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1384 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : [ 'REPEATABLE()' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1386 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'SYSTEM()' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1391 :
2018-08-27 11:03:13 +08:00
parser . pushQueryState ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1392 :
2018-08-27 11:03:13 +08:00
parser . popQueryState ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1394 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] ) {
$$ [ $0 - 2 ] . alias = $$ [ $0 - 1 ] . alias ;
parser . addTablePrimary ( { subQueryAlias : $$ [ $0 - 1 ] . alias } ) ;
parser . addSubqueryAliasLocation ( $$ [ $0 - 1 ] . location , $$ [ $0 - 1 ] . alias , $$ [ $0 - 2 ] . identifierChain ) ;
}
this . $ = $$ [ $0 - 2 ] ;
break ;
2018-09-26 17:21:26 +08:00
case 1397 :
2018-08-27 11:03:13 +08:00
var subQuery = parser . getSubQuery ( $$ [ $0 ] ) ;
2018-09-26 17:21:26 +08:00
if ( subQuery ) {
subQuery . columns . forEach ( function ( column ) {
parser . expandIdentifierChain ( { wrapper : column } ) ;
delete column . linked ;
2018-08-27 11:03:13 +08:00
} ) ;
2018-09-26 17:21:26 +08:00
}
2018-08-27 11:03:13 +08:00
parser . popQueryState ( subQuery ) ;
this . $ = subQuery ;
break ;
2018-09-26 17:21:26 +08:00
case 1414 : case 1415 :
2018-08-27 11:03:13 +08:00
this . $ = { alias : $$ [ $0 ] , location : _$ [ $0 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1420 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] && $$ [ $0 ] . lateralView ) {
$$ [ $0 - 1 ] . lateralViews . push ( $$ [ $0 ] . lateralView ) ;
this . $ = $$ [ $0 - 1 ] ;
} else if ( $$ [ $0 ] . lateralView ) {
this . $ = { lateralViews : [ $$ [ $0 ] . lateralView ] } ;
}
if ( $$ [ $0 ] . suggestKeywords ) {
this . $ . suggestKeywords = $$ [ $0 ] . suggestKeywords
}
break ;
2018-09-26 17:21:26 +08:00
case 1422 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 ] ) {
$$ [ $0 - 1 ] . suggestKeywords = [ 'OVER' ] ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1431 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'OVER' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1436 : case 1437 :
2018-08-27 11:03:13 +08:00
parser . addFunctionLocation ( _$ [ $0 - 1 ] , $$ [ $0 - 1 ] ) ;
if ( $$ [ $0 ] . expression ) {
this . $ = { function : $$ [ $0 - 1 ] , expression : $$ [ $0 ] . expression , types : parser . findReturnTypes ( $$ [ $0 - 1 ] ) }
} else {
this . $ = { function : $$ [ $0 - 1 ] , types : parser . findReturnTypes ( $$ [ $0 - 1 ] ) }
}
break ;
2018-09-26 17:21:26 +08:00
case 1447 :
2018-08-27 11:03:13 +08:00
this . $ = { expression : $$ [ $0 - 1 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1448 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
this . $ = { position : 1 }
break ;
2018-09-26 17:21:26 +08:00
case 1449 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 1 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1457 : case 1545 : case 1611 :
2018-08-27 11:03:13 +08:00
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 2 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1458 :
2018-08-27 11:03:13 +08:00
this . $ = { function : $$ [ $0 - 3 ] , expression : $$ [ $0 - 2 ] , types : parser . findReturnTypes ( $$ [ $0 - 3 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1459 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . applyArgumentTypesToSuggestions ( $$ [ $0 - 3 ] , 1 ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 3 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1460 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 2 ] ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1461 :
2018-08-27 11:03:13 +08:00
parser . applyArgumentTypesToSuggestions ( $$ [ $0 - 3 ] , $$ [ $0 - 1 ] . position ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 3 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1469 : case 1470 :
2018-08-27 11:03:13 +08:00
if ( parser . yy . result . suggestFunctions ) {
parser . suggestAggregateFunctions ( ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1471 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'PARTITION BY' , weight : 2 } , { value : 'ORDER BY' , weight : 1 } ] ) ;
} else if ( ! $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ 'PARTITION BY' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1472 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestValueExpressionKeywords ( $$ [ $0 - 3 ] , [ { value : 'ORDER BY' , weight : 2 } ] ) ;
} else {
parser . suggestValueExpressionKeywords ( $$ [ $0 - 3 ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1476 : case 1821 : case 2299 : case 2300 : case 2303 : case 2313 : case 2347 : case 2356 : case 2374 : case 2431 : case 2432 : case 2437 : case 2442 : case 2446 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'BY' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1481 :
2018-08-27 11:03:13 +08:00
// Only allowed in last order by
delete parser . yy . result . suggestAnalyticFunctions ;
break ;
2018-09-26 17:21:26 +08:00
case 1482 :
2018-08-27 11:03:13 +08:00
var keywords = [ ] ;
if ( $$ [ $0 - 2 ] . suggestKeywords ) {
keywords = parser . createWeightedKeywords ( $$ [ $0 - 2 ] . suggestKeywords , 2 ) ;
}
if ( ! $$ [ $0 ] ) {
keywords = keywords . concat ( [ { value : 'RANGE BETWEEN' , weight : 1 } , { value : 'ROWS BETWEEN' , weight : 1 } ] ) ;
}
parser . suggestKeywords ( keywords ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1488 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( parser . isHive ( ) ? [ 'BETWEEN' , 'UNBOUNDED' ] : [ 'BETWEEN' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1489 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'CURRENT ROW' , 'UNBOUNDED PRECEDING' ] ) ;
} else if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'AND' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1492 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] && parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'PRECEDING' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1494 :
2018-08-27 11:03:13 +08:00
lexer . popState ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1495 :
2018-08-27 11:03:13 +08:00
lexer . begin ( 'hdfs' ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1497 :
2018-08-27 11:03:13 +08:00
parser . suggestHdfs ( { path : $$ [ $0 - 3 ] } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1498 :
2018-08-27 11:03:13 +08:00
parser . suggestHdfs ( { path : $$ [ $0 - 2 ] } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1499 :
2018-08-27 11:03:13 +08:00
parser . suggestHdfs ( { path : $$ [ $0 - 1 ] } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1500 :
2018-08-27 11:03:13 +08:00
parser . suggestHdfs ( { path : '' } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1501 :
2018-08-27 11:03:13 +08:00
parser . suggestHdfs ( { path : '' } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1507 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'PRECEDING' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1508 : case 1518 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ROW' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1517 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'CURRENT ROW' , 'UNBOUNDED FOLLOWING' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1519 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FOLLOWING' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1525 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . suggestAggregateFunctions ( ) ;
parser . suggestSelectListAliases ( true ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1526 :
2018-08-27 11:03:13 +08:00
parser . suggestAggregateFunctions ( ) ;
parser . suggestSelectListAliases ( true ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1532 : case 1537 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ $$ [ $0 - 1 ] . toUpperCase ( ) ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1534 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
this . $ = { types : [ $$ [ $0 - 1 ] . toUpperCase ( ) ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1535 : case 1536 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
this . $ = { types : [ 'T' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1540 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 3 ] , [ { value : 'AS' , weight : 2 } ] ) ;
this . $ = { types : [ $$ [ $0 - 1 ] . toUpperCase ( ) ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1541 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 2 ] , [ { value : 'AS' , weight : 2 } ] ) ;
this . $ = { types : [ 'T' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1542 : case 1543 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( parser . getTypeKeywords ( ) ) ;
this . $ = { types : [ 'T' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1544 : case 1566 :
2018-08-27 11:03:13 +08:00
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 3 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1546 : case 1567 : case 1610 :
2018-08-27 11:03:13 +08:00
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1547 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
var keywords = parser . getSelectListKeywords ( ) ;
if ( ! $$ [ $0 - 2 ] ) {
keywords . push ( 'DISTINCT' ) ;
if ( parser . isImpala ( ) ) {
keywords . push ( 'ALL' ) ;
}
if ( parser . yy . result . suggestKeywords ) {
keywords = parser . yy . result . suggestKeywords . concat ( keywords ) ;
}
}
parser . suggestKeywords ( keywords ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1548 : case 1569 : case 1613 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 2 ] ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 5 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1549 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] . cursorAtStart ) {
var keywords = parser . getSelectListKeywords ( ) ;
if ( ! $$ [ $0 - 2 ] ) {
keywords . push ( 'DISTINCT' ) ;
if ( parser . isImpala ( ) ) {
keywords . push ( 'ALL' ) ;
}
}
parser . suggestKeywords ( keywords ) ;
}
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1550 : case 1554 :
2018-08-27 11:03:13 +08:00
this . $ = { types : [ 'INT' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1551 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'DAY' , 'DAYOFWEEK' , 'HOUR' , 'MINUTE' , 'MONTH' , 'QUARTER' , 'SECOND' , 'WEEK' , 'YEAR' ] ) ;
this . $ = { types : [ 'INT' ] }
break ;
2018-09-26 17:21:26 +08:00
case 1552 : case 1556 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FROM' ] ) ;
this . $ = { types : [ 'INT' ] }
break ;
2018-09-26 17:21:26 +08:00
case 1553 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
this . $ = { types : [ 'INT' ] }
break ;
2018-09-26 17:21:26 +08:00
case 1555 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'DAY' , 'DAYOFWEEK' , 'HOUR' , 'MINUTE' , 'MONTH' , 'QUARTER' , 'SECOND' , 'WEEK' , 'YEAR' ] ) ;
this . $ = { types : [ 'INT' ] }
break ;
2018-09-26 17:21:26 +08:00
case 1568 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
var keywords = parser . getSelectListKeywords ( true ) ;
if ( ! $$ [ $0 - 2 ] ) {
if ( $$ [ $0 - 4 ] . toLowerCase ( ) === 'group_concat' ) {
keywords . push ( 'ALL' ) ;
} else if ( parser . isImpala ( ) ) {
keywords . push ( 'ALL' ) ;
keywords . push ( 'DISTINCT' ) ;
} else {
keywords . push ( 'DISTINCT' ) ;
}
}
if ( parser . yy . result . suggestKeywords ) {
keywords = parser . yy . result . suggestKeywords . concat ( keywords ) ;
}
parser . suggestKeywords ( keywords ) ;
parser . applyArgumentTypesToSuggestions ( $$ [ $0 - 4 ] , 1 ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1570 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] . cursorAtStart ) {
var keywords = parser . getSelectListKeywords ( true ) ;
if ( ! $$ [ $0 - 2 ] ) {
if ( $$ [ $0 - 4 ] . toLowerCase ( ) === 'group_concat' ) {
keywords . push ( 'ALL' ) ;
} else if ( parser . isImpala ( ) ) {
keywords . push ( 'ALL' ) ;
keywords . push ( 'DISTINCT' ) ;
} else {
keywords . push ( 'DISTINCT' ) ;
}
}
if ( parser . yy . result . suggestKeywords ) {
keywords = parser . yy . result . suggestKeywords . concat ( keywords ) ;
}
parser . suggestKeywords ( keywords ) ;
}
if ( parser . yy . result . suggestFunctions && ! parser . yy . result . suggestFunctions . types ) {
parser . applyArgumentTypesToSuggestions ( $$ [ $0 - 4 ] , $$ [ $0 - 1 ] . position ) ;
}
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1596 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . applyTypeToSuggestions ( $$ [ $0 - 2 ] . toLowerCase ( ) === 'from' ? [ 'STRING' ] : [ 'TIMESTAMP' ] ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 5 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1597 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . applyTypeToSuggestions ( $$ [ $0 - 1 ] . toLowerCase ( ) === 'from' ? [ 'STRING' ] : [ 'TIMESTAMP' ] ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1598 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . applyTypeToSuggestions ( [ 'STRING' , 'TIMESTAMP' ] ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 3 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1599 :
2018-08-27 11:03:13 +08:00
parser . applyTypeToSuggestions ( $$ [ $0 - 2 ] . toLowerCase ( ) === 'from' ? [ 'STRING' ] : [ 'TIMESTAMP' ] ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 5 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1600 :
2018-08-27 11:03:13 +08:00
parser . applyTypeToSuggestions ( $$ [ $0 - 1 ] . toLowerCase ( ) === 'from' ? [ 'STRING' ] : [ 'TIMESTAMP' ] ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1601 :
2018-08-27 11:03:13 +08:00
parser . applyTypeToSuggestions ( [ 'STRING' , 'TIMESTAMP' ] ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 3 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1602 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . applyTypeToSuggestions ( $$ [ $0 - 2 ] . toLowerCase ( ) === 'from' ? [ 'TIMESTAMP' ] : [ 'STRING' ] ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 5 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1603 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . applyTypeToSuggestions ( $$ [ $0 - 1 ] . toLowerCase ( ) === 'from' ? [ 'TIMESTAMP' ] : [ 'STRING' ] ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1604 :
2018-08-27 11:03:13 +08:00
parser . applyTypeToSuggestions ( $$ [ $0 - 2 ] . toLowerCase ( ) === 'from' ? [ 'TIMESTAMP' ] : [ 'STRING' ] ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 5 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1605 :
2018-08-27 11:03:13 +08:00
parser . applyTypeToSuggestions ( $$ [ $0 - 1 ] . toLowerCase ( ) === 'from' ? [ 'TIMESTAMP' ] : [ 'STRING' ] ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1606 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 3 ] . types [ 0 ] === 'STRING' ) {
parser . suggestValueExpressionKeywords ( $$ [ $0 - 3 ] , [ 'FROM' ] ) ;
} else {
parser . suggestValueExpressionKeywords ( $$ [ $0 - 3 ] ) ;
}
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 5 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1607 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 2 ] . types [ 0 ] === 'STRING' ) {
parser . suggestValueExpressionKeywords ( $$ [ $0 - 2 ] , [ 'FROM' ] ) ;
} else {
parser . suggestValueExpressionKeywords ( $$ [ $0 - 2 ] ) ;
}
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1612 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . applyArgumentTypesToSuggestions ( $$ [ $0 - 4 ] , 1 ) ;
var keywords = parser . getSelectListKeywords ( true ) ;
if ( ! $$ [ $0 - 2 ] ) {
keywords . push ( 'DISTINCT' ) ;
if ( parser . isImpala ( ) ) {
keywords . push ( 'ALL' ) ;
}
}
if ( parser . yy . result . suggestKeywords ) {
keywords = parser . yy . result . suggestKeywords . concat ( keywords ) ;
}
parser . suggestKeywords ( keywords ) ;
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1614 :
2018-08-27 11:03:13 +08:00
if ( parser . yy . result . suggestFunctions && ! parser . yy . result . suggestFunctions . types ) {
parser . applyArgumentTypesToSuggestions ( $$ [ $0 - 4 ] , 1 ) ;
}
this . $ = { types : parser . findReturnTypes ( $$ [ $0 - 4 ] ) } ;
break ;
2018-09-26 17:21:26 +08:00
case 1615 :
2018-08-27 11:03:13 +08:00
this . $ = { lateralView : { udtf : $$ [ $0 - 2 ] , tableAlias : $$ [ $0 - 1 ] , columnAliases : $$ [ $0 ] } } ;
break ;
2018-09-26 17:21:26 +08:00
case 1616 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] . function . toLowerCase ( ) === 'explode' ) {
this . $ = { lateralView : { udtf : $$ [ $0 - 1 ] , tableAlias : $$ [ $0 ] , columnAliases : [ 'key' , 'value' ] } , suggestKeywords : [ 'AS' ] } ;
} else if ( $$ [ $0 - 1 ] . function . toLowerCase ( ) === 'posexplode' ) {
this . $ = { lateralView : { udtf : $$ [ $0 - 1 ] , tableAlias : $$ [ $0 ] , columnAliases : [ 'pos' , 'val' ] } , suggestKeywords : [ 'AS' ] } ;
} else {
this . $ = { lateralView : { udtf : $$ [ $0 - 1 ] , tableAlias : $$ [ $0 ] , columnAliases : [ ] } , suggestKeywords : [ 'AS' ] } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1617 :
2018-08-27 11:03:13 +08:00
this . $ = { lateralView : { udtf : $$ [ $0 - 1 ] , columnAliases : $$ [ $0 ] } } ;
break ;
2018-09-26 17:21:26 +08:00
case 1618 : case 1619 : case 1620 : case 1621 :
2018-08-27 11:03:13 +08:00
this . $ = { } ;
break ;
2018-09-26 17:21:26 +08:00
case 1628 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'OUTER' , weight : 2 } , { value : 'explode' , weight : 1 } , { value : 'posexplode' , weight : 1 } ] ) ;
} else {
parser . suggestKeywords ( [ 'explode' , 'posexplode' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1629 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'VIEW' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1633 :
2018-08-27 11:03:13 +08:00
this . $ = [ $$ [ $0 - 2 ] , $$ [ $0 ] ] ;
break ;
2018-09-26 17:21:26 +08:00
case 1637 :
2018-08-27 11:03:13 +08:00
this . $ = { inValueEdit : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1638 :
2018-08-27 11:03:13 +08:00
this . $ = { inValueEdit : true , cursorAtStart : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1639 : case 1640 : case 1641 : case 1642 : case 1643 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : [ 'NOT' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1649 : case 1650 : case 1651 : case 1652 : case 1653 :
2018-08-27 11:03:13 +08:00
parser . suggestFunctions ( { types : [ 'STRING' ] } ) ;
parser . suggestColumns ( { types : [ 'STRING' ] } ) ;
this . $ = { types : [ 'BOOLEAN' ] }
break ;
2018-09-26 17:21:26 +08:00
case 1654 : case 1656 :
2018-08-27 11:03:13 +08:00
this . $ = parser . findCaseType ( $$ [ $0 - 1 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1655 : case 1658 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 3 ] . caseTypes . push ( $$ [ $0 - 1 ] ) ;
this . $ = parser . findCaseType ( $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1657 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 1 ] , [ 'END' ] ) ;
$$ [ $0 - 3 ] . caseTypes . push ( $$ [ $0 - 1 ] ) ;
this . $ = parser . findCaseType ( $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1659 :
2018-08-27 11:03:13 +08:00
this . $ = parser . findCaseType ( $$ [ $0 - 2 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1660 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . toLowerCase ( ) !== 'end' ) {
parser . suggestValueExpressionKeywords ( $$ [ $0 - 3 ] , [ { value : 'END' , weight : 3 } , { value : 'ELSE' , weight : 2 } , { value : 'WHEN' , weight : 1 } ] ) ;
} else {
parser . suggestValueExpressionKeywords ( $$ [ $0 - 3 ] , [ { value : 'ELSE' , weight : 2 } , { value : 'WHEN' , weight : 1 } ] ) ;
}
this . $ = parser . findCaseType ( $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1661 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . toLowerCase ( ) !== 'end' ) {
parser . suggestValueExpressionKeywords ( $$ [ $0 - 2 ] , [ { value : 'END' , weight : 3 } , { value : 'ELSE' , weight : 2 } , { value : 'WHEN' , weight : 1 } ] ) ;
} else {
parser . suggestValueExpressionKeywords ( $$ [ $0 - 2 ] , [ { value : 'ELSE' , weight : 2 } , { value : 'WHEN' , weight : 1 } ] ) ;
}
this . $ = parser . findCaseType ( $$ [ $0 - 2 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1662 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 3 ] . caseTypes . push ( $$ [ $0 - 1 ] ) ;
this . $ = parser . findCaseType ( $$ [ $0 - 3 ] ) ;
this . $ . suggestFilters = $$ [ $0 - 1 ] . suggestFilters
break ;
2018-09-26 17:21:26 +08:00
case 1663 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
this . $ = parser . findCaseType ( $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1664 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
this . $ = { types : [ 'T' ] , typeSet : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1665 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . suggestKeywords ( [ 'WHEN' ] ) ;
this . $ = $$ [ $0 - 1 ] ;
break ;
2018-09-26 17:21:26 +08:00
case 1666 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . suggestKeywords ( [ 'WHEN' ] ) ;
this . $ = { types : [ 'T' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1669 :
2018-08-27 11:03:13 +08:00
this . $ = { caseTypes : [ $$ [ $0 ] ] , lastType : $$ [ $0 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1670 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 1 ] . caseTypes . push ( $$ [ $0 ] ) ;
this . $ = { caseTypes : $$ [ $0 - 1 ] . caseTypes , lastType : $$ [ $0 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1674 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 2 ] , [ 'WHEN' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1677 :
2018-08-27 11:03:13 +08:00
this . $ = { caseTypes : [ { types : [ 'T' ] } ] , suggestFilters : $$ [ $0 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1678 :
2018-08-27 11:03:13 +08:00
this . $ = { caseTypes : [ { types : [ 'T' ] } ] , suggestFilters : $$ [ $0 - 1 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1679 :
2018-08-27 11:03:13 +08:00
this . $ = { caseTypes : [ $$ [ $0 ] ] , suggestFilters : $$ [ $0 - 2 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1680 : case 1681 :
2018-08-27 11:03:13 +08:00
this . $ = { caseTypes : [ $$ [ $0 ] ] , suggestFilters : $$ [ $0 ] . suggestFilters } ;
break ;
2018-09-26 17:21:26 +08:00
case 1682 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'WHEN' ] ) ;
this . $ = { caseTypes : [ { types : [ 'T' ] } ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1683 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'WHEN' ] ) ;
this . $ = { caseTypes : [ $$ [ $0 ] ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1684 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . suggestKeywords ( [ 'WHEN' ] ) ;
this . $ = { caseTypes : [ { types : [ 'T' ] } ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1685 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . suggestKeywords ( [ 'WHEN' ] ) ;
this . $ = { caseTypes : [ { types : [ 'T' ] } ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1686 : case 1688 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
this . $ = { caseTypes : [ { types : [ 'T' ] } ] , suggestFilters : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1687 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
parser . suggestKeywords ( [ 'THEN' ] ) ;
this . $ = { caseTypes : [ { types : [ 'T' ] } ] , suggestFilters : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1689 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
this . $ = { caseTypes : [ $$ [ $0 ] ] , suggestFilters : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1690 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 1 ] , [ 'THEN' ] ) ;
this . $ = { caseTypes : [ { types : [ 'T' ] } ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1691 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 2 ] , [ 'THEN' ] ) ;
this . $ = { caseTypes : [ { types : [ 'T' ] } ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1692 : case 1693 : case 1694 : case 1695 :
2018-08-27 11:03:13 +08:00
parser . valueExpressionSuggest ( ) ;
this . $ = { caseTypes : [ { types : [ 'T' ] } ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 1704 : case 1705 :
2018-08-27 11:03:13 +08:00
this . $ = { cursorAtStart : false , suggestFunctions : true , suggestColumns : true , suggestAggregateFunctions : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 1713 : case 2136 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'IF NOT EXISTS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1715 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ 'IF NOT EXISTS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1732 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'DATABASE' , 'INDEX' , 'SCHEMA' , 'TABLE' , 'VIEW' ] ) ;
} else {
parser . suggestKeywords ( [ 'TABLE' , 'VIEW' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1733 : case 1735 :
2018-08-27 11:03:13 +08:00
parser . addDatabaseLocation ( _$ [ $0 - 3 ] , [ { name : $$ [ $0 - 3 ] } ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1734 :
2018-08-27 11:03:13 +08:00
parser . addDatabaseLocation ( _$ [ $0 - 2 ] , [ { name : $$ [ $0 - 2 ] } ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1736 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestDatabases ( ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1737 :
2018-08-27 11:03:13 +08:00
parser . addDatabaseLocation ( _$ [ $0 - 1 ] , [ { name : $$ [ $0 - 1 ] } ] ) ;
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'SET DBPROPERTIES' , 'SET LOCATION' , 'SET OWNER' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1738 :
2018-08-27 11:03:13 +08:00
parser . addDatabaseLocation ( _$ [ $0 - 2 ] , [ { name : $$ [ $0 - 2 ] } ] ) ;
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'DBPROPERTIES' , 'LOCATION' , 'OWNER' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1739 : case 2033 :
2018-08-27 11:03:13 +08:00
parser . addDatabaseLocation ( _$ [ $0 - 2 ] , [ { name : $$ [ $0 - 2 ] } ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1740 :
2018-08-27 11:03:13 +08:00
parser . addDatabaseLocation ( _$ [ $0 - 3 ] , [ { name : $$ [ $0 - 3 ] } ] ) ;
parser . suggestKeywords ( [ 'GROUP' , 'ROLE' , 'USER' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1741 :
2018-08-27 11:03:13 +08:00
parser . addDatabaseLocation ( _$ [ $0 - 3 ] , [ { name : $$ [ $0 - 3 ] } ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1743 : case 1826 : case 2375 : case 2750 : case 3074 : case 3284 : case 3300 : case 3302 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ON' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1747 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'PARTITION' , 'REBUILD' ] ) ;
} else {
parser . suggestKeywords ( [ 'REBUILD' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1768 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] && parser . isImpala ( ) ) {
parser . suggestKeywords ( [ { value : 'IF NOT EXISTS' , weight : 4 } , { value : 'COLUMNS' , weight : 3 } , { value : 'PARTITION' , weight : 2 } , { value : 'RANGE PARTITION' , weight : 1 } ] ) ;
} else if ( ! $$ [ $0 - 1 ] && parser . isHive ( ) ) {
parser . suggestKeywords ( [ { value : 'IF NOT EXISTS' , weight : 3 } , { value : 'COLUMNS' , weight : 2 } , { value : 'CONSTRAINT' , weight : 1 } , { value : 'PARTITION' , weight : 1 } ] ) ;
} else if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ { value : 'PARTITION' , weight : 2 } , { value : 'RANGE PARTITION' , weight : 1 } ] ) ;
} else if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1769 : case 1790 : case 2060 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'COLUMNS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1774 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
if ( ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'LOCATION' , 'PARTITION' ] ) ;
} else if ( $$ [ $0 - 2 ] && $$ [ $0 - 2 ] . suggestKeywords ) {
var keywords = parser . createWeightedKeywords ( $$ [ $0 - 2 ] . suggestKeywords , 2 ) ;
keywords . push ( { value : 'PARTITION' , weight : 1 } ) ;
parser . suggestKeywords ( keywords ) ;
} else {
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
}
} else if ( parser . isImpala ( ) ) {
if ( ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'LOCATION' , 'CACHED IN' , 'UNCACHED' ] ) ;
} else if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'CACHED IN' , 'UNCACHED' ] ) ;
} else if ( $$ [ $0 - 1 ] && $$ [ $0 - 1 ] . suggestKeywords ) {
parser . suggestKeywords ( $$ [ $0 - 1 ] . suggestKeywords ) ;
}
}
break ;
2018-09-26 17:21:26 +08:00
case 1776 : case 1809 : case 1817 : case 1829 : case 1907 : case 1933 : case 3356 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1777 : case 1934 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'VALUE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1781 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FOREIGN KEY' , 'PRIMARY KEY' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1788 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'ADD COLUMNS' , 'ADD IF NOT EXISTS' , 'ADD PARTITION' , 'ARCHIVE PARTITION' , 'CHANGE' ,
'CLUSTERED BY' , 'CONCATENATE' , 'COMPACT' , 'DISABLE NO_DROP' , 'DISABLE OFFLINE' , 'DROP' , 'ENABLE NO_DROP' ,
'ENABLE OFFLINE' , 'EXCHANGE PARTITION' , 'NOT SKEWED' , 'NOT STORED AS DIRECTORIES' , 'PARTITION' ,
'RECOVER PARTITIONS' , 'RENAME TO' , 'REPLACE COLUMNS' , 'SET FILEFORMAT' , 'SET LOCATION' , 'SET OWNER' , 'SET SERDE' ,
'SET SERDEPROPERTIES' , 'SET SKEWED LOCATION' , 'SET TBLPROPERTIES' , 'SKEWED BY' , 'TOUCH' , 'UNARCHIVE PARTITION' ] ) ;
} else if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'ADD COLUMNS' , 'ADD PARTITION' , 'ADD RANGE PARTITION' , 'ALTER' , 'ALTER COLUMN' , 'CHANGE' ,
'DROP COLUMN' , 'DROP PARTITION' , 'DROP RANGE PARTITION' , 'PARTITION' , 'RECOVER PARTITIONS' , 'RENAME TO' ,
'REPLACE COLUMNS' , 'SET CACHED IN' , 'SET COLUMN STATS' , 'SET FILEFORMAT' , 'SET LOCATION' , 'SET ROW FORMAT' ,
'SET SERDEPROPERTIES' , 'SET TBLPROPERTIES' , 'SET UNCACHED' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1789 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'ADD COLUMNS' , 'CHANGE' , 'COMPACT' , 'CONCATENATE' , 'DISABLE NO_DROP' , 'DISABLE OFFLINE' ,
'ENABLE NO_DROP' , 'ENABLE OFFLINE' , 'RENAME TO PARTITION' , 'REPLACE COLUMNS' , 'SET FILEFORMAT' , 'SET LOCATION' ,
'SET SERDE' , 'SET SERDEPROPERTIES' ] ) ;
} else if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'SET CACHED IN' , 'SET FILEFORMAT' , 'SET LOCATION' , 'SET ROW FORMAT' ,
'SET SERDEPROPERTIES' , 'SET TBLPROPERTIES' , 'SET UNCACHED' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1791 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'FILEFORMAT' , 'LOCATION' , 'SERDE' , 'SERDEPROPERTIES' ] ) ;
} else if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'CACHED IN' , 'FILEFORMAT' , 'LOCATION' , 'ROW FORMAT' , 'SERDEPROPERTIES' , 'TBLPROPERTIES' , 'UNCACHED' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1792 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'FILEFORMAT' , 'LOCATION' , 'OWNER' , 'SERDE' , 'SERDEPROPERTIES' , 'SKEWED LOCATION' , 'TBLPROPERTIES' ] ) ;
} else if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'CACHED IN' , 'COLUMN STATS' , 'FILEFORMAT' , 'LOCATION' , 'ROW FORMAT' , 'SERDEPROPERTIES' , 'TBLPROPERTIES' , 'UNCACHED' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1794 : case 2021 : case 2808 : case 2824 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'TO' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1796 : case 1818 : case 2308 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'PARTITIONS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1813 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'SKEWED' , 'STORED AS DIRECTORIES' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1814 : case 2010 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'AS DIRECTORIES' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1815 : case 2011 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'DIRECTORIES' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1816 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'TO PARTITION' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1819 : case 2488 : case 2507 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'LOCATION' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1822 : case 2804 : case 2809 : case 2813 : case 2880 : case 2881 : case 2882 : case 2915 : case 2923 : case 2926 : case 2929 : case 2934 : case 2937 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'GROUP' , 'ROLE' , 'USER' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1827 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'STORED AS DIRECTORIES' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1831 : case 1838 : case 1872 : case 1875 : case 1877 :
2018-08-27 11:03:13 +08:00
parser . addColumnLocation ( $$ [ $0 - 3 ] . location , [ $$ [ $0 - 3 ] . identifier ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1832 :
2018-08-27 11:03:13 +08:00
parser . addColumnLocation ( $$ [ $0 - 2 ] . location , [ $$ [ $0 - 2 ] . identifier ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1833 : case 1841 : case 1842 :
2018-08-27 11:03:13 +08:00
parser . addColumnLocation ( $$ [ $0 - 1 ] . location , [ $$ [ $0 - 1 ] . identifier ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1834 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'COLUMN' ] ) ;
}
parser . suggestColumns ( ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1835 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'DROP DEFAULT' , 'SET BLOCK_SIZE' , 'SET COMMENT' , 'SET COMPRESSION' , 'SET DEFAULT' ,
'SET ENCODING' ] ) ;
parser . addColumnLocation ( $$ [ $0 - 1 ] . location , [ $$ [ $0 - 1 ] . identifier ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1836 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'DEFAULT' ] ) ;
parser . addColumnLocation ( $$ [ $0 - 2 ] . location , [ $$ [ $0 - 2 ] . identifier ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1837 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'BLOCK_SIZE' , 'COMMENT' , 'COMPRESSION' , 'DEFAULT' , 'ENCODING' ] ) ;
parser . addColumnLocation ( $$ [ $0 - 2 ] . location , [ $$ [ $0 - 2 ] . identifier ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1839 : case 2090 : case 2732 : case 3233 : case 3357 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'STATS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1859 :
2018-08-27 11:03:13 +08:00
parser . suggestIdentifiers ( [ '\'avgSize\'' , '\'maxSize\'' , '\'numDVs\'' , '\'numNulls\'' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1874 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'COLUMN' ] ) ;
}
parser . suggestColumns ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1876 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
if ( $$ [ $0 - 3 ] . suggestKeywords ) {
var keywords = parser . createWeightedKeywords ( $$ [ $0 - 3 ] . suggestKeywords , 3 ) ;
keywords = keywords . concat ( [ { value : 'AFTER' , weight : 2 } , { value : 'FIRST' , weight : 2 } , { value : 'CASCADE' , weight : 1 } , { value : 'RESTRICT' , weight : 1 } ] ) ;
parser . suggestKeywords ( keywords ) ;
} else {
parser . suggestKeywords ( [ { value : 'AFTER' , weight : 2 } , { value : 'FIRST' , weight : 2 } , { value : 'CASCADE' , weight : 1 } , { value : 'RESTRICT' , weight : 1 } ] ) ;
}
} else if ( parser . isHive ( ) && $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'CASCADE' , 'RESTRICT' ] ) ;
}
parser . addColumnLocation ( $$ [ $0 - 4 ] . location , [ $$ [ $0 - 4 ] . identifier ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1878 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'AND WAIT' , 'WITH OVERWRITE TBLPROPERTIES' ] ) ;
} else if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'WITH OVERWRITE TBLPROPERTIES' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1881 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'NO_DROP' , 'OFFLINE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1883 : case 2395 :
2018-08-27 11:03:13 +08:00
parser . suggestFileFormats ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1886 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'WITH REPLICATION =' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1888 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'FORMAT' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1889 : case 3020 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'DELIMITED' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1892 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'WITH SERDEPROPERTIES' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1896 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'WAIT' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1899 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'OVERWRITE TBLPROPERTIES' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1900 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'TBLPROPERTIES' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1903 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'CASCADE' , 'RESTRICT' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1908 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'WITH TABLE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1909 : case 2028 : case 2042 : case 2600 : case 2624 : case 2764 : case 3154 : case 3163 : case 3288 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'TABLE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1927 :
2018-08-27 11:03:13 +08:00
parser . addColumnLocation ( $$ [ $0 ] . location , [ $$ [ $0 ] . identifier ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1928 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'CONSTRAINT' , weight : 1 } , { value : 'PARTITION' , weight : 1 } , { value : 'IF EXISTS' , weight : 2 } ] ) ;
} else if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
} else if ( parser . isImpala ( ) && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'COLUMN' , weight : 1 } , { value : 'PARTITION' , weight : 1 } , { value : 'RANGE PARTITION' , weight : 1 } , { value : 'IF EXISTS' , weight : 2 } ] ) ;
parser . suggestColumns ( ) ;
} else if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'PARTITION' , 'RANGE PARTITION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1930 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'PURGE' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1941 : case 2044 : case 2741 :
2018-08-27 11:03:13 +08:00
if ( parser . yy . result . suggestTables ) {
parser . yy . result . suggestTables . onlyTables = true ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1942 : case 2029 : case 2043 :
2018-08-27 11:03:13 +08:00
parser . suggestTables ( { onlyTables : true } ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 1967 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'CASCADE' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1975 : case 1976 : case 1977 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 1993 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ 'LOCATION' ] } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2017 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'AS' , 'SET TBLPROPERTIES' ] ) ;
} else if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'AS' , 'RENAME TO' ] ) ;
} else {
parser . suggestKeywords ( [ 'AS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2018 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'TBLPROPERTIES' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2024 : case 2030 : case 2762 :
2018-08-27 11:03:13 +08:00
if ( parser . yy . result . suggestTables ) {
parser . yy . result . suggestTables . onlyViews = true ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2025 :
2018-08-27 11:03:13 +08:00
parser . suggestTables ( { onlyViews : true } ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2027 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'REPAIR TABLE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2032 : case 2499 : case 2710 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FUNCTION' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2034 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ON DATABASE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2035 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'DATABASE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2037 :
2018-08-27 11:03:13 +08:00
parser . addDatabaseLocation ( _$ [ $0 - 1 ] , [ { name : $$ [ $0 - 1 ] } ] ) ;
parser . suggestKeywords ( [ 'IS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2038 :
2018-08-27 11:03:13 +08:00
parser . addDatabaseLocation ( _$ [ $0 - 2 ] , [ { name : $$ [ $0 - 2 ] } ] ) ;
parser . suggestKeywords ( [ 'NULL' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2041 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 6 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2046 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'PARTITION' , weight : 2 } , { value : 'COMPUTE STATISTICS' , weight : 1 } ] ) ;
} else {
parser . suggestKeywords ( [ 'COMPUTE STATISTICS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2047 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 3 ] ) ;
parser . suggestKeywords ( [ 'STATISTICS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2048 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 7 ] ) ;
parser . suggestKeywords ( parser . getKeywordsForOptionalsLR ( [ $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 ] ] , [ { value : 'FOR COLUMNS' , weight : 3 } , { value : 'CACHE METADATA' , weight : 2 } , { value : 'NOSCAN' , weight : 1 } ] ) ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2049 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 7 ] ) ;
parser . suggestKeywords ( parser . getKeywordsForOptionalsLR ( [ $$ [ $0 - 1 ] , $$ [ $0 ] ] , [ { value : 'CACHE METADATA' , weight : 2 } , { value : 'NOSCAN' , weight : 1 } ] ) ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2050 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 7 ] ) ;
parser . suggestKeywords ( parser . getKeywordsForOptionalsLR ( [ $$ [ $0 ] ] , [ { value : 'NOSCAN' , weight : 1 } ] ) ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2051 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'TABLE' ] ) ;
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2052 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'TABLE' ] ) ;
parser . addTablePrimary ( $$ [ $0 - 6 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2064 : case 2076 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'METADATA' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2069 :
2018-08-27 11:03:13 +08:00
parser . suggestTables ( ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
parser . suggestKeywords ( [ 'FUNCTIONS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2071 : case 3126 : case 3266 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2079 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 ] ) ;
parser . suggestKeywords ( [ 'METADATA' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2082 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'STATS' , 'INCREMENTAL STATS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2085 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
parser . suggestKeywords ( [ 'STATS' , 'INCREMENTAL STATS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2086 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 3 ] ) ;
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'TABLESAMPLE' ] ) ;
} else if ( $$ [ $0 - 1 ] . suggestKeywords ) {
parser . suggestKeywords ( $$ [ $0 - 1 ] . suggestKeywords ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2089 : case 2731 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
parser . suggestKeywords ( [ 'INCREMENTAL' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2091 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
parser . suggestKeywords ( [ 'STATS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2094 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( ! $$ [ $0 ] ) {
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2109 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'TABLE' ] ) ;
} else if ( parser . isHive ( ) ) {
if ( $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ 'EXTERNAL TABLE' , 'FUNCTION' , 'MACRO' , 'TABLE' ] ) ;
} else {
parser . suggestKeywords ( [ 'DATABASE' , 'EXTERNAL TABLE' , 'FUNCTION' , 'INDEX' , 'ROLE' , 'SCHEMA' , 'TABLE' , 'TEMPORARY EXTERNAL TABLE' , 'TEMPORARY FUNCTION' , 'TEMPORARY MACRO' , 'TEMPORARY TABLE' , 'VIEW' ] ) ;
}
} else if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'AGGREGATE FUNCTION' , 'DATABASE' , 'EXTERNAL TABLE' , 'FUNCTION' , 'ROLE' , 'SCHEMA' , 'TABLE' , 'VIEW' ] ) ;
} else {
parser . suggestKeywords ( [ 'DATABASE' , 'ROLE' , 'SCHEMA' , 'TABLE' , 'VIEW' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2112 :
2018-08-27 11:03:13 +08:00
var keywords = [ ] ;
if ( ! $$ [ $0 ] && parser . isHive ( ) ) {
keywords . push ( 'WITH DBPROPERTIES' ) ;
}
if ( ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
keywords . push ( 'LOCATION' ) ;
}
if ( ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
keywords . push ( 'COMMENT' ) ;
}
if ( keywords . length > 0 ) {
parser . suggestKeywords ( keywords ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2127 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'DBPROPERTIES' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2149 :
2018-08-27 11:03:13 +08:00
var keywords = [ ] ;
2018-09-01 15:40:51 +08:00
if ( ! $$ [ $0 - 10 ] && ! $$ [ $0 - 9 ] && ! $$ [ $0 - 8 ] && ! $$ [ $0 - 7 ] && ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
2018-08-27 11:03:13 +08:00
keywords . push ( { value : 'LIKE' , weight : 1 } ) ;
if ( parser . isImpala ( ) ) {
keywords . push ( { value : 'LIKE PARQUET' , weight : 1 } ) ;
}
} else {
2018-09-01 15:40:51 +08:00
if ( ! $$ [ $0 - 9 ] && ! $$ [ $0 - 8 ] && ! $$ [ $0 - 7 ] && ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
2018-08-27 11:03:13 +08:00
keywords . push ( { value : 'COMMENT' , weight : 11 } ) ;
}
2018-09-01 15:40:51 +08:00
if ( ! $$ [ $0 - 8 ] && ! $$ [ $0 - 7 ] && ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
2018-08-27 11:03:13 +08:00
keywords . push ( { value : 'PARTITIONED BY' , weight : 10 } ) ;
if ( parser . isImpala ( ) ) {
keywords . push ( { value : 'PARTITION BY' , weight : 10 } ) ;
}
}
2018-09-01 15:40:51 +08:00
if ( parser . isImpala ( ) && ! $$ [ $0 - 7 ] && ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
2018-08-27 11:03:13 +08:00
keywords . push ( { value : 'SORT BY' , weight : 9 } ) ;
}
2018-09-01 15:40:51 +08:00
if ( parser . isHive ( ) && ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
2018-08-27 11:03:13 +08:00
keywords . push ( { value : 'CLUSTERED BY' , weight : 8 } ) ;
}
2018-09-01 15:40:51 +08:00
if ( parser . isHive ( ) && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
2018-08-27 11:03:13 +08:00
keywords . push ( { value : 'SKEWED BY' , weight : 7 } ) ;
2018-09-01 15:40:51 +08:00
} else if ( parser . isHive ( ) && $$ [ $0 - 5 ] && $$ [ $0 - 5 ] . suggestKeywords && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 - 1 ] ) {
keywords = keywords . concat ( parser . createWeightedKeywords ( $$ [ $0 - 5 ] . suggestKeywords , 7 ) ) ; // Get the last optional from SKEWED BY
2018-08-27 11:03:13 +08:00
}
2018-09-01 15:40:51 +08:00
if ( ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
2018-08-27 11:03:13 +08:00
keywords . push ( { value : 'ROW FORMAT' , weight : 6 } ) ;
keywords . push ( { value : 'STORED AS' , weight : 6 } ) ;
if ( parser . isHive ( ) ) {
keywords . push ( { value : 'STORED BY' , weight : 6 } ) ;
}
2018-09-01 15:40:51 +08:00
} else if ( $$ [ $0 - 4 ] && $$ [ $0 - 4 ] . suggestKeywords && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
keywords = keywords . concat ( parser . createWeightedKeywords ( $$ [ $0 - 4 ] . suggestKeywords , 6 ) ) ;
2018-08-27 11:03:13 +08:00
}
2018-09-01 15:40:51 +08:00
if ( ( ( $$ [ $0 - 4 ] && $$ [ $0 - 4 ] . storedBy ) || parser . isImpala ( ) ) && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
2018-08-27 11:03:13 +08:00
keywords . push ( { value : 'WITH SERDEPROPERTIES' , weight : 5 } ) ;
}
2018-09-01 15:40:51 +08:00
if ( ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
2018-08-27 11:03:13 +08:00
keywords . push ( { value : 'LOCATION' , weight : 4 } ) ;
}
2018-09-01 15:40:51 +08:00
if ( ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
2018-08-27 11:03:13 +08:00
keywords . push ( { value : 'TBLPROPERTIES' , weight : 3 } ) ;
}
2018-09-01 15:40:51 +08:00
if ( parser . isImpala ( ) && ! $$ [ $0 ] ) {
2018-08-27 11:03:13 +08:00
keywords . push ( { value : 'CACHED IN' , weight : 2 } , { value : 'UNCACHED' , weight : 2 } ) ;
}
2018-09-01 15:40:51 +08:00
if ( parser . isImpala ( ) && $$ [ $0 ] && $$ [ $0 ] . suggestKeywords ) {
keywords = keywords . concat ( parser . createWeightedKeywords ( $$ [ $0 ] . suggestKeywords , 2 ) ) ;
2018-08-27 11:03:13 +08:00
}
keywords . push ( { value : 'AS' , weight : 1 } ) ;
}
if ( keywords . length > 0 ) {
parser . suggestKeywords ( keywords ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2159 :
2018-08-27 11:03:13 +08:00
parser . suggestTables ( ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'PARQUET' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2165 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'PRIMARY KEY' ] ) ;
} else if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ { value : 'PRIMARY KEY' , weight : 2 } , { value : 'CONSTRAINT' , weight : 1 } ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2172 : case 2174 : case 2367 :
2018-08-27 11:03:13 +08:00
parser . checkForKeywords ( $$ [ $0 - 1 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2173 : case 2175 :
2018-08-27 11:03:13 +08:00
parser . checkForKeywords ( $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2176 :
2018-08-27 11:03:13 +08:00
this . $ = $$ [ $0 - 2 ] ;
var keywords = [ ] ;
if ( parser . isImpala ( ) ) {
if ( ! $$ [ $0 ] [ 'primary' ] ) {
keywords . push ( 'PRIMARY KEY' ) ;
}
if ( ! $$ [ $0 ] [ 'encoding' ] ) {
keywords . push ( 'ENCODING' ) ;
}
if ( ! $$ [ $0 ] [ 'compression' ] ) {
keywords . push ( 'COMPRESSION' ) ;
}
if ( ! $$ [ $0 ] [ 'default' ] ) {
keywords . push ( 'DEFAULT' ) ;
}
if ( ! $$ [ $0 ] [ 'block_size' ] ) {
keywords . push ( 'BLOCK_SIZE' ) ;
}
if ( ! $$ [ $0 ] [ 'null' ] ) {
keywords . push ( 'NOT NULL' ) ;
keywords . push ( 'NULL' ) ;
}
}
if ( ! $$ [ $0 ] [ 'comment' ] ) {
keywords . push ( 'COMMENT' ) ;
if ( parser . isHive ( ) && $$ [ $0 - 1 ] . toLowerCase ( ) === 'double' ) {
keywords . push ( { value : 'PRECISION' , weight : 2 } ) ;
}
}
if ( keywords . length > 0 ) {
this . $ . suggestKeywords = keywords ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2177 : case 2213 : case 2219 : case 2220 : case 2233 : case 2236 : case 2248 : case 2250 : case 2650 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( parser . getColumnDataTypeKeywords ( ) ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2182 :
2018-08-27 11:03:13 +08:00
this . $ = { } ;
this . $ [ $$ [ $0 ] ] = true ;
break ;
2018-09-26 17:21:26 +08:00
case 2183 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 1 ] [ $$ [ $0 ] ] = true ;
break ;
2018-09-26 17:21:26 +08:00
case 2188 :
2018-08-27 11:03:13 +08:00
this . $ = 'primary' ;
break ;
2018-09-26 17:21:26 +08:00
case 2189 :
2018-08-27 11:03:13 +08:00
this . $ = 'encoding' ;
break ;
2018-09-26 17:21:26 +08:00
case 2190 :
2018-08-27 11:03:13 +08:00
this . $ = 'compression' ;
break ;
2018-09-26 17:21:26 +08:00
case 2191 :
2018-08-27 11:03:13 +08:00
this . $ = 'default' ;
break ;
2018-09-26 17:21:26 +08:00
case 2192 :
2018-08-27 11:03:13 +08:00
this . $ = 'block_size' ;
break ;
2018-09-26 17:21:26 +08:00
case 2193 : case 2194 :
2018-08-27 11:03:13 +08:00
this . $ = 'null' ;
break ;
2018-09-26 17:21:26 +08:00
case 2195 :
2018-08-27 11:03:13 +08:00
this . $ = 'comment' ;
break ;
2018-09-26 17:21:26 +08:00
case 2197 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'NULL' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2218 : case 2534 : case 2545 : case 2568 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( parser . getTypeKeywords ( ) ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2232 : case 2235 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'COMMENT' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2260 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'CONSTRAINT' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2261 : case 2264 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FOREIGN KEY' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2266 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'PRIMARY KEY' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2270 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'DISABLE NOVALIDATE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2271 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'NOVALIDATE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2273 : case 3161 : case 3168 : case 3175 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 4 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2274 : case 2291 : case 2293 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'KEY' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2276 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'REFERENCES' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2280 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
parser . suggestKeywords ( [ 'DISABLE NOVALIDATE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2281 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 3 ] ) ;
parser . suggestKeywords ( [ 'NOVALIDATE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2282 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 5 ] ) ;
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'NORELY' , 'RELY' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2304 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'HASH' , 'RANGE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2316 : case 2321 : case 2322 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2329 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'VALUE' , 'VALUES' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2331 : case 2638 : case 3070 :
2018-08-27 11:03:13 +08:00
parser . suggestFunctions ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2332 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . endsWithLessThanOrEqual && parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'VALUES' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2333 : case 2336 : case 2339 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ '<' , '<=' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2334 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'VALUES' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2337 : case 2340 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestFunctions ( ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2350 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'INTO' , weight : 1 } , { value : 'SORTED BY' , weight : 2 } ] ) ;
} else {
parser . suggestKeywords ( [ 'INTO' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2351 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'BUCKETS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2372 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : [ 'STORED AS DIRECTORIES' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 2382 :
2018-08-27 11:03:13 +08:00
this . $ = parser . mergeSuggestKeywords ( $$ [ $0 - 1 ] , $$ [ $0 ] )
break ;
2018-09-26 17:21:26 +08:00
case 2383 : case 2384 :
2018-08-27 11:03:13 +08:00
this . $ = { storedBy : true }
break ;
2018-09-26 17:21:26 +08:00
case 2385 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'AS' , 'BY' ] ) ;
} else {
parser . suggestKeywords ( [ 'AS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2387 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FORMAT' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2388 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'DELIMITED' , 'SERDE' ] ) ;
} else {
parser . suggestKeywords ( [ 'DELIMITED' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2392 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : [ 'STORED AS' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 2418 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ { value : 'FIELDS TERMINATED BY' , weight : 5 } , { value : 'COLLECTION ITEMS TERMINATED BY' , weight : 4 } , { value : 'MAP KEYS TERMINATED BY' , weight : 3 } , { value : 'LINES TERMINATED BY' , weight : 2 } , { value : 'NULL DEFINED AS' , weight : 1 } ] } ;
} else if ( $$ [ $0 - 4 ] && $$ [ $0 - 4 ] . suggestKeywords && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : parser . createWeightedKeywords ( $$ [ $0 - 4 ] . suggestKeywords , 5 ) . concat ( [ { value : 'COLLECTION ITEMS TERMINATED BY' , weight : 4 } , { value : 'MAP KEYS TERMINATED BY' , weight : 3 } , { value : 'LINES TERMINATED BY' , weight : 2 } , { value : 'NULL DEFINED AS' , weight : 1 } ] ) } ;
} else if ( ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ { value : 'COLLECTION ITEMS TERMINATED BY' , weight : 4 } , { value : 'MAP KEYS TERMINATED BY' , weight : 3 } , { value : 'LINES TERMINATED BY' , weight : 2 } , { value : 'NULL DEFINED AS' , weight : 1 } ] } ;
} else if ( ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ { value : 'MAP KEYS TERMINATED BY' , weight : 3 } , { value : 'LINES TERMINATED BY' , weight : 2 } , { value : 'NULL DEFINED AS' , weight : 1 } ] } ;
} else if ( ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ { value : 'LINES TERMINATED BY' , weight : 2 } , { value : 'NULL DEFINED AS' , weight : 1 } ] } ;
} else if ( ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ { value : 'NULL DEFINED AS' , weight : 1 } ] } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2424 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ { value : 'FIELDS TERMINATED BY' , weight : 2 } , { value : 'LINES TERMINATED BY' , weight : 1 } ] } ;
} else if ( $$ [ $0 - 1 ] && $$ [ $0 - 1 ] . suggestKeywords && ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : parser . createWeightedKeywords ( $$ [ $0 - 1 ] . suggestKeywords , 2 ) . concat ( [ 'LINES TERMINATED BY' ] ) } ;
} else if ( ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ { value : 'LINES TERMINATED BY' , weight : 1 } ] } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2428 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestKeywords : [ 'ESCAPED BY' ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 2430 : case 2436 : case 2441 : case 2445 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'TERMINATED BY' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2435 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ITEMS TERMINATED BY' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2440 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'KEYS TERMINATED BY' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2449 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'DEFINED AS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2455 : case 2456 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'SERDEPROPERTIES' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2466 :
2018-08-27 11:03:13 +08:00
parser . commitLocations ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2468 : case 2485 : case 2501 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'IF NOT EXISTS' ] ) ;
}
parser . suggestDatabases ( { appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2469 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 7 ] ) {
parser . suggestKeywords ( [ 'IF NOT EXISTS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2472 :
2018-08-27 11:03:13 +08:00
var keywords = [ { value : 'AS' , weight : 1 } ] ;
if ( ! $$ [ $0 - 1 ] ) {
if ( parser . isHive ( ) ) {
keywords . push ( { value : 'TBLPROPERTIES' , weight : 2 } ) ;
}
if ( ! $$ [ $0 - 2 ] ) {
keywords . push ( { value : 'COMMENT' , weight : 3 } ) ;
}
}
parser . suggestKeywords ( keywords ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2486 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 6 ] ) {
parser . suggestKeywords ( [ 'IF NOT EXISTS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2487 : case 2506 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'RETURNS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2489 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'SYMBOL' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2500 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 13 ] ) {
parser . suggestKeywords ( [ 'IF NOT EXISTS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2508 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'INIT_FN' , weight : 2 } , { value : 'UPDATE_FN' , weight : 1 } ] ) ;
} else {
parser . suggestKeywords ( [ { value : 'UPDATE_FN' , weight : 1 } ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2509 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'MERGE_FN' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2510 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'PREPARE_FN' , weight : 5 } , { value : 'CLOSE_FN' , weight : 4 } , { value : 'SERIALIZE_FN' , weight : 3 } , { value : 'FINALIZE_FN' , weight : 2 } , { value : 'INTERMEDIATE' , weight : 1 } ] ) ;
} else if ( $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'CLOSE_FN' , weight : 4 } , { value : 'SERIALIZE_FN' , weight : 3 } , { value : 'FINALIZE_FN' , weight : 2 } , { value : 'INTERMEDIATE' , weight : 1 } ] ) ;
} else if ( $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'SERIALIZE_FN' , weight : 3 } , { value : 'FINALIZE_FN' , weight : 2 } , { value : 'INTERMEDIATE' , weight : 1 } ] ) ;
} else if ( $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'FINALIZE_FN' , weight : 2 } , { value : 'INTERMEDIATE' , weight : 1 } ] ) ;
} else if ( $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'INTERMEDIATE' , weight : 1 } ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2529 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'USING' ] ) ;
} else {
parser . suggestKeywords ( [ 'ARCHIVE' , 'FILE' , 'JAR' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2535 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ '...' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2570 :
2018-08-27 11:03:13 +08:00
parser . suggestFunctions ( ) ;
parser . suggestAggregateFunctions ( ) ;
parser . suggestAnalyticFunctions ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2573 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ARCHIVE' , 'FILE' , 'JAR' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2585 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'COMMENT' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2589 : case 2591 :
2018-08-27 11:03:13 +08:00
this . $ = $$ [ $0 - 3 ] ;
break ;
2018-09-26 17:21:26 +08:00
case 2599 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ON TABLE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2605 : case 2615 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ '\'BITMAP\'' , '\'COMPACT\'' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2613 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 7 ] && ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'WITH DEFERRED REBUILD' , weight : 7 } , { value : 'IDXPROPERTIES' , weight : 6 } , { value : 'IN TABLE' , weight : 5 } , { value : 'ROW FORMAT' , weight : 4 } , { value : 'STORED AS' , weight : 4 } , { value : 'STORED BY' , weight : 4 } , { value : 'LOCATION' , weight : 3 } , { value : 'TBLPROPERTIES' , weight : 2 } , { value : 'COMMENT' , weight : 1 } ] ) ;
} else if ( ! $$ [ $0 - 6 ] && ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'IDXPROPERTIES' , weight : 6 } , { value : 'IN TABLE' , weight : 5 } , { value : 'ROW FORMAT' , weight : 4 } , { value : 'STORED AS' , weight : 4 } , { value : 'STORED BY' , weight : 4 } , { value : 'LOCATION' , weight : 3 } , { value : 'TBLPROPERTIES' , weight : 2 } , { value : 'COMMENT' , weight : 1 } ] ) ;
} else if ( ! $$ [ $0 - 5 ] && ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'IN TABLE' , weight : 5 } , { value : 'ROW FORMAT' , weight : 4 } , { value : 'STORED AS' , weight : 4 } , { value : 'STORED BY' , weight : 4 } , { value : 'LOCATION' , weight : 3 } , { value : 'TBLPROPERTIES' , weight : 2 } , { value : 'COMMENT' , weight : 1 } ] ) ;
} else if ( ! $$ [ $0 - 4 ] && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'ROW FORMAT' , weight : 4 } , { value : 'STORED AS' , weight : 4 } , { value : 'STORED BY' , weight : 4 } , { value : 'LOCATION' , weight : 3 } , { value : 'TBLPROPERTIES' , weight : 2 } , { value : 'COMMENT' , weight : 1 } ] ) ;
} else if ( $$ [ $0 - 4 ] && $$ [ $0 - 4 ] . suggestKeywords && ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( parser . createWeightedKeywords ( $$ [ $0 - 4 ] . suggestKeywords , 4 ) . concat ( [ { value : 'LOCATION' , weight : 3 } , { value : 'TBLPROPERTIES' , weight : 2 } , { value : 'COMMENT' , weight : 1 } ] ) ) ;
} else if ( ! $$ [ $0 - 3 ] && ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'LOCATION' , weight : 3 } , { value : 'TBLPROPERTIES' , weight : 2 } , { value : 'COMMENT' , weight : 1 } ] ) ;
} else if ( ! $$ [ $0 - 2 ] && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'TBLPROPERTIES' , weight : 2 } , { value : 'COMMENT' , weight : 1 } ] ) ;
} else if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { value : 'COMMENT' , weight : 1 } ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2618 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'DEFERRED REBUILD' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2619 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'REBUILD' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2664 : case 2666 :
2018-08-27 11:03:13 +08:00
parser . addCommonTableExpressions ( $$ [ $0 - 1 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2690 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'DATABASE' , 'FUNCTION' , 'INDEX' , 'ROLE' , 'SCHEMA' , 'TABLE' , 'TEMPORARY FUNCTION' , 'TEMPORARY MACRO' , 'VIEW' ] ) ;
} else if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'AGGREGATE FUNCTION' , 'DATABASE' , 'FUNCTION' , 'INCREMENTAL STATS' , 'ROLE' , 'SCHEMA' , 'STATS' , 'TABLE' , 'VIEW' ] ) ;
} else {
parser . suggestKeywords ( [ 'ROLE' , 'SCHEMA' , 'TABLE' , 'VIEW' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2694 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'IF EXISTS' ] ) ;
}
parser . suggestDatabases ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2695 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) || parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'CASCADE' , 'RESTRICT' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2697 : case 2706 : case 2711 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 3 ] ) {
parser . suggestKeywords ( [ 'IF EXISTS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2704 : case 2705 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'IF EXISTS' ] ) ;
}
parser . suggestDatabases ( { appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2708 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'AGGREGATE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2718 : case 2723 : case 2755 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'IF EXISTS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2719 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ 'IF EXISTS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2730 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 ] ) ;
parser . suggestKeywords ( [ 'INCREMENTAL' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2736 : case 3326 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2740 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'IF EXISTS' ] ) ;
}
parser . suggestTables ( { onlyTables : true } ) ;
parser . suggestDatabases ( {
appendDot : true
} ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2743 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'PURGE' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2748 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'IF EXISTS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2754 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FUNCTION' , 'MACRO' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2758 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'IF EXISTS' ] ) ;
}
parser . suggestTables ( { onlyViews : true } ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2759 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 ] ) ;
if ( ! $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ 'IF EXISTS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2765 :
2018-08-27 11:03:13 +08:00
parser . suggestTables ( ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
if ( parser . isImpala ( ) && ! $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ 'IF EXISTS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2768 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( parser . isHive ( ) && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2770 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( parser . isImpala ( ) && ! $$ [ $0 - 3 ] ) {
parser . suggestKeywords ( [ 'IF EXISTS' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2773 : case 2928 : case 2933 : case 2936 : case 2940 : case 2948 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FROM' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2775 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( ! $$ [ $0 ] ) {
parser . suggestKeywords ( [ 'WHERE' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2779 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FROM' ] ) ;
if ( parser . isImpala ( ) && ! $$ [ $0 - 1 ] ) {
parser . suggestTables ( ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2782 :
2018-08-27 11:03:13 +08:00
var keywords = [ { value : 'FULL JOIN' , weight : 1 } , { value : 'FULL OUTER JOIN' , weight : 1 } , { value : 'JOIN' , weight : 1 } , { value : 'LEFT JOIN' , weight : 1 } , { value : 'LEFT OUTER JOIN' , weight : 1 } , { value : 'RIGHT JOIN' , weight : 1 } , { value : 'RIGHT OUTER JOIN' , weight : 1 } , { value : 'INNER JOIN' , weight : 1 } , { value : 'LEFT ANTI JOIN' , weight : 1 } , { value : 'LEFT SEMI JOIN' , weight : 1 } , { value : 'RIGHT ANTI JOIN' , weight : 1 } , { value : 'RIGHT SEMI JOIN' , weight : 1 } ] ;
if ( ! $$ [ $0 ] ) {
keywords . push ( { value : 'WHERE' , weight : 3 } ) ;
}
if ( $$ [ $0 - 2 ] . suggestJoinConditions ) {
parser . suggestJoinConditions ( $$ [ $0 - 2 ] . suggestJoinConditions ) ;
}
if ( $$ [ $0 - 2 ] . suggestJoins ) {
parser . suggestJoins ( $$ [ $0 - 2 ] . suggestJoins ) ;
}
if ( $$ [ $0 - 2 ] . suggestKeywords ) {
keywords = keywords . concat ( parser . createWeightedKeywords ( $$ [ $0 - 2 ] . suggestKeywords , 2 ) ) ;
}
if ( keywords . length > 0 ) {
parser . suggestKeywords ( keywords ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2791 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'TRANSACTIONS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2800 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ALL' , 'ALTER' , 'CREATE' , 'DELETE' , 'DROP' , 'INDEX' , 'INSERT' , 'LOCK' , 'ROLE' , 'SELECT' , 'UPDATE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2803 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'ON' , 'TO' ] ) ;
} else {
parser . suggestKeywords ( [ 'TO' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2806 : case 2826 : case 2828 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'WITH GRANT OPTION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2811 : case 2815 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'WITH ADMIN OPTION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2817 : case 2941 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ALL' , 'ALTER' , 'CREATE' , 'DROP' , 'INSERT' , 'REFRESH' , 'ROLE' , 'SELECT' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2818 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'TO GROUP' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2819 : case 2943 : case 3339 : case 3340 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'GROUP' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2821 : case 2945 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] . isCreate ) {
parser . suggestKeywords ( [ 'ON DATABASE' , 'ON SERVER' ] ) ;
} else {
parser . suggestKeywords ( [ 'ON DATABASE' , 'ON SERVER' , 'ON TABLE' , 'ON URI' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2822 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 2 ] . isCreate ) {
parser . suggestKeywords ( [ 'DATABASE' , 'SERVER' ] ) ;
} else {
parser . suggestKeywords ( [ 'DATABASE' , 'SERVER' , 'TABLE' , 'URI' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2825 : case 2932 : case 2949 : case 3289 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ROLE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2832 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'DATABASE' , 'TABLE' ] ) ;
parser . suggestTables ( ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2848 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . toUpperCase ( ) === 'ALL' ) {
this . $ = { singleAll : true } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2854 : case 2855 : case 2856 : case 2919 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ALL' , 'ALTER' , 'CREATE' , 'DELETE' , 'DROP' , 'INDEX' , 'INSERT' , 'LOCK' , 'SELECT' , 'SHOW_DATABASE' , 'UPDATE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2872 :
2018-08-27 11:03:13 +08:00
this . $ = { isCreate : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 2894 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'GRANT OPTION' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2895 : case 2896 : case 2900 : case 2952 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'OPTION' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2899 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ADMIN OPTION' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2911 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ADMIN OPTION FOR' , 'ALL' , 'ALL GRANT OPTION FROM' , 'ALL PRIVILEGES FROM' , 'ALTER' , 'CREATE' , 'DELETE' , 'DROP' , 'GRANT OPTION FOR' , 'INDEX' , 'INSERT' , 'LOCK' , 'ROLE' , 'SELECT' , 'UPDATE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2914 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
if ( $$ [ $0 - 2 ] . singleAll ) {
parser . suggestKeywords ( [ 'FROM' , 'GRANT OPTION' , 'ON' , 'PRIVILEGES FROM' ] ) ;
} else {
parser . suggestKeywords ( [ 'FROM' , 'ON' ] ) ;
}
} else {
parser . suggestKeywords ( [ 'FROM' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2917 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'OPTION FOR' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2918 : case 2931 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FOR' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2922 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'FROM' , 'ON' ] ) ;
} else {
parser . suggestKeywords ( [ 'FROM' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2925 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] . toUpperCase ( ) === 'ADMIN' ) {
parser . suggestKeywords ( [ 'FROM' , 'OPTION FOR' ] ) ;
} else {
parser . suggestKeywords ( [ 'FROM' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2942 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FROM GROUP' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2946 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 2 ] . isCreate ) {
parser . suggestKeywords ( [ 'DATABASE' , 'SERVER' ] ) ;
} else {
parser . suggestKeywords ( [ 'DATABASE' , 'SERVER' , 'TABLE' , 'URI' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2963 :
2018-08-27 11:03:13 +08:00
var keywords = [ ] ;
if ( $$ [ $0 - 1 ] . suggestKeywords ) {
keywords = parser . createWeightedKeywords ( $$ [ $0 - 1 ] . suggestKeywords , 2 ) . concat ( [ { value : 'SELECT' , weight : 1 } ] ) ;
} else {
keywords = [ 'SELECT' ] ;
}
if ( $$ [ $0 - 1 ] . addValues ) {
keywords . push ( { weight : 1.1 , value : 'VALUES' } ) ;
}
if ( keywords . length > 0 ) {
parser . suggestKeywords ( keywords ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2966 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 ] . keepTables ) {
delete parser . yy . result . suggestTables ;
delete parser . yy . result . suggestDatabases ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2970 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'INSERT INTO' , 'INSERT OVERWRITE' , 'SELECT' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2971 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] . cursorAtEnd ) {
parser . checkForSelectListKeywords ( $$ [ $0 - 1 ] ) ;
var keywords = parser . yy . result . suggestKeywords || [ ] ;
if ( $$ [ $0 ] . suggestKeywords ) {
keywords = keywords . concat ( $$ [ $0 ] . suggestKeywords ) ;
}
if ( keywords . length > 0 ) {
parser . suggestKeywords ( keywords ) ;
}
}
delete parser . yy . result . suggestTables ;
delete parser . yy . result . suggestDatabases ;
break ;
2018-09-26 17:21:26 +08:00
case 2972 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . cursorAtStart ) {
parser . checkForSelectListKeywords ( $$ [ $0 - 1 ] . tableExpression ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2973 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 2 ] . owner = 'insert' ;
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ 'PARTITION' ] }
} else if ( ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ 'IF NOT EXISTS' ] }
}
break ;
2018-09-26 17:21:26 +08:00
case 2974 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ { value : 'ROW FORMAT' , weight : 2 } , { value : 'STORED AS' , weight : 1 } ] } ;
} else if ( ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ 'STORED AS' ] } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2975 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ { value : 'ROW FORMAT' , weight : 2 } , { value : 'STORED AS' , weight : 1 } ] } ;
} else if ( ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ 'STORED AS' ] } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2976 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 2 ] . owner = 'insert' ;
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( ! $$ [ $0 - 1 ] && ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ 'PARTITION' ] , addValues : true } ;
} else if ( ! $$ [ $0 ] ) {
this . $ = { addValues : true } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2977 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'OVERWRITE' , 'INTO' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2978 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'DIRECTORY' , 'LOCAL DIRECTORY' , 'TABLE' ] ) ;
}
parser . suggestTables ( ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
this . $ = { keepTables : true }
break ;
2018-09-26 17:21:26 +08:00
case 2979 : case 2990 :
2018-08-27 11:03:13 +08:00
this . $ = { keepTables : true }
break ;
2018-09-26 17:21:26 +08:00
case 2980 : case 2991 : case 2992 : case 3054 : case 3055 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 2 ] . owner = 'insert' ;
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( parser . yy . result . suggestColumns ) {
parser . yy . result . suggestColumns . owner = 'insert' ;
}
break ;
2018-09-26 17:21:26 +08:00
case 2981 : case 3006 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 2 ] . owner = 'insert' ;
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2982 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'DIRECTORY' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 2989 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'TABLE' ] ) ;
}
parser . suggestTables ( ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
this . $ = { keepTables : true }
break ;
2018-09-26 17:21:26 +08:00
case 3002 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] . suggestKeywords ) {
parser . suggestKeywords ( parser . createWeightedKeywords ( $$ [ $0 - 1 ] . suggestKeywords , 2 ) . concat ( [ { value : 'SELECT' , weight : 1 } ] ) ) ;
} else {
parser . suggestKeywords ( [ 'SELECT' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3003 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] . cursorAtEnd ) {
parser . checkForSelectListKeywords ( $$ [ $0 - 1 ] ) ;
var keywords = parser . yy . result . suggestKeywords || [ ] ;
if ( $$ [ $0 ] . suggestKeywords ) {
keywords = keywords . concat ( $$ [ $0 ] . suggestKeywords ) ;
}
if ( keywords . length > 0 ) {
parser . suggestKeywords ( keywords ) ;
}
}
break ;
2018-09-26 17:21:26 +08:00
case 3005 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 3 ] . owner = 'insert' ;
parser . addTablePrimary ( $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3007 : case 3044 : case 3080 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'INTO' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3008 : case 3045 : case 3051 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'TABLE' ] ) ;
}
parser . suggestTables ( ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3010 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 1 ] . owner = 'insert' ;
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
parser . suggestKeywords ( [ 'VALUES' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3019 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FORMAT DELIMITED' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3022 :
2018-08-27 11:03:13 +08:00
this . $ = { selectList : $$ [ $0 ] } ;
break ;
2018-09-26 17:21:26 +08:00
case 3023 :
2018-08-27 11:03:13 +08:00
this . $ = $$ [ $0 - 1 ] ;
this . $ . cursorAtEnd = true ;
break ;
2018-09-26 17:21:26 +08:00
case 3024 :
2018-08-27 11:03:13 +08:00
parser . selectListNoTableSuggest ( $$ [ $0 ] , $$ [ $0 - 2 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3025 :
2018-08-27 11:03:13 +08:00
var keywords = parser . getSelectListKeywords ( ) ;
if ( ! $$ [ $0 - 2 ] || $$ [ $0 - 2 ] === 'ALL' ) {
parser . suggestAggregateFunctions ( ) ;
parser . suggestAnalyticFunctions ( ) ;
}
if ( ! $$ [ $0 - 1 ] && ! $$ [ $0 - 2 ] ) {
keywords . push ( { value : 'ALL' , weight : 2 } ) ;
keywords . push ( { value : 'DISTINCT' , weight : 2 } ) ;
}
if ( parser . isImpala ( ) && ! $$ [ $0 - 1 ] ) {
keywords . push ( { value : 'STRAIGHT_JOIN' , weight : 1 } ) ;
}
parser . suggestKeywords ( keywords ) ;
parser . suggestFunctions ( ) ;
parser . suggestColumns ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3033 :
2018-08-27 11:03:13 +08:00
var keywords = $$ [ $0 - 2 ] . suggestKeywords && ! $$ [ $0 - 1 ] ? parser . createWeightedKeywords ( $$ [ $0 - 2 ] . suggestKeywords , 2 ) : [ ] ;
if ( ! $$ [ $0 - 1 ] ) {
keywords = keywords . concat ( [ '[NOSHUFFLE]' , '[SHUFFLE]' , 'SELECT' , 'VALUES' ] )
} else {
keywords = keywords . concat ( [ 'SELECT' ] )
}
parser . suggestKeywords ( keywords ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3043 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 1 ] . owner = 'upsert' ;
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3046 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 3 ] ) {
parser . suggestKeywords ( [ 'TABLE' ] ) ;
}
$$ [ $0 - 1 ] . owner = 'upsert' ;
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3048 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 1 ] . owner = 'upsert' ;
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
if ( parser . yy . result . suggestColumns ) {
parser . yy . result . suggestColumns . owner = 'upsert' ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3049 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 2 ] . owner = 'insert' ;
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ 'PARTITION' ] } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3050 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'INTO' , 'OVERWRITE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3052 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 4 ] ) {
parser . suggestKeywords ( [ 'TABLE' ] ) ;
}
$$ [ $0 - 2 ] . owner = 'insert' ;
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3077 :
2018-08-27 11:03:13 +08:00
parser . suggestValueExpressionKeywords ( $$ [ $0 - 1 ] , [ { value : 'WHEN' , weight : 2 } ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3079 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 6 ] . alias = $$ [ $0 - 4 ] ;
parser . addTablePrimary ( $$ [ $0 - 6 ] ) ;
if ( $$ [ $0 - 2 ] . subQuery ) {
parser . addTablePrimary ( { subQueryAlias : $$ [ $0 ] } ) ;
} else {
$$ [ $0 - 2 ] . alias = $$ [ $0 ] ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3081 :
2018-08-27 11:03:13 +08:00
parser . suggestDatabases ( { appendDot : true } ) ;
parser . suggestTables ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3083 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
parser . suggestKeywords ( [ 'AS T USING' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3084 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
parser . suggestKeywords ( [ 'T USING' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3085 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 3 ] . alias = $$ [ $0 - 1 ] ;
parser . addTablePrimary ( $$ [ $0 - 3 ] ) ;
parser . suggestKeywords ( [ 'USING' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3086 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 4 ] . alias = $$ [ $0 - 2 ] ;
parser . addTablePrimary ( $$ [ $0 - 4 ] ) ;
parser . suggestDatabases ( { appendDot : true } ) ;
parser . suggestTables ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3087 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 4 ] . alias = $$ [ $0 - 2 ] ;
parser . addTablePrimary ( $$ [ $0 - 4 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3088 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 5 ] . alias = $$ [ $0 - 3 ] ;
parser . addTablePrimary ( $$ [ $0 - 5 ] ) ;
parser . suggestKeywords ( [ 'AS S ON' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3089 :
2018-08-27 11:03:13 +08:00
$$ [ $0 - 6 ] . alias = $$ [ $0 - 4 ] ;
parser . addTablePrimary ( $$ [ $0 - 6 ] ) ;
parser . suggestKeywords ( [ 'S ON' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3098 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 ] . suggestThenKeywords ) {
parser . suggestKeywords ( [ 'DELETE' , 'INSERT VALUES' , 'UPDATE SET' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3099 : case 3101 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] . notPresent ) {
parser . suggestKeywords ( [ 'WHEN' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3100 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] . notPresent && $$ [ $0 ] . suggestThenKeywords ) {
var keywords = [ ] ;
if ( ! $$ [ $0 - 1 ] . isDelete ) {
keywords . push ( 'DELETE' ) ;
}
if ( ! $$ [ $0 - 1 ] . isInsert ) {
keywords . push ( 'INSERT VALUES' ) ;
}
if ( ! $$ [ $0 - 1 ] . isUpdate ) {
keywords . push ( 'UPDATE SET' ) ;
}
parser . suggestKeywords ( keywords ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3102 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] . notPresent && $$ [ $0 ] . suggestThenKeywords ) {
var keywords = [ ] ;
if ( ! $$ [ $0 - 2 ] . isDelete && ! $$ [ $0 - 1 ] . isDelete ) {
keywords . push ( 'DELETE' ) ;
}
if ( ! $$ [ $0 - 2 ] . isInsert && ! $$ [ $0 - 1 ] . isInsert ) {
keywords . push ( 'INSERT VALUES' ) ;
}
if ( ! $$ [ $0 - 2 ] . isUpdate && ! $$ [ $0 - 1 ] . isUpdate ) {
keywords . push ( 'UPDATE SET' ) ;
}
parser . suggestKeywords ( keywords ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3103 :
2018-08-27 11:03:13 +08:00
this . $ = { notPresent : ! ! $$ [ $0 - 4 ] , isDelete : $$ [ $0 ] . isDelete , isInsert : $$ [ $0 ] . isInsert , isUpdate : $$ [ $0 ] . isUpdate } ;
break ;
2018-09-26 17:21:26 +08:00
case 3104 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'NOT MATCHED' , 'MATCHED' ] ) ;
} else {
parser . suggestKeywords ( [ 'MATCHED' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3105 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'AND' , 'THEN' ] ) ;
} else {
parser . suggestValueExpressionKeywords ( $$ [ $0 - 1 ] , [ { value : 'THEN' , weight : 2 } ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3107 :
2018-08-27 11:03:13 +08:00
this . $ = { suggestThenKeywords : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 3112 :
2018-08-27 11:03:13 +08:00
this . $ = { isUpdate : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 3113 :
2018-08-27 11:03:13 +08:00
this . $ = { isDelete : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 3114 :
2018-08-27 11:03:13 +08:00
this . $ = { isInsert : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 3115 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'SET' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3119 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'DATA LOCAL INPATH' , 'DATA INPATH' ] ) ;
} else if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'DATA INPATH' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3120 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) && ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'INPATH' , 'LOCAL INPATH' ] ) ;
} else {
parser . suggestKeywords ( [ 'INPATH' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3122 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'OVERWRITE INTO TABLE' , 'INTO TABLE' ] ) ;
} else {
parser . suggestKeywords ( [ 'INTO TABLE' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3123 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'TABLE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3141 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 ] ) {
parser . suggestKeywords ( [ 'EXTERNAL TABLE' , 'FROM' , 'TABLE' ] ) ;
} else if ( ! $$ [ $0 ] . hasExternal ) {
parser . suggestKeywords ( [ 'EXTERNAL' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3142 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] . suggestKeywords ) {
parser . suggestKeywords ( parser . createWeightedKeywords ( $$ [ $0 - 1 ] . suggestKeywords , 2 ) . concat ( [ 'FROM' ] ) ) ;
} else {
parser . suggestKeywords ( [ 'FROM' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3146 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'LOCATION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3147 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 4 ] ) {
parser . suggestKeywords ( [ 'EXTERNAL TABLE' , 'TABLE' ] ) ;
} else if ( ! $$ [ $0 - 4 ] . hasExternal ) {
parser . suggestKeywords ( [ 'EXTERNAL' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3149 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 5 ] . suggestKeywords ) {
parser . suggestKeywords ( parser . createWeightedKeywords ( $$ [ $0 - 5 ] . suggestKeywords , 2 ) . concat ( [ 'FROM' ] ) ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3152 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
if ( ! $$ [ $0 ] ) {
this . $ = { hasExternal : true , suggestKeywords : [ 'PARTITION' ] } ;
} else {
this . $ = { hasExternal : true }
}
break ;
2018-09-26 17:21:26 +08:00
case 3153 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
if ( ! $$ [ $0 ] ) {
this . $ = { suggestKeywords : [ 'PARTITION' ] } ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3162 : case 3176 : case 3177 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 9 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3166 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ { weight : 2 , value : 'PARTITION' } , { weight : 1 , value : 'TO' } ] ) ;
} else {
parser . suggestKeywords ( [ 'TO' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3169 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 5 ] ) ;
parser . suggestKeywords ( [ 'FOR replication()' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3170 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 6 ] ) ;
parser . suggestKeywords ( [ 'replication()' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3173 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 5 ] ) ;
if ( ! $$ [ $0 - 4 ] ) {
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3174 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 10 ] ) ;
if ( ! $$ [ $0 - 9 ] ) {
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3190 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ALL' , 'NONE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3213 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'COLUMNS' , 'COMPACTIONS' , 'CONF' , 'CREATE TABLE' , 'CURRENT ROLES' , 'DATABASES' , 'FORMATTED' , 'FUNCTIONS' , 'GRANT' , 'INDEX' , 'INDEXES' , 'LOCKS' , 'PARTITIONS' , 'PRINCIPALS' , 'ROLE GRANT' , 'ROLES' , 'SCHEMAS' , 'TABLE EXTENDED' , 'TABLES' , 'TBLPROPERTIES' , 'TRANSACTIONS' , 'VIEWS' ] ) ;
} else if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'AGGREGATE FUNCTIONS' , 'ANALYTIC FUNCTIONS' , 'COLUMN STATS' , 'CREATE TABLE' , 'CURRENT ROLES' , 'DATABASES' , 'FILES IN' , 'FUNCTIONS' , 'GRANT ROLE' , 'PARTITIONS' , 'RANGE PARTITIONS' , 'ROLE GRANT GROUP' , 'ROLES' , 'SCHEMAS' , 'TABLE STATS' , 'TABLES' ] ) ;
} else {
parser . suggestKeywords ( [ 'COLUMNS' , 'DATABASES' , 'TABLES' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3214 :
2018-08-27 11:03:13 +08:00
// ROLES is considered a non-reserved keywords so we can't match it in ShowCurrentRolesStatement_EDIT
if ( $$ [ $0 ] . identifierChain && $$ [ $0 ] . identifierChain . length === 1 && $$ [ $0 ] . identifierChain [ 0 ] . name . toLowerCase ( ) === 'roles' ) {
parser . suggestKeywords ( [ 'CURRENT' ] ) ;
parser . yy . locations . pop ( ) ;
} else {
parser . addTablePrimary ( $$ [ $0 ] ) ;
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'COLUMN STATS' , 'CREATE TABLE' , 'FILES IN' , 'PARTITIONS' , 'RANGE PARTITIONS' , 'TABLE STATS' ] ) ;
}
}
break ;
2018-09-26 17:21:26 +08:00
case 3215 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'AGGREGATE FUNCTIONS' , 'ANALYTIC FUNCTIONS' , 'DATABASES' , 'FUNCTIONS' , 'SCHEMAS' , 'TABLES' ] ) ;
} else if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'DATABASES' , 'SCHEMAS' , 'TABLE EXTENDED' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3234 : case 3264 : case 3324 : case 3328 : case 3330 : case 3358 :
2018-08-27 11:03:13 +08:00
parser . suggestTables ( ) ;
parser . suggestDatabases ( {
appendDot : true
} ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3238 : case 3239 : case 3243 : case 3244 : case 3303 : case 3304 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FROM' , 'IN' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3240 : case 3241 : case 3242 : case 3287 : case 3301 :
2018-08-27 11:03:13 +08:00
parser . suggestTables ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3249 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'TABLE' , 'VIEW' ] ) ;
} else {
parser . suggestKeywords ( [ 'TABLE' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3250 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] . isView && parser . isImpala ( ) ) {
parser . suggestTables ( { onlyViews : true } ) ;
} else {
parser . suggestTables ( ) ;
}
parser . suggestDatabases ( {
appendDot : true
} ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3251 :
2018-08-27 11:03:13 +08:00
if ( parser . yy . result . suggestTables && $$ [ $0 - 1 ] . isView ) {
parser . yy . result . suggestTables . onlyViews = true ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3252 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 ] ) ;
if ( parser . isImpala ( ) ) {
parser . suggestKeywords ( [ 'TABLE' , 'VIEW' ] ) ;
} else {
parser . suggestKeywords ( [ 'TABLE' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3254 :
2018-08-27 11:03:13 +08:00
this . $ = { isView : true } ;
break ;
2018-09-26 17:21:26 +08:00
case 3257 : case 3258 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ROLES' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3261 : case 3355 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'LIKE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3268 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
parser . suggestKeywords ( [ 'IN' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3273 : case 3276 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'FUNCTIONS' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3274 : case 3277 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'AGGREGATE' , 'ANALYTICAL' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3275 : case 3364 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'IN' , 'LIKE' ] ) ;
} else {
parser . suggestKeywords ( [ 'LIKE' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3278 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ { value : 'IN' , weight : 2 } , { value : 'LIKE' , weight : 1 } ] ) ;
} else {
parser . suggestKeywords ( [ 'LIKE' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3286 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ALL' , 'TABLE' ] ) ;
parser . suggestTables ( ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3306 :
2018-08-27 11:03:13 +08:00
parser . suggestTables ( { identifierChain : [ { name : $$ [ $0 ] } ] } ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3312 :
2018-08-27 11:03:13 +08:00
parser . suggestTables ( ) ;
parser . suggestDatabases ( {
appendDot : true
} ) ;
parser . suggestKeywords ( [ 'DATABASE' , 'SCHEMA' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3314 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 1 ] ) ;
parser . suggestKeywords ( [ 'EXTENDED' , 'PARTITION' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3317 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 2 ] ) ;
parser . suggestKeywords ( [ 'EXTENDED' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3334 : case 3335 : case 3336 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'GRANT' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3337 : case 3338 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'ROLE' , 'USER' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3345 : case 3354 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'EXTENDED' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3348 :
2018-08-27 11:03:13 +08:00
if ( $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'LIKE' ] ) ;
} else {
parser . suggestKeywords ( [ 'FROM' , 'IN' , 'LIKE' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3350 :
2018-08-27 11:03:13 +08:00
if ( parser . isHive ( ) ) {
parser . suggestKeywords ( [ 'EXTENDED' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3351 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'LIKE' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3352 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'PARTITION' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3359 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3366 :
2018-08-27 11:03:13 +08:00
parser . addTablePrimary ( $$ [ $0 - 3 ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3371 :
2018-08-27 11:03:13 +08:00
if ( ! $$ [ $0 - 1 ] && ! $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ { value : 'IN' , weight : 2 } , { value : 'FROM' , weight : 2 } , { value : 'LIKE' , weight : 1 } ] ) ;
} else if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'LIKE' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3375 : case 3376 :
2018-08-27 11:03:13 +08:00
parser . addDatabaseLocation ( _$ [ $0 ] , [ { name : $$ [ $0 ] } ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3387 :
2018-08-27 11:03:13 +08:00
if ( parser . isImpala ( ) && ! $$ [ $0 - 1 ] && ! $$ [ $0 - 2 ] ) {
parser . suggestKeywords ( [ { value : 'FROM' , weight : 2 } , { value : 'WHERE' , weight : 1 } ] ) ;
} else if ( parser . isImpala ( ) && ! $$ [ $0 - 1 ] && $$ [ $0 - 2 ] ) {
var keywords = [ { value : 'FULL JOIN' , weight : 2 } , { value : 'FULL OUTER JOIN' , weight : 2 } , { value : 'JOIN' , weight : 2 } , { value : 'LEFT JOIN' , weight : 2 } , { value : 'LEFT OUTER JOIN' , weight : 2 } , { value : 'RIGHT JOIN' , weight : 2 } , { value : 'RIGHT OUTER JOIN' , weight : 2 } , { value : 'INNER JOIN' , weight : 2 } , { value : 'LEFT ANTI JOIN' , weight : 2 } , { value : 'LEFT SEMI JOIN' , weight : 2 } , { value : 'RIGHT ANTI JOIN' , weight : 2 } , { value : 'RIGHT SEMI JOIN' , weight : 2 } , { value : 'WHERE' , weight : 1 } ] ;
if ( $$ [ $0 - 2 ] . suggestJoinConditions ) {
parser . suggestJoinConditions ( $$ [ $0 - 2 ] . suggestJoinConditions ) ;
}
if ( $$ [ $0 - 2 ] . suggestJoins ) {
parser . suggestJoins ( $$ [ $0 - 2 ] . suggestJoins ) ;
}
if ( $$ [ $0 - 2 ] . suggestKeywords ) {
keywords = keywords . concat ( parser . createWeightedKeywords ( $$ [ $0 - 2 ] . suggestKeywords , 3 ) ) ;
}
parser . suggestKeywords ( keywords ) ;
} else if ( ! $$ [ $0 - 1 ] ) {
parser . suggestKeywords ( [ 'WHERE' ] ) ;
}
break ;
2018-09-26 17:21:26 +08:00
case 3388 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ 'SET' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3404 :
2018-08-27 11:03:13 +08:00
parser . suggestKeywords ( [ '=' ] ) ;
break ;
2018-09-26 17:21:26 +08:00
case 3415 :
2018-08-27 11:03:13 +08:00
if ( ! parser . yy . cursorFound ) {
parser . yy . result . useDatabase = $$ [ $0 ] ;
}
break ;
}
} ,
2018-09-26 17:21:26 +08:00
table : [ o ( $V0 , $V1 , { 7 : 1 , 4 : 2 } ) , { 1 : [ 3 ] } , o ( $V2 , $V3 , { 5 : 3 , 8 : 4 , 9 : 5 , 11 : 7 , 12 : 8 , 13 : 9 , 14 : 10 , 15 : 11 , 16 : 12 , 17 : 353 , 18 : 354 , 20 : 355 , 21 : 356 , 22 : 357 , 23 : 358 , 405 : 360 , 406 : 361 , 407 : 362 , 408 : 363 , 409 : 364 , 410 : 365 , 411 : 366 , 412 : 367 , 413 : 368 , 414 : 369 , 415 : 370 , 416 : 371 , 417 : 372 , 418 : 373 , 419 : 374 , 1124 : 375 , 1125 : 376 , 1126 : 377 , 1127 : 378 , 1128 : 379 , 1129 : 380 , 1130 : 381 , 572 : 382 , 420 : 387 , 421 : 388 , 422 : 389 , 423 : 390 , 424 : 391 , 425 : 392 , 426 : 393 , 427 : 394 , 428 : 395 , 429 : 396 , 430 : 397 , 431 : 398 , 432 : 399 , 433 : 400 , 1131 : 401 , 1132 : 402 , 1133 : 403 , 1134 : 404 , 1135 : 405 , 576 : 406 , 1138 : 407 , 1139 : 408 , 1140 : 409 , 1141 : 410 , 1142 : 411 , 574 : 412 , 564 : 413 , 565 : 414 , 811 : 415 , 812 : 416 , 813 : 417 , 814 : 418 , 815 : 419 , 816 : 420 , 817 : 421 , 933 : 426 , 934 : 427 , 935 : 428 , 936 : 429 , 937 : 430 , 938 : 431 , 939 : 432 , 1143 : 433 , 1144 : 434 , 1145 : 435 , 1146 : 436 , 1147 : 437 , 1148 : 438 , 1149 : 439 , 1150 : 440 , 1151 : 441 , 1257 : 445 , 1258 : 446 , 1259 : 447 , 1260 : 448 , 1261 : 449 , 1262 : 450 , 1263 : 451 , 1264 : 452 , 1265 : 453 , 1266 : 454 , 1267 : 455 , 1268 : 456 , 1269 : 457 , 1270 : 458 , 1271 : 459 , 1272 : 460 , 1273 : 461 , 1274 : 462 , 1275 : 463 , 1276 : 464 , 1313 : 465 , 1136 : 467 , 1196 : 468 , 1137 : 469 , 1197 : 470 , 1247 : 471 , 566 : 476 , 567 : 477 , 818 : 478 , 819 : 479 , 820 : 480 , 821 : 481 , 822 : 482 , 823 : 483 , 824 : 484 , 808 : 486 , 940 : 487 , 941 : 488 , 942 : 489 , 943 : 490 , 944 : 491 , 437 : 492 , 1152 : 493 , 1153 : 494 , 1154 : 495 , 1155 : 496 , 1156 : 497 , 1157 : 498 , 1158 : 499 , 1159 : 500 , 1277 : 502 , 1279 : 503 , 1280 : 504 , 1281 : 505 , 1282 : 506 , 1283 : 507 , 1284 : 508 , 1285 : 509 , 1286 : 510 , 1287 : 511 , 1288 : 512 , 1289 : 513 , 1290 : 514 , 1291 : 515 , 1292 : 516 , 1293 : 517 , 1294 : 518 , 1201 : 519 , 1198 : 520 , 597 : 521 , 599 : 522 , 1217 : 524 , 1235 : 525 , 1233 : 526 , 568 : 527 , 829 : 529 , 918 : 530 , 1061 : 534 , 1062 : 535 , 1063 : 536 , 1064 : 537 , 1160 : 538 , 1161 : 539 , 1216 : 544 , 841 : 547 , 919 : 548 , 1065 : 549 , 1066 : 550 , 1067 : 551 , 1068 : 552 , 1162 : 556 , 1163 : 557 , 1221 : 560 , 1218 : 561 , 1225 : 565 , 1226 : 566 , 1223 : 567 , 1224 : 568 , 2 : $V4 , 19 : $V5 , 24 : $V6 , 26 : $V7 , 28 : $V8 , 30 : $V9 , 32 : $Va , 33 : $Vb , 34 : $Vc , 37 : $Vd , 38 : $Ve , 39 : $Vf , 40 : $Vg , 42 : $Vh , 43 : $Vi , 45 : $Vj , 46 : $Vk , 47 : $Vl , 48 : $Vm , 49 : $Vn , 50 : $Vo , 51 : $Vp , 52 : $Vq , 54 : $Vr , 56 : $Vs , 58 : $Vt , 59 : $Vu , 60 : $Vv , 61 : $Vw , 64 : $Vx , 65 : $Vy , 66 : $Vz , 67 : $VA , 68 : $VB , 69 : $VC , 70 : $VD , 71 : $VE , 72 : $VF , 73 : $VG , 74 : $VH , 75 : $VI , 76 : $VJ , 77 : $VK , 78 : $VL , 79 : $VM , 80 : $VN , 81 : $VO , 82 : $VP , 85 : $VQ , 86 : $VR , 87 : $VS , 88 : $VT , 89 : $VU , 90 : $VV , 91 : $VW , 92 : $VX , 93 : $VY , 95 : $VZ , 96 : $V _ , 97 : $V$ , 98 : $V01 , 99 : $V11 , 100 : $V21 , 101 : $V31 , 106 : $V41 , 107 : $V51 , 108 : $V61 , 109 : $V71 , 110 : $V81 , 111 : $V91 , 112 : $Va1 , 113 : $Vb1 , 114 : $Vc1 , 115 : $Vd1 , 116 : $Ve1 , 117 : $Vf1 , 118 : $Vg1 , 119 : $Vh1 , 120 : $Vi1 , 121 : $Vj1 , 122 : $Vk1 , 123 : $Vl1 , 124 : $Vm1 , 125 : $Vn1 , 126 : $Vo1 , 128 : $Vp1 , 130 : $Vq1 , 131 : $Vr1 , 132 : $Vs1 , 133 : $Vt1 , 134 : $Vu1 , 135 : $Vv1 , 136 : $Vw1 , 137 : $Vx1 , 138 : $Vy1 , 139 : $Vz1 , 140 : $VA1 , 141 : $VB1 , 142 : $VC1 , 143 : $VD1 , 144 : $VE1 , 145 : $VF1 , 146 : $VG1 , 147 : $VH1 , 148 : $VI1 , 149 : $VJ1 , 150 : $VK1 , 156 : $VL1 , 157 : $VM1 , 158 : $VN1 , 160 : $VO1 , 161 : $VP1 , 163 : $VQ1 , 164 : $VR1 , 165 : $VS1 , 166 : $VT1 , 167 : $VU1 , 168 : $VV1 , 169 : $VW1 , 170 : $VX1 , 171 : $VY1 , 172 : $VZ1 , 173 : $V _1 , 174 : $V$1 , 175 : $V02 , 176 : $V12 , 177 : $V22 , 178 : $V32 , 179 : $V42 , 180 : $V52 , 181 : $V62 , 182 : $V72 , 183 : $V82 , 184 : $V92 , 185 : $Va2 , 186 : $Vb2 , 187 : $Vc2 , 188 : $Vd2 , 189 : $Ve2 , 190 : $Vf2 , 191 : $Vg2 , 192 : $Vh2 , 193 : $Vi2 , 194 : $Vj2 , 195 : $Vk2 , 196 : $Vl2 , 197 : $Vm2 , 198 : $Vn2 , 199 : $Vo2 , 200 : $Vp2 , 201 : $Vq2 , 202 : $Vr2 , 203 : $Vs2 , 204 : $Vt2 , 205 : $Vu2 , 206 : $Vv2 , 207 : $Vw2 , 208 : $Vx2 , 209 : $Vy2 , 210 : $Vz2 , 211 : $VA2 , 212 : $VB2 , 213 : $VC2 , 214 : $VD2 , 215 : $VE2 , 216 : $VF2 , 217 : $VG2 , 218 : $VH2 , 219 : $VI2 , 220 : $VJ2 , 221 : $VK2 , 222 : $VL2 , 223 : $VM2 , 224 : $VN2 , 225 : $VO2 , 226 : $VP2 , 227 : $VQ2 , 228 : $VR2 , 229 : $VS2 , 230 : $VT2 , 231 : $VU2 , 232 : $VV2 , 233 : $VW2 , 234 : $VX2 , 235 : $VY2 , 236 : $VZ2 , 237 : $V _2 , 238 : $V$2 , 239 : $V03 , 240 : $V13 , 241 : $V23 , 242 : $V33 , 243 : $V43 , 244 : $V53 , 245 : $V63 , 246 : $V73 , 247 : $V83 , 248 : $V93 , 249 : $Va3 , 250 : $Vb3 , 251 : $Vc3 , 252 : $Vd3 , 253 : $Ve3 , 254 : $Vf3 , 255 : $Vg3 , 256 : $Vh3 , 257 : $Vi3 , 258 : $Vj3 , 259 : $Vk3 , 260 : $Vl3 , 261 : $Vm3 , 262 : $Vn3 , 263 : $Vo3 , 264 : $Vp3 , 265 : $Vq3 , 266 : $Vr3 , 267 : $Vs3 , 268 : $Vt3 , 269 : $Vu3 , 270 : $Vv3 , 271 : $Vw3 , 272 : $Vx3 , 273 : $Vy3 , 274 : $Vz3 , 275 : $VA3 , 276 : $VB3 , 277 : $VC3 , 278 : $VD3 , 279 : $VE3 , 280 : $VF3 , 281 : $VG3 , 282 : $VH3 , 283 : $VI3 , 284 : $VJ3 , 285 : $VK3 , 286 : $VL3 , 287 : $VM3 , 288 : $VN3 , 289 : $VO3 , 290 : $VP3 , 291 : $VQ3 , 292 : $VR3 , 293 : $VS3 , 294 : $VT3 , 295 : $VU3 , 296 : $VV3 , 297 : $VW3 , 298 : $VX3 , 299 : $VY3 , 300 : $VZ3 , 301 : $V _3 , 302 : $V$3 , 303 : $V04 , 304 : $V14 , 305 : $V24 , 306 : $V34 , 307 : $V44 , 308 : $V54 , 309 : $V64 , 310 : $V74 , 311 : $V84 , 312 : $V94 , 313 : $Va4 , 314 : $Vb4 , 315 : $Vc4 , 316 : $Vd4 , 317 : $Ve4 , 318 : $Vf4 , 319 : $Vg4 , 320 : $Vh4 , 321 : $Vi4 , 322 : $Vj4 , 323 : $Vk4 , 324 : $Vl4 , 325 : $Vm4 , 326 : $Vn4 , 327 : $Vo4 , 328 : $Vp4 , 329 : $Vq4 , 330 : $Vr4 , 331 : $Vs4 , 332 : $Vt4 , 333 : $Vu4 , 334 : $Vv4 , 335 : $Vw4 , 336 : $Vx4 , 337 : $Vy4 , 338 : $Vz4 , 339 : $VA4 , 340 : $
defaultActions : { 13 : [ 2 , 178 ] , 14 : [ 2 , 179 ] , 15 : [ 2 , 180 ] , 16 : [ 2 , 181 ] , 17 : [ 2 , 182 ] , 18 : [ 2 , 183 ] , 19 : [ 2 , 184 ] , 20 : [ 2 , 185 ] , 21 : [ 2 , 186 ] , 22 : [ 2 , 187 ] , 23 : [ 2 , 188 ] , 24 : [ 2 , 189 ] , 25 : [ 2 , 190 ] , 26 : [ 2 , 191 ] , 27 : [ 2 , 192 ] , 28 : [ 2 , 193 ] , 29 : [ 2 , 194 ] , 30 : [ 2 , 195 ] , 31 : [ 2 , 196 ] , 32 : [ 2 , 197 ] , 33 : [ 2 , 198 ] , 34 : [ 2 , 199 ] , 35 : [ 2 , 200 ] , 36 : [ 2 , 201 ] , 37 : [ 2 , 202 ] , 38 : [ 2 , 203 ] , 39 : [ 2 , 204 ] , 40 : [ 2 , 205 ] , 41 : [ 2 , 206 ] , 42 : [ 2 , 207 ] , 43 : [ 2 , 208 ] , 44 : [ 2 , 209 ] , 45 : [ 2 , 210 ] , 46 : [ 2 , 211 ] , 47 : [ 2 , 212 ] , 49 : [ 2 , 214 ] , 50 : [ 2 , 215 ] , 51 : [ 2 , 216 ] , 52 : [ 2 , 217 ] , 53 : [ 2 , 218 ] , 54 : [ 2 , 219 ] , 55 : [ 2 , 220 ] , 56 : [ 2 , 221 ] , 57 : [ 2 , 222 ] , 58 : [ 2 , 223 ] , 59 : [ 2 , 224 ] , 60 : [ 2 , 225 ] , 61 : [ 2 , 226 ] , 62 : [ 2 , 227 ] , 63 : [ 2 , 228 ] , 64 : [ 2 , 229 ] , 65 : [ 2 , 230 ] , 66 : [ 2 , 231 ] , 67 : [ 2 , 232 ] , 68 : [ 2 , 233 ] , 69 : [ 2 , 234 ] , 70 : [ 2 , 235 ] , 71 : [ 2 , 236 ] , 72 : [ 2 , 237 ] , 73 : [ 2 , 238 ] , 74 : [ 2 , 239 ] , 75 : [ 2 , 240 ] , 76 : [ 2 , 241 ] , 77 : [ 2 , 242 ] , 78 : [ 2 , 243 ] , 79 : [ 2 , 244 ] , 80 : [ 2 , 245 ] , 81 : [ 2 , 246 ] , 82 : [ 2 , 247 ] , 83 : [ 2 , 248 ] , 84 : [ 2 , 249 ] , 85 : [ 2 , 250 ] , 86 : [ 2 , 251 ] , 87 : [ 2 , 252 ] , 88 : [ 2 , 253 ] , 89 : [ 2 , 254 ] , 90 : [ 2 , 255 ] , 91 : [ 2 , 256 ] , 92 : [ 2 , 257 ] , 93 : [ 2 , 258 ] , 94 : [ 2 , 259 ] , 95 : [ 2 , 260 ] , 96 : [ 2 , 261 ] , 97 : [ 2 , 262 ] , 98 : [ 2 , 263 ] , 99 : [ 2 , 264 ] , 100 : [ 2 , 265 ] , 101 : [ 2 , 266 ] , 102 : [ 2 , 267 ] , 103 : [ 2 , 268 ] , 104 : [ 2 , 269 ] , 105 : [ 2 , 270 ] , 106 : [ 2 , 271 ] , 107 : [ 2 , 272 ] , 108 : [ 2 , 273 ] , 109 : [ 2 , 274 ] , 110 : [ 2 , 275 ] , 111 : [ 2 , 276 ] , 112 : [ 2 , 277 ] , 113 : [ 2 , 278 ] , 114 : [ 2 , 279 ] , 115 : [ 2 , 280 ] , 116 : [ 2 , 281 ] , 117 : [ 2 , 282 ] , 118 : [ 2 , 283 ] , 119 : [ 2 , 284 ] , 120 : [ 2 , 285 ] , 121 : [ 2 , 286 ] , 122 : [ 2 , 287 ] , 123 : [ 2 , 288 ] , 124 : [ 2 , 289 ] , 125 : [ 2 , 290 ] , 126 : [ 2 , 291 ] , 127 : [ 2 , 292 ] , 128 : [ 2 , 293 ] , 129 : [ 2 , 294 ] , 130 : [ 2 , 295 ] , 131 : [ 2 , 296 ] , 132 : [ 2 , 297 ] , 133 : [ 2 , 298 ] , 134 : [ 2 , 299 ] , 135 : [ 2 , 300 ] , 136 : [ 2 , 301 ] , 137 : [ 2 , 302 ] , 138 : [ 2 , 303 ] , 139 : [ 2 , 304 ] , 140 : [ 2 , 305 ] , 141 : [ 2 , 306 ] , 142 : [ 2 , 307 ] , 143 : [ 2 , 308 ] , 145 : [ 2 , 310 ] , 146 : [ 2 , 311 ] , 147 : [ 2 , 312 ] , 148 : [ 2 , 313 ] , 149 : [ 2 , 314 ] , 150 : [ 2 , 315 ] , 151 : [ 2 , 316 ] , 152 : [ 2 , 317 ] , 153 : [ 2 , 318 ] , 154 : [ 2 , 319 ] , 155 : [ 2 , 320 ] , 156 : [ 2 , 321 ] , 157 : [ 2 , 322 ] , 158 : [ 2 , 323 ] , 159 : [ 2 , 324 ] , 160 : [ 2 , 325 ] , 161 : [ 2 , 326 ] , 162 : [ 2 , 327 ] , 163 : [ 2 , 328 ] , 164 : [ 2 , 329 ] , 165 : [ 2 , 330 ] , 166 : [ 2 , 331 ] , 167 : [ 2 , 332 ] , 168 : [ 2 , 333 ] , 169 : [ 2 , 334 ] , 170 : [ 2 , 335 ] , 171 : [ 2 , 336 ] , 172 : [ 2 , 337 ] , 173 : [ 2 , 338 ] , 174 : [ 2 , 339 ] , 175 : [ 2 , 340 ] , 176 : [ 2 , 341 ] , 177 : [ 2 , 342 ] , 178 : [ 2 , 343 ] , 179 : [ 2 , 344 ] , 180 : [ 2 , 345 ] , 181 : [ 2 , 346 ] , 182 : [ 2 , 347 ] , 183 : [ 2 , 348 ] , 184 : [ 2 , 349 ] , 185 : [ 2 , 350 ] , 186 : [ 2 , 351 ] , 187 : [ 2 , 352 ] , 188 : [ 2 , 353 ] , 189 : [ 2 , 354 ] , 190 : [ 2 , 355 ] , 191 : [ 2 , 356 ] , 192 : [ 2 , 357 ] , 193 : [ 2 , 358 ] , 194 : [ 2 , 359 ] , 195 : [ 2 , 360 ] , 196 : [ 2 , 361 ] , 197 : [ 2 , 362 ] , 198 : [ 2 , 363 ] , 200 : [ 2 , 365 ] , 201 : [ 2 , 366 ] , 202 : [ 2 , 367 ] , 203 : [ 2 , 368 ] , 204 : [ 2 , 369 ] , 205 : [ 2 , 370 ] , 206 : [ 2 , 371 ] , 207 : [ 2 , 372 ] , 208 : [ 2 , 373 ] , 209 : [ 2 , 374 ] , 210 : [ 2 , 375 ] , 211 : [ 2 , 376 ] , 212 : [ 2 , 377 ] , 213 : [ 2 , 378 ] , 214 : [ 2 , 379 ] , 215 : [ 2 , 380 ] , 216 : [ 2 , 381 ] , 217 : [ 2 , 382 ] , 218 : [ 2 , 383 ] , 219 : [ 2 , 384 ] , 220 : [ 2 , 385 ] , 221 : [ 2 , 386 ] , 222 : [ 2 , 387 ] , 223 : [ 2 , 388 ] , 224 : [ 2 , 389 ] , 225 : [ 2 , 390 ] , 226 : [ 2 , 391 ] , 227 : [ 2 , 392 ] , 228 : [ 2 , 393 ] , 229 : [ 2 , 394 ] , 230 : [ 2 , 395 ] , 231 : [ 2 , 396 ] , 232 : [ 2 , 397 ] , 233 : [ 2 , 398 ] , 234 : [ 2 , 399 ] , 235 : [ 2 , 400 ] , 236 : [ 2 , 401 ] , 237 : [ 2 , 402 ] , 238 : [ 2 , 403 ] , 239 : [ 2 , 404 ] , 240 : [ 2 , 405 ] , 241 : [ 2 , 406 ] , 243 : [ 2 , 408 ] , 244 : [ 2 , 409 ] , 245 : [ 2 , 410 ] , 246 : [ 2 , 411 ] , 247 : [ 2 , 412 ] , 248 : [ 2 , 413 ] , 249 : [ 2 , 414 ] , 250 : [ 2 , 415 ] , 251 : [ 2 , 416 ] , 252 : [ 2 , 417 ] , 253 : [ 2 , 418 ] , 254 : [ 2 , 419 ] , 255 : [ 2 , 420 ] , 256 : [ 2 , 421 ] , 257 : [ 2 , 422 ] , 258 : [ 2 , 423 ] , 259 : [ 2 , 424 ] , 260 : [ 2 , 425 ] , 261 : [ 2 , 426 ] , 262 : [ 2 , 427 ] , 263 : [ 2 , 428 ] , 264 : [ 2 , 429 ] , 265 : [ 2 , 430 ] , 266 : [ 2 , 431 ] , 267 : [ 2 , 432 ] , 268 : [ 2 , 433 ] , 269 : [ 2 , 434 ] , 270 : [ 2 , 435 ] , 271 : [ 2 , 436 ] , 272 : [ 2 , 437 ] , 273 : [ 2 , 438 ] , 274 : [ 2 , 439 ] , 276 : [ 2 , 441 ] , 277 : [ 2 , 442 ] , 278 : [ 2 , 443 ] , 279 : [ 2 , 444 ] , 280 : [ 2 , 445 ] , 281 : [ 2 , 446 ] , 282 : [ 2 , 447 ] , 283 : [ 2 , 448 ] , 284 : [ 2 , 449 ] , 285 : [ 2 , 450 ] , 286 : [ 2 , 451 ] , 287 : [ 2 , 452 ] , 288 : [ 2 , 453 ] , 290 : [ 2 , 455 ] , 291 : [ 2 , 456 ] , 292 : [ 2 , 457 ] , 293 : [ 2 , 458 ] , 294 : [ 2 , 459 ] , 295 : [ 2 , 460 ] , 296 : [ 2 , 461 ] , 297 : [ 2 , 462 ] , 298 : [ 2 , 463 ] , 299 : [ 2 , 464 ] , 300 : [ 2 , 465 ] , 301 : [ 2 , 466 ] , 302 : [ 2 , 467 ] , 303 : [ 2 , 468 ] , 304 : [ 2 , 469 ] , 305 : [ 2 , 470 ] , 306 : [ 2 , 471 ] , 307 : [ 2 , 472 ] , 308 : [ 2 , 473 ] , 309 : [ 2 , 474 ] , 310 : [ 2 , 475 ] , 311 : [ 2 , 476 ] , 312 : [ 2 , 477 ] , 313 : [ 2 , 478 ] , 314 : [ 2 , 479 ] , 315 : [ 2 , 480 ] , 316 : [ 2 , 481 ] , 317 : [ 2 , 482 ] , 318 : [ 2 , 483 ] , 319 : [ 2 , 484 ] , 320 : [ 2 , 485 ] , 321 : [ 2 , 486 ] , 322 : [ 2 , 487 ] , 323 : [ 2 , 488 ] , 324 : [ 2 , 489 ] , 325 : [ 2 , 490 ] , 326 : [ 2 , 491 ] , 327 : [ 2 , 492 ] , 328 : [ 2 , 493 ] , 329 : [ 2 , 494 ] , 330 : [ 2 , 495 ] , 331 : [ 2 , 496 ] , 332 : [ 2 , 497 ] , 333 : [ 2 , 498 ] , 334 : [ 2 , 499 ] , 335 : [ 2 , 500 ] , 336 : [ 2 , 501 ] , 337 : [ 2 , 502 ] , 338 : [ 2 , 503 ] , 339 : [ 2 , 504 ] , 340 : [ 2 , 505 ] , 341 : [ 2 , 506 ] , 342 : [ 2 , 507 ] , 343 : [ 2 , 508 ] , 344 : [ 2 , 509 ] , 345 : [ 2 , 510 ] , 346 : [ 2 , 511 ] , 347 : [ 2 , 512 ] , 348 : [ 2 , 513 ] , 349 : [ 2 , 514 ] , 350 : [ 2 , 515 ] , 351 : [ 2 , 516 ] , 352 : [ 2 , 517 ] , 571 : [ 2 , 2 ] , 573 : [ 2 , 3 ] , 1343 : [ 2 , 624 ] , 1609 : [ 2 , 1440 ] , 1610 : [ 2 , 1441 ] , 1611 : [ 2 , 1442 ] , 1612 : [ 2 , 1443 ] , 1613 : [ 2 , 1444 ] , 1614 : [ 2 , 1445 ] , 1653 : [ 2 , 1571 ] , 1654 : [ 2 , 1572 ] , 1655 : [ 2 , 157
2018-08-27 11:03:13 +08:00
parseError : function parseError ( str , hash ) {
if ( hash . recoverable ) {
this . trace ( str ) ;
} else {
var error = new Error ( str ) ;
error . hash = hash ;
throw error ;
}
} ,
parse : function parse ( input ) {
var self = this ,
stack = [ 0 ] ,
tstack = [ ] , // token stack
vstack = [ null ] , // semantic value stack
lstack = [ ] , // location stack
table = this . table ,
yytext = '' ,
yylineno = 0 ,
yyleng = 0 ,
recovering = 0 ,
TERROR = 2 ,
EOF = 1 ;
var args = lstack . slice . call ( arguments , 1 ) ;
//this.reductionCount = this.shiftCount = 0;
var lexer = Object . create ( this . lexer ) ;
var sharedState = { yy : { } } ;
// copy state
for ( var k in this . yy ) {
if ( Object . prototype . hasOwnProperty . call ( this . yy , k ) ) {
sharedState . yy [ k ] = this . yy [ k ] ;
}
}
lexer . setInput ( input , sharedState . yy ) ;
sharedState . yy . lexer = lexer ;
sharedState . yy . parser = this ;
if ( typeof lexer . yylloc == 'undefined' ) {
lexer . yylloc = { } ;
}
var yyloc = lexer . yylloc ;
lstack . push ( yyloc ) ;
var ranges = lexer . options && lexer . options . ranges ;
if ( typeof sharedState . yy . parseError === 'function' ) {
this . parseError = sharedState . yy . parseError ;
} else {
this . parseError = Object . getPrototypeOf ( this ) . parseError ;
}
function popStack ( n ) {
stack . length = stack . length - 2 * n ;
vstack . length = vstack . length - n ;
lstack . length = lstack . length - n ;
}
_token _stack :
var lex = function ( ) {
var token ;
token = lexer . lex ( ) || EOF ;
// if token isn't its numeric value, convert
if ( typeof token !== 'number' ) {
token = self . symbols _ [ token ] || token ;
}
return token ;
}
var symbol , preErrorSymbol , state , action , a , r , yyval = { } , p , len , newState , expected ;
while ( true ) {
// retreive state number from top of stack
state = stack [ stack . length - 1 ] ;
// use default actions if available
if ( this . defaultActions [ state ] ) {
action = this . defaultActions [ state ] ;
} else {
if ( symbol === null || typeof symbol == 'undefined' ) {
symbol = lex ( ) ;
}
// read action for current state and first input
action = table [ state ] && table [ state ] [ symbol ] ;
}
_handle _error :
// handle parse error
if ( typeof action === 'undefined' || ! action . length || ! action [ 0 ] ) {
var error _rule _depth ;
var errStr = '' ;
// Return the rule stack depth where the nearest error rule can be found.
// Return FALSE when no error recovery rule was found.
function locateNearestErrorRecoveryRule ( state ) {
var stack _probe = stack . length - 1 ;
var depth = 0 ;
// try to recover from error
for ( ; ; ) {
// check for error recovery rule in this state
if ( ( TERROR . toString ( ) ) in table [ state ] ) {
return depth ;
}
if ( state === 0 || stack _probe < 2 ) {
return false ; // No suitable error recovery rule available.
}
stack _probe -= 2 ; // popStack(1): [symbol, action]
state = stack [ stack _probe ] ;
++ depth ;
}
}
if ( ! recovering ) {
// first see if there's any chance at hitting an error recovery rule:
error _rule _depth = locateNearestErrorRecoveryRule ( state ) ;
// Report error
expected = [ ] ;
for ( p in table [ state ] ) {
if ( this . terminals _ [ p ] && p > TERROR ) {
expected . push ( "'" + this . terminals _ [ p ] + "'" ) ;
}
}
if ( lexer . showPosition ) {
errStr = 'Parse error on line ' + ( yylineno + 1 ) + ":\n" + lexer . showPosition ( ) + "\nExpecting " + expected . join ( ', ' ) + ", got '" + ( this . terminals _ [ symbol ] || symbol ) + "'" ;
} else {
errStr = 'Parse error on line ' + ( yylineno + 1 ) + ": Unexpected " +
( symbol == EOF ? "end of input" :
( "'" + ( this . terminals _ [ symbol ] || symbol ) + "'" ) ) ;
}
this . parseError ( errStr , {
text : lexer . match ,
token : this . terminals _ [ symbol ] || symbol ,
line : lexer . yylineno ,
loc : yyloc ,
expected : expected ,
recoverable : ( error _rule _depth !== false )
} ) ;
} else if ( preErrorSymbol !== EOF ) {
error _rule _depth = locateNearestErrorRecoveryRule ( state ) ;
}
// just recovered from another error
if ( recovering == 3 ) {
if ( symbol === EOF || preErrorSymbol === EOF ) {
throw new Error ( errStr || 'Parsing halted while starting to recover from another error.' ) ;
}
// discard current lookahead and grab another
yyleng = lexer . yyleng ;
yytext = lexer . yytext ;
yylineno = lexer . yylineno ;
yyloc = lexer . yylloc ;
symbol = lex ( ) ;
}
// try to recover from error
if ( error _rule _depth === false ) {
throw new Error ( errStr || 'Parsing halted. No suitable error recovery rule available.' ) ;
}
popStack ( error _rule _depth ) ;
preErrorSymbol = ( symbol == TERROR ? null : symbol ) ; // save the lookahead token
symbol = TERROR ; // insert generic error symbol as new lookahead
state = stack [ stack . length - 1 ] ;
action = table [ state ] && table [ state ] [ TERROR ] ;
recovering = 3 ; // allow 3 real symbols to be shifted before reporting a new error
}
// this shouldn't happen, unless resolve defaults are off
if ( action [ 0 ] instanceof Array && action . length > 1 ) {
throw new Error ( 'Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol ) ;
}
switch ( action [ 0 ] ) {
case 1 : // shift
//this.shiftCount++;
stack . push ( symbol ) ;
vstack . push ( lexer . yytext ) ;
lstack . push ( lexer . yylloc ) ;
stack . push ( action [ 1 ] ) ; // push state
symbol = null ;
if ( ! preErrorSymbol ) { // normal execution/no error
yyleng = lexer . yyleng ;
yytext = lexer . yytext ;
yylineno = lexer . yylineno ;
yyloc = lexer . yylloc ;
if ( recovering > 0 ) {
recovering -- ;
}
} else {
// error just occurred, resume old lookahead f/ before error
symbol = preErrorSymbol ;
preErrorSymbol = null ;
}
break ;
case 2 :
// reduce
//this.reductionCount++;
len = this . productions _ [ action [ 1 ] ] [ 1 ] ;
// perform semantic action
yyval . $ = vstack [ vstack . length - len ] ; // default to $$ = $1
// default location, uses first token for firsts, last for lasts
yyval . _$ = {
first _line : lstack [ lstack . length - ( len || 1 ) ] . first _line ,
last _line : lstack [ lstack . length - 1 ] . last _line ,
first _column : lstack [ lstack . length - ( len || 1 ) ] . first _column ,
last _column : lstack [ lstack . length - 1 ] . last _column
} ;
if ( ranges ) {
yyval . _$ . range = [ lstack [ lstack . length - ( len || 1 ) ] . range [ 0 ] , lstack [ lstack . length - 1 ] . range [ 1 ] ] ;
}
r = this . performAction . apply ( yyval , [ yytext , yyleng , yylineno , sharedState . yy , action [ 1 ] , vstack , lstack ] . concat ( args ) ) ;
if ( typeof r !== 'undefined' ) {
return r ;
}
// pop off stack
if ( len ) {
stack = stack . slice ( 0 , - 1 * len * 2 ) ;
vstack = vstack . slice ( 0 , - 1 * len ) ;
lstack = lstack . slice ( 0 , - 1 * len ) ;
}
stack . push ( this . productions _ [ action [ 1 ] ] [ 0 ] ) ; // push nonterminal (reduce)
vstack . push ( yyval . $ ) ;
lstack . push ( yyval . _$ ) ;
// goto new state = table[STATE][NONTERMINAL]
newState = table [ stack [ stack . length - 2 ] ] [ stack [ stack . length - 1 ] ] ;
stack . push ( newState ) ;
break ;
case 3 :
// accept
return true ;
}
}
return true ;
} } ;
SqlParseSupport . initSqlParser ( parser ) ; /* generated by jison-lex 0.3.4 */
var lexer = ( function ( ) {
var lexer = ( {
EOF : 1 ,
parseError : function parseError ( str , hash ) {
if ( this . yy . parser ) {
this . yy . parser . parseError ( str , hash ) ;
} else {
throw new Error ( str ) ;
}
} ,
// resets the lexer, sets new input
setInput : function ( input , yy ) {
this . yy = yy || this . yy || { } ;
this . _input = input ;
this . _more = this . _backtrack = this . done = false ;
this . yylineno = this . yyleng = 0 ;
this . yytext = this . matched = this . match = '' ;
this . conditionStack = [ 'INITIAL' ] ;
this . yylloc = {
first _line : 1 ,
first _column : 0 ,
last _line : 1 ,
last _column : 0
} ;
if ( this . options . ranges ) {
this . yylloc . range = [ 0 , 0 ] ;
}
this . offset = 0 ;
return this ;
} ,
// consumes and returns one char from the input
input : function ( ) {
var ch = this . _input [ 0 ] ;
this . yytext += ch ;
this . yyleng ++ ;
this . offset ++ ;
this . match += ch ;
this . matched += ch ;
var lines = ch . match ( /(?:\r\n?|\n).*/g ) ;
if ( lines ) {
this . yylineno ++ ;
this . yylloc . last _line ++ ;
} else {
this . yylloc . last _column ++ ;
}
if ( this . options . ranges ) {
this . yylloc . range [ 1 ] ++ ;
}
this . _input = this . _input . slice ( 1 ) ;
return ch ;
} ,
// unshifts one char (or a string) into the input
unput : function ( ch ) {
var len = ch . length ;
var lines = ch . split ( /(?:\r\n?|\n)/g ) ;
this . _input = ch + this . _input ;
this . yytext = this . yytext . substr ( 0 , this . yytext . length - len ) ;
//this.yyleng -= len;
this . offset -= len ;
var oldLines = this . match . split ( /(?:\r\n?|\n)/g ) ;
this . match = this . match . substr ( 0 , this . match . length - 1 ) ;
this . matched = this . matched . substr ( 0 , this . matched . length - 1 ) ;
if ( lines . length - 1 ) {
this . yylineno -= lines . length - 1 ;
}
var r = this . yylloc . range ;
this . yylloc = {
first _line : this . yylloc . first _line ,
last _line : this . yylineno + 1 ,
first _column : this . yylloc . first _column ,
last _column : lines ?
( lines . length === oldLines . length ? this . yylloc . first _column : 0 )
+ oldLines [ oldLines . length - lines . length ] . length - lines [ 0 ] . length :
this . yylloc . first _column - len
} ;
if ( this . options . ranges ) {
this . yylloc . range = [ r [ 0 ] , r [ 0 ] + this . yyleng - len ] ;
}
this . yyleng = this . yytext . length ;
return this ;
} ,
// When called from action, caches matched text and appends it on next action
more : function ( ) {
this . _more = true ;
return this ;
} ,
// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
reject : function ( ) {
if ( this . options . backtrack _lexer ) {
this . _backtrack = true ;
} else {
return this . parseError ( 'Lexical error on line ' + ( this . yylineno + 1 ) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this . showPosition ( ) , {
text : "" ,
token : null ,
line : this . yylineno
} ) ;
}
return this ;
} ,
// retain first n characters of the match
less : function ( n ) {
this . unput ( this . match . slice ( n ) ) ;
} ,
// displays already matched input, i.e. for error messages
pastInput : function ( ) {
var past = this . matched . substr ( 0 , this . matched . length - this . match . length ) ;
return ( past . length > 20 ? '...' : '' ) + past . substr ( - 20 ) . replace ( /\n/g , "" ) ;
} ,
// displays upcoming input, i.e. for error messages
upcomingInput : function ( ) {
var next = this . match ;
if ( next . length < 20 ) {
next += this . _input . substr ( 0 , 20 - next . length ) ;
}
return ( next . substr ( 0 , 20 ) + ( next . length > 20 ? '...' : '' ) ) . replace ( /\n/g , "" ) ;
} ,
// displays the character position where the lexing error occurred, i.e. for error messages
showPosition : function ( ) {
var pre = this . pastInput ( ) ;
var c = new Array ( pre . length + 1 ) . join ( "-" ) ;
return pre + this . upcomingInput ( ) + "\n" + c + "^" ;
} ,
// test the lexed token: return FALSE when not a match, otherwise return token
test _match : function ( match , indexed _rule ) {
var token ,
lines ,
backup ;
if ( this . options . backtrack _lexer ) {
// save context
backup = {
yylineno : this . yylineno ,
yylloc : {
first _line : this . yylloc . first _line ,
last _line : this . last _line ,
first _column : this . yylloc . first _column ,
last _column : this . yylloc . last _column
} ,
yytext : this . yytext ,
match : this . match ,
matches : this . matches ,
matched : this . matched ,
yyleng : this . yyleng ,
offset : this . offset ,
_more : this . _more ,
_input : this . _input ,
yy : this . yy ,
conditionStack : this . conditionStack . slice ( 0 ) ,
done : this . done
} ;
if ( this . options . ranges ) {
backup . yylloc . range = this . yylloc . range . slice ( 0 ) ;
}
}
lines = match [ 0 ] . match ( /(?:\r\n?|\n).*/g ) ;
if ( lines ) {
this . yylineno += lines . length ;
}
this . yylloc = {
first _line : this . yylloc . last _line ,
last _line : this . yylineno + 1 ,
first _column : this . yylloc . last _column ,
last _column : lines ?
lines [ lines . length - 1 ] . length - lines [ lines . length - 1 ] . match ( /\r?\n?/ ) [ 0 ] . length :
this . yylloc . last _column + match [ 0 ] . length
} ;
this . yytext += match [ 0 ] ;
this . match += match [ 0 ] ;
this . matches = match ;
this . yyleng = this . yytext . length ;
if ( this . options . ranges ) {
this . yylloc . range = [ this . offset , this . offset += this . yyleng ] ;
}
this . _more = false ;
this . _backtrack = false ;
this . _input = this . _input . slice ( match [ 0 ] . length ) ;
this . matched += match [ 0 ] ;
token = this . performAction . call ( this , this . yy , this , indexed _rule , this . conditionStack [ this . conditionStack . length - 1 ] ) ;
if ( this . done && this . _input ) {
this . done = false ;
}
if ( token ) {
return token ;
} else if ( this . _backtrack ) {
// recover context
for ( var k in backup ) {
this [ k ] = backup [ k ] ;
}
return false ; // rule action called reject() implying the next rule should be tested instead.
}
return false ;
} ,
// return next match in input
next : function ( ) {
if ( this . done ) {
return this . EOF ;
}
if ( ! this . _input ) {
this . done = true ;
}
var token ,
match ,
tempMatch ,
index ;
if ( ! this . _more ) {
this . yytext = '' ;
this . match = '' ;
}
var rules = this . _currentRules ( ) ;
for ( var i = 0 ; i < rules . length ; i ++ ) {
tempMatch = this . _input . match ( this . rules [ rules [ i ] ] ) ;
if ( tempMatch && ( ! match || tempMatch [ 0 ] . length > match [ 0 ] . length ) ) {
match = tempMatch ;
index = i ;
if ( this . options . backtrack _lexer ) {
token = this . test _match ( tempMatch , rules [ i ] ) ;
if ( token !== false ) {
return token ;
} else if ( this . _backtrack ) {
match = false ;
continue ; // rule action called reject() implying a rule MISmatch.
} else {
// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
return false ;
}
} else if ( ! this . options . flex ) {
break ;
}
}
}
if ( match ) {
token = this . test _match ( match , rules [ index ] ) ;
if ( token !== false ) {
return token ;
}
// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
return false ;
}
if ( this . _input === "" ) {
return this . EOF ;
} else {
return this . parseError ( 'Lexical error on line ' + ( this . yylineno + 1 ) + '. Unrecognized text.\n' + this . showPosition ( ) , {
text : "" ,
token : null ,
line : this . yylineno
} ) ;
}
} ,
// return next match that has a token
lex : function lex ( ) {
var r = this . next ( ) ;
if ( r ) {
return r ;
} else {
return this . lex ( ) ;
}
} ,
// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
begin : function begin ( condition ) {
this . conditionStack . push ( condition ) ;
} ,
// pop the previously active lexer condition state off the condition stack
popState : function popState ( ) {
var n = this . conditionStack . length - 1 ;
if ( n > 0 ) {
return this . conditionStack . pop ( ) ;
} else {
return this . conditionStack [ 0 ] ;
}
} ,
// produce the lexer rule set which is active for the currently active lexer condition state
_currentRules : function _currentRules ( ) {
if ( this . conditionStack . length && this . conditionStack [ this . conditionStack . length - 1 ] ) {
return this . conditions [ this . conditionStack [ this . conditionStack . length - 1 ] ] . rules ;
} else {
return this . conditions [ "INITIAL" ] . rules ;
}
} ,
// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
topState : function topState ( n ) {
n = this . conditionStack . length - 1 - Math . abs ( n || 0 ) ;
if ( n >= 0 ) {
return this . conditionStack [ n ] ;
} else {
return "INITIAL" ;
}
} ,
// alias for begin(condition)
pushState : function pushState ( condition ) {
this . begin ( condition ) ;
} ,
// return the number of states currently on the stack
stateStackSize : function stateStackSize ( ) {
return this . conditionStack . length ;
} ,
options : { "case-insensitive" : true , "flex" : true } ,
performAction : function anonymous ( yy , yy _ , $avoiding _name _collisions , YY _START ) {
var YYSTATE = YY _START ;
switch ( $avoiding _name _collisions ) {
case 0 : /* skip whitespace */
break ;
case 1 : /* skip comments */
break ;
case 2 : /* skip comments */
break ;
case 3 : parser . yy . partialCursor = false ; parser . yy . cursorFound = yy _ . yylloc ; return 19 ;
break ;
2018-09-26 17:21:26 +08:00
case 4 : parser . yy . partialCursor = true ; parser . yy . cursorFound = yy _ . yylloc ; return 441 ;
2018-08-27 11:03:13 +08:00
break ;
case 5 : return 166 ;
break ;
2018-09-26 17:21:26 +08:00
case 6 : return 285 ;
2018-08-27 11:03:13 +08:00
break ;
case 7 : return 167 ;
break ;
case 8 : return 164 ;
break ;
case 9 : return 168 ;
break ;
case 10 : return 169 ;
break ;
2018-09-26 17:21:26 +08:00
case 11 : return 859 ;
2018-08-27 11:03:13 +08:00
break ;
case 12 : return 171 ;
break ;
case 13 : return 172 ;
break ;
2018-09-26 17:21:26 +08:00
case 14 : parser . determineCase ( yy _ . yytext ) ; return 439 ;
2018-08-27 11:03:13 +08:00
break ;
case 15 : return 173 ;
break ;
case 16 : return 174 ;
break ;
case 17 : return 175 ;
break ;
2018-09-26 17:21:26 +08:00
case 18 : parser . determineCase ( yy _ . yytext ) ; return 1165 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 19 : parser . determineCase ( yy _ . yytext ) ; return 570 ;
2018-08-27 11:03:13 +08:00
break ;
case 20 : return 165 ;
break ;
case 21 : return 178 ;
break ;
case 22 : return 179 ;
break ;
case 23 : return 180 ;
break ;
case 24 : return 181 ;
break ;
case 25 : return 182 ;
break ;
case 26 : return 183 ;
break ;
2018-09-26 17:21:26 +08:00
case 27 : parser . determineCase ( yy _ . yytext ) ; return 1253 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 28 : parser . determineCase ( yy _ . yytext ) ; return 1189 ;
2018-08-27 11:03:13 +08:00
break ;
case 29 : return 184 ;
break ;
case 30 : return 185 ;
break ;
case 31 : return 187 ;
break ;
2018-09-26 17:21:26 +08:00
case 32 : return 321 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 33 : return 198 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 34 : return 199 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 35 : return 200 ;
2018-08-27 11:03:13 +08:00
break ;
case 36 : return 189 ;
break ;
case 37 : return 190 ;
break ;
2018-09-26 17:21:26 +08:00
case 38 : return 1192 ;
2018-08-27 11:03:13 +08:00
break ;
case 39 : return 191 ;
break ;
case 40 : return 193 ;
break ;
case 41 : return 125 ;
break ;
case 42 : return 132 ;
break ;
2018-09-26 17:21:26 +08:00
case 43 : return 204 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 44 : return 205 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 45 : return 956 ;
2018-08-27 11:03:13 +08:00
break ;
case 46 : parser . determineCase ( yy _ . yytext ) ; return 26 ;
break ;
case 47 : return 27 ;
break ;
case 48 : return 28 ;
break ;
case 49 : return 29 ;
break ;
case 50 : parser . determineCase ( yy _ . yytext ) ; return 30 ;
break ;
case 51 : return 31 ;
break ;
case 52 : return 194 ;
break ;
case 53 : return 32 ;
break ;
case 54 : return 33 ;
break ;
case 55 : return 34 ;
break ;
case 56 : return 35 ;
break ;
case 57 : return 36 ;
break ;
case 58 : return 170 ;
break ;
case 59 : return 37 ;
break ;
case 60 : return 38 ;
break ;
case 61 : return 39 ;
break ;
case 62 : return 40 ;
break ;
case 63 : return 41 ;
break ;
case 64 : return 42 ;
break ;
case 65 : return 43 ;
break ;
case 66 : return 44 ;
break ;
case 67 : return 45 ;
break ;
case 68 : return 46 ;
break ;
case 69 : return 135 ;
break ;
2018-09-26 17:21:26 +08:00
case 70 : return 369 ;
2018-08-27 11:03:13 +08:00
break ;
case 71 : return 47 ;
break ;
case 72 : return 48 ;
break ;
case 73 : return 49 ;
break ;
case 74 : return 50 ;
break ;
case 75 : return 51 ;
break ;
2018-09-26 17:21:26 +08:00
case 76 : return 571 ;
2018-08-27 11:03:13 +08:00
break ;
case 77 : this . begin ( 'hdfs' ) ; return 52 ;
break ;
case 78 : return 53 ;
break ;
case 79 : return 176 ;
break ;
case 80 : return 54 ;
break ;
case 81 : return 56 ;
break ;
case 82 : return 55 ;
break ;
case 83 : return 57 ;
break ;
case 84 : parser . determineCase ( yy _ . yytext ) ; return 58 ;
break ;
case 85 : parser . determineCase ( yy _ . yytext ) ; return 59 ;
break ;
case 86 : return 60 ;
break ;
case 87 : return 61 ;
break ;
case 88 : return 62 ;
break ;
case 89 : return 63 ;
break ;
case 90 : return 64 ;
break ;
2018-09-26 17:21:26 +08:00
case 91 : return 195 ;
2018-08-27 11:03:13 +08:00
break ;
case 92 : return 181 ;
break ;
case 93 : return 65 ;
break ;
case 94 : return 136 ;
break ;
case 95 : return 69 ;
break ;
2018-09-26 17:21:26 +08:00
case 96 : return 196 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 97 : return 197 ;
2018-08-27 11:03:13 +08:00
break ;
case 98 : this . begin ( 'hdfs' ) ; return 66 ;
break ;
case 99 : return 67 ;
break ;
case 100 : return 70 ;
break ;
case 101 : return 68 ;
break ;
case 102 : return 71 ;
break ;
case 103 : return 72 ;
break ;
case 104 : return 73 ;
break ;
case 105 : parser . determineCase ( yy _ . yytext ) ; return 74 ;
break ;
case 106 : this . begin ( 'hdfs' ) ; return 75 ;
break ;
case 107 : return 186 ;
break ;
case 108 : return 76 ;
break ;
case 109 : return 77 ;
break ;
case 110 : return 79 ;
break ;
case 111 : return 78 ;
break ;
case 112 : return 137 ;
break ;
case 113 : return 138 ;
break ;
case 114 : return 80 ;
break ;
case 115 : return 99 ;
break ;
case 116 : return 81 ;
break ;
case 117 : return 82 ;
break ;
case 118 : return 83 ;
break ;
case 119 : return 84 ;
break ;
case 120 : return 85 ;
break ;
case 121 : return 86 ;
break ;
case 122 : return 87 ;
break ;
2018-09-26 17:21:26 +08:00
case 123 : this . begin ( 'hdfs' ) ; return 1206 ;
2018-08-27 11:03:13 +08:00
break ;
case 124 : return 88 ;
break ;
case 125 : return 89 ;
break ;
case 126 : return 90 ;
break ;
case 127 : return 91 ;
break ;
case 128 : return 92 ;
break ;
case 129 : return 93 ;
break ;
case 130 : return 94 ;
break ;
case 131 : return 139 ;
break ;
case 132 : return 95 ;
break ;
case 133 : return 96 ;
break ;
case 134 : parser . determineCase ( yy _ . yytext ) ; return 97 ;
break ;
case 135 : return 98 ;
break ;
case 136 : return 100 ;
break ;
case 137 : return 101 ;
break ;
case 138 : return 102 ;
break ;
case 139 : return 103 ;
break ;
case 140 : return 104 ;
break ;
case 141 : return 105 ;
break ;
case 142 : return 106 ;
break ;
case 143 : return 107 ;
break ;
case 144 : return 140 ;
break ;
2018-09-26 17:21:26 +08:00
case 145 : return 201 ;
2018-08-27 11:03:13 +08:00
break ;
case 146 : return 108 ;
break ;
case 147 : return 109 ;
break ;
case 148 : return 110 ;
break ;
case 149 : return 111 ;
break ;
case 150 : return 112 ;
break ;
case 151 : parser . determineCase ( yy _ . yytext ) ; return 113 ;
break ;
case 152 : return 192 ;
break ;
case 153 : return 114 ;
break ;
2018-09-26 17:21:26 +08:00
case 154 : return 856 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 155 : return 656 ;
2018-08-27 11:03:13 +08:00
break ;
case 156 : return 115 ;
break ;
case 157 : return 116 ;
break ;
case 158 : return 117 ;
break ;
2018-09-26 17:21:26 +08:00
case 159 : return 202 ;
2018-08-27 11:03:13 +08:00
break ;
case 160 : return 118 ;
break ;
case 161 : return 119 ;
break ;
case 162 : return 120 ;
break ;
2018-09-26 17:21:26 +08:00
case 163 : return 203 ;
2018-08-27 11:03:13 +08:00
break ;
case 164 : return 121 ;
break ;
case 165 : return 122 ;
break ;
case 166 : return 123 ;
break ;
case 167 : return 124 ;
break ;
case 168 : return 126 ;
break ;
case 169 : return 127 ;
break ;
case 170 : return 128 ;
break ;
case 171 : return 129 ;
break ;
case 172 : return 130 ;
break ;
case 173 : parser . determineCase ( yy _ . yytext ) ; return 131 ;
break ;
case 174 : return 133 ;
break ;
case 175 : return 134 ;
break ;
case 176 : return 141 ;
break ;
2018-09-26 17:21:26 +08:00
case 177 : return 206 ;
2018-08-27 11:03:13 +08:00
break ;
case 178 : return 142 ;
break ;
2018-09-26 17:21:26 +08:00
case 179 : return 207 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 180 : return 208 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 181 : return 209 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 182 : return 907 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 183 : return 210 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 184 : return 211 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 185 : return 212 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 186 : return 213 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 187 : return 905 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 188 : return 214 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 189 : return 215 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 190 : return 897 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 191 : parser . determineCase ( yy _ . yytext ) ; return 452 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 192 : parser . determineCase ( yy _ . yytext ) ; return 932 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 193 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'CREATE' , yy _ . yylloc , yy . lexer . upcomingInput ( ) ) ; return 440 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 194 : return 216 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 195 : return 217 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 196 : return 218 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 197 : return 219 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 198 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'DESCRIBE' , yy _ . yylloc ) ; return 569 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 199 : return 220 ;
2018-08-27 11:03:13 +08:00
break ;
case 200 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'EXPLAIN' , yy _ . yylloc ) ; return 163 ;
break ;
2018-09-26 17:21:26 +08:00
case 201 : return 222 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 202 : return 221 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 203 : return 223 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 204 : return 906 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 205 : return 224 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 206 : return 225 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 207 : return 226 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 208 : return 227 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 209 : return 228 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 210 : return 229 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 211 : return 230 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 212 : return 231 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 213 : return 232 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 214 : return 233 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 215 : return 234 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 216 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'INSERT' , yy _ . yylloc ) ; return 1191 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 217 : return 236 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 218 : return 235 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 219 : return 237 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 220 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'INVALIDATE' , yy _ . yylloc , yy . lexer . upcomingInput ( ) ) ; return 930 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 221 : this . begin ( 'hdfs' ) ; return 238 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 222 : return 239 ;
2018-08-27 11:03:13 +08:00
break ;
case 223 : return 156 ;
break ;
2018-09-26 17:21:26 +08:00
case 224 : return 240 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 225 : return 241 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 226 : this . begin ( 'hdfs' ) ; return 974 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 227 : return 242 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 228 : return 243 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 229 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'LOAD' , yy _ . yylloc , yy . lexer . upcomingInput ( ) ) ; return 1252 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 230 : this . begin ( 'hdfs' ) ; return 244 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 231 : return 245 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 232 : return 931 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 233 : return 246 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 234 : return 663 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 235 : return 1039 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 236 : return 1230 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 237 : return 268 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 238 : return 269 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 239 : return 247 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 240 : return 248 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 241 : return 249 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 242 : return 270 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 243 : return 250 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 244 : return 251 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 245 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'REFRESH' , yy _ . yylloc ) ; return 929 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 246 : return 909 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 247 : return 252 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 248 : return 762 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 249 : return 253 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 250 : return 254 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 251 : return 255 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 252 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'REVOKE' , yy _ . yylloc ) ; return 1194 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 253 : return 271 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 254 : return 272 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 255 : return 256 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 256 : return 257 ;
2018-08-27 11:03:13 +08:00
break ;
case 257 : return 150 ;
break ;
2018-09-26 17:21:26 +08:00
case 258 : return 258 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 259 : return 259 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 260 : return 274 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 261 : return 260 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 262 : return 261 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 263 : return 262 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 264 : return 263 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 265 : return 264 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 266 : return 275 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 267 : return 276 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 268 : return 277 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 269 : return 543 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 270 : return 278 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 271 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'UPSERT' , yy _ . yylloc ) ; return 1227 ;
2018-08-27 11:03:13 +08:00
break ;
case 272 : return 149 ;
break ;
2018-09-26 17:21:26 +08:00
case 273 : return 265 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 274 : return 832 ;
2018-08-27 11:03:13 +08:00
break ;
case 275 : return 143 ;
break ;
2018-09-26 17:21:26 +08:00
case 276 : return 266 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 277 : return 285 ;
2018-08-27 11:03:13 +08:00
break ;
case 278 : return 152 ;
break ;
case 279 : return 153 ;
break ;
case 280 : return 144 ;
break ;
case 281 : return 154 ;
break ;
case 282 : return 155 ;
break ;
case 283 : return 145 ;
break ;
2018-09-26 17:21:26 +08:00
case 284 : return 321 ;
2018-08-27 11:03:13 +08:00
break ;
case 285 : return 146 ;
break ;
case 286 : return 147 ;
break ;
case 287 : return 148 ;
break ;
case 288 : return 119 ;
break ;
case 289 : return 151 ;
break ;
2018-09-26 17:21:26 +08:00
case 290 : return 279 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 291 : return 267 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 292 : return 273 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 293 : return 280 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 294 : return 281 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 295 : return 282 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 296 : return 283 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 297 : this . popState ( ) ; return 668 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 298 : return 284 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 299 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'ALTER' , yy _ . yylloc , yy . lexer . upcomingInput ( ) ) ; return 825 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 300 : return 385 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 301 : return 286 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 302 : return 287 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 303 : this . begin ( 'between' ) ; return 288 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 304 : return 289 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 305 : return 290 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 306 : return 291 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 307 : return 292 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 308 : return 293 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 309 : parser . determineCase ( yy _ . yytext ) ; return 438 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 310 : return 294 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 311 : return 295 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 312 : return 296 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 313 : return 297 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 314 : return 298 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 315 : return 393 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 316 : return 299 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 317 : return 300 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 318 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'DROP' , yy _ . yylloc , yy . lexer . upcomingInput ( ) ) ; return 867 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 319 : return 301 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 320 : return 302 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 321 : parser . yy . correlatedSubQuery = true ; return 303 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 322 : return 304 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 323 : return 305 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 324 : return 306 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 325 : parser . determineCase ( yy _ . yytext ) ; return 307 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 326 : return 308 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 327 : return 309 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 328 : return 310 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 329 : return 311 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 330 : return 312 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 331 : return 313 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 332 : return 1212 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 333 : return 314 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 334 : return 315 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 335 : return 316 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 336 : return 317 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 337 : return 318 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 338 : return 319 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 339 : return 320 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 340 : return 322 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 341 : return 323 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 342 : return 324 ;
2018-08-27 11:03:13 +08:00
break ;
case 343 : return 158 ;
break ;
2018-09-26 17:21:26 +08:00
case 344 : return 386 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 345 : return 325 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 346 : return 326 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 347 : return 328 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 348 : return 329 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 349 : return 330 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 350 : return 331 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 351 : return 332 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 352 : return 333 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 353 : return 334 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 354 : return 335 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 355 : return 336 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 356 : return 337 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 357 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'SELECT' , yy _ . yylloc ) ; return 577 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 358 : return 338 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 359 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'SET' , yy _ . yylloc ) ; return 339 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 360 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'SHOW' , yy _ . yylloc ) ; return 1278 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 361 : return 340 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 362 : return 341 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 363 : return 342 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 364 : return 343 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 365 : return 344 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 366 : return 345 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 367 : return 836 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 368 : return 346 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 369 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'TRUNCATE' , yy _ . yylloc , yy . lexer . upcomingInput ( ) ) ; return 763 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 370 : return 784 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 371 : parser . determineCase ( yy _ . yytext ) ; return 1190 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 372 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'USE' , yy _ . yylloc ) ; return 1314 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 373 : return 347 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 374 : return 1100 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 375 : return 349 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 376 : return 348 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 377 : return 350 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 378 : return 351 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 379 : parser . determineCase ( yy _ . yytext ) ; parser . addStatementTypeLocation ( 'WITH' , yy _ . yylloc ) ; return 352 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 380 : return 327 ;
2018-08-27 11:03:13 +08:00
break ;
case 381 : return 157 ;
break ;
2018-09-26 17:21:26 +08:00
case 382 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'avg' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 353 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 383 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'cast' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 354 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 384 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'count' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 355 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 385 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'max' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 356 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 386 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'min' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 357 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 387 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'stddev_pop' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 358 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 388 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'stddev_samp' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 359 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 389 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'sum' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 360 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 390 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'variance' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 361 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 391 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'var_pop' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 362 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 392 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'var_samp' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 363 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 393 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'collect_set' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 364 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 394 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'collect_list' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 365 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 395 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'corr' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 366 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 396 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'covar_pop' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 367 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 397 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'covar_samp' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 368 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 398 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'extract' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 793 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 399 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'histogram_numeric' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 370 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 400 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'ntile' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 371 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 401 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'percentile' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 372 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 402 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'percentile_approx' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 373 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 403 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'appx_median' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 374 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 404 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'extract' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 375 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 405 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'group_concat' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 376 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 406 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'ndv' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 377 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 407 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'stddev' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 378 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 408 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'variance_pop' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 379 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 409 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'variance_samp' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 380 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 410 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'cume_dist' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 381 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 411 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'dense_rank' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 381 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 412 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'first_value' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 381 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 413 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'lag' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 381 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 414 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'last_value' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 381 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 415 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'lead' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 381 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 416 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'rank' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 381 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 417 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'row_number' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 381 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 418 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'cume_dist' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 381 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 419 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'percent_rank' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 381 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 420 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'ntile' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 381 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 421 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'percent_rank' ; parser . addFunctionLocation ( yy _ . yylloc , yy _ . yytext ) ; return 381 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 422 : yy . lexer . unput ( '(' ) ; yy _ . yytext = 'system' ; return 727 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 423 : return 382 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 424 : return 382 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 425 : return 383 ;
2018-08-27 11:03:13 +08:00
break ;
case 426 : return 160 ;
break ;
case 427 : parser . yy . cursorFound = true ; return 19 ;
break ;
2018-09-26 17:21:26 +08:00
case 428 : parser . yy . cursorFound = true ; return 441 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 429 : return 384 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 430 : parser . addFileLocation ( yy _ . yylloc , yy _ . yytext ) ; return 788 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 431 : this . popState ( ) ; return 789 ;
2018-08-27 11:03:13 +08:00
break ;
case 432 : return 6 ;
break ;
2018-09-26 17:21:26 +08:00
case 433 : return 385 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 434 : return 386 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 435 : return 387 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 436 : return 388 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 437 : return 389 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 438 : return 390 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 439 : return 390 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 440 : return 390 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 441 : return 390 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 442 : return 390 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 443 : return 391 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 444 : return 392 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 445 : return 393 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 446 : return 393 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 447 : return 393 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 448 : return 393 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 449 : return 393 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 450 : return 393 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 451 : return 394 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 452 : return 395 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 453 : return 1005 ;
2018-08-27 11:03:13 +08:00
break ;
case 454 : return 10 ;
break ;
2018-09-26 17:21:26 +08:00
case 455 : return 396 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 456 : return 397 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 457 : return 398 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 458 : return 399 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 459 : return 400 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 460 : return 401 ;
2018-08-27 11:03:13 +08:00
break ;
case 461 : return 161 ;
break ;
2018-09-26 17:21:26 +08:00
case 462 : this . begin ( 'backtickedValue' ) ; return 402 ;
2018-08-27 11:03:13 +08:00
break ;
case 463 :
if ( parser . handleQuotedValueWithCursor ( this , yy _ . yytext , yy _ . yylloc , '`' ) ) {
2018-09-26 17:21:26 +08:00
return 471 ;
2018-08-27 11:03:13 +08:00
}
2018-09-26 17:21:26 +08:00
return 469 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 464 : this . popState ( ) ; return 402 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 465 : this . begin ( 'singleQuotedValue' ) ; return 403 ;
2018-08-27 11:03:13 +08:00
break ;
case 466 :
if ( parser . handleQuotedValueWithCursor ( this , yy _ . yytext , yy _ . yylloc , '\'' ) ) {
2018-09-26 17:21:26 +08:00
return 471 ;
2018-08-27 11:03:13 +08:00
}
2018-09-26 17:21:26 +08:00
return 469 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 467 : this . popState ( ) ; return 403 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 468 : this . begin ( 'doubleQuotedValue' ) ; return 404 ;
2018-08-27 11:03:13 +08:00
break ;
case 469 :
if ( parser . handleQuotedValueWithCursor ( this , yy _ . yytext , yy _ . yylloc , '"' ) ) {
2018-09-26 17:21:26 +08:00
return 471 ;
2018-08-27 11:03:13 +08:00
}
2018-09-26 17:21:26 +08:00
return 469 ;
2018-08-27 11:03:13 +08:00
break ;
2018-09-26 17:21:26 +08:00
case 470 : this . popState ( ) ; return 404 ;
2018-08-27 11:03:13 +08:00
break ;
case 471 : return 6 ;
break ;
case 472 : /* To prevent console logging of unknown chars */
break ;
case 473 :
break ;
case 474 :
break ;
case 475 :
break ;
case 476 :
break ;
case 477 :
break ;
case 478 :
break ;
case 479 :
break ;
case 480 : console . log ( yy _ . yytext ) ;
break ;
}
} ,
rules : [ /^(?:\s)/i , /^(?:--.*)/i , /^(?:[\/][*][^*]*[*]+([^\/*][^*]*[*]+)*[\/])/i , /^(?:\u2020)/i , /^(?:\u2021)/i , /^(?:ALL)/i , /^(?:ARRAY)/i , /^(?:AS)/i , /^(?:AUTHORIZATION)/i , /^(?:BINARY)/i , /^(?:CACHE)/i , /^(?:COLUMN)/i , /^(?:CONF)/i , /^(?:CONSTRAINT)/i , /^(?:CREATE)/i , /^(?:CUBE)/i , /^(?:CURRENT)/i , /^(?:DATE)/i , /^(?:DELETE)/i , /^(?:DESCRIBE)/i , /^(?:EXTENDED)/i , /^(?:EXTERNAL)/i , /^(?:FOR)/i , /^(?:FOREIGN)/i , /^(?:FUNCTION)/i , /^(?:GRANT)/i , /^(?:GROUPING)/i , /^(?:IMPORT)/i , /^(?:INSERT)/i , /^(?:LATERAL)/i , /^(?:LOCAL)/i , /^(?:MACRO)/i , /^(?:MAP)/i , /^(?:NONE)/i , /^(?:OF)/i , /^(?:OUT)/i , /^(?:PRIMARY)/i , /^(?:REFERENCES)/i , /^(?:REVOKE)/i , /^(?:ROLLUP)/i , /^(?:TABLE)/i , /^(?:TIMESTAMP)/i , /^(?:USER)/i , /^(?:USING)/i , /^(?:VIEWS)/i , /^(?:LIFECYCLE)/i , /^(?:ABORT)/i , /^(?:ADD)/i , /^(?:ADMIN)/i , /^(?:AFTER)/i , /^(?:ANALYZE)/i , /^(?:ARCHIVE)/i , /^(?:ASC)/i , /^(?:AVRO)/i , /^(?:BUCKET)/i , /^(?:BUCKETS)/i , /^(?:CASCADE)/i , /^(?:CHANGE)/i , /^(?:CLUSTER)/i , /^(?:CLUSTERED)/i , /^(?:COLLECTION)/i , /^(?:COLUMNS)/i , /^(?:COMMENT)/i , /^(?:COMPACT)/i , /^(?:COMPACTIONS)/i , /^(?:COMPUTE)/i , /^(?:CONCATENATE)/i , /^(?:DATA)/i , /^(?:DATABASES)/i , /^(?:DAY)/i , /^(?:DAYOFWEEK)/i , /^(?:DBPROPERTIES)/i , /^(?:DEFERRED)/i , /^(?:DEFINED)/i , /^(?:DELIMITED)/i , /^(?:DEPENDENCY)/i , /^(?:DESC)/i , /^(?:DIRECTORY)/i , /^(?:DISABLE)/i , /^(?:DISTRIBUTE)/i , /^(?:DOUBLE\s+PRECISION)/i , /^(?:ESCAPED)/i , /^(?:ENABLE)/i , /^(?:EXCHANGE)/i , /^(?:EXPLAIN)/i , /^(?:EXPORT)/i , /^(?:FIELDS)/i , /^(?:FILE)/i , /^(?:FILEFORMAT)/i , /^(?:FIRST)/i , /^(?:FORMAT)/i , /^(?:FORMATTED)/i , /^(?:FUNCTION)/i , /^(?:FUNCTIONS)/i , /^(?:HOUR)/i , /^(?:IDXPROPERTIES)/i , /^(?:INDEX)/i , /^(?:INDEXES)/i , /^(?:INPATH)/i , /^(?:INPUTFORMAT)/i , /^(?:ITEMS)/i , /^(?:JAR)/i , /^(?:KEY)/i , /^(?:KEYS)/i , /^(?:LINES)/i , /^(?:LOAD)/i , /^(?:LOCATION)/i , /^(?:LOCK)/i , /^(?:LOCKS)/i , /^(?:MATCHED)/i , /^(?:MERGE)/i , /^(?:METADATA)/i , /^(?:MINUTE)/i , /^(?:MONTH)/i , /^(?:MSCK)/i , /^(?:NORELY)/i , /^(?:NOSCAN)/i , /^(?:NOVALIDATE)/i , /^(?:NO_DROP)/i , /^(?:OFFLINE)/i , /^(?:ORC)/i , /^(?:OUTPUTFORMAT)/i , /^(?:OVERWRITE)/i , /^(?:OVERWRITE\s+DIRECTORY)/i , /^(?:OWNER)/i , /^(?:PARQUET)/i , /^(?:PARTITIONED)/i , /^(?:PARTITIONS)/i , /^(?:PERCENT)/i , /^(?:PRIVILEGES)/i , /^(?:PURGE)/i , /^(?:QUARTER)/i , /^(?:RCFILE)/i , /^(?:REBUILD)/i , /^(?:RELOAD)/i , /^(?:RELY)/i , /^(?:REPAIR)/i , /^(?:REPLICATION)/i , /^(?:RECOVER)/i , /^(?:RENAME)/i , /^(?:REPLACE)/i , /^(?:RESTRICT)/i , /^(?:ROLE)/i , /^(?:ROLES)/i , /^(?:SECOND)/i , /^(?:SCHEMA)/i , /^(?:SCHEMAS)/i , /^(?:SEQUENCEFILE)/i , /^(?:SERDE)/i , /^(?:SERDEPROPERTIES)/i , /^(?:SETS)/i , /^(?:SHOW)/i , /^(?:SHOW_DATABASE)/i , /^(?:SKEWED)/i , /^(?:SKEWED LOCATION)/i , /^(?:SORT)/i , /^(?:SORTED)/i , /^(?:STATISTICS)/i , /^(?:STORED)/i , /^(?:STORED\s+AS\s+DIRECTORIES)/i , /^(?:STRING)/i , /^(?:STRUCT)/i , /^(?:TABLES)/i , /^(?:TABLESAMPLE)/i , /^(?:TBLPROPERTIES)/i , /^(?:TEMPORARY)/i , /^(?:TERMINATED)/i , /^(?:TEXTFILE)/i , /^(?:TINYINT)/i , /^(?:TOUCH)/i , /^(?:TRANSACTIONS)/i , /^(?:UNARCHIVE)/i , /^(?:UNIONTYPE)/i , /^(?:USE)/i , /^(?:VIEW)/i , /^(?:WAIT)/i , /^(?:WEEK)/i , /^(?:WINDOW)/i , /^(?:YEAR)/i , /^(?:\.)/i , /^(?:\[)/i , /^(?:\])/i , /^(?:ADD)/i , /^(?:AGGREGATE)/i , /^(?:AVRO)/i , /^(?:CACHED)/i , /^(?:CASCADE)/i , /^(?:CHANGE)/i , /^(?:CLOSE_FN)/i , /^(?:COLUMN)/i , /^(?:COLUMNS)/i , /^(?:COMMENT)/i , /^(?:COMPUTE)/i , /^(?:CREATE)/i , /^(?:DATA)/i , /^(?:DATABASES)/i , /^(?:DELETE)/i , /^(?:DELIMITED)/i , /^(?:DESCRIBE)/i , /^(?:ESCAPED)/i , /^(?:EXPLAIN)/i , /^(?:EXTERNAL)/i , /^(?:EXTENDED)/i , /^(?:FIELDS)/i , /^(?:FILEFORMAT)/i , /^(?:FILES)/i , /^(?:FINALIZE_FN)/i , /^(?:FIRST)/i , /^(?:FORMAT)/i , /^(?:FORMATTED)/i , /^(?:FUNCTION)/i , /^(?:FUNCTIONS)/i , /^(?:GROUP)/i , /^(?:HASH)/i , /^(?:ILIKE)/i , /^(?:INCREMENTAL)/i , /^(?:INSERT)/i , /^(?:INTERVAL)/i , /^(?:INTERMEDIATE)/i , /^(?:INIT_FN)/i , /^(?:INVALIDATE)/i , /^(?:INPATH)/i , /^(?:IREGEXP)/i , /^(?:KEY)/i , /^(?:KUDU)/i , /^(?:LAST)/i , /^(?:LIKE\s+PARQUET)/i , /^(?:LIMIT)/i , /^(?:LINES)/i , /^(?:LOAD)/i , /^(?:LOCATION)/i , /^(?:MERGE_FN)/i , /^(?:METADATA)/i , /^(?:NULLS)/i , /^(?:OFFSET)/i , /^(?:ORC)/i , /^(?:OVERWRITE)/i , /^(?:PARQUET)/i , /^(?:PARTITIONED)/i , /^(?:PARTITIONS)/i , /^(?:PREPARE_FN)/i , /^(?:PRIMARY)/i , /^(?:RCFILE)/i , /^(?:RANGE)/i , /^(?:REAL)/i , /^(?:REFRESH)/i , /^(?:RENAME)/i , /^(?:REPEATABLE)/i , /^(?:REPLACE)/i , /^(?:REPLICATION)/i , /^(?:RESTRICT)/i , /^(?:RETURNS)/i , /^(?:REVOKE)/i , /^(?:SEQUENCEFILE)/i , / ^ ( ? : S E R D E P
conditions : { "hdfs" : { "rules" : [ 427 , 428 , 429 , 430 , 431 , 432 , 476 ] , "inclusive" : false } , "doubleQuotedValue" : { "rules" : [ 469 , 470 , 479 ] , "inclusive" : false } , "singleQuotedValue" : { "rules" : [ 466 , 467 , 478 ] , "inclusive" : false } , "backtickedValue" : { "rules" : [ 463 , 464 , 477 ] , "inclusive" : false } , "between" : { "rules" : [ 0 , 1 , 2 , 3 , 4 , 297 , 298 , 299 , 300 , 301 , 302 , 303 , 304 , 305 , 306 , 307 , 308 , 309 , 310 , 311 , 312 , 313 , 314 , 315 , 316 , 317 , 318 , 319 , 320 , 321 , 322 , 323 , 324 , 325 , 326 , 327 , 328 , 329 , 330 , 331 , 332 , 333 , 334 , 335 , 336 , 337 , 338 , 339 , 340 , 341 , 342 , 343 , 344 , 345 , 346 , 347 , 348 , 349 , 350 , 351 , 352 , 353 , 354 , 355 , 356 , 357 , 358 , 359 , 360 , 361 , 362 , 363 , 364 , 365 , 366 , 367 , 368 , 369 , 370 , 371 , 372 , 373 , 374 , 375 , 376 , 377 , 378 , 379 , 380 , 381 , 382 , 383 , 384 , 385 , 386 , 387 , 388 , 389 , 390 , 391 , 392 , 410 , 411 , 412 , 413 , 414 , 415 , 416 , 417 , 423 , 424 , 425 , 426 , 433 , 434 , 435 , 436 , 437 , 438 , 439 , 440 , 441 , 442 , 443 , 444 , 445 , 446 , 447 , 448 , 449 , 450 , 451 , 452 , 453 , 454 , 455 , 456 , 457 , 458 , 459 , 460 , 461 , 462 , 465 , 468 , 471 , 472 , 473 , 480 ] , "inclusive" : true } , "hive" : { "rules" : [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 , 96 , 97 , 98 , 99 , 100 , 101 , 102 , 103 , 104 , 105 , 106 , 107 , 108 , 109 , 110 , 111 , 112 , 113 , 114 , 115 , 116 , 117 , 118 , 119 , 120 , 121 , 122 , 123 , 124 , 125 , 126 , 127 , 128 , 129 , 130 , 131 , 132 , 133 , 134 , 135 , 136 , 137 , 138 , 139 , 140 , 141 , 142 , 143 , 144 , 145 , 146 , 147 , 148 , 149 , 150 , 151 , 152 , 153 , 154 , 155 , 156 , 157 , 158 , 159 , 160 , 161 , 162 , 163 , 164 , 165 , 166 , 167 , 168 , 169 , 170 , 171 , 172 , 173 , 174 , 175 , 176 , 177 , 178 , 179 , 180 , 181 , 298 , 299 , 300 , 301 , 302 , 303 , 304 , 305 , 306 , 307 , 308 , 309 , 310 , 311 , 312 , 313 , 314 , 315 , 316 , 317 , 318 , 319 , 320 , 321 , 322 , 323 , 324 , 325 , 326 , 327 , 328 , 329 , 330 , 331 , 332 , 333 , 334 , 335 , 336 , 337 , 338 , 339 , 340 , 341 , 342 , 343 , 344 , 345 , 346 , 347 , 348 , 349 , 350 , 351 , 352 , 353 , 354 , 355 , 356 , 357 , 358 , 359 , 360 , 361 , 362 , 363 , 364 , 365 , 366 , 367 , 368 , 369 , 370 , 371 , 372 , 373 , 374 , 375 , 376 , 377 , 378 , 379 , 380 , 381 , 382 , 383 , 384 , 385 , 386 , 387 , 388 , 389 , 390 , 391 , 392 , 393 , 394 , 395 , 396 , 397 , 398 , 399 , 400 , 401 , 402 , 410 , 411 , 412 , 413 , 414 , 415 , 416 , 417 , 418 , 419 , 423 , 424 , 425 , 426 , 433 , 434 , 435 , 436 , 437 , 438 , 439 , 440 , 441 , 442 , 443 , 444 , 445 , 446 , 447 , 448 , 449 , 450 , 451 , 452 , 453 , 454 , 455 , 456 , 457 , 458 , 459 , 460 , 461 , 462 , 465 , 468 , 471 , 472 , 474 , 480 ] , "inclusive" : true } , "impala" : { "rules" : [ 0 , 1 , 2 , 3 , 4 , 182 , 183 , 184 , 185 , 186 , 187 , 188 , 189 , 190 , 191 , 192 , 193 , 194 , 195 , 196 , 197 , 198 , 199 , 200 , 201 , 202 , 203 , 204 , 205 , 206 , 207 , 208 , 209 , 210 , 211 , 212 , 213 , 214 , 215 , 216 , 217 , 218 , 219 , 220 , 221 , 222 , 223 , 224 , 225 , 226 , 227 , 228 , 229 , 230 , 231 , 232 , 233 , 234 , 235 , 236 , 237 , 238 , 239 , 240 , 241 , 242 , 243 , 244 , 245 , 246 , 247 , 248 , 249 , 250 , 251 , 252 , 253 , 254 , 255 , 256 , 257 , 258 , 259 , 260 , 261 , 262 , 263 , 264 , 265 , 266 , 267 , 268 , 269 , 270 , 271 , 272 , 273 , 274 , 275 , 276 , 277 , 278 , 279 , 280 , 281 , 282 , 283 , 284 , 285 , 286 , 287 , 288 , 289 , 290 , 291 , 292 , 293 , 294 , 295 , 296 , 298 , 299 , 300 , 301 , 302 , 303 , 304 , 305 , 306 , 307 , 308 , 309 , 310 , 311 , 312 , 313 , 314 , 315 , 316 , 317 , 318 , 319 , 320 , 321 , 322 , 323 , 324 , 325 , 326 , 327 , 328 , 329 , 330 , 331 , 332 , 333 , 334 , 335 , 336 , 337 , 338 , 339 , 340 , 341 , 342 , 343 , 344 , 345 , 346 , 347 , 348 , 349 , 350 , 351 , 352 , 353 , 354 , 355 , 356 , 357 , 358 , 359 , 360 , 361 , 362 , 363 , 364 , 365 , 366 , 367 , 368 , 369 , 370 , 371 , 372 , 373 , 374 , 375 , 376 , 377 , 378 , 379 , 380 , 381 , 382 , 383 , 384 , 385 , 386 , 387 , 388 , 389 , 390 , 391 , 392 , 403 , 404 , 405 , 406 , 407 , 408 , 409 , 410 , 411 , 412 , 413 , 414 , 415 , 416 , 417 , 420 , 421 , 422 , 423 , 424 , 425 , 426 , 433 , 434 , 435 , 436 , 437 , 438 , 439 , 440 , 441 , 442 , 443 , 444 , 445 , 446 , 447 , 448 , 449 , 450 , 451 , 452 , 453 , 454 , 455 , 456 , 457 , 458 , 459 , 460 , 461 , 462 , 465 , 468 , 471 , 472 , 475 , 480 ] , "inclusive" : true } , "INITIAL" : { "rules" : [ 0 , 1 , 2 , 3 , 4 , 298 , 299 , 300 , 301 , 302 , 303 , 304 , 305 , 306 , 307 , 308 , 309 , 310 , 311 , 312 , 313 , 314 , 315 , 316 , 317 , 318 , 319 , 320 , 321 , 322 , 323 , 324 , 325 , 326 , 327 , 328 , 329 , 330 , 331 , 332 , 333 , 334 , 335 , 336 , 337 , 338 , 339 , 340 , 341 , 342 , 343 , 344 , 345 , 346 , 347 , 348 , 349 , 350 , 351 , 352 , 353 , 354 , 355 , 356 , 357 , 358 , 359 , 360 , 361 , 362 , 363 , 364 , 365 , 366 , 367 , 368 , 369 , 370 , 371 , 372 , 373 , 374 , 375 , 376 , 377 , 378 , 379 , 380 , 381 , 382 , 383 , 384 , 385 , 386 , 387 , 388 , 389 , 390 , 391 , 392 , 410 , 411 , 412 , 413 , 414 , 415 , 416 , 417 , 423 , 424 , 425 , 426 , 433 , 434 , 435 , 436 , 437 , 438 , 439 , 440 , 441 , 442 , 443 , 444 , 445 , 446 , 447 , 448 , 449 , 450 , 451 , 452 , 453 , 454 , 455 , 456 , 457 , 458 , 459 , 460 , 461 , 462 , 465 , 468 , 471 , 472 , 480 ] , "inclusive" : true } }
} ) ;
return lexer ;
} ) ( ) ;
parser . lexer = lexer ;
function Parser ( ) {
this . yy = { } ;
}
Parser . prototype = parser ; parser . Parser = Parser ;
return new Parser ;
} ) ( ) ;
if ( typeof require !== 'undefined' && typeof exports !== 'undefined' ) {
exports . parser = sqlAutocompleteParser ;
exports . Parser = sqlAutocompleteParser . Parser ;
exports . parse = function ( ) { return sqlAutocompleteParser . parse . apply ( sqlAutocompleteParser , arguments ) ; } ;
exports . main = function commonjsMain ( args ) {
if ( ! args [ 1 ] ) {
console . log ( 'Usage: ' + args [ 0 ] + ' FILE' ) ;
process . exit ( 1 ) ;
}
var source = require ( 'fs' ) . readFileSync ( require ( 'path' ) . normalize ( args [ 1 ] ) , "utf8" ) ;
return exports . parser . parse ( source ) ;
} ;
if ( typeof module !== 'undefined' && require . main === module ) {
exports . main ( process . argv . slice ( 1 ) ) ;
}
}