|
|
@@ -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}]});
|