@grandlinex/bundle-sqlight
Version:
> SQLight support GrandlineX using better-sqlite3
66 lines (65 loc) • 2.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = buildSearchQ;
const core_1 = require("@grandlinex/core");
const converter_js_1 = require("./converter.js");
function aFilter(key, s) {
switch (s.mode) {
case 'equals':
if (s.value === null) {
return `${key} IS ?`;
}
return `${key} = ?`;
case 'not':
if (s.value === null) {
return `${key} IS NOT ?`;
}
return `${key} != ?`;
case 'like':
return `lower(${key}) like '%' || lower(?) || '%'`;
case 'smallerThan':
return `${key} < ?`;
case 'greaterThan':
return `${key} > ?`;
default:
throw new Error(`Unknown mode: ${s.mode}`);
}
}
function buildSearchQ(config, search, param, searchQ) {
let temp = searchQ;
const keys = Object.keys(search);
if (keys.length > 0) {
const filter = [];
for (const key of keys) {
const s = search[key];
const meta = config.meta.get(key);
if (!meta) {
throw new Error('Missing meta');
}
if ((0, core_1.isQInterfaceSearchAdvanced)(s)) {
filter.push(aFilter(String(key), s));
(0, converter_js_1.convertSpecialFields)(meta, s.value, param);
}
else if ((0, core_1.isQInterfaceSearchAdvancedArr)(s)) {
filter.push(...s.map((e) => {
const ax = aFilter(String(key), e);
(0, converter_js_1.convertSpecialFields)(meta, e.value, param);
return ax;
}));
}
else {
if (search[key] === null) {
filter.push(`${String(key)} is ?`);
}
else {
filter.push(`${String(key)} = ?`);
}
(0, converter_js_1.convertSpecialFields)(meta, search[key], param);
}
}
if (filter.length > 0) {
temp = ` WHERE ${filter.join(' AND ')}`;
}
}
return temp;
}