浏览代码

HUE-8577 [autocomplete] Add support for Impala ALTER TABLE/VIEW SET OWNER

Johan Ahlen 7 年之前
父节点
当前提交
c5a3e7ead3

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

@@ -498,6 +498,7 @@
 <impala>'UPDATE_FN'                        { return '<impala>UPDATE_FN'; }
 <impala>'UPSERT'                           { parser.determineCase(yytext); parser.addStatementTypeLocation('UPSERT', yylloc); return '<impala>UPSERT'; }
 <impala>'URI'                              { return '<impala>URI'; }
+<impala>'USER'                             { return '<impala>USER'; }
 <impala>'USING'                            { return '<impala>USING'; }
 <impala>'VALUE_OF'                         { return '<impala>VALUE_OF'; }
 <impala>'VARBINARY'                        { return '<impala>VARBINARY'; }
@@ -514,6 +515,7 @@
 <impala>'ARRAY'                            { return 'ARRAY'; }
 <impala>'DEFAULT'                          { return '<impala>DEFAULT'; }
 <impala>'MAP'                              { return 'MAP'; }
+<impala>'OWNER'                            { return '<impala>OWNER'; }
 <impala>'STRUCT'                           { return 'STRUCT'; }
 <impala>\[BROADCAST\]                      { return '<impala>BROADCAST'; }
 <impala>\[NOSHUFFLE\]                      { return '<impala>NOSHUFFLE'; }

+ 18 - 4
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql_alter.jison

@@ -236,8 +236,8 @@ AlterTable_EDIT
      } 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']);
+         'REPLACE COLUMNS', 'SET CACHED IN', 'SET COLUMN STATS', 'SET FILEFORMAT', 'SET LOCATION', 'SET OWNER',
+         'SET ROW FORMAT', 'SET SERDEPROPERTIES', 'SET TBLPROPERTIES', 'SET UNCACHED']);
      }
    }
  | AlterTableLeftSide PartitionSpec 'CURSOR'
@@ -268,7 +268,7 @@ AlterTable_EDIT
      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']);
+       parser.suggestKeywords(['CACHED IN', 'COLUMN STATS', 'FILEFORMAT', 'LOCATION', 'OWNER ROLE', 'OWNER USER', 'ROW FORMAT', 'SERDEPROPERTIES', 'TBLPROPERTIES', 'UNCACHED']);
      }
    }
  | AlterTableLeftSide PartitionSpec OptionalPartitionOperations_EDIT
@@ -382,6 +382,7 @@ ImpalaSpecificOperations
    {
      parser.addColumnLocation($4.location, [ $4.identifier ]);
    }
+ | 'SET' '<impala>OWNER' ImpalaRoleOrUser RegularOrBacktickedIdentifier
  ;
 
 ImpalaSpecificOperations_EDIT
@@ -436,6 +437,11 @@ ImpalaSpecificOperations_EDIT
    {
      parser.addColumnLocation($4.location, [ $4.identifier ]);
    }
+ | 'SET' '<impala>OWNER' 'CURSOR'
+   {
+     parser.suggestKeywords(['ROLE', 'USER']);
+   }
+ | 'SET' '<impala>OWNER' ImpalaRoleOrUser 'CURSOR'
  ;
 
 KuduStorageAttribute
@@ -962,6 +968,7 @@ OptionalStoredAsDirectories_EDIT
 
 AlterView
  : AlterViewLeftSide 'SET' '<hive>TBLPROPERTIES' ParenthesizedPropertyAssignmentList
+ | AlterViewLeftSide 'SET' '<impala>OWNER' ImpalaRoleOrUser RegularOrBacktickedIdentifier
  | AlterViewLeftSide AnyAs QuerySpecification
  | AlterViewLeftSide '<impala>RENAME' 'TO' RegularOrBacktickedIdentifier
  | AlterViewLeftSide '<impala>RENAME' 'TO' RegularOrBacktickedIdentifier '<impala>.' RegularOrBacktickedIdentifier
@@ -974,7 +981,7 @@ AlterView_EDIT
      if (parser.isHive()) {
        parser.suggestKeywords(['AS', 'SET TBLPROPERTIES']);
      } else if (parser.isImpala()) {
-       parser.suggestKeywords(['AS', 'RENAME TO']);
+       parser.suggestKeywords(['AS', 'RENAME TO', 'SET OWNER']);
      } else {
        parser.suggestKeywords(['AS']);
      }
@@ -983,8 +990,15 @@ AlterView_EDIT
    {
      if (parser.isHive()) {
        parser.suggestKeywords(['TBLPROPERTIES']);
+     } else if (parser.isImpala()) {
+       parser.suggestKeywords(['OWNER ROLE', 'OWNER USER']);
      }
    }
