浏览代码

HUE-6835 [autocomplete] Add suggestions for dropping range partitions and recovering partitions

Johan Ahlen 8 年之前
父节点
当前提交
c9d5a24

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

@@ -281,6 +281,7 @@
 <impala>'DEFAULT'                          { return '<impala>DEFAULT'; }
 <impala>'DEFAULT'                          { return '<impala>DEFAULT'; }
 <impala>'ENCODING'                         { return '<impala>ENCODING'; }
 <impala>'ENCODING'                         { return '<impala>ENCODING'; }
 <impala>'GRANT'                            { return '<impala>GRANT'; }
 <impala>'GRANT'                            { return '<impala>GRANT'; }
+<impala>'RECOVER'                          { return '<impala>RECOVER'; }
 <impala>'ROLE'                             { return '<impala>ROLE'; }
 <impala>'ROLE'                             { return '<impala>ROLE'; }
 <impala>'ROLES'                            { return '<impala>ROLES'; }
 <impala>'ROLES'                            { return '<impala>ROLES'; }
 <impala>\[BROADCAST\]                      { return '<impala>BROADCAST'; }
 <impala>\[BROADCAST\]                      { return '<impala>BROADCAST'; }

+ 48 - 43
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql_alter.jison

@@ -88,6 +88,7 @@ AlterTable
  | AlterTableLeftSide DropOperations
  | AlterTableLeftSide DropOperations
  | AlterTableLeftSide OptionalPartitionOperations
  | AlterTableLeftSide OptionalPartitionOperations
  | AlterTableLeftSide PartitionSpec OptionalPartitionOperations
  | AlterTableLeftSide PartitionSpec OptionalPartitionOperations
+ | AlterTableLeftSide '<impala>RECOVER' '<impala>PARTITIONS'
  ;
  ;
 
 
 AlterTable_EDIT
 AlterTable_EDIT
@@ -157,9 +158,9 @@ AlterTable_EDIT
          'RECOVER PARTITIONS', 'RENAME TO', 'REPLACE COLUMNS', 'SET FILEFORMAT', 'SET LOCATION', 'SET SERDE',
          'RECOVER PARTITIONS', 'RENAME TO', 'REPLACE COLUMNS', 'SET FILEFORMAT', 'SET LOCATION', 'SET SERDE',
          'SET SERDEPROPERTIES', 'SET SKEWED LOCATION', 'SET TBLPROPERTIES', 'SKEWED BY', 'TOUCH', 'UNARCHIVE PARTITION']);
          'SET SERDEPROPERTIES', 'SET SKEWED LOCATION', 'SET TBLPROPERTIES', 'SKEWED BY', 'TOUCH', 'UNARCHIVE PARTITION']);
      } else if (parser.isImpala()) {
      } else if (parser.isImpala()) {
-       parser.suggestKeywords(['ADD COLUMNS', 'ADD PARTITION', 'CHANGE', 'DROP COLUMN', 'DROP PARTITION', 'PARTITION',
-         'RENAME TO', 'REPLACE COLUMNS', 'SET CACHED IN', 'SET FILEFORMAT', 'SET LOCATION', 'SET SERDEPROPERTIES',
-         'SET TBLPROPERTIES', 'SET UNCACHED']);
+       parser.suggestKeywords(['ADD COLUMNS', 'ADD PARTITION', 'ADD RANGE PARTITION', 'CHANGE', 'DROP COLUMN',
+         'DROP PARTITION', 'DROP RANGE PARTITION', 'PARTITION', 'RECOVER PARTITIONS', 'RENAME TO', 'REPLACE COLUMNS',
+         'SET CACHED IN', 'SET FILEFORMAT', 'SET LOCATION','SET SERDEPROPERTIES', 'SET TBLPROPERTIES', 'SET UNCACHED']);
      }
      }
    }
    }
  | AlterTableLeftSide PartitionSpec 'CURSOR'
  | AlterTableLeftSide PartitionSpec 'CURSOR'
@@ -178,21 +179,21 @@ AlterTable_EDIT
      parser.suggestKeywords(['COLUMNS']);
      parser.suggestKeywords(['COLUMNS']);
    }
    }
  | AlterTableLeftSide PartitionSpec 'SET' 'CURSOR'
  | AlterTableLeftSide PartitionSpec 'SET' 'CURSOR'
