فهرست منبع

HUE-6835 [autocomplete] Improve Impala DELETE autocomplete for Kudu

Johan Ahlen 8 سال پیش
والد
کامیت
03c58a4

+ 29 - 13
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql_drop.jison

@@ -413,38 +413,54 @@ HiveDeleteStatement_EDIT
  ;
 
 ImpalaDeleteStatement
- : '<impala>DELETE' 'FROM' TableReference OptionalWhereClause
+ : '<impala>DELETE' OptionalImpalaDeleteTableRef 'FROM' TableReference OptionalWhereClause
  ;
 
 ImpalaDeleteStatement_EDIT
- : '<impala>DELETE' 'CURSOR'
+ : '<impala>DELETE' OptionalImpalaDeleteTableRef 'CURSOR'
    {
      parser.suggestKeywords(['FROM']);
+     if (parser.isImpala() && !$2) {
+       parser.suggestTables();
+       parser.suggestDatabases({ appendDot: true });
+     }
    }
- | '<impala>DELETE' 'FROM' 'CURSOR'
+ | '<impala>DELETE' ImpalaDeleteTableRef_EDIT
+ | '<impala>DELETE' OptionalImpalaDeleteTableRef 'FROM' 'CURSOR'
    {
      parser.suggestTables();
      parser.suggestDatabases({ appendDot: true });
    }
- | '<impala>DELETE' 'FROM' TableReference 'CURSOR' OptionalWhereClause
+ | '<impala>DELETE' OptionalImpalaDeleteTableRef 'FROM' TableReference 'CURSOR' OptionalWhereClause
    {
      var keywords = [{ value: 'FULL JOIN', weight: 1 }, { value: 'FULL OUTER JOIN', weight: 1 }, { value: 'JOIN', weight: 1 }, { value: 'LEFT JOIN', weight: 1 }, { value: 'LEFT OUTER JOIN', weight: 1 }, { value: 'RIGHT JOIN', weight: 1 }, { value: 'RIGHT OUTER JOIN', weight: 1 }, { value: 'INNER JOIN', weight: 1 },  { value: 'LEFT ANTI JOIN', weight: 1 }, { value: 'LEFT SEMI JOIN', weight: 1 }, { value: 'RIGHT ANTI JOIN', weight: 1 }, { value: 'RIGHT SEMI JOIN', weight: 1 }];
-     if (!$5) {
+     if (!$6) {
        keywords.push({ value: 'WHERE', weight: 3 });
      }
-     if ($3.suggestJoinConditions) {
-       parser.suggestJoinConditions($3.suggestJoinConditions);
+     if ($4.suggestJoinConditions) {
+       parser.suggestJoinConditions($4.suggestJoinConditions);
      }
-     if ($3.suggestJoins) {
-       parser.suggestJoins($3.suggestJoins);
+     if ($4.suggestJoins) {
+       parser.suggestJoins($4.suggestJoins);
      }
-     if ($3.suggestKeywords) {
-       keywords = keywords.concat(parser.createWeightedKeywords($3.suggestKeywords, 2));
+     if ($4.suggestKeywords) {
+       keywords = keywords.concat(parser.createWeightedKeywords($4.suggestKeywords, 2));
      }
      if (keywords.length > 0) {
        parser.suggestKeywords(keywords);
      }
    }
- | '<impala>DELETE' 'FROM' TableReference_EDIT OptionalWhereClause
- | '<impala>DELETE' 'FROM' TableReference WhereClause_EDIT
+ | '<impala>DELETE' ImpalaDeleteTableRef_EDIT 'FROM'
+ | '<impala>DELETE' ImpalaDeleteTableRef_EDIT 'FROM' TableReference OptionalWhereClause
+ | '<impala>DELETE' OptionalImpalaDeleteTableRef 'FROM' TableReference_EDIT OptionalWhereClause
+ | '<impala>DELETE' OptionalImpalaDeleteTableRef 'FROM' TableReference WhereClause_EDIT
+ ;
+
+OptionalImpalaDeleteTableRef
+ :
+ | TableReference
+ ;
+
+ImpalaDeleteTableRef_EDIT
+ : TableReference_EDIT
  ;

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

@@ -230,6 +230,45 @@
           });
         });
 
