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
 // limitations under the License.
 
-var version = 19;
+var version = 20;
 importScripts('/static/desktop/js/autocomplete/sqlParseSupport.js?version=' + version);
 importScripts('/static/desktop/js/autocomplete/sql.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 equalIgnoreCase = function (a, b) {
+    return a && b && a.toLowerCase() === b.toLowerCase();
+  };
+
   var initSqlParser = function (parser) {
 
     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.
         if (location.type === 'table' && typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 1 && parser.yy.latestTablePrimaries) {
           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) {
             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) {
           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) {
             // 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 (typeof location.identifierChain !== 'undefined' && location.identifierChain.length > 0 && location.identifierChain.length <= 2 && parser.yy.latestTablePrimaries) {
             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[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';
-              } 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';
                 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';
                 parser.expandIdentifierChain(location, true);
               } else {
@@ -336,7 +340,7 @@ var SqlParseSupport = (function () {
             } else {
               if (parser.yy.subQueries) {
                 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) {
                   location.type = 'subQuery';
@@ -530,12 +534,12 @@ var SqlParseSupport = (function () {
       }
       var expand = function (identifier, expandedChain) {
         var foundPrimary = tablePrimaries.filter(function (tablePrimary) {
-          return hueUtils.equalIgnoreCase(tablePrimary.alias, identifier);
+          return equalIgnoreCase(tablePrimary.alias, identifier);
         });
 
         if (foundPrimary.length === 1 && foundPrimary[0].identifierChain) {
           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) {
             var keySet = expandedChain[0].keySet;
@@ -579,13 +583,13 @@ var SqlParseSupport = (function () {
           if (!lateralView.udtf.expression.columnReference) {
             return;
           }
-          if (hueUtils.equalIgnoreCase(firstIdentifier.name, lateralView.tableAlias) && identifierChain.length > 1) {
+          if (equalIgnoreCase(firstIdentifier.name, lateralView.tableAlias) && identifierChain.length > 1) {
             identifierChain.shift();
             firstIdentifier = identifierChain[0];
             if (columnSuggestion) {
               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 (typeof parser.yy.result.suggestIdentifiers === 'undefined') {
                 parser.yy.result.suggestIdentifiers = [];
@@ -599,9 +603,9 @@ var SqlParseSupport = (function () {
             return identifierChain;
           }
           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'};
-            } 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'};
             } else {
               identifierChain[0] = {name: 'item'};
@@ -638,13 +642,13 @@ var SqlParseSupport = (function () {
         var tables = [];
         tablePrimaries.forEach(function (tablePrimary) {
           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);
-            } 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);
             } 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);
             }
           } else {
@@ -691,24 +695,24 @@ var SqlParseSupport = (function () {
       if (identifierChain.length > 0) {
         for (var i = 0; i < tablePrimaries.length; i++) {
           if (tablePrimaries[i].subQueryAlias) {
-            if (hueUtils.equalIgnoreCase(tablePrimaries[i].subQueryAlias, identifierChain[0].name)) {
+            if (equalIgnoreCase(tablePrimaries[i].subQueryAlias, identifierChain[0].name)) {
               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];
             aliasMatch = true;
             break;
           } 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];
             doubleMatch = true;
             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];
             // No break as first two can still match.
           } 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;
             foundPrimary = tablePrimaries[i];
             break;
@@ -1081,7 +1085,7 @@ var SqlParseSupport = (function () {
         return;
       }
       var tableRef = parser.yy.latestTablePrimaries.filter(function (tablePrimary) {
-        return hueUtils.equalIgnoreCase(tablePrimary.alias, identifier);
+        return equalIgnoreCase(tablePrimary.alias, identifier);
       });
       if (tableRef.length > 0) {
         parser.suggestColumns({identifierChain: [{name: identifier}]});

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

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