}
}
function parseExpr(expr) {
- var result = {fn: null, modifier: ''},
- fieldName = expr,
- bracketPos = expr.indexOf('(');
+ if (!expr) {
+ return;
+ }
+ var splitAs = expr.split(' AS '),
+ info = {fn: null, modifier: ''},
+ fieldName = splitAs[0],
+ bracketPos = splitAs[0].indexOf('(');
if (bracketPos >= 0) {
- var parsed = expr.substr(bracketPos).match(/[ ]?([A-Z]+[ ]+)?([\w.:]+)/);
+ var parsed = splitAs[0].substr(bracketPos).match(/[ ]?([A-Z]+[ ]+)?([\w.:]+)/);
fieldName = parsed[2];
- result.fn = _.find(CRM.crmSearchAdmin.functions, {name: expr.substring(0, bracketPos)});
- result.modifier = _.trim(parsed[1]);
+ info.fn = _.find(CRM.crmSearchAdmin.functions, {name: expr.substring(0, bracketPos)});
+ info.modifier = _.trim(parsed[1]);
}
- var fieldAndJoin = expr ? getFieldAndJoin(fieldName, searchEntity) : undefined;
- if (fieldAndJoin.field) {
+ var fieldAndJoin = getFieldAndJoin(fieldName, searchEntity);
+ if (fieldAndJoin) {
var split = fieldName.split(':'),
prefixPos = split[0].lastIndexOf(fieldAndJoin.field.name);
- result.path = split[0];
- result.prefix = prefixPos > 0 ? result.path.substring(0, prefixPos) : '';
- result.suffix = !split[1] ? '' : ':' + split[1];
- result.field = fieldAndJoin.field;
- result.join = fieldAndJoin.join;
+ info.path = split[0];
+ info.prefix = prefixPos > 0 ? info.path.substring(0, prefixPos) : '';
+ info.suffix = !split[1] ? '' : ':' + split[1];
+ info.field = fieldAndJoin.field;
+ info.join = fieldAndJoin.join;
+ info.alias = splitAs[1] || (info.fn ? info.fn.name + ':' + info.path + info.suffix : split[0]);
}
- return result;
+ return info;
}
return {
getEntity: getEntity,