+ | AlterViewLeftSide 'SET' '<impala>OWNER' 'CURSOR'
+   {
+     parser.suggestKeywords(['ROLE', 'USER']);
+   }
+ | AlterViewLeftSide 'SET' '<impala>OWNER' ImpalaRoleOrUser 'CURSOR'
  | AlterViewLeftSide AnyAs 'CURSOR'
    {
      parser.suggestKeywords(['SELECT']);

+ 12 - 6
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql_main.jison

@@ -237,13 +237,11 @@ NonReservedKeyword
  ;
 
 NonReservedKeyword
- : '<impala>URI'
- | '<impala>SERVER'
-// | '<impala>BROADCAST'
-// | '<impala>NOSHUFFLE'
-// | '<impala>SHUFFLE'
- | '<impala>DEFAULT'
+ : '<impala>DEFAULT'
  | '<impala>KEY'
+ | '<impala>OWNER'
+ | '<impala>SERVER'
+ | '<impala>URI'
  ;
 
 NonReservedKeyword
@@ -605,6 +603,7 @@ NonStartingToken
  | '<impala>OVER'
  | '<impala>OVERLAPS'
  | '<impala>OVERLAY'
+ | '<impala>OWNER'
  | '<impala>PARQUET'
  | '<impala>PARTITIONED'
  | '<impala>PARTITIONS'
@@ -702,6 +701,7 @@ NonStartingToken
  | '<impala>UNNEST'
  | '<impala>UPDATE_FN'
  | '<impala>URI'
+ | '<impala>USER'
  | '<impala>USING'
  | '<impala>VALUE_OF'
  | '<impala>VARBINARY'
@@ -988,6 +988,11 @@ HiveRoleOrUser
  | '<hive>USER'
  ;
 
+ImpalaRoleOrUser
+ : '<impala>ROLE'
+ | '<impala>USER'
+ ;
+
 SingleQuotedValue
  : 'SINGLE_QUOTE' 'VALUE' 'SINGLE_QUOTE'  -> $2
  | 'SINGLE_QUOTE' 'SINGLE_QUOTE'          -> ''
@@ -3817,6 +3822,7 @@ ArbitraryFunctionName
  | 'MAP'
  | '<impala>REPLACE'
  | 'TRUNCATE'
+ | '<impala>USER'
  ;
 
 ArbitraryFunctionRightPart

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

@@ -56,7 +56,7 @@ ShowStatement_EDIT
      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']);
+       parser.suggestKeywords(['AGGREGATE FUNCTIONS', 'ANALYTIC FUNCTIONS', 'COLUMN STATS', 'CREATE TABLE', 'CURRENT ROLES', 'CREATE VIEW', 'DATABASES', 'FILES IN', 'FUNCTIONS', 'GRANT ROLE', 'PARTITIONS', 'RANGE PARTITIONS', 'ROLE GRANT GROUP', 'ROLES', 'SCHEMAS', 'TABLE STATS', 'TABLES']);
      } else {
        parser.suggestKeywords(['COLUMNS', 'DATABASES', 'TABLES']);
      }
@@ -70,7 +70,7 @@ ShowStatement_EDIT
      } else {
        parser.addTablePrimary($3);
        if (parser.isImpala()) {
-         parser.suggestKeywords(['COLUMN STATS', 'CREATE TABLE', 'FILES IN', 'PARTITIONS', 'RANGE PARTITIONS', 'TABLE STATS']);
+         parser.suggestKeywords(['COLUMN STATS', 'CREATE TABLE', 'CREATE VIEW', 'FILES IN', 'PARTITIONS', 'RANGE PARTITIONS', 'TABLE STATS']);
        }
      }
    }

+ 65 - 3
desktop/core/src/desktop/static/desktop/js/autocomplete/spec/sqlSpecAlter.js

@@ -1638,6 +1638,19 @@
           });
         });
 
+        it('should handle "ALTER TABLE db.tbl SET OWNER USER boo; |"', function () {
+          assertAutoComplete({
+            beforeCursor: 'ALTER TABLE db.tbl SET OWNER USER boo; ',
+            afterCursor: '',
+            dialect: 'impala',
+            noErrors: true,
+            containsKeywords: ['SELECT'],
+            expectedResult: {
+              lowerCase: false
+            }
+          });
+        });
+
         it('should suggest databases for "ALTER TABLE db.tbl RENAME TO |"', function() {
           assertAutoComplete({
             beforeCursor: 'ALTER TABLE db.tbl RENAME TO  ',
@@ -1708,7 +1721,7 @@
               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' ]
+                'SET OWNER', 'SET ROW FORMAT', 'SET SERDEPROPERTIES', 'SET TBLPROPERTIES', 'SET UNCACHED' ]
             }
           });
         });
@@ -1720,7 +1733,7 @@
             dialect: 'impala',
             expectedResult: {
               lowerCase: false,
-              suggestKeywords: ['CACHED IN', 'COLUMN STATS', 'FILEFORMAT', 'LOCATION', 'ROW FORMAT', 'SERDEPROPERTIES', 'TBLPROPERTIES', 'UNCACHED']
+              suggestKeywords: ['CACHED IN', 'COLUMN STATS', 'FILEFORMAT', 'LOCATION', 'OWNER ROLE', 'OWNER USER', 'ROW FORMAT', 'SERDEPROPERTIES', 'TBLPROPERTIES', 'UNCACHED']
             }
           });
         });
