Просмотр исходного кода

HUE-8812 [autocomplete] Add support for Hive CREATE TRANSACTIONAL TABLE

Johan Ahlen 6 лет назад
Родитель
Сommit
ccb0f61beb

+ 1 - 0
desktop/core/src/desktop/js/parse/jison/sql.jisonlex

@@ -196,6 +196,7 @@
 <hive>'TEXTFILE'                           { return '<hive>TEXTFILE'; }
 <hive>'TINYINT'                            { return '<hive>TINYINT'; }
 <hive>'TOUCH'                              { return '<hive>TOUCH'; }
+<hive>'TRANSACTIONAL'                      { return '<hive>TRANSACTIONAL'; }
 <hive>'TRANSACTIONS'                       { return '<hive>TRANSACTIONS'; }
 <hive>'UNARCHIVE'                          { return '<hive>UNARCHIVE'; }
 <hive>'UNIONTYPE'                          { return '<hive>UNIONTYPE'; }

+ 12 - 10
desktop/core/src/desktop/js/parse/jison/sql_create.jison

@@ -39,15 +39,17 @@ CreateStatement_EDIT
  | FunctionDefinition_EDIT
  | IndexDefinition_EDIT
  | MacroDefinition_EDIT
- | AnyCreate OptionalHiveTemporary OptionalExternal 'CURSOR'
+ | AnyCreate OptionalHiveTemporary OptionalHiveTransactional OptionalExternal 'CURSOR'
    {
-     if ($3) {
+     if ($4) {
        parser.suggestKeywords(['TABLE']);
      } else if (parser.isHive()) {
-       if ($2) {
+       if ($2 && !$3) {
          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 (!$2 && !$3) {
+         parser.suggestKeywords(['DATABASE', 'EXTERNAL TABLE', 'FUNCTION', 'INDEX', 'ROLE', 'SCHEMA', 'TABLE', 'TEMPORARY EXTERNAL TABLE', 'TEMPORARY FUNCTION', 'TEMPORARY MACRO', 'TEMPORARY TABLE', 'TRANSACTIONAL TABLE', 'VIEW']);
+       } else if ($3) {
+         parser.suggestKeywords(['TABLE']);
        }
      } else if (parser.isImpala()) {
        parser.suggestKeywords(['AGGREGATE FUNCTION', 'DATABASE', 'EXTERNAL TABLE', 'FUNCTION', 'ROLE', 'SCHEMA', 'TABLE', 'VIEW']);
@@ -181,18 +183,18 @@ PropertyAssignment
  ;
 
 TableDefinition
- : AnyCreate OptionalHiveTemporary OptionalExternal AnyTable OptionalIfNotExists TableDefinitionRightPart
+ : AnyCreate OptionalHiveTemporary OptionalHiveTransactional OptionalExternal AnyTable OptionalIfNotExists TableDefinitionRightPart
  ;
 
 TableDefinition_EDIT
- : AnyCreate OptionalHiveTemporary OptionalExternal AnyTable OptionalIfNotExists TableDefinitionRightPart_EDIT
- | AnyCreate OptionalHiveTemporary OptionalExternal AnyTable OptionalIfNotExists 'CURSOR'
+ : AnyCreate OptionalHiveTemporary OptionalHiveTransactional OptionalExternal AnyTable OptionalIfNotExists TableDefinitionRightPart_EDIT
+ | AnyCreate OptionalHiveTemporary OptionalHiveTransactional OptionalExternal AnyTable OptionalIfNotExists 'CURSOR'
    {
-     if (!$5) {
+     if (!$6) {
        parser.suggestKeywords(['IF NOT EXISTS']);
      }
    }
- | AnyCreate OptionalHiveTemporary OptionalExternal AnyTable OptionalIfNotExists_EDIT
+ | AnyCreate OptionalHiveTemporary OptionalHiveTransactional OptionalExternal AnyTable OptionalIfNotExists_EDIT
  ;
 
 TableDefinitionRightPart

+ 7 - 0
desktop/core/src/desktop/js/parse/jison/sql_main.jison

@@ -208,6 +208,7 @@ NonReservedKeyword
  | '<hive>TIMESTAMP'
  | '<hive>TINYINT'
  | '<hive>TOUCH'
+ | '<hive>TRANSACTIONAL'
  | '<hive>TRANSACTIONS'
  | '<hive>UNARCHIVE'
  | '<hive>UNIONTYPE'
@@ -418,6 +419,7 @@ NonStartingToken
  | '<hive>TEXTFILE'
  | '<hive>TIMESTAMP' |'<hive>USER'
  | '<hive>TINYINT'
+ | '<hive>TRANSACTIONAL'
  | '<hive>TRANSACTIONS'
  | '<hive>UNIONTYPE'
  | '<hive>USING'
@@ -1105,6 +1107,11 @@ OptionalHiveTemporary
  | '<hive>TEMPORARY'
  ;
 
+OptionalHiveTransactional
+ :
+ | '<hive>TRANSACTIONAL'
+ ;
+
 OptionalIfExists
  :
  | 'IF' 'EXISTS'

+ 15 - 0
desktop/core/src/desktop/js/parse/spec/sqlAutocompleteParser_Create_Spec.js

@@ -82,6 +82,7 @@ describe('sqlAutocompleteParser.js CREATE statements', () => {
             'TEMPORARY FUNCTION',
             'TEMPORARY MACRO',
             'TEMPORARY TABLE',
+            'TRANSACTIONAL TABLE',
             'VIEW'
           ]
         }
@@ -2251,6 +2252,20 @@ describe('sqlAutocompleteParser.js CREATE statements', () => {
         }
       );
 
+      it('should handle "CREATE TRANSACTIONAL TABLE transactional_table_test(key string, value string) PARTITIONED BY(ds string) STORED AS ORC;|"', () => {
+        assertAutoComplete({
+          beforeCursor:
+            'CREATE TRANSACTIONAL TABLE transactional_table_test(key string, value string) PARTITIONED BY(ds string) STORED AS ORC;',
+          noErrors: true,
+          afterCursor: '',
+          dialect: 'hive',
+          containsKeywords: ['SELECT'],
+          expectedResult: {
+            lowerCase: false
+          }
+        });
+      });
+
       it(
         'should handle "CREATE TEMPORARY EXTERNAL TABLE IF NOT EXISTS db.tbl (id INT, col VARCHAR, ' +
           'bla DOUBLE PRECISION, CONSTRAINT cnstrnt FOREIGN KEY (id, bla) ' +

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
desktop/core/src/desktop/js/parse/sqlAutocompleteParser.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
desktop/core/src/desktop/js/parse/sqlSyntaxParser.js


Некоторые файлы не были показаны из-за большого количества измененных файлов