UNPKG

@grandlinex/bundle-sqlight

Version:

> SQLight support GrandlineX using better-sqlite3

66 lines (65 loc) 2.2 kB
"use strict"; 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; }