Przeglądaj źródła

HUE-4582 [editor] The new autocompleter should fully support LOAD

Johan Ahlen 9 lat temu
rodzic
commit
f89353d

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

@@ -46,6 +46,7 @@
 <hive>'GRANT'                              { return '<hive>GRANT'; }
 <hive>'GROUPING'                           { return '<hive>GROUPING'; }
 <hive>'LATERAL'                            { return '<hive>LATERAL'; }
+<hive>'LOCAL'                              { return '<hive>LOCAL'; }
 <hive>'MACRO'                              { return '<hive>MACRO'; }
 <hive>'MAP'                                { return '<hive>MAP'; }
 <hive>'NONE'                               { return '<hive>NONE'; }
@@ -116,6 +117,7 @@
 <hive>'OFFLINE'                            { return '<hive>OFFLINE'; }
 <hive>'ORC'                                { return '<hive>ORC'; }
 <hive>'OUTPUTFORMAT'                       { return '<hive>OUTPUTFORMAT'; }
+<hive>'OVERWRITE'                          { return '<hive>OVERWRITE'; }
 <hive>'PARQUET'                            { return '<hive>PARQUET'; }
 <hive>'PARTITIONED'                        { return '<hive>PARTITIONED'; }
 <hive>'PARTITIONS'                         { return '<hive>PARTITIONS'; }
@@ -203,6 +205,7 @@
 <impala>'MERGE_FN'                         { return '<impala>MERGE_FN'; }
 <impala>'NULLS'                            { return '<impala>NULLS'; }
 <impala>'OFFSET'                           { return '<impala>OFFSET'; }
+<impala>'OVERWRITE'                        { return '<impala>OVERWRITE'; }
 <impala>'PARQUET'                          { return '<impala>PARQUET'; }
 <impala>'PARTITIONED'                      { return '<impala>PARTITIONED'; }
 <impala>'PARTITIONS'                       { return '<impala>PARTITIONS'; }

+ 109 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql_load.jison

@@ -0,0 +1,109 @@
+// 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.
+
+DataManipulation
+ : LoadStatement
+ ;
+
+DataManipulation_EDIT
+ : LoadStatement_EDIT
+ ;
+
+LoadStatement
+ : AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'INTO' AnyTable SchemaQualifiedTableIdentifier OptionalPartitionSpec
+   {
+     addTablePrimary($9);
+   }
+ ;
+
+LoadStatement_EDIT
+ : AnyLoad 'CURSOR'
+   {
+     if (isHive()) {
+       suggestKeywords(['DATA LOCAL INPATH', 'DATA INPATH']);
+     } else if (isImpala()) {
+       suggestKeywords(['DATA INPATH']);
+     }
+   }
+ | AnyLoad AnyData OptionalHiveLocal 'CURSOR'
+   {
+     if (isHive() && !$3) {
+       suggestKeywords(['INPATH', 'LOCAL INPATH']);
+     } else {
+       suggestKeywords(['INPATH']);
+     }
+   }
+ | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath_EDIT OptionalOverwrite
+ | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'CURSOR'
+   {
+     if (!$6) {
+       suggestKeywords(['OVERWRITE INTO TABLE', 'INTO TABLE']);
+     } else {
+       suggestKeywords(['INTO TABLE']);
+     }
+   }
+ | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'INTO' 'CURSOR'
+   {
+     suggestKeywords([ 'TABLE' ]);
+   }
+ | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'INTO' AnyTable 'CURSOR'
+   {
+     suggestTables();
+     suggestDatabases({ appendDot: true });
+   }
+ | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'INTO' AnyTable SchemaQualifiedTableIdentifier_EDIT OptionalPartitionSpec
+ | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'INTO' AnyTable SchemaQualifiedTableIdentifier OptionalPartitionSpec 'CURSOR'
+   {
+     addTablePrimary($9);
+     if (!$10) {
+       suggestKeywords(['PARTITION']);
+     }
+   }
+ | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath OptionalOverwrite 'INTO' AnyTable SchemaQualifiedTableIdentifier OptionalPartitionSpec_EDIT
+   {
+     addTablePrimary($9);
+   }
+ | AnyLoad AnyData OptionalHiveLocal AnyInpath HdfsPath_EDIT OptionalOverwrite 'INTO' AnyTable SchemaQualifiedTableIdentifier OptionalPartitionSpec
+   {
+     addTablePrimary($9);
+   }
+ ;
+
+OptionalOverwrite
+ :
+ | '<hive>OVERWRITE'
+ | '<impala>OVERWRITE'
+ ;
+
+OptionalHiveLocal
+ :
+ | '<hive>LOCAL'
+ ;
+
+AnyLoad
+ : '<hive>LOAD'
+ | '<impala>LOAD'
+ ;
+
+AnyData
+ : '<hive>DATA'
+ | '<impala>DATA'
+ ;
+
+AnyInpath
+ : '<hive>INPATH'
+ | '<impala>INPATH'
+ ;

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

