ottoman
Version:
Ottoman Couchbase ODM
60 lines • 2.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getProjectionFields = exports.extractSelect = void 0;
/**
* Extract the values to be used on select clause.
*/
const query_1 = require("../../query");
const constants_1 = require("../constants");
const extractSelect = (select, options = {}, excludeMeta = false, modelKey) => {
const { noCollection } = options;
let selectProjection = [];
if (select) {
selectProjection = Array.isArray(select) ? select : (0, query_1.parseStringSelectExpr)(select);
}
const metadata = excludeMeta ? [] : getMetadata(noCollection, modelKey);
return [...new Set([...selectProjection, ...metadata])];
};
exports.extractSelect = extractSelect;
const getProjectionFields = (selectDot, select = '', options = {}, modelKey = constants_1.MODEL_KEY) => {
let fields = [];
let projection = '';
const metadata = getMetadata(options.noCollection, modelKey);
if (typeof select === 'string') {
if (!select) {
projection = [`\`${selectDot}\`.*`].join(',');
}
else {
projection = [select, ...metadata].join(',');
}
fields = (0, exports.extractSelect)(select, { noCollection: options.noCollection }, true, modelKey);
}
else if (Array.isArray(select) && select.length > 0) {
if (typeof select[0] === 'string') {
projection = [select, ...metadata].join(',');
fields = (0, exports.extractSelect)(select, {
noCollection: options.noCollection,
}, true, modelKey);
}
else {
const selectExpr = (0, query_1.buildSelectArrayExpr)(select);
projection = [selectExpr, ...metadata].join(',');
fields = (0, exports.extractSelect)(selectExpr.replace(/`/g, ''), {
noCollection: options.noCollection,
}, true, modelKey);
}
}
return {
projection,
fields,
};
};
exports.getProjectionFields = getProjectionFields;
const getMetadata = (noCollection, modelKey) => {
const metadataSelect = [];
if (!noCollection && modelKey) {
metadataSelect.push(modelKey);
}
return metadataSelect;
};
//# sourceMappingURL=extract-select.js.map