@@ -2247,6 +2260,18 @@
           });
         });
 
+        it('should suggest keywords for "ALTER TABLE bar SET OWNER |"', function() {
+          assertAutoComplete({
+            beforeCursor: 'ALTER TABLE bar SET OWNER ',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestKeywords: ['ROLE', 'USER']
+            }
+          });
+        });
+
         it('should suggest keywords for "ALTER TABLE bar SET ROW |"', function() {
          assertAutoComplete({
            beforeCursor: 'ALTER TABLE bar SET ROW ',
@@ -2481,6 +2506,19 @@
           });
         });
 
+        it('should handle "ALTER VIEW db.foo SET OWNER ROLE boo; |"', function () {
+          assertAutoComplete({
+            beforeCursor: 'ALTER VIEW db.tbl SET OWNER ROLE boo; ',
+            afterCursor: '',
+            dialect: 'impala',
+            noErrors: true,
+            containsKeywords: ['SELECT'],
+            expectedResult: {
+              lowerCase: false
+            }
+          });
+        });
+
         it('should suggest keywords for "ALTER VIEW boo |"', function() {
           assertAutoComplete({
             beforeCursor: 'ALTER VIEW boo ',
@@ -2488,7 +2526,7 @@
             dialect: 'impala',
             expectedResult: {
               lowerCase: false,
-              suggestKeywords: ['AS', 'RENAME TO']
+              suggestKeywords: ['AS', 'RENAME TO', 'SET OWNER']
             }
           });
         });
@@ -2516,6 +2554,30 @@
             }
           });
         });
+
+        it('should suggest keywords for "ALTER VIEW boo SET |"', function() {
+          assertAutoComplete({
+            beforeCursor: 'ALTER VIEW boo SET ',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestKeywords: ['OWNER ROLE', 'OWNER USER']
+            }
+          });
+        });
+
+        it('should suggest keywords for "ALTER VIEW db.boo SET OWNER|"', function() {
+          assertAutoComplete({
+            beforeCursor: 'ALTER VIEW db.boo SET OWNER ',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestKeywords: ['ROLE', 'USER']
+            }
+          });
+        });
       });
     });
 

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

@@ -1185,7 +1185,7 @@
           dialect: 'impala',
           expectedResult: {
             lowerCase: false,
-            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']
+            suggestKeywords: ['AGGREGATE FUNCTIONS', 'ANALYTIC FUNCTIONS', 'COLUMN STATS', 'CREATE TABLE', 'CREATE VIEW', 'CURRENT ROLES', 'DATABASES', 'FILES IN', 'FUNCTIONS', 'GRANT ROLE', 'PARTITIONS', 'RANGE PARTITIONS', 'ROLE GRANT GROUP', 'ROLES', 'SCHEMAS', 'TABLE STATS', 'TABLES']
           }
         });
       });

文件差异内容过多而无法显示
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlAutocompleteParser.js


文件差异内容过多而无法显示
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlSyntaxParser.js


+ 2 - 2
desktop/core/src/desktop/static/desktop/js/sqlUtils.js

@@ -68,8 +68,8 @@ var SqlUtils = (function () {
     SYSTEM_TIME: true, SYSTEM_USER: true, TABLE: true, TABLES: true, TABLESAMPLE: true, TBLPROPERTIES: true, TERMINATED: true, TEXTFILE: true, THEN: true, TIMESTAMP: true,
     TIMEZONE_HOUR: true, TIMEZONE_MINUTE: true, TINYINT: true, TO: true, TRAILING: true, TRANSLATE_REGEX: true, TRANSLATION: true, TREAT: true, TRIGGER: true, TRIM_ARRAY: true,
     TRUE: true, TRUNCATE: true, UESCAPE: true, UNBOUNDED: true, UNCACHED: true, UNION: true, UNIQUE: true, UNKNOWN: true, UNNEST: true, UPDATE: true, UPDATE_FN: true, UPSERT: true,
-    USE: true, USING: true, VALUE_OF: true, VALUES: true, VARBINARY: true, VARCHAR: true, VARYING: true, VERSIONING: true, VIEW: true, WHEN: true, WHENEVER: true, WHERE: true,
-    WIDTH_BUCKET: true, WINDOW: true, WITH: true, WITHIN: true, WITHOUT: true
+    USE: true, USER: true, USING: true, VALUE_OF: true, VALUES: true, VARBINARY: true, VARCHAR: true, VARYING: true, VERSIONING: true, VIEW: true, WHEN: true, WHENEVER: true,
+    WHERE: true, WIDTH_BUCKET: true, WINDOW: true, WITH: true, WITHIN: true, WITHOUT: true
   };
 
   var autocompleteFilter = function (filter, entries) {

部分文件因为文件数量过多而无法显示