Browse Source

HUE-6568 [editor] Fix the column location marking

This drops the dependency on hueUtils from sqlParseSupport.js. The web worker is not aware of hueUtils and adding it to the worker would require additional dependencies.
Johan Ahlen 8 years ago
parent
commit
7869602e75

+ 1 - 1
desktop/core/src/desktop/static/desktop/js/aceSqlWorker.js

@@ -14,7 +14,7 @@
 // See the License for the specific language governing permissions and
 // See the License for the specific language governing permissions and
 // limitations under the License.
 // limitations under the License.
 
 
-var version = 19;
+var version = 20;
 importScripts('/static/desktop/js/autocomplete/sqlParseSupport.js?version=' + version);
 importScripts('/static/desktop/js/autocomplete/sqlParseSupport.js?version=' + version);
 importScripts('/static/desktop/js/autocomplete/sql.js?version=' + version);
 importScripts('/static/desktop/js/autocomplete/sql.js?version=' + version);
 importScripts('/static/desktop/js/sqlFunctions.js?version=' + version);
 importScripts('/static/desktop/js/sqlFunctions.js?version=' + version);

+ 28 - 24
desktop/core/src/desktop/static/desktop/js/autocomplete/sqlParseSupport.js

@@ -16,6 +16,10 @@
 
 
 var SqlParseSupport = (function () {
 var SqlParseSupport = (function () {
 
 
+  var equalIgnoreCase = function (a, b) {
+    return a && b && a.toLowerCase() === b.toLowerCase();
+  };
+
   var initSqlParser = function (parser) {
   var initSqlParser = function (parser) {
 
 
     var SIMPLE_TABLE_REF_SUGGESTIONS = ['suggestJoinConditions', 'suggestAggregateFunctions', 'suggestFilters', 'suggestGroupBys', 'suggestOrderBys'];
     var SIMPLE_TABLE_REF_SUGGESTIONS = ['suggestJoinConditions', 'suggestAggregateFunctions', 'suggestFilters', 'suggestGroupBys', 'suggestOrderBys'];
@@ -297,7 +301,7 @@ var SqlParseSupport = (function () {
         // In this testArray would be marked a type table so we need to switch it to column.
         // In this testArray would be marked a type table so we need to switch it to column.
         if (location.type === 'table' && typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 1 && parser.yy.latestTablePrimaries) {
         if (location.type === 'table' && typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 1 && parser.yy.latestTablePrimaries) {
           var found = parser.yy.latestTablePrimaries.filter(function (primary) {
           var found = parser.yy.latestTablePrimaries.filter(function (primary) {
-            return hueUtils.equalIgnoreCase(primary.alias, location.identifierChain[0].name);
+            return equalIgnoreCase(primary.alias, location.identifierChain[0].name);
           });
           });
           if (found.length > 0) {
           if (found.length > 0) {
             location.type = 'column';
             location.type = 'column';
@@ -306,7 +310,7 @@ var SqlParseSupport = (function () {
 
 
         if (location.type === 'database' && typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 0 && parser.yy.latestTablePrimaries) {
         if (location.type === 'database' && typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 0 && parser.yy.latestTablePrimaries) {
           var foundAlias = parser.yy.latestTablePrimaries.filter(function (primary) {
           var foundAlias = parser.yy.latestTablePrimaries.filter(function (primary) {
-            return hueUtils.equalIgnoreCase(primary.alias, location.identifierChain[0].name);
+            return equalIgnoreCase(primary.alias, location.identifierChain[0].name);
           });
           });
           if (foundAlias.length > 0) {
           if (foundAlias.length > 0) {
             // Impala complex reference in FROM clause, i.e. FROM testTable t, t.testMap tm
             // Impala complex reference in FROM clause, i.e. FROM testTable t, t.testMap tm
@@ -318,15 +322,15 @@ var SqlParseSupport = (function () {
         if (location.type === 'unknown') {
         if (location.type === 'unknown') {
           if (typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 0 && location.identifierChain.length <= 2 && parser.yy.latestTablePrimaries) {
           if (typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 0 && location.identifierChain.length <= 2 && parser.yy.latestTablePrimaries) {
             var found = parser.yy.latestTablePrimaries.filter(function (primary) {
             var found = parser.yy.latestTablePrimaries.filter(function (primary) {
-              return hueUtils.equalIgnoreCase(primary.alias, location.identifierChain[0].name) || (primary.identifierChain && hueUtils.equalIgnoreCase(primary.identifierChain[0].name, location.identifierChain[0].name));
+              return equalIgnoreCase(primary.alias, location.identifierChain[0].name) || (primary.identifierChain && equalIgnoreCase(primary.identifierChain[0].name, location.identifierChain[0].name));
             });
             });
             if (found.length > 0) {
             if (found.length > 0) {
-              if (found[0].identifierChain.length > 1 && location.identifierChain.length === 1 && hueUtils.equalIgnoreCase(found[0].identifierChain[0].name, location.identifierChain[0].name)) {
+              if (found[0].identifierChain.length > 1 && location.identifierChain.length === 1 && equalIgnoreCase(found[0].identifierChain[0].name, location.identifierChain[0].name)) {
                 location.type = 'database';
                 location.type = 'database';
-              } else if (found[0].alias && hueUtils.equalIgnoreCase(location.identifierChain[0].name, found[0].alias) && location.identifierChain.length > 1) {
+              } else if (found[0].alias && equalIgnoreCase(location.identifierChain[0].name, found[0].alias) && location.identifierChain.length > 1) {
                 location.type = 'column';
                 location.type = 'column';
                 parser.expandIdentifierChain(location, true);
                 parser.expandIdentifierChain(location, true);
-              } else if (!found[0].alias && found[0].identifierChain && hueUtils.equalIgnoreCase(location.identifierChain[0].name, found[0].identifierChain[found[0].identifierChain.length - 1].name) && location.identifierChain.length > 1) {
+              } else if (!found[0].alias && found[0].identifierChain && equalIgnoreCase(location.identifierChain[0].name, found[0].identifierChain[found[0].identifierChain.length - 1].name) && location.identifierChain.length > 1) {
                 location.type = 'column';
                 location.type = 'column';
                 parser.expandIdentifierChain(location, true);
                 parser.expandIdentifierChain(location, true);
               } else {
               } else {
@@ -336,7 +340,7 @@ var SqlParseSupport = (function () {
             } else {
             } else {
               if (parser.yy.subQueries) {
               if (parser.yy.subQueries) {
                 found = parser.yy.subQueries.filter(function (subQuery) {
                 found = parser.yy.subQueries.filter(function (subQuery) {
-                  return hueUtils.equalIgnoreCase(subQuery.alias, location.identifierChain[0].name);
+                  return equalIgnoreCase(subQuery.alias, location.identifierChain[0].name);
                 });
                 });
                 if (found.length > 0) {
                 if (found.length > 0) {
                   location.type = 'subQuery';
                   location.type = 'subQuery';
@@ -530,12 +534,12 @@ var SqlParseSupport = (function () {
       }
       }
       var expand = function (identifier, expandedChain) {
       var expand = function (identifier, expandedChain) {
         var foundPrimary = tablePrimaries.filter(function (tablePrimary) {
         var foundPrimary = tablePrimaries.filter(function (tablePrimary) {
-          return hueUtils.equalIgnoreCase(tablePrimary.alias, identifier);
+          return equalIgnoreCase(tablePrimary.alias, identifier);
         });
         });
 
 
         if (foundPrimary.length === 1 && foundPrimary[0].identifierChain) {
         if (foundPrimary.length === 1 && foundPrimary[0].identifierChain) {
           var parentPrimary = tablePrimaries.filter(function (tablePrimary) {
           var parentPrimary = tablePrimaries.filter(function (tablePrimary) {
-            return hueUtils.equalIgnoreCase(tablePrimary.alias, foundPrimary[0].identifierChain[0].name);
+            return equalIgnoreCase(tablePrimary.alias, foundPrimary[0].identifierChain[0].name);
           });
           });
           if (parentPrimary.length === 1) {
           if (parentPrimary.length === 1) {
             var keySet = expandedChain[0].keySet;
             var keySet = expandedChain[0].keySet;
@@ -579,13 +583,13 @@ var SqlParseSupport = (function () {
           if (!lateralView.udtf.expression.columnReference) {
           if (!lateralView.udtf.expression.columnReference) {
             return;
             return;
           }
           }
-          if (hueUtils.equalIgnoreCase(firstIdentifier.name, lateralView.tableAlias) && identifierChain.length > 1) {
+          if (equalIgnoreCase(firstIdentifier.name, lateralView.tableAlias) && identifierChain.length > 1) {
             identifierChain.shift();
             identifierChain.shift();
             firstIdentifier = identifierChain[0];
             firstIdentifier = identifierChain[0];
             if (columnSuggestion) {
             if (columnSuggestion) {
               delete parser.yy.result.suggestKeywords;
               delete parser.yy.result.suggestKeywords;
             }
             }
-          } else if (hueUtils.equalIgnoreCase(firstIdentifier.name, lateralView.tableAlias) && identifierChain.length === 1 && typeof parser.yy.result.suggestColumns !== 'undefined') {
+          } else if (equalIgnoreCase(firstIdentifier.name, lateralView.tableAlias) && identifierChain.length === 1 && typeof parser.yy.result.suggestColumns !== 'undefined') {
             if (columnSuggestion) {
             if (columnSuggestion) {
               if (typeof parser.yy.result.suggestIdentifiers === 'undefined') {
               if (typeof parser.yy.result.suggestIdentifiers === 'undefined') {
                 parser.yy.result.suggestIdentifiers = [];
                 parser.yy.result.suggestIdentifiers = [];
@@ -599,9 +603,9 @@ var SqlParseSupport = (function () {
             return identifierChain;
             return identifierChain;
           }
           }
           if (lateralView.columnAliases.indexOf(firstIdentifier.name) !== -1) {
           if (lateralView.columnAliases.indexOf(firstIdentifier.name) !== -1) {
-            if (lateralView.columnAliases.length === 2 && lateralView.udtf.function.toLowerCase() === 'explode' && hueUtils.equalIgnoreCase(firstIdentifier.name, lateralView.columnAliases[0])) {
+            if (lateralView.columnAliases.length === 2 && lateralView.udtf.function.toLowerCase() === 'explode' && equalIgnoreCase(firstIdentifier.name, lateralView.columnAliases[0])) {
               identifierChain[0] = {name: 'key'};
               identifierChain[0] = {name: 'key'};
-            } else if (lateralView.columnAliases.length === 2 && lateralView.udtf.function.toLowerCase() === 'explode' && hueUtils.equalIgnoreCase(firstIdentifier.name, lateralView.columnAliases[1])) {
+            } else if (lateralView.columnAliases.length === 2 && lateralView.udtf.function.toLowerCase() === 'explode' && equalIgnoreCase(firstIdentifier.name, lateralView.columnAliases[1])) {
               identifierChain[0] = {name: 'value'};
               identifierChain[0] = {name: 'value'};
             } else {
             } else {
               identifierChain[0] = {name: 'item'};
               identifierChain[0] = {name: 'item'};
@@ -638,13 +642,13 @@ var SqlParseSupport = (function () {
         var tables = [];
         var tables = [];
         tablePrimaries.forEach(function (tablePrimary) {
         tablePrimaries.forEach(function (tablePrimary) {
           if (identifierChain.length > 1 && !tablePrimary.subQueryAlias) {
           if (identifierChain.length > 1 && !tablePrimary.subQueryAlias) {
-            if (identifierChain.length === 2 && hueUtils.equalIgnoreCase(tablePrimary.alias, identifierChain[0].name)) {
+            if (identifierChain.length === 2 && equalIgnoreCase(tablePrimary.alias, identifierChain[0].name)) {
               addCleanTablePrimary(tables, tablePrimary);
               addCleanTablePrimary(tables, tablePrimary);
-            } else if (identifierChain.length === 2 && hueUtils.equalIgnoreCase(tablePrimary.identifierChain[0].name, identifierChain[0].name)) {
+            } else if (identifierChain.length === 2 && equalIgnoreCase(tablePrimary.identifierChain[0].name, identifierChain[0].name)) {
               addCleanTablePrimary(tables, tablePrimary);
               addCleanTablePrimary(tables, tablePrimary);
             } else if (identifierChain.length === 3 && tablePrimary.identifierChain.length > 1 &&
             } else if (identifierChain.length === 3 && tablePrimary.identifierChain.length > 1 &&
-              hueUtils.equalIgnoreCase(tablePrimary.identifierChain[0].name, identifierChain[0].name) &&
-              hueUtils.equalIgnoreCase(tablePrimary.identifierChain[1].name, identifierChain[1].name)) {
+              equalIgnoreCase(tablePrimary.identifierChain[0].name, identifierChain[0].name) &&
+              equalIgnoreCase(tablePrimary.identifierChain[1].name, identifierChain[1].name)) {
               addCleanTablePrimary(tables, tablePrimary);
               addCleanTablePrimary(tables, tablePrimary);
             }
             }
           } else {
           } else {
@@ -691,24 +695,24 @@ var SqlParseSupport = (function () {
       if (identifierChain.length > 0) {
       if (identifierChain.length > 0) {
         for (var i = 0; i < tablePrimaries.length; i++) {
         for (var i = 0; i < tablePrimaries.length; i++) {
           if (tablePrimaries[i].subQueryAlias) {
           if (tablePrimaries[i].subQueryAlias) {
-            if (hueUtils.equalIgnoreCase(tablePrimaries[i].subQueryAlias, identifierChain[0].name)) {
+            if (equalIgnoreCase(tablePrimaries[i].subQueryAlias, identifierChain[0].name)) {
               foundPrimary = tablePrimaries[i];
               foundPrimary = tablePrimaries[i];
             }
             }
-          } else if (hueUtils.equalIgnoreCase(tablePrimaries[i].alias, identifierChain[0].name)) {
+          } else if (equalIgnoreCase(tablePrimaries[i].alias, identifierChain[0].name)) {
             foundPrimary = tablePrimaries[i];
             foundPrimary = tablePrimaries[i];
             aliasMatch = true;
             aliasMatch = true;
             break;
             break;
           } else if (tablePrimaries[i].identifierChain.length > 1 && identifierChain.length > 1 &&
           } else if (tablePrimaries[i].identifierChain.length > 1 && identifierChain.length > 1 &&
-            hueUtils.equalIgnoreCase(tablePrimaries[i].identifierChain[0].name, identifierChain[0].name) &&
-            hueUtils.equalIgnoreCase(tablePrimaries[i].identifierChain[1].name, identifierChain[1].name)) {
+            equalIgnoreCase(tablePrimaries[i].identifierChain[0].name, identifierChain[0].name) &&
+            equalIgnoreCase(tablePrimaries[i].identifierChain[1].name, identifierChain[1].name)) {
             foundPrimary = tablePrimaries[i];
             foundPrimary = tablePrimaries[i];
             doubleMatch = true;
             doubleMatch = true;
             break;
             break;
-          } else if (!foundPrimary && hueUtils.equalIgnoreCase(tablePrimaries[i].identifierChain[0].name, identifierChain[0].name) && identifierChain.length > (isColumnLocation ? 1 : 0)) {
+          } else if (!foundPrimary && equalIgnoreCase(tablePrimaries[i].identifierChain[0].name, identifierChain[0].name) && identifierChain.length > (isColumnLocation ? 1 : 0)) {
             foundPrimary = tablePrimaries[i];
             foundPrimary = tablePrimaries[i];
             // No break as first two can still match.
             // No break as first two can still match.
           } else if (!foundPrimary && tablePrimaries[i].identifierChain.length > 1
           } else if (!foundPrimary && tablePrimaries[i].identifierChain.length > 1
-            && hueUtils.equalIgnoreCase(tablePrimaries[i].identifierChain[tablePrimaries[i].identifierChain.length - 1].name, identifierChain[0].name)) {
+            && equalIgnoreCase(tablePrimaries[i].identifierChain[tablePrimaries[i].identifierChain.length - 1].name, identifierChain[0].name)) {
             // This is for the case SELECT baa. FROM bla.baa, blo.boo;
             // This is for the case SELECT baa. FROM bla.baa, blo.boo;
             foundPrimary = tablePrimaries[i];
             foundPrimary = tablePrimaries[i];
             break;
             break;
@@ -1081,7 +1085,7 @@ var SqlParseSupport = (function () {
         return;
         return;
       }
       }
       var tableRef = parser.yy.latestTablePrimaries.filter(function (tablePrimary) {
       var tableRef = parser.yy.latestTablePrimaries.filter(function (tablePrimary) {
-        return hueUtils.equalIgnoreCase(tablePrimary.alias, identifier);
+        return equalIgnoreCase(tablePrimary.alias, identifier);
       });
       });
       if (tableRef.length > 0) {
       if (tableRef.length > 0) {
         parser.suggestColumns({identifierChain: [{name: identifier}]});
         parser.suggestColumns({identifierChain: [{name: identifier}]});

+ 2 - 2
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -3540,7 +3540,7 @@
         aceSqlWorker.terminate();
         aceSqlWorker.terminate();
       });
       });
 
 
-      var lastKnownLocations = [];
+      var lastKnownLocations = {};
 
 
       var locationsSub = huePubSub.subscribe('get.active.editor.locations', function () {
       var locationsSub = huePubSub.subscribe('get.active.editor.locations', function () {
         huePubSub.publish('set.active.editor.locations', lastKnownLocations);
         huePubSub.publish('set.active.editor.locations', lastKnownLocations);
@@ -3556,7 +3556,7 @@
           return;
           return;
         }
         }
 
 
-        var lastKnownLocations = {
+        lastKnownLocations = {
           id: self.editorId,
           id: self.editorId,
           type: self.snippet.type(),
           type: self.snippet.type(),
           defaultDatabase: self.snippet.database(),
           defaultDatabase: self.snippet.database(),