-    {
-      if (parser.isHive()) {
-        parser.suggestKeywords(['FILEFORMAT', 'LOCATION', 'SERDE', 'SERDEPROPERTIES']);
-      } else if (parser.isImpala()) {
-        parser.suggestKeywords(['CACHED IN', 'FILEFORMAT', 'LOCATION', 'SERDEPROPERTIES','TBLPROPERTIES', 'UNCACHED']);
-      }
-    }
+   {
+     if (parser.isHive()) {
+       parser.suggestKeywords(['FILEFORMAT', 'LOCATION', 'SERDE', 'SERDEPROPERTIES']);
+     } else if (parser.isImpala()) {
+       parser.suggestKeywords(['CACHED IN', 'FILEFORMAT', 'LOCATION', 'SERDEPROPERTIES','TBLPROPERTIES', 'UNCACHED']);
+     }
+   }
  | AlterTableLeftSide 'SET' 'CURSOR'
  | AlterTableLeftSide 'SET' 'CURSOR'
-    {
-      if (parser.isHive()) {
-        parser.suggestKeywords(['FILEFORMAT', 'LOCATION', 'SERDE', 'SERDEPROPERTIES', 'SKEWED LOCATION', 'TBLPROPERTIES']);
-      } else if (parser.isImpala()) {
-        parser.suggestKeywords(['CACHED IN', 'FILEFORMAT', 'LOCATION', 'SERDEPROPERTIES', 'TBLPROPERTIES', 'UNCACHED']);
-      }
-    }
+   {
+     if (parser.isHive()) {
+       parser.suggestKeywords(['FILEFORMAT', 'LOCATION', 'SERDE', 'SERDEPROPERTIES', 'SKEWED LOCATION', 'TBLPROPERTIES']);
+     } else if (parser.isImpala()) {
+       parser.suggestKeywords(['CACHED IN', 'FILEFORMAT', 'LOCATION', 'SERDEPROPERTIES', 'TBLPROPERTIES', 'UNCACHED']);
+     }
+   }
  | AlterTableLeftSide PartitionSpec OptionalPartitionOperations_EDIT
  | AlterTableLeftSide PartitionSpec OptionalPartitionOperations_EDIT
  | AlterTableLeftSide AnyRename 'CURSOR'
  | AlterTableLeftSide AnyRename 'CURSOR'
    {
    {
@@ -202,6 +203,10 @@ AlterTable_EDIT
    {
    {
      parser.suggestDatabases({ appendDot: true });
      parser.suggestDatabases({ appendDot: true });
    }
    }
+ | AlterTableLeftSide '<impala>RECOVER' 'CURSOR'
+   {
+     parser.suggestKeywords(['PARTITIONS']);
+   }
  ;
  ;
 
 
 HiveSpecificOperations
 HiveSpecificOperations
@@ -405,48 +410,48 @@ OneOrMorePartitionSpecLists_EDIT
  ;
  ;
 
 
 DropOperations
 DropOperations
- : 'DROP' OneOrMorePartitionSpecs OptionalHivePurge
- | 'DROP' 'IF' 'EXISTS' OneOrMorePartitionSpecs OptionalHivePurge
- | 'DROP' ColumnIdentifier
+ : 'DROP' OptionalIfExists OneOrMorePartitionSpecs OptionalHivePurge
+ | 'DROP' OptionalIfExists '<impala>RANGE'
+ | 'DROP' OptionalIfExists '<impala>RANGE' 'PARTITION' RangePartitionSpec
+ | 'DROP' OptionalIfExists '<impala>RANGE' '<impala>PARTITION_VALUE' '=' UnsignedValueSpecification
  | 'DROP' '<impala>COLUMN' ColumnIdentifier
  | 'DROP' '<impala>COLUMN' ColumnIdentifier
  ;
  ;
 
 
-DropOperations
- : 'DROP' 'CURSOR'
+DropOperations_EDIT
+ : 'DROP' OptionalIfExists 'CURSOR'
    {
    {
-     if (parser.isHive()) {
+     if (parser.isHive() && !$2) {
        parser.suggestKeywords([{ value: 'PARTITION', weight: 1}, { value: 'IF EXISTS', weight: 2 }]);
        parser.suggestKeywords([{ value: 'PARTITION', weight: 1}, { value: 'IF EXISTS', weight: 2 }]);
-     } else if (parser.isImpala()) {
-       parser.suggestKeywords(['COLUMN', 'PARTITION']);
+     } else if (parser.isHive()) {
+        parser.suggestKeywords(['PARTITION']);
+     } else if (parser.isImpala() && !$2) {
+       parser.suggestKeywords([{ value: 'COLUMN', weight: 1 }, { value: 'PARTITION', weight: 1 }, { value: 'RANGE PARTITION', weight: 1 }, { value: 'IF EXISTS', weight: 2 }]);
        parser.suggestColumns();
        parser.suggestColumns();
+     } else if (parser.isImpala()) {
+       parser.suggestKeywords(['PARTITION', 'RANGE PARTITION']);
      }
      }
    }
    }
- | 'DROP' OneOrMorePartitionSpecs_EDIT OptionalHivePurge
- | 'DROP' OneOrMorePartitionSpecs OptionalHivePurge 'CURSOR'
+ | 'DROP' OptionalIfExists OneOrMorePartitionSpecs_EDIT OptionalHivePurge
+ | 'DROP' OptionalIfExists OneOrMorePartitionSpecs OptionalHivePurge 'CURSOR'
    {
    {
-     if (parser.isHive() && !$3) {
+     if (parser.isHive() && !$4) {
        parser.suggestKeywords(['PURGE']);
        parser.suggestKeywords(['PURGE']);
      }
      }
    }
    }
- | 'DROP' 'IF' 'CURSOR'
+ | 'DROP' OptionalIfExists_EDIT
+ | 'DROP' OptionalIfExists '<impala>RANGE' 'CURSOR'
    {
    {
-     if (parser.isHive()) {
-       parser.suggestKeywords(['EXISTS']);
-     }
+     parser.suggestKeywords(['PARTITION']);
    }
    }
- | 'DROP' 'IF' 'EXISTS' 'CURSOR'
-    {
-      if (parser.isHive()) {
-        parser.suggestKeywords(['PARTITION']);
-      }
-    }
- | 'DROP' 'IF' 'EXISTS' OneOrMorePartitionSpecs_EDIT OptionalHivePurge
- | 'DROP' 'IF' 'EXISTS' OneOrMorePartitionSpecs OptionalHivePurge 'CURSOR'
+ | 'DROP' OptionalIfExists '<impala>RANGE' 'PARTITION' 'CURSOR'
    {
    {
-     if (parser.isHive() && !$3) {
-       parser.suggestKeywords(['PURGE']);
-     }
+     parser.suggestKeywords(['VALUE']);
+   }
+ | 'DROP' OptionalIfExists '<impala>RANGE' '<impala>PARTITION_VALUE' 'CURSOR'
+   {
+     parser.suggestKeywords(['=']);
    }
    }
+ | 'DROP' OptionalIfExists '<impala>RANGE' 'PARTITION' RangePartitionSpec_EDIT
  | 'DROP' ColumnIdentifier_EDIT
  | 'DROP' ColumnIdentifier_EDIT
  | 'DROP' '<impala>COLUMN' 'CURSOR'
  | 'DROP' '<impala>COLUMN' 'CURSOR'
    {
    {

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


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


+ 113 - 2
desktop/core/src/desktop/static/desktop/spec/autocomplete/sqlSpecAlter.js

@@ -1382,7 +1382,10 @@
             dialect: 'impala',
             dialect: 'impala',
             expectedResult: {
             expectedResult: {
               lowerCase: false,
               lowerCase: false,
-              suggestKeywords: ['ADD COLUMNS', 'ADD PARTITION', 'CHANGE', 'DROP COLUMN', 'DROP PARTITION', 'PARTITION', 'RENAME TO', 'REPLACE COLUMNS', 'SET CACHED IN', 'SET FILEFORMAT', 'SET LOCATION', 'SET SERDEPROPERTIES', 'SET TBLPROPERTIES', 'SET UNCACHED' ]
+              suggestKeywords: ['ADD COLUMNS', 'ADD PARTITION', 'ADD RANGE PARTITION', 'CHANGE',
+                'DROP COLUMN', 'DROP PARTITION', 'DROP RANGE PARTITION', 'PARTITION', 'RECOVER PARTITIONS',
+                'RENAME TO', 'REPLACE COLUMNS', 'SET CACHED IN', 'SET FILEFORMAT', 'SET LOCATION',
+                'SET SERDEPROPERTIES', 'SET TBLPROPERTIES', 'SET UNCACHED' ]
             }
             }
           });
           });
         });
         });
