UNPKG

@thinql/to-knex

Version:

Build SQL queries from ThinQL ASTs with Knex.js

46 lines (35 loc) 1.01 kB
const prepareKnexBuilder = (builder, negate = false) => { const { logicalOperator } = builder let { knexBuilder } = builder if (negate) { knexBuilder = knexBuilder._not(true) } if (logicalOperator) { knexBuilder = knexBuilder._bool(logicalOperator === Builder.AND ? 'and' : 'or') } return knexBuilder } export default class Builder { static get AND() { return 'LogicalAndExpression' } static get OR() { return 'LogicalOrExpression' } constructor(knexBuilder, logicalOperator = null) { this.initial = true this.knexBuilder = knexBuilder this.logicalOperator = logicalOperator } addClause(...args) { this.knexBuilder = prepareKnexBuilder(this).where(...args) } addGroup(fn, negate = false, logicalOperator = null) { this.knexBuilder = prepareKnexBuilder(this, negate).where(function () { const knexBuilder = this const builder = new Builder(knexBuilder, logicalOperator) fn(builder) return knexBuilder }) } }