objection
Version:
An SQL-friendly ORM for Node.js
780 lines (657 loc) • 18.8 kB
JavaScript
import queryBuilderOperation from './decorators/queryBuilderOperation';
import QueryBuilderOperationSupport from './QueryBuilderOperationSupport';
import KnexOperation from './operations/KnexOperation';
import SelectOperation from './operations/SelectOperation';
import WhereRefOperation from './operations/WhereRefOperation';
import WhereCompositeOperation from './operations/WhereCompositeOperation';
import WhereInCompositeOperation from './operations/WhereInCompositeOperation';
import WhereInCompositeSqliteOperation from './operations/WhereInCompositeSqliteOperation';
import WhereJsonPostgresOperation from './operations/jsonApi/WhereJsonPostgresOperation';
import WhereJsonHasPostgresOperation from './operations/jsonApi/WhereJsonHasPostgresOperation';
import WhereJsonFieldPostgresOperation from './operations/jsonApi/WhereJsonFieldPostgresOperation';
import WhereJsonNotObjectPostgresOperation from './operations/jsonApi/WhereJsonNotObjectPostgresOperation';
/**
* This class is a thin wrapper around knex query builder. This class allows us to add our own
* query builder methods without monkey patching knex query builder.
*/
export default class QueryBuilderBase extends QueryBuilderOperationSupport {
static SelectSelector = SelectOperation;
static WhereSelector = /where|orWhere|andWhere/;
static FromSelector = /^(from|into|table)$/;
/**
* @return {boolean}
*/
isSelectAll() {
return !this.has(QueryBuilderBase.SelectSelector) && !this.has(QueryBuilderBase.WhereSelector);
}
/**
* @param {function} func
* @returns {QueryBuilderBase}
*/
modify(func) {
if (!func) {
return this;
}
if (arguments.length === 1) {
func.call(this, this);
} else {
let args = new Array(arguments.length);
args[0] = this;
for (let i = 1, l = args.length; i < l; ++i) {
args[i] = arguments[i];
}
func.apply(this, args);
}
return this;
}
/**
* @param {Transaction} trx
* @returns {QueryBuilderBase}
*/
transacting(trx) {
this._context.knex = trx || null;
return this;
}
/**
* @returns {QueryBuilderBase}
*/
(SelectOperation)
select(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
insert(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
update(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
delete(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation, 'delete')
del(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
forUpdate(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
forShare(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
as(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(SelectOperation)
columns(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(SelectOperation)
column(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
from(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
fromJS(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
into(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
withSchema(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
table(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(SelectOperation)
distinct(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
join(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
joinRaw(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
innerJoin(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
leftJoin(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
leftOuterJoin(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
rightJoin(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
rightOuterJoin(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
outerJoin(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
fullOuterJoin(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
crossJoin(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
where(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
andWhere(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orWhere(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
whereNot(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orWhereNot(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
whereRaw(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
whereWrapped(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
havingWrapped(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orWhereRaw(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
whereExists(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orWhereExists(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
whereNotExists(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orWhereNotExists(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
whereIn(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orWhereIn(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
whereNotIn(...args) {}
/**
*/
(KnexOperation)
orWhereNotIn(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
whereNull(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orWhereNull(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
whereNotNull(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orWhereNotNull(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
whereBetween(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
andWhereBetween(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
whereNotBetween(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
andWhereNotBetween(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orWhereBetween(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orWhereNotBetween(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
groupBy(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
groupByRaw(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orderBy(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orderByRaw(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
union(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
unionAll(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
having(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
havingRaw(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orHaving(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
orHavingRaw(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
offset(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
limit(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(SelectOperation)
count(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(SelectOperation)
countDistinct(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(SelectOperation)
min(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(SelectOperation)
max(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(SelectOperation)
sum(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(SelectOperation)
sumDistinct(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(SelectOperation)
avg(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(SelectOperation)
avgDistinct(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
debug(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
returning(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
truncate(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
connection(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
options(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
columnInfo(...args) {}
/**
* @returns {QueryBuilderBase}
*/
(KnexOperation)
with(...args) {}
/**
* @returns {QueryBuilderBase}
*/
([WhereRefOperation, {bool: 'and'}])
whereRef(lhs, op, rhs) {}
/**
* @returns {QueryBuilderBase}
*/
([WhereRefOperation, {bool: 'or'}])
orWhereRef(lhs, op, rhs) {}
/**
* @returns {QueryBuilderBase}
*/
(WhereCompositeOperation)
whereComposite(cols, op, values) {}
/**
* @returns {QueryBuilderBase}
*/
({
default: WhereInCompositeOperation,
sqlite3: WhereInCompositeSqliteOperation
})
whereInComposite(columns, values) {}
/**
* @param {FieldExpression} fieldExpression
* @param {Object|Array|FieldExpression} jsonObjectOrFieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonPostgresOperation, {operator: '=', bool: 'and'}])
whereJsonEquals(fieldExpression, jsonObjectOrFieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @param {Object|Array|FieldExpression} jsonObjectOrFieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonPostgresOperation, {operator: '=', bool: 'or'}])
orWhereJsonEquals(fieldExpression, jsonObjectOrFieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @param {Object|Array|FieldExpression} jsonObjectOrFieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonPostgresOperation, {operator: '!=', bool: 'and'}])
whereJsonNotEquals(fieldExpression, jsonObjectOrFieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @param {Object|Array|FieldExpression} jsonObjectOrFieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonPostgresOperation, {operator: '!=', bool: 'or'}])
orWhereJsonNotEquals(fieldExpression, jsonObjectOrFieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @param {Object|Array|FieldExpression} jsonObjectOrFieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonPostgresOperation, {operator: '@>', bool: 'and'}])
whereJsonSupersetOf(fieldExpression, jsonObjectOrFieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @param {Object|Array|FieldExpression} jsonObjectOrFieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonPostgresOperation, {operator: '@>', bool: 'or'}])
orWhereJsonSupersetOf(fieldExpression, jsonObjectOrFieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @param {Object|Array|FieldExpression} jsonObjectOrFieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonPostgresOperation, {operator: '@>', bool: 'and', prefix: 'not'}])
whereJsonNotSupersetOf(fieldExpression, jsonObjectOrFieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @param {Object|Array|FieldExpression} jsonObjectOrFieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonPostgresOperation, {operator: '@>', bool: 'or', prefix: 'not'}])
orWhereJsonNotSupersetOf(fieldExpression, jsonObjectOrFieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @param {Object|Array|FieldExpression} jsonObjectOrFieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonPostgresOperation, {operator: '<@', bool: 'and'}])
whereJsonSubsetOf(fieldExpression, jsonObjectOrFieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @param {Object|Array|FieldExpression} jsonObjectOrFieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonPostgresOperation, {operator: '<@', bool: 'or'}])
orWhereJsonSubsetOf(fieldExpression, jsonObjectOrFieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @param {Object|Array|FieldExpression} jsonObjectOrFieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonPostgresOperation, {operator: '<@', bool: 'and', prefix: 'not'}])
whereJsonNotSubsetOf(fieldExpression, jsonObjectOrFieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @param {Object|Array|FieldExpression} jsonObjectOrFieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonPostgresOperation, {operator: '<@', bool: 'or', prefix: 'not'}])
orWhereJsonNotSubsetOf(fieldExpression, jsonObjectOrFieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @returns {QueryBuilderBase}
*/
whereJsonIsArray(fieldExpression) {
return this.whereJsonSupersetOf(fieldExpression, []);
}
/**
* @param {FieldExpression} fieldExpression
* @returns {QueryBuilderBase}
*/
orWhereJsonIsArray(fieldExpression) {
return this.orWhereJsonSupersetOf(fieldExpression, []);
}
/**
* @param {FieldExpression} fieldExpression
* @returns {QueryBuilderBase}
*/
whereJsonIsObject(fieldExpression) {
return this.whereJsonSupersetOf(fieldExpression, {});
}
/**
* @param {FieldExpression} fieldExpression
* @returns {QueryBuilderBase}
*/
orWhereJsonIsObject(fieldExpression) {
return this.orWhereJsonSupersetOf(fieldExpression, {});
}
/**
* @param {FieldExpression} fieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonNotObjectPostgresOperation, {bool: 'and', compareValue: []}])
whereJsonNotArray(fieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonNotObjectPostgresOperation, {bool: 'or', compareValue: []}])
orWhereJsonNotArray(fieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonNotObjectPostgresOperation, {bool: 'and', compareValue: {}}])
whereJsonNotObject(fieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @returns {QueryBuilderBase}
*/
([WhereJsonNotObjectPostgresOperation, {bool: 'or', compareValue: {}}])
orWhereJsonNotObject(fieldExpression) {}
/**
* @param {FieldExpression} fieldExpression
* @param {string|Array.<string>} keys
* @returns {QueryBuilderBase}
*/
([WhereJsonHasPostgresOperation, {bool: 'and', operator: '?|'}])
whereJsonHasAny(fieldExpression, keys) {}
/**
* @param {FieldExpression} fieldExpression
* @param {string|Array.<string>} keys
* @returns {QueryBuilderBase}
*/
([WhereJsonHasPostgresOperation, {bool: 'or', operator: '?|'}])
orWhereJsonHasAny(fieldExpression, keys) {}
/**
* @param {FieldExpression} fieldExpression
* @param {string|Array.<string>} keys
* @returns {QueryBuilderBase}
*/
([WhereJsonHasPostgresOperation, {bool: 'and', operator: '?&'}])
whereJsonHasAll(fieldExpression, keys) {}
/**
* @param {FieldExpression} fieldExpression
* @param {string|Array.<string>} keys
* @returns {QueryBuilderBase}
*/
([WhereJsonHasPostgresOperation, {bool: 'or', operator: '?&'}])
orWhereJsonHasAll(fieldExpression, keys) {}
/**
* @param {FieldExpression} fieldExpression
* @param {string} operator
* @param {boolean|Number|string|null} value
* @returns {QueryBuilderBase}
*/
([WhereJsonFieldPostgresOperation, {bool: 'and'}])
whereJsonField(fieldExpression, operator, value) {}
/**
* @param {FieldExpression} fieldExpression
* @param {string} operator
* @param {boolean|Number|string|null} value
* @returns {QueryBuilderBase}
*/
([WhereJsonFieldPostgresOperation, {bool: 'or'}])
orWhereJsonField(fieldExpression, operator, value) {}
}