@@ -79,6 +79,7 @@ NonReservedKeyword
  | '<hive>OFFLINE'
  | '<hive>ORC'
  | '<hive>OUTPUTFORMAT'
+ | '<hive>OVERWRITE'
  | '<hive>PARQUET'
  | '<hive>PARTITIONED'
  | '<hive>PARTITIONS'
@@ -195,7 +196,7 @@ SqlStatement_EDIT
 // 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.)
 NonStartingToken
- : '<hive>ALL' | '<hive>ARRAY' | '<hive>AS' | '<hive>AVRO' | '<hive>BINARY' | '<hive>BUCKET' | '<hive>BUCKETS' | '<hive>CACHE' | '<hive>CLUSTER' | '<hive>CLUSTERED' | '<hive>COLLECTION' | '<hive>COMPUTE' | '<hive>CONF' | '<hive>CROSS' | '<hive>CUBE' | '<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>GROUPING' | '<hive>IDXPROPERTIES' | '<hive>LATERAL' | '<hive>MACRO' | '<hive>PARTITION' | '<hive>REBUILD' | '<hive>REPAIR' | '<hive>ROLLUP' | '<hive>SETS' | '<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>NONE' | '<hive>NOSCAN' | '<hive>OF' | '<hive>ORC' | '<hive>OUT' | '<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>TABLESAMPLE' | '<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>BUCKET' | '<hive>BUCKETS' | '<hive>CACHE' | '<hive>CLUSTER' | '<hive>CLUSTERED' | '<hive>COLLECTION' | '<hive>COMPUTE' | '<hive>CONF' | '<hive>CROSS' | '<hive>CUBE' | '<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>GROUPING' | '<hive>IDXPROPERTIES' | '<hive>LATERAL' | '<hive>LOCAL' | '<hive>MACRO' | '<hive>OVERWRITE' | '<hive>PARTITION' | '<hive>REBUILD' | '<hive>REPAIR' | '<hive>ROLLUP' | '<hive>SETS' | '<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>NONE' | '<hive>NOSCAN' | '<hive>OF' | '<hive>ORC' | '<hive>OUT' | '<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>TABLESAMPLE' | '<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>STRAIGHT_JOIN' | '<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' | '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'
@@ -213,15 +214,6 @@ DataDefinition_EDIT
  : DescribeStatement_EDIT
  ;
 
-DataManipulation
- : LoadStatement
- ;
-
-DataManipulation_EDIT
- : LoadStatement_EDIT
- ;
-
-
 // ===================================== Commonly used constructs =====================================
 
 AggregateOrAnalytic
@@ -309,11 +301,6 @@ HiveOrImpalaCurrent
  | '<impala>CURRENT'
  ;
 
-HiveOrImpalaData
- : '<hive>DATA'
- | '<impala>DATA'
- ;
-
 HiveOrImpalaDatabasesOrSchemas
  : '<hive>DATABASES'
  | '<hive>SCHEMAS'
@@ -341,16 +328,6 @@ HiveOrImpalaFormat
  | '<impala>FORMAT'
  ;
 
-HiveOrImpalaLoad
- : '<hive>LOAD'
- | '<impala>LOAD'
- ;
-
-HiveOrImpalaInpath
- : '<hive>INPATH'
- | '<impala>INPATH'
- ;
-
 HiveOrImpalaLeftSquareBracket
  : '<hive>['
  | '<impala>['
@@ -1027,34 +1004,6 @@ ImpalaDescribeStatement_EDIT
    }
  ;
 
-// ===================================== LOAD statement =====================================
-
-LoadStatement
- : HiveOrImpalaLoad HiveOrImpalaData HiveOrImpalaInpath HdfsPath 'INTO' AnyTable RegularIdentifier
- ;
-
-LoadStatement_EDIT
- : HiveOrImpalaLoad HiveOrImpalaData HiveOrImpalaInpath HdfsPath_EDIT 'INTO' AnyTable RegularIdentifier
- | HiveOrImpalaLoad HiveOrImpalaData HiveOrImpalaInpath HdfsPath 'INTO' 'CURSOR'
-   {
-     suggestKeywords([ 'TABLE' ]);
-   }
- | HiveOrImpalaLoad HiveOrImpalaData HiveOrImpalaInpath HdfsPath 'CURSOR'
-   {
-     suggestKeywords([ 'INTO' ]);
-   }
- | HiveOrImpalaLoad HiveOrImpalaData HiveOrImpalaInpath HdfsPath_EDIT
- | HiveOrImpalaLoad HiveOrImpalaData 'CURSOR'
-   {
-     suggestKeywords([ 'INPATH' ]);
-   }
- | HiveOrImpalaLoad 'CURSOR'
-   {
-     suggestKeywords([ 'DATA' ]);
-   }
- ;
-
-
 // ===================================== SELECT statement =====================================
 
 QuerySpecification

