File: /var/dev/nowruzgan/rest/node_modules/knex/lib/raw.js
'use strict';
exports.__esModule = true;
var _isNumber2 = require('lodash/isNumber');
var _isNumber3 = _interopRequireDefault(_isNumber2);
var _isUndefined2 = require('lodash/isUndefined');
var _isUndefined3 = _interopRequireDefault(_isUndefined2);
var _isObject2 = require('lodash/isObject');
var _isObject3 = _interopRequireDefault(_isObject2);
var _isPlainObject2 = require('lodash/isPlainObject');
var _isPlainObject3 = _interopRequireDefault(_isPlainObject2);
var _reduce2 = require('lodash/reduce');
var _reduce3 = _interopRequireDefault(_reduce2);
var _assign2 = require('lodash/assign');
var _assign3 = _interopRequireDefault(_assign2);
var _inherits = require('inherits');
var _inherits2 = _interopRequireDefault(_inherits);
var _helpers = require('./helpers');
var helpers = _interopRequireWildcard(_helpers);
var _events = require('events');
var _debug = require('debug');
var _debug2 = _interopRequireDefault(_debug);
var _formatter = require('./formatter');
var _formatter2 = _interopRequireDefault(_formatter);
var _uuid = require('uuid');
var _uuid2 = _interopRequireDefault(_uuid);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// Raw
// -------
var debugBindings = (0, _debug2.default)('knex:bindings');
var fakeClient = {
formatter: function formatter() {
return new _formatter2.default(fakeClient);
}
};
function Raw() {
var client = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : fakeClient;
this.client = client;
this.sql = '';
this.bindings = [];
// Todo: Deprecate
this._wrappedBefore = undefined;
this._wrappedAfter = undefined;
this._debug = client && client.config && client.config.debug;
}
(0, _inherits2.default)(Raw, _events.EventEmitter);
(0, _assign3.default)(Raw.prototype, {
set: function set(sql, bindings) {
this.sql = sql;
this.bindings = (0, _isObject3.default)(bindings) && !bindings.toSQL || (0, _isUndefined3.default)(bindings) ? bindings : [bindings];
return this;
},
timeout: function timeout(ms) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
cancel = _ref.cancel;
if ((0, _isNumber3.default)(ms) && ms > 0) {
this._timeout = ms;
if (cancel) {
this.client.assertCanCancelQuery();
this._cancelOnTimeout = true;
}
}
return this;
},
// Wraps the current sql with `before` and `after`.
wrap: function wrap(before, after) {
this._wrappedBefore = before;
this._wrappedAfter = after;
return this;
},
// Calls `toString` on the Knex object.
toString: function toString() {
return this.toQuery();
},
// Returns the raw sql for the query.
toSQL: function toSQL(method, tz) {
var obj = void 0;
var formatter = this.client.formatter();
if (Array.isArray(this.bindings)) {
obj = replaceRawArrBindings(this, formatter);
} else if (this.bindings && (0, _isPlainObject3.default)(this.bindings)) {
obj = replaceKeyBindings(this, formatter);
} else {
obj = {
method: 'raw',
sql: this.sql,
bindings: (0, _isUndefined3.default)(this.bindings) ? [] : [this.bindings]
};
}
if (this._wrappedBefore) {
obj.sql = this._wrappedBefore + obj.sql;
}
if (this._wrappedAfter) {
obj.sql = obj.sql + this._wrappedAfter;
}
obj.options = (0, _reduce3.default)(this._options, _assign3.default, {});
if (this._timeout) {
obj.timeout = this._timeout;
if (this._cancelOnTimeout) {
obj.cancelOnTimeout = this._cancelOnTimeout;
}
}
obj.bindings = obj.bindings || [];
if (helpers.containsUndefined(obj.bindings)) {
debugBindings(obj.bindings);
throw new Error('Undefined binding(s) detected when compiling RAW query: ' + obj.sql);
}
obj.__knexQueryUid = _uuid2.default.v4();
return obj;
}
});
function replaceRawArrBindings(raw, formatter) {
var expectedBindings = raw.bindings.length;
var values = raw.bindings;
var index = 0;
var sql = raw.sql.replace(/\\?\?\??/g, function (match) {
if (match === '\\?') {
return match;
}
var value = values[index++];
if (match === '??') {
return formatter.columnize(value);
}
return formatter.parameter(value);
});
if (expectedBindings !== index) {
throw new Error('Expected ' + expectedBindings + ' bindings, saw ' + index);
}
return {
method: 'raw',
sql: sql,
bindings: formatter.bindings
};
}
function replaceKeyBindings(raw, formatter) {
var values = raw.bindings;
var sql = raw.sql;
var regex = /\\?(:(\w+):(?=::)|:(\w+):(?!:)|:(\w+))/g;
sql = raw.sql.replace(regex, function (match, p1, p2, p3, p4) {
if (match !== p1) {
return p1;
}
var part = p2 || p3 || p4;
var key = match.trim();
var isIdentifier = key[key.length - 1] === ':';
var value = values[part];
if (value === undefined) {
if (values.hasOwnProperty(part)) {
formatter.bindings.push(value);
}
return match;
}
if (isIdentifier) {
return match.replace(p1, formatter.columnize(value));
}
return match.replace(p1, formatter.parameter(value));
});
return {
method: 'raw',
sql: sql,
bindings: formatter.bindings
};
}
// Allow the `Raw` object to be utilized with full access to the relevant
// promise API.
require('./interface')(Raw);
exports.default = Raw;
module.exports = exports['default'];