Browse Source

HUE-4580 [editor] The new autocompleter should support ANALYZE TABLE

Johan Ahlen 9 years ago
parent
commit
3f5e1e022d

+ 7 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql.jisonlex

@@ -40,6 +40,7 @@
 <hive>'DESCRIBE'                           { determineCase(yytext); return '<hive>DESCRIBE'; }
 <hive>'DESCRIBE'                           { determineCase(yytext); return '<hive>DESCRIBE'; }
 <hive>'EXTENDED'                           { return '<hive>EXTENDED'; }
 <hive>'EXTENDED'                           { return '<hive>EXTENDED'; }
 <hive>'EXTERNAL'                           { return '<hive>EXTERNAL'; }
 <hive>'EXTERNAL'                           { return '<hive>EXTERNAL'; }
+<hive>'FOR'                                { return '<hive>FOR'; }
 <hive>'FUNCTION'                           { return '<hive>FUNCTION'; }
 <hive>'FUNCTION'                           { return '<hive>FUNCTION'; }
 <hive>'GRANT'                              { return '<hive>GRANT'; }
 <hive>'GRANT'                              { return '<hive>GRANT'; }
 <hive>'LATERAL'                            { return '<hive>LATERAL'; }
 <hive>'LATERAL'                            { return '<hive>LATERAL'; }
@@ -52,10 +53,12 @@
 // Non-reserved Keywords
 // Non-reserved Keywords
 <hive>'ADD'                                { return '<hive>ADD'; }
 <hive>'ADD'                                { return '<hive>ADD'; }
 <hive>'AFTER'                              { return '<hive>AFTER'; }
 <hive>'AFTER'                              { return '<hive>AFTER'; }
+<hive>'ANALYZE'                            { determineCase(yytext); return '<hive>ANALYZE'; }
 <hive>'ARCHIVE'                            { return '<hive>ARCHIVE'; }
 <hive>'ARCHIVE'                            { return '<hive>ARCHIVE'; }
 <hive>'ASC'                                { return '<hive>ASC'; }
 <hive>'ASC'                                { return '<hive>ASC'; }
 <hive>'AVRO'                               { return '<hive>AVRO'; }
 <hive>'AVRO'                               { return '<hive>AVRO'; }
 <hive>'BUCKETS'                            { return '<hive>BUCKETS'; }
 <hive>'BUCKETS'                            { return '<hive>BUCKETS'; }
+<hive>'CACHE'                              { return '<hive>CACHE'; }
 <hive>'CASCADE'                            { return '<hive>CASCADE'; }
 <hive>'CASCADE'                            { return '<hive>CASCADE'; }
 <hive>'CHANGE'                             { return '<hive>CHANGE'; }
 <hive>'CHANGE'                             { return '<hive>CHANGE'; }
 <hive>'CLUSTER'                            { return '<hive>CLUSTER'; }
 <hive>'CLUSTER'                            { return '<hive>CLUSTER'; }
@@ -65,6 +68,7 @@
 <hive>'COMMENT'                            { return '<hive>COMMENT'; }
 <hive>'COMMENT'                            { return '<hive>COMMENT'; }
 <hive>'COMPACT'                            { return '<hive>COMPACT'; }
 <hive>'COMPACT'                            { return '<hive>COMPACT'; }
 <hive>'COMPACTIONS'                        { return '<hive>COMPACTIONS'; }
 <hive>'COMPACTIONS'                        { return '<hive>COMPACTIONS'; }
+<hive>'COMPUTE'                            { return '<hive>COMPUTE'; }
 <hive>'CONCATENATE'                        { return '<hive>CONCATENATE'; }
 <hive>'CONCATENATE'                        { return '<hive>CONCATENATE'; }
 <hive>'DATA'                               { return '<hive>DATA'; }
 <hive>'DATA'                               { return '<hive>DATA'; }
 <hive>'DATABASES'                          { return '<hive>DATABASES'; }
 <hive>'DATABASES'                          { return '<hive>DATABASES'; }
@@ -98,7 +102,9 @@
 <hive>'LOAD'                               { determineCase(yytext); return '<hive>LOAD'; }
 <hive>'LOAD'                               { determineCase(yytext); return '<hive>LOAD'; }
 <hive>'LOCATION'                           { this.begin('hdfs'); return '<hive>LOCATION'; }
 <hive>'LOCATION'                           { this.begin('hdfs'); return '<hive>LOCATION'; }
 <hive>'LOCKS'                              { return '<hive>LOCKS'; }
 <hive>'LOCKS'                              { return '<hive>LOCKS'; }
