Browse Source

HUE-8577 [autocomplete] Add support for Impala SHOW GRANT ROLE/USER statements

Johan Ahlen 7 năm trước cách đây
mục cha
commit
deaec540d4

+ 37 - 6
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', 'CREATE VIEW', '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', 'GRANT USER', 'PARTITIONS', 'RANGE PARTITIONS', 'ROLE GRANT GROUP', 'ROLES', 'SCHEMAS', 'TABLE STATS', 'TABLES']);
      } else {
        parser.suggestKeywords(['COLUMNS', 'DATABASES', 'TABLES']);
      }
@@ -331,9 +331,16 @@ ShowFunctionsStatement_EDIT
 ShowGrantStatement
  : AnyShow '<hive>GRANT' OptionalPrincipalName
  | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' '<hive>ALL'
- | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' RegularOrBacktickedIdentifier
- | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' AnyTable RegularOrBacktickedIdentifier
- | AnyShow '<impala>GRANT' '<impala>ROLE' RegularOrBacktickedIdentifier
+ | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' SchemaQualifiedTableIdentifier
+ | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' AnyTable SchemaQualifiedTableIdentifier
+ | AnyShow '<impala>GRANT' ImpalaRoleOrUser RegularOrBacktickedIdentifier
+ | AnyShow '<impala>GRANT' ImpalaRoleOrUser RegularOrBacktickedIdentifier 'ON' 'DATABASE' RegularOrBacktickedIdentifier
+   {
+     parser.addDatabaseLocation(@7, [ { name: $7 } ]);
+   }
+ | AnyShow '<impala>GRANT' ImpalaRoleOrUser RegularOrBacktickedIdentifier 'ON' '<impala>SERVER'
+ | AnyShow '<impala>GRANT' ImpalaRoleOrUser RegularOrBacktickedIdentifier 'ON' '<impala>TABLE' SchemaQualifiedTableIdentifier
+ | AnyShow '<impala>GRANT' ImpalaRoleOrUser RegularOrBacktickedIdentifier 'ON' '<impala>URI' RegularOrBacktickedIdentifier
  ;
 
 ShowGrantStatement_EDIT
@@ -347,18 +354,42 @@ ShowGrantStatement_EDIT
      parser.suggestKeywords(['ALL', 'TABLE']);
      parser.suggestTables();
    }
+ | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' SchemaQualifiedTableIdentifier_EDIT
  | AnyShow  '<hive>GRANT' OptionalPrincipalName 'ON' AnyTable 'CURSOR'
    {
      parser.suggestTables();
    }
- | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' 'CURSOR' RegularOrBacktickedIdentifier
+ | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' 'CURSOR' SchemaQualifiedTableIdentifier
    {
      parser.suggestKeywords(['TABLE']);
    }
+ | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' 'CURSOR' SchemaQualifiedTableIdentifier_EDIT
  | AnyShow '<impala>GRANT' 'CURSOR'
    {
-     parser.suggestKeywords(['ROLE']);
+     parser.suggestKeywords(['ROLE', 'USER']);
+   }
+ | AnyShow '<impala>GRANT' ImpalaRoleOrUser 'CURSOR'
+ | AnyShow '<impala>GRANT' ImpalaRoleOrUser RegularOrBacktickedIdentifier 'CURSOR'
+   {
+     parser.suggestKeywords(['ON DATABASE', 'ON SERVER', 'ON TABLE', 'ON URI']);
+   }
+ | AnyShow '<impala>GRANT' ImpalaRoleOrUser RegularOrBacktickedIdentifier 'ON' 'CURSOR'
+   {
+     parser.suggestKeywords(['DATABASE', 'SERVER', 'TABLE', 'URI']);
+   }
+ | AnyShow '<impala>GRANT' ImpalaRoleOrUser RegularOrBacktickedIdentifier 'ON' 'DATABASE' 'CURSOR'
+   {
+     parser.suggestDatabases();
+   }
+ | AnyShow '<impala>GRANT' ImpalaRoleOrUser RegularOrBacktickedIdentifier 'ON' '<impala>TABLE' 'CURSOR'
+   {
+     parser.suggestDatabases({
+       appendDot: true
+     });
+     parser.suggestTables();
    }
