ottoman
Version:
Ottoman Couchbase ODM
68 lines • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.escapeReservedWords = exports.parseStringSelectExpr = exports.escapeFromClause = void 0;
const helpers_1 = require("./helpers");
const replaceList = ['ALL', 'DISTINCT', 'RAW', 'ELEMENT', 'VALUE'];
const escapeFromClause = (str) => {
const trimStr = str.trim();
const [collection, ...rest] = trimStr.split(' ');
const parts = collection.split('.');
const result = [];
for (const part of parts) {
const cleanBacksticks = part.replace(/`/g, '');
result.push(`\`${cleanBacksticks}\``);
}
return `${result.join('.')}${rest.length > 0 ? ` ${rest.map((item) => item.replace(/`/g, '')).join(' ')}` : ''}`;
};
exports.escapeFromClause = escapeFromClause;
/**
* Convert select expression into an Array of selection keys
* */
const parseStringSelectExpr = (expr) => {
if (expr.indexOf(',') === -1 && expr.indexOf(' as ') === -1) {
return [expr];
}
let resultExpr = expr.replace(/[()]/g, '');
replaceList.forEach((value) => {
resultExpr = resultExpr.replace(new RegExp(`/[${value}]/`, 'g'), '');
});
return resultExpr.split(',').map((v) => {
return extractAsValue(v);
});
};
exports.parseStringSelectExpr = parseStringSelectExpr;
/**
* @ignore
* */
const extractAsValue = (expr) => {
const result = expr.toLowerCase().split(' as ');
if (result.length === 2) {
return result[1].trim();
}
return expr.trim();
};
/**
* @ignore
*/
const escapeReservedWords = (field) => {
if (helpers_1.n1qlReservedWords.includes(field.toUpperCase())) {
return `\`${field}\``;
}
if (field.match(/(\-)|(\.)|(\[\d+\])/g)) {
let expr = field;
expr = expr
.split('.')
.map((value) => {
if (helpers_1.n1qlReservedWords.includes(value.toUpperCase())) {
return `\`${value}\``;
}
return value;
})
.join('.');
expr = expr.replace(/([a-z0-9]*\-[a-z0-9]*)/g, '`$&`');
return expr;
}
return field;
};
exports.escapeReservedWords = escapeReservedWords;
//# sourceMappingURL=utils.js.map