+<hive>'METADATA'                           { return '<hive>METADATA'; }
 <hive>'MSCK'                               { return '<hive>MSCK'; }
 <hive>'MSCK'                               { return '<hive>MSCK'; }
+<hive>'NOSCAN'                             { return '<hive>NOSCAN'; }
 <hive>'NO_DROP'                            { return '<hive>NO_DROP'; }
 <hive>'NO_DROP'                            { return '<hive>NO_DROP'; }
 <hive>'OFFLINE'                            { return '<hive>OFFLINE'; }
 <hive>'OFFLINE'                            { return '<hive>OFFLINE'; }
 <hive>'ORC'                                { return '<hive>ORC'; }
 <hive>'ORC'                                { return '<hive>ORC'; }
@@ -127,6 +133,7 @@
 <hive>'SKEWED LOCATION'                    { return '<hive>SKEWED_LOCATION'; } // Hack to prevent hdfs lexer state
 <hive>'SKEWED LOCATION'                    { return '<hive>SKEWED_LOCATION'; } // Hack to prevent hdfs lexer state
 <hive>'SORT'                               { return '<hive>SORT'; }
 <hive>'SORT'                               { return '<hive>SORT'; }
 <hive>'SORTED'                             { return '<hive>SORTED'; }
 <hive>'SORTED'                             { return '<hive>SORTED'; }
+<hive>'STATISTICS'                         { return '<hive>STATISTICS'; }
 <hive>'STORED'                             { return '<hive>STORED'; }
 <hive>'STORED'                             { return '<hive>STORED'; }
 <hive>STORED[ \t\n]+AS[ \t\n]+DIRECTORIES  { return '<hive>STORED_AS_DIRECTORIES'; }
 <hive>STORED[ \t\n]+AS[ \t\n]+DIRECTORIES  { return '<hive>STORED_AS_DIRECTORIES'; }
 <hive>'STRING'                             { return '<hive>STRING'; }
 <hive>'STRING'                             { return '<hive>STRING'; }

+ 125 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql_analyze.jison

