knex/lib/schema/internal/helpers.js

52 lines
1.3 KiB
JavaScript
Raw Normal View History

const tail = require('lodash/tail');
const { isString } = require('../../util/is');
2016-03-02 17:07:05 +01:00
// Push a new query onto the compiled "sequence" stack,
// creating a new formatter, returning the compiler.
function pushQuery(query) {
2016-03-02 17:07:05 +01:00
if (!query) return;
if (isString(query)) {
query = { sql: query };
2016-03-02 17:07:05 +01:00
}
if (!query.bindings) {
query.bindings = this.formatter.bindings;
}
this.sequence.push(query);
Add queryContext to schema and query builders (#2314) * feat(query-builder): add hookContext for wrapIdentifier * refactor: use isUndefined * test(transaction): test passing of hookContext * feat(runnner): pass context to postProcessResponse * test(runner): test postProcessResponse for raw responses * test(raw): test passing of hookContext * feat: add hookContext to Raw and SchemaBuilder * test(transaction): fix test for hookContext * chore: fix lint error * fix: check for hookContext before calling it * test(transaction): fix hookContext test * chore: remove whitespace * test(hookContext): test cloning of context object * refactor: hookContext -> queryContext * minor: use more descriptive variable name i.e. refactor: `context` => `queryContext` * fix: remove unnecessary checks for query builder * fix(Raw): pass query builder to formatter * fix(SchemaCompiler): pass schema builder to formatter * refactor: add addQueryContext helper * feat: add queryContext to TableBuilder and ColumnBuilder * fix(TableCompiler): pass table builder to formatter * fix(ColumnCompiler): pass column builder to formatter * fix(pushQuery): fix passing builder to formatter * test(Schema|Table|ColumnCompiler): test passing queryContext * fix(SchemaCompiler): pass queryContext to TableCompiler * fix(TableCompiler): pass queryContext to ColumnCompiler * test: add queryContext tests for all schema dialects * test(TableCompiler): test overwriting queryContext from SchemaCompiler * test(Raw): test passing queryContext to wrapIdentifier * tests: run all the tests
2018-02-01 23:41:01 +01:00
this.formatter = this.client.formatter(this._commonBuilder);
}
2016-03-02 17:07:05 +01:00
// Used in cases where we need to push some additional column specific statements.
function pushAdditional(fn) {
const child = new this.constructor(
this.client,
this.tableCompiler,
this.columnBuilder
);
2016-03-02 17:07:05 +01:00
fn.call(child, tail(arguments));
this.sequence.additional = (this.sequence.additional || []).concat(
child.sequence
);
}
// Unshift a new query onto the compiled "sequence" stack,
// creating a new formatter, returning the compiler.
function unshiftQuery(query) {
if (!query) return;
if (isString(query)) {
query = { sql: query };
}
if (!query.bindings) {
query.bindings = this.formatter.bindings;
}
this.sequence.unshift(query);
this.formatter = this.client.formatter(this._commonBuilder);
}
module.exports = {
pushAdditional,
pushQuery,
unshiftQuery,
};