@@ -1553,7 +1556,7 @@
             expectedResult: {
             expectedResult: {
               lowerCase: false,
               lowerCase: false,
               suggestColumns: { tables: [{ identifierChain: [{ name: 'bar' }] }] },
               suggestColumns: { tables: [{ identifierChain: [{ name: 'bar' }] }] },
-              suggestKeywords: ['COLUMN', 'PARTITION']
+              suggestKeywords: ['IF EXISTS', 'COLUMN', 'PARTITION', 'RANGE PARTITION']
             }
             }
           });
           });
         });
         });
@@ -1571,6 +1574,102 @@
           });
           });
         });
         });
 
 
+        it('should suggest columns for "ALTER TABLE bar DROP IF |"', function() {
+          assertAutoComplete({
+            beforeCursor: 'ALTER TABLE bar DROP IF ',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestKeywords: ['EXISTS']
+            }
+          });
+        });
+
+        it('should suggest columns for "ALTER TABLE bar DROP IF EXISTS PARTITION (|"', function() {
+          assertAutoComplete({
+            beforeCursor: 'ALTER TABLE bar DROP IF EXISTS PARTITION (',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestColumns: { tables: [{ identifierChain: [{ name: 'bar' }] }] }
+            }
+          });
+        });
+
+        it('should suggest columns for "ALTER TABLE bar DROP RANGE |"', function() {
+          assertAutoComplete({
+            beforeCursor: 'ALTER TABLE bar DROP RANGE ',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestKeywords: ['PARTITION']
+            }
+          });
+        });
+
+        it('should suggest columns for "ALTER TABLE bar DROP IF EXISTS RANGE |"', function() {
+          assertAutoComplete({
+            beforeCursor: 'ALTER TABLE bar DROP IF EXISTS RANGE ',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestKeywords: ['PARTITION']
+            }
+          });
+        });
+
+        it('should suggest columns for "ALTER TABLE bar DROP IF EXISTS RANGE PARTITION |"', function() {
+          assertAutoComplete({
+            beforeCursor: 'ALTER TABLE bar DROP IF EXISTS RANGE PARTITION ',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestKeywords: ['VALUE']
+            }
+          });
+        });
+
+        it('should suggest columns for "ALTER TABLE bar DROP IF EXISTS RANGE PARTITION VALUE |"', function() {
+          assertAutoComplete({
+            beforeCursor: 'ALTER TABLE bar DROP IF EXISTS RANGE PARTITION VALUE ',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestKeywords: ['=']
+            }
+          });
+        });
+
+        it('should suggest columns for "ALTER TABLE bar DROP IF EXISTS RANGE PARTITION "a" |"', function() {
+          assertAutoComplete({
+            beforeCursor: 'ALTER TABLE bar DROP IF EXISTS RANGE PARTITION "a" ',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestKeywords: ['<', '<=', '<>', '=', '>', '>=']
+            }
+          });
+        });
+
+        it('should suggest columns for "ALTER TABLE bar DROP RANGE PARTITION "a" < |"', function() {
+          assertAutoComplete({
+            beforeCursor: 'ALTER TABLE bar DROP RANGE PARTITION "a" < ',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestKeywords: ['VALUES']
+            }
+          });
+        });
+
         it('should suggest keywords for "ALTER TABLE bar PARTITION (a=\'b\') |"', function() {
         it('should suggest keywords for "ALTER TABLE bar PARTITION (a=\'b\') |"', function() {
           assertAutoComplete({
           assertAutoComplete({
             beforeCursor: 'ALTER TABLE bar PARTITION (a=\'b\') ',
             beforeCursor: 'ALTER TABLE bar PARTITION (a=\'b\') ',
@@ -1631,6 +1730,18 @@
             }
             }
           });
           });
         });
         });
+
+        it('should suggest keywords for "ALTER TABLE bar RECOVER |"', function() {
+          assertAutoComplete({
+            beforeCursor: 'ALTER TABLE bar RECOVER ',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestKeywords: ['PARTITIONS']
+            }
+          });
+        });
       });
       });
     });
     });
 
 

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