Plik diff jest za duży
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sql.js


+ 207 - 43
desktop/core/src/desktop/static/desktop/spec/autocomplete/sqlSpecLoad.js

@@ -50,7 +50,7 @@ define([
           dialect: 'impala',
           expectedResult: {
             lowerCase: false,
-            suggestKeywords: ['DATA']
+            suggestKeywords: ['DATA INPATH']
           }
         });
       });
@@ -67,6 +67,30 @@ define([
         });
       });
 
+      it('should suggest hdfs paths for "LOAD DATA INPATH \'|\'"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA INPATH \'',
+          afterCursor: '\'',
+          dialect: 'impala',
+          expectedResult: {
+            lowerCase: false,
+            suggestHdfs: { path: ''}
+          }
+        });
+      });
+
+      it('should suggest hdfs paths for "LOAD DATA INPATH \'/|"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA INPATH \'/',
+          afterCursor: '',
+          dialect: 'impala',
+          expectedResult: {
+            lowerCase: false,
+            suggestHdfs: { path: '/'}
+          }
+        });
+      });
+
       it('should suggest keywords for "LOAD DATA INPATH \'/some/path\' |"', function () {
         assertAutoComplete({
           beforeCursor: 'LOAD DATA INPATH \'/some/path\' ',
@@ -74,7 +98,19 @@ define([
           dialect: 'impala',
           expectedResult: {
             lowerCase: false,
-            suggestKeywords: ['INTO']
+            suggestKeywords: ['INTO TABLE', 'OVERWRITE INTO TABLE']
+          }
+        });
+      });
+
+      it('should suggest keywords for "LOAD DATA INPATH \'/some/path\' OVERWRITE |"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA INPATH \'/some/path\' OVERWRITE ',
+          afterCursor: '',
+          dialect: 'impala',
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['INTO TABLE']
           }
         });
       });
@@ -90,9 +126,63 @@ define([
           }
         });
       });
+
+      it('should suggest keywords for "LOAD DATA INPATH \'some/path\' INTO TABLE boo |"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA INPATH \'some/path\' INTO TABLE boo ',
+          afterCursor: '',
+          dialect: 'impala',
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['PARTITION']
+          }
+        });
+      });
+
+      it('should suggest columns for "LOAD DATA INPATH \'some/path\' INTO TABLE boo PARTITION (|"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA INPATH \'some/path\' INTO TABLE boo PARTITION (',
+          afterCursor: '',
+          dialect: 'impala',
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestColumns: { table: 'boo' }
+          }
+        });
+      });
+
+      it('should suggest hdfs paths for "LOAD DATA INPATH \'/|/bar\' INTO TABLE foo"', function () {
+        assertAutoComplete({
+          serverResponses: {},
+          beforeCursor: 'LOAD DATA INPATH \'/',
+          afterCursor: '/bar\' INTO TABLE foo',
+          dialect: 'impala',
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestHdfs: { path: '/'}
+          }
+        });
+      });
     });
 
     describe('Hive specific', function () {
+      it('should handle "LOAD DATA LOCAL INPATH \'/filepath\' OVERWRITE INTO TABLE db.tablename PARTITION (partcol1=\'baa\', partcol2=1);|"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA LOCAL INPATH \'/filepath\' OVERWRITE INTO TABLE db.tablename PARTITION (partcol1=\'baa\', partcol2=1);',
+          afterCursor: '',
+          dialect: 'hive',
+          noErrors: true,
+          hasLocations: true,
+          containsKeywords: ['SELECT'],
+          expectedResult: {
+            lowerCase: false
+          }
+        });
+      });
+
       it('should suggest keywords for "|"', function () {
         assertAutoComplete({
           beforeCursor: '',
@@ -104,54 +194,128 @@ define([
           }
         });
       });
-    });
 
