index.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. 'use strict';
  2. exports.__esModule = true;
  3. var _clone2 = require('lodash/clone');
  4. var _clone3 = _interopRequireDefault(_clone2);
  5. var _uniqueId2 = require('lodash/uniqueId');
  6. var _uniqueId3 = _interopRequireDefault(_uniqueId2);
  7. var _map2 = require('lodash/map');
  8. var _map3 = _interopRequireDefault(_map2);
  9. var _assign2 = require('lodash/assign');
  10. var _assign3 = _interopRequireDefault(_assign2);
  11. var _inherits = require('inherits');
  12. var _inherits2 = _interopRequireDefault(_inherits);
  13. var _transaction = require('./transaction');
  14. var _transaction2 = _interopRequireDefault(_transaction);
  15. var _sqlite = require('../sqlite3');
  16. var _sqlite2 = _interopRequireDefault(_sqlite);
  17. var _bluebird = require('bluebird');
  18. var _bluebird2 = _interopRequireDefault(_bluebird);
  19. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  20. /* globals openDatabase:false */
  21. // WebSQL
  22. // -------
  23. function Client_WebSQL(config) {
  24. _sqlite2.default.call(this, config);
  25. this.name = config.name || 'knex_database';
  26. this.version = config.version || '1.0';
  27. this.displayName = config.displayName || this.name;
  28. this.estimatedSize = config.estimatedSize || 5 * 1024 * 1024;
  29. }
  30. (0, _inherits2.default)(Client_WebSQL, _sqlite2.default);
  31. (0, _assign3.default)(Client_WebSQL.prototype, {
  32. transaction: function transaction() {
  33. return new (Function.prototype.bind.apply(_transaction2.default, [null].concat([this], Array.prototype.slice.call(arguments))))();
  34. },
  35. dialect: 'websql',
  36. // Get a raw connection from the database, returning a promise with the connection object.
  37. acquireConnection: function acquireConnection() {
  38. var _this = this;
  39. return new _bluebird2.default(function (resolve, reject) {
  40. try {
  41. /*jslint browser: true*/
  42. var db = openDatabase(_this.name, _this.version, _this.displayName, _this.estimatedSize);
  43. db.transaction(function (t) {
  44. t.__knexUid = (0, _uniqueId3.default)('__knexUid');
  45. resolve(t);
  46. });
  47. } catch (e) {
  48. reject(e);
  49. }
  50. });
  51. },
  52. // Used to explicitly close a connection, called internally by the pool
  53. // when a connection times out or the pool is shutdown.
  54. releaseConnection: function releaseConnection() {
  55. return _bluebird2.default.resolve();
  56. },
  57. // Runs the query on the specified connection,
  58. // providing the bindings and any other necessary prep work.
  59. _query: function _query(connection, obj) {
  60. return new _bluebird2.default(function (resolver, rejecter) {
  61. if (!connection) return rejecter(new Error('No connection provided.'));
  62. connection.executeSql(obj.sql, obj.bindings, function (trx, response) {
  63. obj.response = response;
  64. return resolver(obj);
  65. }, function (trx, err) {
  66. rejecter(err);
  67. });
  68. });
  69. },
  70. _stream: function _stream(connection, sql, stream) {
  71. var client = this;
  72. return new _bluebird2.default(function (resolver, rejecter) {
  73. stream.on('error', rejecter);
  74. stream.on('end', resolver);
  75. return client._query(connection, sql).then(function (obj) {
  76. return client.processResponse(obj);
  77. }).map(function (row) {
  78. stream.write(row);
  79. }).catch(function (err) {
  80. stream.emit('error', err);
  81. }).then(function () {
  82. stream.end();
  83. });
  84. });
  85. },
  86. processResponse: function processResponse(obj, runner) {
  87. var resp = obj.response;
  88. if (obj.output) return obj.output.call(runner, resp);
  89. switch (obj.method) {
  90. case 'pluck':
  91. case 'first':
  92. case 'select':
  93. {
  94. var results = [];
  95. for (var i = 0, l = resp.rows.length; i < l; i++) {
  96. results[i] = (0, _clone3.default)(resp.rows.item(i));
  97. }
  98. if (obj.method === 'pluck') results = (0, _map3.default)(results, obj.pluck);
  99. return obj.method === 'first' ? results[0] : results;
  100. }
  101. case 'insert':
  102. return [resp.insertId];
  103. case 'delete':
  104. case 'update':
  105. case 'counter':
  106. return resp.rowsAffected;
  107. default:
  108. return resp;
  109. }
  110. }
  111. });
  112. exports.default = Client_WebSQL;
  113. module.exports = exports['default'];