[editor] Support commenting variables
@@ -612,15 +612,19 @@ var EditorViewModel = (function() {
if (self.type() == 'pig') {
matches = self.getPigParameters();
} else {
- var re = /(?:^|\W)\${(\w*\=?[\w\s]*)}/g;
- while (match = re.exec(self.statement_raw())) {
- if (match[1].indexOf('=') > -1) {
- var splittedName = match[1].split('=');
- matches[splittedName[0]] = matches[splittedName[0]] || splittedName[1];
- }
- else {
- matches[match[1]] = '';
+ var re = /(?:^|\W)\${(\w*)\=?([\w\s]*)}/g;
+ var reComment = /(^\s*--.*)|(\/\*[\s\S]*?\*\/)/gm;
+ var statement = self.statement_raw();
+ var matchComment = reComment.exec(statement);
+ //if re is n & reComment is m
+ //finding variables is O(n+m)
+ while (match = re.exec(statement)) {
+ while (matchComment && match.index > matchComment.index + matchComment[0].length) { //comments before our match
+ matchComment = reComment.exec(statement);
}
+ var isWithinComment = matchComment && match.index >= matchComment.index;
+ if (isWithinComment) continue;
+ matches[match[1]] = matches[match[1]] || match[2];
}
}
return Object.keys(matches).map(function (match) {
@@ -653,9 +657,17 @@ var EditorViewModel = (function() {
});
self.statement = ko.computed(function () {
var statement = self.isSqlDialect() ? (self.selectedStatement() ? self.selectedStatement() : (self.positionStatement() !== null ? self.positionStatement().statement : self.statement_raw())) : self.statement_raw();
- $.each(self.variables(), function (index, variable) {
- statement = statement.replace(RegExp("([^\\\\])?\\$" + (self.hasCurlyBracketParameters() ? "{" : "") + variable.name() + "(=[^}]*)?" + (self.hasCurlyBracketParameters() ? "}" : ""), "g"), "$1" + (variable.value() || variable.defaultValue()));
+ var variables = self.variables().reduce(function (variables, variable) {
+ variables[variable.name()] = variable;
+ return variables;
+ }, {});
+ if (self.variables().length) {
+ var variablesString = self.variables().map(function(variable) { return variable.name(); }).join("|");
+ statement = statement.replace(RegExp("([^\\\\])?\\$" + (self.hasCurlyBracketParameters() ? "{(" : "(") + variablesString + ")(=[^}]*)?" + (self.hasCurlyBracketParameters() ? "}" : ""), "g"), function(match, p1, p2){
+ var variable = variables[p2];
+ return p1 + (variable && (variable.value() || variable.defaultValue()));
});
+ }
return statement;
});