@@ -0,0 +1,125 @@
+// 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.
+
+DataDefinition
+ : AnalyzeStatement
+ ;
+
+DataDefinition_EDIT
+ : AnalyzeStatement_EDIT
+ ;
+
+AnalyzeStatement
+ : AnalyzeTableLeftPart '<hive>COMPUTE' '<hive>STATISTICS' OptionalForColumns OptionalCacheMetadata OptionalNoscan
+ ;
+
+AnalyzeStatement_EDIT
+ : AnalyzeTableLeftPart_EDIT
+ | AnalyzeTableLeftPart_EDIT '<hive>COMPUTE' '<hive>STATISTICS' OptionalForColumns OptionalCacheMetadata OptionalNoscan
+ | AnalyzeTableLeftPart 'CURSOR'
+   {
+     if (!$1.hasPartition) {
+       suggestKeywords([{ value: 'PARTITION', weight: 2 }, { value: 'COMPUTE STATISTICS', weight: 1 }]);
+     } else {
+       suggestKeywords(['COMPUTE STATISTICS']);
+     }
+   }
+ | AnalyzeTableLeftPart '<hive>COMPUTE' 'CURSOR'
+   {
+     suggestKeywords(['STATISTICS']);
+   }
+ | AnalyzeTableLeftPart '<hive>COMPUTE' '<hive>STATISTICS' 'CURSOR' OptionalForColumns OptionalCacheMetadata OptionalNoscan
+   {
+     suggestKeywords(getKeywordsForOptionalsLR([$5, $6, $7], [{ value: 'FOR COLUMNS', weight: 3 }, { value: 'CACHE METADATA', weight: 2 }, { value: 'NOSCAN', weight: 1 }]));
+   }
+ | AnalyzeTableLeftPart '<hive>COMPUTE' '<hive>STATISTICS' ForColumns 'CURSOR' OptionalCacheMetadata OptionalNoscan
+   {
+     suggestKeywords(getKeywordsForOptionalsLR([$6, $7], [{ value: 'CACHE METADATA', weight: 2 }, { value: 'NOSCAN', weight: 1 }]));
+   }
+ | AnalyzeTableLeftPart '<hive>COMPUTE' '<hive>STATISTICS' OptionalForColumns CacheMetadata 'CURSOR' OptionalNoscan
+   {
+     suggestKeywords(getKeywordsForOptionalsLR([$7], [{ value: 'NOSCAN', weight: 1 }]));
+   }
+ | AnalyzeTableLeftPart '<hive>COMPUTE' '<hive>STATISTICS' ForColumns_EDIT OptionalCacheMetadata OptionalNoscan
+ | AnalyzeTableLeftPart '<hive>COMPUTE' '<hive>STATISTICS' OptionalForColumns CacheMetadata_EDIT OptionalNoscan
+ ;
+
+AnalyzeTableLeftPart
+ : '<hive>ANALYZE' '<hive>TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec
+   {
+     addTablePrimary($3);
+     $$ = { hasPartition: $4 };
+   }
+ ;
+
+AnalyzeTableLeftPart_EDIT
+ : '<hive>ANALYZE' 'CURSOR'
+   {
+     suggestKeywords(['TABLE']);
+   }
+ | '<hive>ANALYZE' '<hive>TABLE' 'CURSOR'
+   {
+     suggestTables({ onlyTables: true });
+     suggestDatabases({ appendDot: true });
+   }
+ | '<hive>ANALYZE' '<hive>TABLE' SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec
+   {
+     if (parser.yy.result.suggestTables) {
+       parser.yy.result.suggestTables.onlyTables = true;
+     }
+   }
+ | '<hive>ANALYZE' '<hive>TABLE' SchemaQualifiedTableIdentifier OptionalPartitionSpec_EDIT
+   {
+     addTablePrimary($3);
+   }
+ ;
+
+OptionalForColumns
+ :
+ | ForColumns
+ ;
+
+ForColumns
+ : '<hive>FOR' '<hive>COLUMNS'
+ ;
+
+ForColumns_EDIT
+ : '<hive>FOR' 'CURSOR'
+   {
+     suggestKeywords(['COLUMNS']);
+   }
+ ;
+
+OptionalCacheMetadata
+ :
+ | CacheMetadata
+ ;
+
+CacheMetadata
+ : '<hive>CACHE' '<hive>METADATA'
+ ;
+
+CacheMetadata_EDIT
+ : '<hive>CACHE' 'CURSOR'
+   {
+     suggestKeywords(['METADATA']);
+   }
+ ;
+
+OptionalNoscan
+ :
+ | '<hive>NOSCAN'
+ ;

+ 8 - 2
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql_main.jison

@@ -30,10 +30,12 @@
 
 
 NonReservedKeyword
 NonReservedKeyword
  : '<hive>ADD'
  : '<hive>ADD'
- | '<hive>AVRO'
  | '<hive>AFTER'
  | '<hive>AFTER'
+ | '<hive>ANALYZE'
  | '<hive>ARCHIVE'
  | '<hive>ARCHIVE'
+ | '<hive>AVRO'
  | '<hive>BUCKETS'
  | '<hive>BUCKETS'
+ | '<hive>CACHE'
  | '<hive>CASCADE'
  | '<hive>CASCADE'
  | '<hive>CHANGE'
  | '<hive>CHANGE'
  | '<hive>CLUSTERED'
  | '<hive>CLUSTERED'
@@ -42,6 +44,7 @@ NonReservedKeyword
  | '<hive>COMMENT'
  | '<hive>COMMENT'
  | '<hive>COMPACT'
  | '<hive>COMPACT'
  | '<hive>COMPACTIONS'
  | '<hive>COMPACTIONS'
+ | '<hive>COMPUTE'
  | '<hive>CONCATENATE'
  | '<hive>CONCATENATE'
  | '<hive>DATA'
  | '<hive>DATA'
  | '<hive>DATABASES'
  | '<hive>DATABASES'
@@ -68,7 +71,9 @@ NonReservedKeyword
  | '<hive>LOAD'
  | '<hive>LOAD'
  | '<hive>LOCATION'
  | '<hive>LOCATION'
  | '<hive>LOCKS'
  | '<hive>LOCKS'
+ | '<hive>METADATA'
  | '<hive>MSCK'
  | '<hive>MSCK'
+ | '<hive>NOSCAN'
  | '<hive>NO_DROP'
  | '<hive>NO_DROP'
  | '<hive>OFFLINE'
  | '<hive>OFFLINE'
  | '<hive>ORC'
  | '<hive>ORC'
