Bläddra i källkod

HUE-8577 [autocomplete] Fix issue where the statement type location is added twice

Johan Ahlen 7 år sedan
förälder
incheckning
d5f246a

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

@@ -316,7 +316,7 @@
 <impala>'FUSION'                           { return '<impala>FUSION'; }
 <impala>'GET'                              { return '<impala>GET'; }
 <impala>'GLOBAL'                           { return '<impala>GLOBAL'; }
-<impala>'GRANT'                            { return '<impala>GRANT'; }
+<impala>'GRANT'                            { parser.determineCase(yytext); parser.addStatementTypeLocation('GRANT', yylloc); return '<impala>GRANT'; }
 <impala>'GROUP'                            { return '<impala>GROUP'; }
 <impala>'GROUPING'                         { return '<impala>GROUPING'; }
 <impala>'GROUPS'                           { return '<impala>GROUPS'; }

+ 3 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/jison/sql_grant.jison

@@ -185,6 +185,9 @@ HiveObjectSpecification_EDIT
 
 ImpalaObjectSpecification
  : 'DATABASE' RegularOrBacktickedIdentifier
+   {
+     parser.addDatabaseLocation(@2, [ { name: $2 } ]);
+   }
  | '<impala>TABLE' SchemaQualifiedTableIdentifier
    {
      parser.addTablePrimary($2);

+ 13 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/spec/sqlSpecLocations.js

@@ -890,6 +890,19 @@
     });
 
     describe('Impala specific', function () {
+
+      it('should report locations for "GRANT CREATE ON DATABASE foo TO ROLE bar;"', function () {
+        assertLocations({
+          beforeCursor: 'GRANT CREATE ON DATABASE foo TO ROLE bar;',
+          dialect: 'impala',
+          expectedLocations: [
+            { type: 'statement', location: { first_line: 1, last_line: 1, first_column: 1, last_column: 41 } },
+            { type: 'statementType', location: { first_line: 1, last_line: 1, first_column: 1, last_column: 6 }, identifier: 'GRANT' },
+            { type: 'database', location: { first_line: 1, last_line: 1, first_column: 26, last_column: 29 }, identifierChain: [{ name: 'foo' }] }
+          ]
+        });
+      });
+
       it('should report locations for "SELECT tmp.bc, ROUND(tmp.r, 2) AS r FROM ( SELECT tstDb1.b1.cat AS bc, SUM(tstDb1.b1.price * tran.qua) AS r FROM tstDb1.b1 JOIN [SHUFFLE] tran ON ( tran.b_id = tstDb1.b1.id AND YEAR(tran.tran_d) BETWEEN 2008 AND 2010) GROUP BY tstDb1.b1.cat) tmp ORDER BY r DESC LIMIT 60; |"', function () {
         assertLocations({
           dialect: 'impala',

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlAutocompleteParser.js


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

@@ -1498,6 +1498,17 @@ var SqlParseSupport = (function () {
       if (!parser.isImpala()) {
         return;
       }
+      // Don't add if already there except for SELECT
+      if (identifier !== 'SELECT' && parser.yy.allLocations) {
+        for (var i = parser.yy.allLocations.length - 1; i >= 0; i--) {
+          if (parser.yy.allLocations[i] && parser.yy.allLocations[i].type === 'statement') {
+            break;
+          }
+          if (parser.yy.allLocations[i] && parser.yy.allLocations[i].type === 'statementType') {
+            return;
+          }
+        }
+      }
       var loc = {
         type: 'statementType',
         location: adjustLocationForCursor(location),

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlSyntaxParser.js


Vissa filer visades inte eftersom för många filer har ändrats