+        it('should handle "DELETE t1 FROM t1 JOIN t2 ON t1.x = t2.x;|"', function() {
+          assertAutoComplete({
+            beforeCursor: 'DELETE t1 FROM t1 JOIN t2 ON t1.x = t2.x;',
+            afterCursor: '',
+            dialect: 'impala',
+            noErrors:true,
+            containsKeywords: ['SELECT'],
+            expectedResult: {
+              lowerCase: false
+            }
+          });
+        });
+
+        it('should handle "DELETE t2 FROM non_kudu_table t1 JOIN kudu_table t2 ON t1.x = t2.x;|"', function() {
+          assertAutoComplete({
+            beforeCursor: 'DELETE t2 FROM non_kudu_table t1 JOIN kudu_table t2 ON t1.x = t2.x;',
+            afterCursor: '',
+            dialect: 'impala',
+            noErrors:true,
+            containsKeywords: ['SELECT'],
+            expectedResult: {
+              lowerCase: false
+            }
+          });
+        });
+
+        it('should handle "DELETE t1 FROM t1 JOIN t2 ON t1.x = t2.x WHERE t1.y = FALSE and t2.z > 100;|"', function() {
+          assertAutoComplete({
+            beforeCursor: 'DELETE t1 FROM t1 JOIN t2 ON t1.x = t2.x WHERE t1.y = FALSE and t2.z > 100;',
+            afterCursor: '',
+            dialect: 'impala',
+            noErrors:true,
+            containsKeywords: ['SELECT'],
+            expectedResult: {
+              lowerCase: false
+            }
+          });
+        });
+
         it('should handle "DELETE FROM boo.baa WHERE id < 1 AND bla IN (SELECT * FROM boo);|"', function() {
           assertAutoComplete({
             beforeCursor: 'DELETE FROM boo.baa WHERE id < 1 AND bla IN (SELECT * FROM boo);',
@@ -277,7 +316,9 @@
             noErrors:true,
             expectedResult: {
               lowerCase: false,
-              suggestKeywords: ['FROM']
+              suggestKeywords: ['FROM'],
+              suggestTables: {},
+              suggestDatabases: { appendDot: true }
             }
           });
         });
@@ -309,6 +350,19 @@
           });
         });
 
+        it('should suggest tables for "DELETE t1 FROM db.|"', function() {
+          assertAutoComplete({
+            beforeCursor: 'DELETE FROM db.',
+            afterCursor: '',
+            dialect: 'impala',
+            noErrors:true,
+            expectedResult: {
+              lowerCase: false,
+              suggestTables: { identifierChain: [{ name: 'db' }]}
+            }
+          });
+        });
+
         it('should suggest keywords for "DELETE FROM boo.baa |"', function() {
           assertAutoComplete({
             beforeCursor: 'DELETE FROM boo.baa ',
@@ -323,6 +377,21 @@
           });
         });
 
+        it('should suggst tables for "DELETE t1 FROM tbl t1 JOIN |"', function() {
+          assertAutoComplete({
+            beforeCursor: 'DELETE t1 FROM tbl t1 JOIN ',
+            afterCursor: '',
+            dialect: 'impala',
+            expectedResult: {
+              lowerCase: false,
+              suggestKeywords: ['[BROADCAST]', '[SHUFFLE]'],
+              suggestJoins: { prependJoin: false, joinType: 'JOIN', tables: [{ identifierChain: [{ name: 'tbl' }], alias: 't1' }] },
+              suggestTables: {  },
+              suggestDatabases: { appendDot: true }
+            }
+          });
+        });
+
         it('should suggest columns for "DELETE FROM boo.baa WHERE |"', function() {
           assertAutoComplete({
             beforeCursor: 'DELETE FROM boo.baa WHERE ',

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlAutocompleteParser.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlSyntaxParser.js


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است