@@ -94,6 +99,7 @@ NonReservedKeyword
  | '<hive>SHOW'
  | '<hive>SHOW'
  | '<hive>SKEWED'
  | '<hive>SKEWED'
  | '<hive>SORTED'
  | '<hive>SORTED'
+ | '<hive>STATISTICS'
  | '<hive>STORED'
  | '<hive>STORED'
  | '<hive>STRING'
  | '<hive>STRING'
  | '<hive>STRUCT'
  | '<hive>STRUCT'
@@ -193,7 +199,7 @@ SqlStatement_EDIT
 // This is a work-around for error handling when a statement starts with some token that the parser can understand but
 // This is a work-around for error handling when a statement starts with some token that the parser can understand but
 // it's not a valid statement (see ErrorStatement). It contains everything except valid starting tokens ('SELECT', 'USE' etc.)
 // it's not a valid statement (see ErrorStatement). It contains everything except valid starting tokens ('SELECT', 'USE' etc.)
 NonStartingToken
 NonStartingToken
- : '<hive>ALL' | '<hive>ARRAY' | '<hive>AVRO' | '<hive>BINARY' | '<hive>BUCKETS' | '<hive>AS' | '<hive>CLUSTER' | '<hive>CLUSTERED' | '<hive>COLLECTION' | '<hive>CONF' | '<hive>CROSS' | '<hive>CURRENT' | '<hive>DATE' | '<hive>DEFERRED' | '<hive>DELIMITED' | '<hive>DISTRIBUTE' | '<hive>DISTRIBUTED' | '<hive>ESCAPED' | '<hive>EXTENDED' | '<hive>EXTERNAL' | '<hive>FIELDS' | '<hive>FILE' | '<hive>FORMAT' | '<hive>FUNCTION' | '<hive>GRANT' | '<hive>IDXPROPERTIES' | '<hive>LATERAL' | '<hive>MACRO' | '<hive>PARTITION' | '<hive>REBUILD' | '<hive>REPAIR' |'<hive>TABLE' | '<hive>USER' | '<hive>ASC' | '<hive>COLUMNS' | '<hive>COMMENT' | '<hive>COMPACTIONS' | '<hive>DATA' | '<hive>DATABASES' | '<hive>DEFINED' | '<hive>DESC' | '<hive>STORED_AS_DIRECTORIES' | '<hive>FORMATTED' | '<hive>FUNCTIONS' | '<hive>INDEX' | '<hive>INDEXES' | '<hive>INPATH' | '<hive>INPUTFORMAT' | '<hive>ITEMS' | '<hive>JAR' | '<hive>LIMIT' | '<hive>KEYS' | '<hive>LINES' | '<hive>LOCATION' | '<hive>LOCKS' | '<hive>MAP' | '<hive>ORC' | '<hive>OUTPUTFORMAT' | '<hive>PARQUET' | '<hive>PARTITIONED' | '<hive>PARTITIONS' | '<hive>RCFILE' | '<hive>ROLE' | '<hive>ROLES' | '<hive>SCHEMA' | '<hive>SCHEMAS' | '<hive>SEQUENCEFILE' | '<hive>SERDE' | '<hive>SERDEPROPERTIES' | '<hive>SKEWED' | '<hive>SORTED' | '<hive>STORED' | '<hive>STRING' | '<hive>STRUCT' | '<hive>TABLES' | '<hive>TBLPROPERTIES' | '<hive>TEMPORARY' | '<hive>TERMINATED' | '<hive>TEXTFILE' | '<hive>TINYINT' | '<hive>TRANSACTIONS' | '<hive>UNIONTYPE' | '<hive>USING' | '<hive>VIEW' | '<hive>WINDOW' | '<hive>.' | '<hive>[' | '<hive>]'
+ : '<hive>ALL' | '<hive>ARRAY' | '<hive>AS' | '<hive>AVRO' | '<hive>BINARY' | '<hive>BUCKETS' | '<hive>CACHE' | '<hive>CLUSTER' | '<hive>CLUSTERED' | '<hive>COLLECTION' | '<hive>COMPUTE' | '<hive>CONF' | '<hive>CROSS' | '<hive>CURRENT' | '<hive>DATE' | '<hive>DEFERRED' | '<hive>DELIMITED' | '<hive>DISTRIBUTE' | '<hive>DISTRIBUTED' | '<hive>ESCAPED' | '<hive>EXTENDED' | '<hive>EXTERNAL' | '<hive>FIELDS' | '<hive>FILE' | '<hive>FOR' | '<hive>FORMAT' | '<hive>FUNCTION' | '<hive>GRANT' | '<hive>IDXPROPERTIES' | '<hive>LATERAL' | '<hive>MACRO' | '<hive>PARTITION' | '<hive>REBUILD' | '<hive>REPAIR' | '<hive>STATISTICS' | '<hive>TABLE' | '<hive>USER' | '<hive>ASC' | '<hive>COLUMNS' | '<hive>COMMENT' | '<hive>COMPACTIONS' | '<hive>DATA' | '<hive>DATABASES' | '<hive>DEFINED' | '<hive>DESC' |  '<hive>FORMATTED' | '<hive>FUNCTIONS' | '<hive>INDEX' | '<hive>INDEXES' | '<hive>INPATH' | '<hive>INPUTFORMAT' | '<hive>ITEMS' | '<hive>JAR' | '<hive>KEYS' | '<hive>LINES' | '<hive>LIMIT' | '<hive>LOCATION' | '<hive>LOCKS' | '<hive>MAP' | '<hive>METADATA' | '<hive>NOSCAN' | '<hive>ORC' | '<hive>OUTPUTFORMAT' | '<hive>PARQUET' | '<hive>PARTITIONED' | '<hive>PARTITIONS' | '<hive>RCFILE' | '<hive>ROLE' | '<hive>ROLES' | '<hive>SCHEMA' | '<hive>SCHEMAS' | '<hive>SEQUENCEFILE' | '<hive>SERDE' | '<hive>SERDEPROPERTIES' | '<hive>SKEWED' | '<hive>SORTED' | '<hive>STORED' | '<hive>STORED_AS_DIRECTORIES' | '<hive>STRING' | '<hive>STRUCT' | '<hive>TABLES' | '<hive>TBLPROPERTIES' | '<hive>TEMPORARY' | '<hive>TERMINATED' | '<hive>TEXTFILE' | '<hive>TINYINT' | '<hive>TRANSACTIONS' | '<hive>UNIONTYPE' | '<hive>USING' | '<hive>VIEW' | '<hive>WINDOW' | '<hive>.' | '<hive>[' | '<hive>]'
  | '<impala>AGGREGATE' | '<impala>AVRO' | '<impala>CACHED' | '<impala>CLOSE_FN' | '<impala>COLUMN' | '<impala>COMMENT' | '<impala>DATA' | '<impala>DATABASES' | '<impala>DELIMITED' | '<impala>ESCAPED' | '<impala>EXTERNAL' | '<impala>FIELDS' | '<impala>FINALIZE_FN' | '<impala>FIRST' | '<impala>FORMAT' | '<impala>FORMATTED' | '<impala>FUNCTION' | '<impala>FUNCTIONS' | '<impala>GROUP' | '<impala>INCREMENTAL' | '<impala>INTERVAL' | '<impala>INIT_FN' | '<impala>INPATH' | '<impala>LAST' | '<impala>LINES' | '<impala>LOCATION' | '<impala>MERGE_FN' | '<impala>NULLS' | '<impala>PARTITIONS' | '<impala>PREPARE_FN' | '<impala>REAL' | '<impala>RETURNS' | '<impala>SCHEMAS' | '<impala>SERIALIZE_FN' | '<impala>STATS' | '<impala>SYMBOL' | '<impala>TABLE' | '<impala>TABLES' | '<impala>USING' | '<impala>ANALYTIC' | '<impala>ANTI' | '<impala>CURRENT' | '<impala>GRANT' | '<impala>PARQUET' | '<impala>PARTITIONED' | '<impala>RCFILE' | '<impala>ROLE' | '<impala>ROLES' | '<impala>SEQUENCEFILE' | '<impala>SERDEPROPERTIES' | '<impala>SHUFFLE' | '<impala>STORED' | '<impala>TBLPROPERTIES' | '<impala>TERMINATED' | '<impala>TEXTFILE' | '<impala>UPDATE_FN' | '<impala>BROADCAST' | '<impala>...' | '<impala>.' | '<impala>[' | '<impala>]'
  | '<impala>AGGREGATE' | '<impala>AVRO' | '<impala>CACHED' | '<impala>CLOSE_FN' | '<impala>COLUMN' | '<impala>COMMENT' | '<impala>DATA' | '<impala>DATABASES' | '<impala>DELIMITED' | '<impala>ESCAPED' | '<impala>EXTERNAL' | '<impala>FIELDS' | '<impala>FINALIZE_FN' | '<impala>FIRST' | '<impala>FORMAT' | '<impala>FORMATTED' | '<impala>FUNCTION' | '<impala>FUNCTIONS' | '<impala>GROUP' | '<impala>INCREMENTAL' | '<impala>INTERVAL' | '<impala>INIT_FN' | '<impala>INPATH' | '<impala>LAST' | '<impala>LINES' | '<impala>LOCATION' | '<impala>MERGE_FN' | '<impala>NULLS' | '<impala>PARTITIONS' | '<impala>PREPARE_FN' | '<impala>REAL' | '<impala>RETURNS' | '<impala>SCHEMAS' | '<impala>SERIALIZE_FN' | '<impala>STATS' | '<impala>SYMBOL' | '<impala>TABLE' | '<impala>TABLES' | '<impala>USING' | '<impala>ANALYTIC' | '<impala>ANTI' | '<impala>CURRENT' | '<impala>GRANT' | '<impala>PARQUET' | '<impala>PARTITIONED' | '<impala>RCFILE' | '<impala>ROLE' | '<impala>ROLES' | '<impala>SEQUENCEFILE' | '<impala>SERDEPROPERTIES' | '<impala>SHUFFLE' | '<impala>STORED' | '<impala>TBLPROPERTIES' | '<impala>TERMINATED' | '<impala>TEXTFILE' | '<impala>UPDATE_FN' | '<impala>BROADCAST' | '<impala>...' | '<impala>.' | '<impala>[' | '<impala>]'
  | 'ALL' | 'AS' | 'ASC' | 'BETWEEN' | 'BIGINT' | 'BOOLEAN' | 'BY' | 'CASE' | 'CHAR' | 'CURRENT' | 'DATABASE' | 'DECIMAL' | 'DISTINCT' | 'DOUBLE' | 'DESC' | 'ELSE' | 'END' | 'EXISTS' | 'FALSE' | 'FLOAT' | 'FOLLOWING' | 'FROM' | 'FULL' | 'GROUP' | 'GROUPING' | 'HAVING' | 'IF' | 'IN' | 'INNER' | 'INT' | 'INTO' | 'IS' | 'JOIN' | 'LEFT' | 'LIKE' | 'LIMIT' | 'NOT' | 'NULL' | 'ON' | 'ORDER' | 'OUTER' | 'OVER' | 'PARTITION' | 'PRECEDING' | 'RANGE' | 'REGEXP' | 'RIGHT' | 'RLIKE' | 'ROW' | 'ROWS' | 'SCHEMA' | 'SEMI' | 'SET' | 'SMALLINT' | 'STRING' | 'TABLE' | 'THEN' | 'TIMESTAMP' | 'TINYINT' | 'TRUE' | 'UNION' | 'VARCHAR' | 'WHEN' | 'WHERE' | 'WITH' | 'ROLE'
  | 'ALL' | 'AS' | 'ASC' | 'BETWEEN' | 'BIGINT' | 'BOOLEAN' | 'BY' | 'CASE' | 'CHAR' | 'CURRENT' | 'DATABASE' | 'DECIMAL' | 'DISTINCT' | 'DOUBLE' | 'DESC' | 'ELSE' | 'END' | 'EXISTS' | 'FALSE' | 'FLOAT' | 'FOLLOWING' | 'FROM' | 'FULL' | 'GROUP' | 'GROUPING' | 'HAVING' | 'IF' | 'IN' | 'INNER' | 'INT' | 'INTO' | 'IS' | 'JOIN' | 'LEFT' | 'LIKE' | 'LIMIT' | 'NOT' | 'NULL' | 'ON' | 'ORDER' | 'OUTER' | 'OVER' | 'PARTITION' | 'PRECEDING' | 'RANGE' | 'REGEXP' | 'RIGHT' | 'RLIKE' | 'ROW' | 'ROWS' | 'SCHEMA' | 'SEMI' | 'SET' | 'SMALLINT' | 'STRING' | 'TABLE' | 'THEN' | 'TIMESTAMP' | 'TINYINT' | 'TRUE' | 'UNION' | 'VARCHAR' | 'WHEN' | 'WHERE' | 'WITH' | 'ROLE'
  | 'AVG' | 'CAST' | 'COUNT' | 'MAX' | 'MIN' | 'STDDEV_POP' | 'STDDEV_SAMP' | 'SUM' | 'VARIANCE' | 'VAR_POP' | 'VAR_SAMP'
  | 'AVG' | 'CAST' | 'COUNT' | 'MAX' | 'MIN' | 'STDDEV_POP' | 'STDDEV_SAMP' | 'SUM' | 'VARIANCE' | 'VAR_POP' | 'VAR_SAMP'