-    it('should suggest hdfs paths for "LOAD DATA INPATH \'|\'"', function () {
-      assertAutoComplete({
-        beforeCursor: 'LOAD DATA INPATH \'',
-        afterCursor: '\'',
-        dialect: 'impala',
-        expectedResult: {
-          lowerCase: false,
-          suggestHdfs: { path: ''}
-        }
+      it('should suggest keywords for "LOAD |"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD ',
+          afterCursor: '',
+          dialect: 'hive',
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['DATA INPATH', 'DATA LOCAL INPATH']
+          }
+        });
+      });
+
+      it('should suggest keywords for "LOAD DATA |"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA ',
+          afterCursor: '',
+          dialect: 'hive',
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['INPATH', 'LOCAL INPATH']
+          }
+        });
       });
-    });
 
-    it('should suggest hdfs paths for "LOAD DATA INPATH \'/|\'"', function () {
-      assertAutoComplete({
-        beforeCursor: 'LOAD DATA INPATH \'/',
-        afterCursor: '\'',
-        dialect: 'hive',
-        expectedResult: {
-          lowerCase: false,
-          suggestHdfs: { path: '/'}
-        }
+      it('should suggest keywords for "LOAD DATA LOCAL |"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA LOCAL ',
+          afterCursor: '',
+          dialect: 'hive',
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['INPATH']
+          }
+        });
+      });
+
+      it('should suggest hdfs paths for "LOAD DATA INPATH \'/|\'"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA INPATH \'/',
+          afterCursor: '\'',
+          dialect: 'hive',
+          expectedResult: {
+            lowerCase: false,
+            suggestHdfs: { path: '/'}
+          }
+        });
       });
-    });
 
-    it('should suggest hdfs paths for "LOAD DATA INPATH \'/|"', function () {
-      assertAutoComplete({
-        beforeCursor: 'LOAD DATA INPATH \'/',
-        afterCursor: '',
-        dialect: 'impala',
-        expectedResult: {
-          lowerCase: false,
-          suggestHdfs: { path: '/'}
-        }
+      it('should suggest keywords for "LOAD DATA INPATH \'baa\' |"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA INPATH \'baa\' ',
+          afterCursor: '',
+          dialect: 'hive',
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['INTO TABLE', 'OVERWRITE INTO TABLE']
+          }
+        });
+      });
+
+      it('should suggest keywords for "LOAD DATA INPATH \'baa\' OVERWRITE |"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA INPATH \'baa\' OVERWRITE ',
+          afterCursor: '',
+          dialect: 'hive',
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['INTO TABLE']
+          }
+        });
+      });
+
+      it('should suggest keywords for "LOAD DATA INPATH \'baa\' INTO |"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA INPATH \'baa\' INTO ',
+          afterCursor: '',
+          dialect: 'hive',
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['TABLE']
+          }
+        });
+      });
+
+      it('should suggest tables for "LOAD DATA INPATH \'baa\' OVERWRITE INTO TABLE |"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA INPATH \'baa\' OVERWRITE INTO TABLE ',
+          afterCursor: '',
+          dialect: 'hive',
+          expectedResult: {
+            lowerCase: false,
+            suggestTables: {},
+            suggestDatabases: { appendDot: true }
+          }
+        });
       });
-    });
 
-    it('should suggest hdfs paths for "LOAD DATA INPATH \'/|/bar\' INTO TABLE foo"', function () {
-      assertAutoComplete({
-        serverResponses: {},
-        beforeCursor: 'LOAD DATA INPATH \'/',
-        afterCursor: '/bar\' INTO TABLE foo',
-        dialect: 'impala',
-        expectedResult: {
-          lowerCase: false,
-          suggestHdfs: { path: '/'}
-        }
+      it('should suggest keywords for "LOAD DATA INPATH \'baa\' INTO TABLE baa |"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA INPATH \'baa\' INTO TABLE baa ',
+          afterCursor: '',
+          dialect: 'hive',
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['PARTITION']
+          }
+        });
+      });
+
+      it('should suggest columns for "LOAD DATA INPATH \'baa\' INTO TABLE boo.baa PARTITION (|"', function () {
+        assertAutoComplete({
+          beforeCursor: 'LOAD DATA INPATH \'baa\' INTO TABLE boo.baa PARTITION (',
+          afterCursor: '',
+          dialect: 'hive',
+          hasLocations: true,
+          expectedResult: {
+            lowerCase: false,
+            suggestColumns: { table: 'baa', database: 'boo' }
+          }
+        });
       });
     });
   });

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

@@ -30,7 +30,7 @@ echo "%%" > sql_end.jison
 # 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_valueExpression.jison sql_error.jison sql_alter.jison sql_analyze.jison sql_create.jison sql_drop.jison sql_set.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_error.jison sql_alter.jison sql_analyze.jison sql_create.jison sql_drop.jison sql_load.jison sql_set.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
 cat license.txt sql.js > ../sql.js

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików