Pārlūkot izejas kodu

HUE-4031 [editor] Add missing variables to the syntax paraser

Johan Ahlen 8 gadi atpakaļ
vecāks
revīzija
7756ce9

+ 26 - 20
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql_main.jison

@@ -2526,23 +2526,25 @@ TableReference_EDIT
 TablePrimaryOrJoinedTable
  : TablePrimary
    {
-      $$ = $1;
-
-      var idx = parser.yy.latestTablePrimaries.length - 1;
-      var tables = [];
-      do {
-        var tablePrimary = parser.yy.latestTablePrimaries[idx];
-        if (!tablePrimary.subQueryAlias) {
-          tables.unshift(tablePrimary.alias ? { identifierChain: tablePrimary.identifierChain, alias: tablePrimary.alias } : { identifierChain: tablePrimary.identifierChain })
-        }
-        idx--;
-      } while (idx >= 0 && tablePrimary.join && !tablePrimary.subQueryAlias)
-
-      if (tables.length > 0) {
-        $$.suggestJoins = {
-          prependJoin: true,
-          tables: tables
-        };
+     $$ = $1;
+
+     if (parser.yy.latestTablePrimaries.length > 0) {
+       var idx = parser.yy.latestTablePrimaries.length - 1;
+       var tables = [];
+       do {
+         var tablePrimary = parser.yy.latestTablePrimaries[idx];
+         if (!tablePrimary.subQueryAlias) {
+           tables.unshift(tablePrimary.alias ? { identifierChain: tablePrimary.identifierChain, alias: tablePrimary.alias } : { identifierChain: tablePrimary.identifierChain })
+         }
+         idx--;
+       } while (idx >= 0 && tablePrimary.join && !tablePrimary.subQueryAlias)
+
+       if (tables.length > 0) {
+         $$.suggestJoins = {
+           prependJoin: true,
+           tables: tables
+         };
+       }
       }
    }
  | JoinedTable
@@ -2577,7 +2579,9 @@ Joins
      if ($4.suggestKeywords) {
        $$.suggestKeywords = $4.suggestKeywords;
      }
-     parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true;
+     if (parser.yy.latestTablePrimaries.length > 0) {
+        parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true;
+     }
    }
  | Joins JoinType OptionalImpalaBroadcastOrShuffle TablePrimary OptionalJoinCondition
    {
@@ -2593,7 +2597,9 @@ Joins
      if ($4.suggestKeywords) {
        $$.suggestKeywords = $4.suggestKeywords;
      }
-     parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true;
+     if (parser.yy.latestTablePrimaries.length > 0) {
+       parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true;
+     }
    }
  ;
 
@@ -2618,7 +2624,7 @@ Join_EDIT
      if (!$2 && parser.isImpala()) {
        parser.suggestKeywords(['[BROADCAST]', '[SHUFFLE]']);
      }