File diff suppressed because it is too large
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sql.js


+ 12 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sql_support.js

@@ -616,6 +616,18 @@ var suggestFileFormats = function () {
   }
   }
 };
 };
 
 
+var getKeywordsForOptionalsLR = function (optionals, keywords) {
+  var result = [];
+  for (var i = 0; i < optionals.length; i++) {
+    if (!optionals[i]) {
+      result.push(keywords[i]);
+    } else {
+      break;
+    }
+  }
+  return result;
+};
+
 var suggestDdlAndDmlKeywords = function () {
 var suggestDdlAndDmlKeywords = function () {
   var keywords = ['ALTER', 'CREATE', 'DELETE', 'DESCRIBE', 'DROP', 'EXPLAIN', 'INSERT', 'REVOKE', 'SELECT', 'SET', 'SHOW', 'TRUNCATE', 'UPDATE', 'USE', 'WITH'];
   var keywords = ['ALTER', 'CREATE', 'DELETE', 'DESCRIBE', 'DROP', 'EXPLAIN', 'INSERT', 'REVOKE', 'SELECT', 'SET', 'SHOW', 'TRUNCATE', 'UPDATE', 'USE', 'WITH'];
 
 

+ 1 - 0
desktop/core/src/desktop/static/desktop/spec/autocomplete/sqlSpec.js

@@ -18,6 +18,7 @@ define([
   'desktop/js/autocomplete/sql',
   'desktop/js/autocomplete/sql',
   'desktop/spec/autocompleterTestUtils',
   'desktop/spec/autocompleterTestUtils',
   'desktop/spec/autocomplete/sqlSpecAlter',
   'desktop/spec/autocomplete/sqlSpecAlter',
+  'desktop/spec/autocomplete/sqlSpecAnalyze',
   'desktop/spec/autocomplete/sqlSpecCreate',
   'desktop/spec/autocomplete/sqlSpecCreate',
   'desktop/spec/autocomplete/sqlSpecDescribe',
   'desktop/spec/autocomplete/sqlSpecDescribe',
   'desktop/spec/autocomplete/sqlSpecDrop',
   'desktop/spec/autocomplete/sqlSpecDrop',

+ 256 - 0
desktop/core/src/desktop/static/desktop/spec/autocomplete/sqlSpecAnalyze.js

@@ -0,0 +1,256 @@
+// 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.
+define([
+  'knockout',
+  'desktop/js/autocomplete/sql',
+  'desktop/spec/autocompleterTestUtils'
+], function(ko, sql, testUtils) {
+
+  describe('sql.js ANALYZE statements', function() {
+
+    beforeAll(function () {
+      sql.yy.parseError = function (msg) {
+        throw Error(msg);
+      };
+      jasmine.addMatchers(testUtils.testDefinitionMatcher);
+    });
+
+    var assertAutoComplete = testUtils.assertAutocomplete;
+
+    describe('ANALYZE TABLE', function () {
+      it('should handle "ANALYZE TABLE boo.baa PARTITION (bla=1, boo=\'baa\') COMPUTE STATISTICS FOR COLUMNS CACHE METADATA NOSCAN;|"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE boo.baa PARTITION (bla=1, boo=\'baa\') COMPUTE STATISTICS FOR COLUMNS CACHE METADATA NOSCAN;',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          containsKeywords: ['SELECT'],
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false
+          }
+        });
+      });
+
+      it('should suggest keywords for "|"', function() {
+        assertAutoComplete({
+          beforeCursor: '',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          containsKeywords: ['ANALYZE'],
+          expectedResult: {
+            lowerCase: false
+          }
+        });
+      });
+
+      it('should suggest keywords for "analyze |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'analyze ',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          expectedResult: {
+            lowerCase: true,
+            suggestKeywords: ['TABLE']
+          }
+        });
+      });
+
+      it('should suggest tables for "ANALYZE TABLE |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE ',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          expectedResult: {
+            lowerCase: false,
+            suggestTables: { onlyTables: true },
+            suggestDatabases: { appendDot: true }
+          }
+        });
+      });
+
+      it('should suggest tables for "ANALYZE TABLE boo.|"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE boo.',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          expectedResult: {
+            lowerCase: false,
+            suggestTables: { database: 'boo', onlyTables: true }
+          }
+        });
+      });
+
+      it('should suggest keywords for "ANALYZE TABLE boo |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE boo ',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['PARTITION', 'COMPUTE STATISTICS']
+          }
+        });
+      });
+
+      it('should suggest keywords for "ANALYZE TABLE boo PARTITION (baa = 1) |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE boo PARTITION (baa = 1) ',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['COMPUTE STATISTICS']
+          }
+        });
+      });
+
+      it('should suggest keywords for "ANALYZE TABLE boo PARTITION (baa = 1) COMPUTE |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE boo PARTITION (baa = 1) COMPUTE ',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['STATISTICS']
+          }
+        });
+      });
+
+      it('should suggest keywords for "ANALYZE TABLE baa.boo COMPUTE STATISTICS |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE baa.boo COMPUTE STATISTICS ',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['FOR COLUMNS', 'CACHE METADATA', 'NOSCAN']
+          }
+        });
+      });
+
+      it('should suggest keywords for "ANALYZE TABLE baa.boo COMPUTE STATISTICS FOR |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE baa.boo COMPUTE STATISTICS FOR ',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['COLUMNS']
+          }
+        });
+      });
+
+      it('should suggest keywords for "ANALYZE TABLE baa.boo COMPUTE STATISTICS FOR COLUMNS |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE baa.boo COMPUTE STATISTICS FOR COLUMNS ',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['CACHE METADATA', 'NOSCAN']
+          }
+        });
+      });
+
+      it('should suggest keywords for "ANALYZE TABLE baa.boo COMPUTE STATISTICS FOR COLUMNS CACHE |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE baa.boo COMPUTE STATISTICS FOR COLUMNS CACHE ',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['METADATA']
+          }
+        });
+      });
+
+      it('should suggest keywords for "ANALYZE TABLE baa.boo COMPUTE STATISTICS FOR COLUMNS CACHE METADATA |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE baa.boo COMPUTE STATISTICS FOR COLUMNS CACHE METADATA ',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors:true,
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['NOSCAN']
+          }
+        });
+      });
+
+      it('should suggest keywords for "ANALYZE TABLE baa.boo COMPUTE STATISTICS | NOSCAN"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE baa.boo COMPUTE STATISTICS ',
+          afterCursor: ' NOSCAN',
+          dialect: 'hive',
+          noErrors:true,
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['FOR COLUMNS', 'CACHE METADATA']
+          }
+        });
+      });
+
+      it('should suggest keywords for "ANALYZE TABLE baa.boo COMPUTE STATISTICS CACHE | NOSCAN"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE baa.boo COMPUTE STATISTICS CACHE ',
+          afterCursor: ' NOSCAN',
+          dialect: 'hive',
+          noErrors:true,
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['METADATA']
+          }
+        });
+      });
+
+      it('should suggest keywords for "ANALYZE TABLE baa.boo COMPUTE STATISTICS FOR COLUMNS | NOSCAN"', function() {
+        assertAutoComplete({
+          beforeCursor: 'ANALYZE TABLE baa.boo COMPUTE STATISTICS FOR COLUMNS ',
+          afterCursor: ' NOSCAN',
+          dialect: 'hive',
+          noErrors:true,
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['CACHE METADATA']
+          }
+        });
+      });
+    });
+  });
+});

+ 1 - 1
tools/jison/hue-jison.sh

@@ -32,7 +32,7 @@ echo "%%" > sql_end.jison
 # With this all create tests will pass
 # With this all create tests will pass
 # cat sql_main.jison sql_create.jison sql_end.jison ../sql_support.js > sql.jison
 # cat sql_main.jison sql_create.jison sql_end.jison ../sql_support.js > sql.jison
 
 
-cat sql_main.jison sql_valueExpression.jison sql_alter.jison sql_create.jison sql_drop.jison sql_show.jison sql_update.jison sql_use.jison sql_end.jison ../sql_support.js > sql.jison
+cat sql_main.jison sql_valueExpression.jison sql_alter.jison sql_analyze.jison sql_create.jison sql_drop.jison sql_show.jison sql_update.jison sql_use.jison sql_end.jison ../sql_support.js > sql.jison
 
 
 jison sql.jison sql.jisonlex -m amd
 jison sql.jison sql.jisonlex -m amd
 cat license.txt sql.js > ../sql.js
 cat license.txt sql.js > ../sql.js

Some files were not shown because too many files changed in this diff