123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- 'use strict';
- exports.__esModule = true;
- var _keys = require('babel-runtime/core-js/object/keys');
- var _keys2 = _interopRequireDefault(_keys);
- var _typeof2 = require('babel-runtime/helpers/typeof');
- var _typeof3 = _interopRequireDefault(_typeof2);
- var _assign2 = require('lodash/assign');
- var _assign3 = _interopRequireDefault(_assign2);
- var _assert = require('assert');
- var _assert2 = _interopRequireDefault(_assert);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- // JoinClause
- // -------
- // The "JoinClause" is an object holding any necessary info about a join,
- // including the type, and any associated tables & columns being joined.
- function JoinClause(table, type, schema) {
- this.schema = schema;
- this.table = table;
- this.joinType = type;
- this.and = this;
- this.clauses = [];
- }
- (0, _assign3.default)(JoinClause.prototype, {
- grouping: 'join',
- // Adds an "on" clause to the current join object.
- on: function on(first, operator, second) {
- if (typeof first === 'function') {
- this.clauses.push({
- type: 'onWrapped',
- value: first,
- bool: this._bool()
- });
- return this;
- }
- var data = void 0;
- var bool = this._bool();
- switch (arguments.length) {
- case 1:
- {
- if ((typeof first === 'undefined' ? 'undefined' : (0, _typeof3.default)(first)) === 'object' && typeof first.toSQL !== 'function') {
- var keys = (0, _keys2.default)(first);
- var i = -1;
- var method = bool === 'or' ? 'orOn' : 'on';
- while (++i < keys.length) {
- this[method](keys[i], first[keys[i]]);
- }
- return this;
- } else {
- data = { type: 'onRaw', value: first, bool: bool };
- }
- break;
- }
- case 2:
- data = { type: 'onBasic', column: first, operator: '=', value: operator, bool: bool };break;
- default:
- data = { type: 'onBasic', column: first, operator: operator, value: second, bool: bool };
- }
- this.clauses.push(data);
- return this;
- },
- // Adds a "using" clause to the current join.
- using: function using(column) {
- return this.clauses.push({ type: 'onUsing', column: column, bool: this._bool() });
- },
- /*// Adds an "and on" clause to the current join object.
- andOn() {
- return this.on.apply(this, arguments);
- },*/
- // Adds an "or on" clause to the current join object.
- orOn: function orOn(first, operator, second) {
- return this._bool('or').on.apply(this, arguments);
- },
- onBetween: function onBetween(column, values) {
- (0, _assert2.default)(Array.isArray(values), 'The second argument to onBetween must be an array.');
- (0, _assert2.default)(values.length === 2, 'You must specify 2 values for the onBetween clause');
- this.clauses.push({
- type: 'onBetween',
- column: column,
- value: values,
- bool: this._bool(),
- not: this._not()
- });
- return this;
- },
- onNotBetween: function onNotBetween(column, values) {
- return this._not(true).onBetween(column, values);
- },
- orOnBetween: function orOnBetween(column, values) {
- return this._bool('or').onBetween(column, values);
- },
- orOnNotBetween: function orOnNotBetween(column, values) {
- return this._bool('or')._not(true).onBetween(column, values);
- },
- onIn: function onIn(column, values) {
- if (Array.isArray(values) && values.length === 0) return this.where(this._not());
- this.clauses.push({
- type: 'onIn',
- column: column,
- value: values,
- not: this._not(),
- bool: this._bool()
- });
- return this;
- },
- onNotIn: function onNotIn(column, values) {
- return this._not(true).onIn(column, values);
- },
- orOnIn: function orOnIn(column, values) {
- return this._bool('or').onIn(column, values);
- },
- orOnNotIn: function orOnNotIn(column, values) {
- return this._bool('or')._not(true).onIn(column, values);
- },
- onNull: function onNull(column) {
- this.clauses.push({
- type: 'onNull',
- column: column,
- not: this._not(),
- bool: this._bool()
- });
- return this;
- },
- orOnNull: function orOnNull(callback) {
- return this._bool('or').onNull(callback);
- },
- onNotNull: function onNotNull(callback) {
- return this._not(true).onNull(callback);
- },
- orOnNotNull: function orOnNotNull(callback) {
- return this._not(true)._bool('or').onNull(callback);
- },
- onExists: function onExists(callback) {
- this.clauses.push({
- type: 'onExists',
- value: callback,
- not: this._not(),
- bool: this._bool()
- });
- return this;
- },
- orOnExists: function orOnExists(callback) {
- return this._bool('or').onExists(callback);
- },
- onNotExists: function onNotExists(callback) {
- return this._not(true).onExists(callback);
- },
- orOnNotExists: function orOnNotExists(callback) {
- return this._not(true)._bool('or').onExists(callback);
- },
- // Explicitly set the type of join, useful within a function when creating a grouped join.
- type: function type(_type) {
- this.joinType = _type;
- return this;
- },
- _bool: function _bool(bool) {
- if (arguments.length === 1) {
- this._boolFlag = bool;
- return this;
- }
- var ret = this._boolFlag || 'and';
- this._boolFlag = 'and';
- return ret;
- },
- _not: function _not(val) {
- if (arguments.length === 1) {
- this._notFlag = val;
- return this;
- }
- var ret = this._notFlag;
- this._notFlag = false;
- return ret;
- }
- });
- Object.defineProperty(JoinClause.prototype, 'or', {
- get: function get() {
- return this._bool('or');
- }
- });
- JoinClause.prototype.andOn = JoinClause.prototype.on;
- JoinClause.prototype.andOnIn = JoinClause.prototype.onIn;
- JoinClause.prototype.andOnNotIn = JoinClause.prototype.onNotIn;
- JoinClause.prototype.andOnNull = JoinClause.prototype.onNull;
- JoinClause.prototype.andOnNotNull = JoinClause.prototype.onNotNull;
- JoinClause.prototype.andOnExists = JoinClause.prototype.onExists;
- JoinClause.prototype.andOnNotExists = JoinClause.prototype.onNotExists;
- JoinClause.prototype.andOnBetween = JoinClause.prototype.onBetween;
- JoinClause.prototype.andOnNotBetween = JoinClause.prototype.onNotBetween;
- exports.default = JoinClause;
- module.exports = exports['default'];
|