Browse Source

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

Johan Ahlen 7 years ago
parent
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()) {
      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']);
        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()) {
      } 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 {
      } else {
        parser.suggestKeywords(['COLUMNS', 'DATABASES', 'TABLES']);
        parser.suggestKeywords(['COLUMNS', 'DATABASES', 'TABLES']);
      }
      }
@@ -331,9 +331,16 @@ ShowFunctionsStatement_EDIT
 ShowGrantStatement
 ShowGrantStatement
  : AnyShow '<hive>GRANT' OptionalPrincipalName
  : AnyShow '<hive>GRANT' OptionalPrincipalName
  | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' '<hive>ALL'
  | 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
 ShowGrantStatement_EDIT
@@ -347,18 +354,42 @@ ShowGrantStatement_EDIT
      parser.suggestKeywords(['ALL', 'TABLE']);
      parser.suggestKeywords(['ALL', 'TABLE']);
      parser.suggestTables();
      parser.suggestTables();
    }
    }
+ | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' SchemaQualifiedTableIdentifier_EDIT
  | AnyShow  '<hive>GRANT' OptionalPrincipalName 'ON' AnyTable 'CURSOR'
  | AnyShow  '<hive>GRANT' OptionalPrincipalName 'ON' AnyTable 'CURSOR'
    {
    {
      parser.suggestTables();
      parser.suggestTables();
    }
    }
- | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' 'CURSOR' RegularOrBacktickedIdentifier
+ | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' 'CURSOR' SchemaQualifiedTableIdentifier
    {
    {
      parser.suggestKeywords(['TABLE']);
      parser.suggestKeywords(['TABLE']);
    }
    }
+ | AnyShow '<hive>GRANT' OptionalPrincipalName 'ON' 'CURSOR' SchemaQualifiedTableIdentifier_EDIT
  | AnyShow '<impala>GRANT' 'CURSOR'
  | 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
 OptionalPrincipalName

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

@@ -1185,7 +1185,7 @@
           dialect: 'impala',
           dialect: 'impala',
           expectedResult: {
           expectedResult: {
             lowerCase: false,
             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() {
       it('should suggest keywords for "SHOW GRANT |"', function() {
         assertAutoComplete({
         assertAutoComplete({
           beforeCursor: 'SHOW GRANT ',
           beforeCursor: 'SHOW GRANT ',
@@ -1580,7 +1619,58 @@
           dialect: 'impala',
           dialect: 'impala',
           expectedResult: {
           expectedResult: {
             lowerCase: false,
             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
+            }
           }
           }
         });
         });
       });
       });

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


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


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