-     if (!$2) {
+     if (!$2 && parser.yy.latestTablePrimaries.length > 0) {
        var idx = parser.yy.latestTablePrimaries.length - 1;
        var tables = [];
        do {

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

@@ -15,7 +15,7 @@
 // limitations under the License.
 
 (function () {
-  fdescribe('sqlSyntaxParser.js', function() {
+  describe('sqlSyntaxParser.js', function() {
 
     var expectedToStrings = function (expected) {
       return $.map(expected, function(ex) { return ex.text; })
@@ -99,6 +99,11 @@
       expect(expectedToStrings(result.expected)).toEqual(['select', 'set', 'alter', 'insert', 'create', 'show', 'use', 'drop', 'from', 'truncate', 'update', 'with']);
     });
 
+    it('should find errors for "select * from sample_07 where and\\n\\nselect unknownCol from sample_07;"', function () {
+      var result = sqlSyntaxParser.parseSyntax('select * from sample_07 where and\n\nselect unknownCol from sample_07;', '', 'hive', false);
+      expect(result).toBeTruthy();
+    });
+
     describe('Hive specific', function () {
       it('should suggest expected words for "SLELECT "', function() {
         var result = sqlSyntaxParser.parseSyntax('SLELECT ', '', 'hive');

+ 24 - 18
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlAutocompleteParser.js

@@ -1681,23 +1681,25 @@ case 1222: case 1223:
 break;
 case 1233:
 
-      this.$ = $$[$0];
+     this.$ = $$[$0];
 
-      var idx = parser.yy.latestTablePrimaries.length - 1;
-      var tables = [];
-      do {
-        var tablePrimary = parser.yy.latestTablePrimaries[idx];
-        if (!tablePrimary.subQueryAlias) {
-          tables.unshift(tablePrimary.alias ? { identifierChain: tablePrimary.identifierChain, alias: tablePrimary.alias } : { identifierChain: tablePrimary.identifierChain })
-        }
-        idx--;
-      } while (idx >= 0 && tablePrimary.join && !tablePrimary.subQueryAlias)
+     if (parser.yy.latestTablePrimaries.length > 0) {
+       var idx = parser.yy.latestTablePrimaries.length - 1;
+       var tables = [];
+       do {
+         var tablePrimary = parser.yy.latestTablePrimaries[idx];
+         if (!tablePrimary.subQueryAlias) {
+           tables.unshift(tablePrimary.alias ? { identifierChain: tablePrimary.identifierChain, alias: tablePrimary.alias } : { identifierChain: tablePrimary.identifierChain })
+         }
+         idx--;
+       } while (idx >= 0 && tablePrimary.join && !tablePrimary.subQueryAlias)
 
-      if (tables.length > 0) {
-        this.$.suggestJoins = {
-          prependJoin: true,
-          tables: tables
-        };
+       if (tables.length > 0) {
+         this.$.suggestJoins = {
+           prependJoin: true,
+           tables: tables
+         };
+       }
       }
    
 break;
@@ -1715,7 +1717,9 @@ case 1240:
      if ($$[$0].suggestKeywords) {
        this.$.suggestKeywords = $$[$0].suggestKeywords;
      }
-     parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true;
+     if (parser.yy.latestTablePrimaries.length > 0) {
+        parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true;
+     }
    
 break;
 case 1241:
@@ -1732,7 +1736,9 @@ case 1241:
      if ($$[$0-1].suggestKeywords) {
        this.$.suggestKeywords = $$[$0-1].suggestKeywords;
      }
-     parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true;
+     if (parser.yy.latestTablePrimaries.length > 0) {
+       parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true;
+     }
    
 break;
 case 1242:
@@ -1746,7 +1752,7 @@ case 1251:
      if (!$$[$0-2] && parser.isImpala()) {
        parser.suggestKeywords(['[BROADCAST]', '[SHUFFLE]']);
      }
-     if (!$$[$0-2]) {
+     if (!$$[$0-2] && parser.yy.latestTablePrimaries.length > 0) {
        var idx = parser.yy.latestTablePrimaries.length - 1;
        var tables = [];
        do {

+ 5 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlParseSupport.js

@@ -1588,6 +1588,11 @@ var SqlParseSupport = (function () {
       parser.yy.caseDetermined = false;
       parser.yy.error = undefined;
 
+      parser.yy.latestTablePrimaries = [];
+      parser.yy.subQueries = [];
+      parser.yy.selectListAliases = [];
+      parser.yy.latestTablePrimaries = [];
+
       parser.yy.activeDialect = (dialect !== 'hive' && dialect !== 'impala') ? undefined : dialect;
 
       // Hack to set the inital state of the lexer without first having to hit a token

+ 24 - 18
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlSyntaxParser.js

@@ -1628,23 +1628,25 @@ case 1183: case 1184:
 break;
 case 1194:
 
-      this.$ = $$[$0];
+     this.$ = $$[$0];
 
-      var idx = parser.yy.latestTablePrimaries.length - 1;
-      var tables = [];
-      do {
-        var tablePrimary = parser.yy.latestTablePrimaries[idx];
-        if (!tablePrimary.subQueryAlias) {
-          tables.unshift(tablePrimary.alias ? { identifierChain: tablePrimary.identifierChain, alias: tablePrimary.alias } : { identifierChain: tablePrimary.identifierChain })
-        }
-        idx--;
-      } while (idx >= 0 && tablePrimary.join && !tablePrimary.subQueryAlias)
+     if (parser.yy.latestTablePrimaries.length > 0) {
+       var idx = parser.yy.latestTablePrimaries.length - 1;
+       var tables = [];
+       do {
+         var tablePrimary = parser.yy.latestTablePrimaries[idx];
+         if (!tablePrimary.subQueryAlias) {
+           tables.unshift(tablePrimary.alias ? { identifierChain: tablePrimary.identifierChain, alias: tablePrimary.alias } : { identifierChain: tablePrimary.identifierChain })
+         }
+         idx--;
+       } while (idx >= 0 && tablePrimary.join && !tablePrimary.subQueryAlias)
 
-      if (tables.length > 0) {
-        this.$.suggestJoins = {
-          prependJoin: true,
-          tables: tables
-        };
+       if (tables.length > 0) {
+         this.$.suggestJoins = {
+           prependJoin: true,
+           tables: tables
+         };
+       }
       }
    
 break;
@@ -1662,7 +1664,9 @@ case 1201:
      if ($$[$0].suggestKeywords) {
        this.$.suggestKeywords = $$[$0].suggestKeywords;
      }
-     parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true;
+     if (parser.yy.latestTablePrimaries.length > 0) {
+        parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true;
+     }
    
 break;
 case 1202:
@@ -1679,7 +1683,9 @@ case 1202:
      if ($$[$0-1].suggestKeywords) {
        this.$.suggestKeywords = $$[$0-1].suggestKeywords;
      }
-     parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true;
+     if (parser.yy.latestTablePrimaries.length > 0) {
+       parser.yy.latestTablePrimaries[parser.yy.latestTablePrimaries.length - 1].join = true;
+     }
    
 break;
 case 1203:
@@ -1693,7 +1699,7 @@ case 1212:
      if (!$$[$0-2] && parser.isImpala()) {
        parser.suggestKeywords(['[BROADCAST]', '[SHUFFLE]']);
      }
-     if (!$$[$0-2]) {
+     if (!$$[$0-2] && parser.yy.latestTablePrimaries.length > 0) {
        var idx = parser.yy.latestTablePrimaries.length - 1;
        var tables = [];
        do {