+ | AnyShow '<impala>GRANT' ImpalaRoleOrUser RegularOrBacktickedIdentifier 'ON' '<impala>TABLE' SchemaQualifiedTableIdentifier_EDIT
+ | AnyShow '<impala>GRANT' ImpalaRoleOrUser RegularOrBacktickedIdentifier 'ON' '<impala>URI' 'CURSOR'
  ;
 
 OptionalPrincipalName

+ 92 - 2
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', 'CREATE VIEW', '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', 'GRANT USER', 'PARTITIONS', 'RANGE PARTITIONS', 'ROLE GRANT GROUP', 'ROLES', 'SCHEMAS', 'TABLE STATS', 'TABLES']
           }
         });
       });
@@ -1573,6 +1573,45 @@
         });
       });
 
+      it('should handle "SHOW GRANT ROLE boo ON DATABASE baa;|"', function() {
+        assertAutoComplete({
+          beforeCursor: 'SHOW GRANT ROLE boo ON DATABASE baa;',
+          afterCursor: '',
+          dialect: 'impala',
+          noErrors: true,
+          containsKeywords: ['SELECT'],
+          expectedResult: {
+            lowerCase: false
+          }
+        });
+      });
+
+      it('should handle "SHOW GRANT USER boo;|"', function() {
+        assertAutoComplete({
+          beforeCursor: 'SHOW GRANT USER boo;',
+          afterCursor: '',
+          dialect: 'impala',
+          noErrors: true,
+          containsKeywords: ['SELECT'],
+          expectedResult: {
+            lowerCase: false
+          }
+        });
+      });
+
+      it('should handle "SHOW GRANT USER boo ON DATABASE baa;|"', function() {
+        assertAutoComplete({
+          beforeCursor: 'SHOW GRANT USER boo ON DATABASE baa;',
+          afterCursor: '',
+          dialect: 'impala',
+          noErrors: true,
+          containsKeywords: ['SELECT'],
+          expectedResult: {
+            lowerCase: false
+          }
+        });
+      });
+
       it('should suggest keywords for "SHOW GRANT |"', function() {
         assertAutoComplete({
           beforeCursor: 'SHOW GRANT ',
@@ -1580,7 +1619,58 @@
           dialect: 'impala',
           expectedResult: {
             lowerCase: false,
-            suggestKeywords: ['ROLE']
+            suggestKeywords: ['ROLE', 'USER']
+          }
+        });
+      });
+
+      it('should suggest keywords for "SHOW GRANT ROLE usr |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'SHOW GRANT ROLE usr ',
+          afterCursor: '',
+          dialect: 'impala',
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['ON DATABASE', 'ON SERVER', 'ON TABLE', 'ON URI']
+          }
+        });
+      });
+
+      it('should suggest keywords for "SHOW GRANT USER usr ON |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'SHOW GRANT USER usr ON ',
+          afterCursor: '',
+          dialect: 'impala',
+          expectedResult: {
+            lowerCase: false,
+            suggestKeywords: ['DATABASE', 'SERVER', 'TABLE', 'URI']
+          }
+        });
+      });
+
+      it('should suggest databases for "SHOW GRANT ROLE usr ON DATABASE |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'SHOW GRANT ROLE usr ON DATABASE ',
+          afterCursor: '',
+          dialect: 'impala',
+          expectedResult: {
+            lowerCase: false,
+            suggestDatabases: {}
+          }
+        });
+      });
+
+      it('should suggest tables for "SHOW GRANT USER usr ON TABLE |"', function() {
+        assertAutoComplete({
+          beforeCursor: 'SHOW GRANT USER usr ON TABLE ',
+          afterCursor: '',
+          dialect: 'impala',
+          expectedResult: {
+            lowerCase: false,
+            suggestTables: {},
+            suggestDatabases: {
+              appendDot: true
+            }
           }
         });
       });

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlAutocompleteParser.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlSyntaxParser.js


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác