123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- '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'];
|