UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

28 lines (26 loc) 1.01 kB
import { applyFilter } from "../lib/apply-query/filter/index.js"; //#region src/database/run-ast/utils/apply-case-when.ts function applyCaseWhen({ columnCases, table, aliasMap, cases, column, alias, permissions }, { knex, schema }) { const caseQuery = knex.queryBuilder(); applyFilter(knex, schema, caseQuery, { _or: columnCases }, table, aliasMap, cases, permissions); const compiler = knex.client.queryCompiler(caseQuery); const sqlParts = []; if (!compiler.grouped.where) return column; for (const statement of compiler.grouped.where) { const val = compiler[statement.type](statement); if (val) { if (sqlParts.length > 0) sqlParts.push(statement.bool); sqlParts.push(val); } } const sql = sqlParts.length > 0 ? sqlParts.join(" ") : "1"; const bindings = [...caseQuery.toSQL().bindings, column]; let rawCase = `(CASE WHEN ${sql} THEN ?? END)`; if (alias) { rawCase += " AS ??"; bindings.push(alias); } return knex.raw(rawCase, bindings); } //#endregion export { applyCaseWhen };