db.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. // Generated by IcedCoffeeScript 1.7.1-c
  2. (function() {
  3. var DB, Lock, chain, constants, env, fs, iced, idb, iutils, k, log, make_esc, make_key, make_kvstore_key, make_lookup_key, mkdirp, path, util, v, __iced_k, __iced_k_noop, _db, _fn, _ref, _ref1,
  4. __slice = [].slice;
  5. iced = require('iced-runtime').iced;
  6. __iced_k = __iced_k_noop = function() {};
  7. env = require('./env').env;
  8. fs = require('fs');
  9. path = require('path');
  10. _ref = require('iced-error'), chain = _ref.chain, make_esc = _ref.make_esc;
  11. mkdirp = require('./fs').mkdirp;
  12. iutils = require('iced-utils');
  13. Lock = iutils.lock.Lock;
  14. util = require('pgp-utils').util;
  15. log = require('./log');
  16. constants = require('./constants').constants;
  17. idb = require('iced-db');
  18. make_key = function(_arg) {
  19. var id, table, type;
  20. table = _arg.table, type = _arg.type, id = _arg.id;
  21. return [table, type, id].join(":").toLowerCase();
  22. };
  23. make_kvstore_key = function(_arg) {
  24. var key, type;
  25. type = _arg.type, key = _arg.key;
  26. type || (type = key.slice(-2));
  27. return make_key({
  28. table: "kv",
  29. type: type,
  30. id: key
  31. });
  32. };
  33. make_lookup_key = function(_arg) {
  34. var name, type;
  35. type = _arg.type, name = _arg.name;
  36. return make_key({
  37. table: "lo",
  38. type: type,
  39. id: name
  40. });
  41. };
  42. DB = (function() {
  43. function DB(_arg) {
  44. this.filename = _arg.filename;
  45. this.lock = new Lock;
  46. }
  47. DB.prototype.get_db = function() {
  48. var db;
  49. return db = new idb.DB({
  50. root: this.get_filename(),
  51. json: true
  52. });
  53. };
  54. DB.prototype.get_filename = function() {
  55. this.filename || (this.filename = env().get_db_filename());
  56. return this.filename;
  57. };
  58. DB.prototype._upgrade = function(cb) {
  59. var err, f, so, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  60. __iced_k = __iced_k_noop;
  61. ___iced_passed_deferral = iced.findDeferral(arguments);
  62. f = env().get_nedb_filename();
  63. (function(_this) {
  64. return (function(__iced_k) {
  65. __iced_deferrals = new iced.Deferrals(__iced_k, {
  66. parent: ___iced_passed_deferral,
  67. filename: "/home/jacko/node-client/src/db.iced",
  68. funcname: "DB._upgrade"
  69. });
  70. fs.stat(f, __iced_deferrals.defer({
  71. assign_fn: (function() {
  72. return function() {
  73. err = arguments[0];
  74. return so = arguments[1];
  75. };
  76. })(),
  77. lineno: 44
  78. }));
  79. __iced_deferrals._fulfill();
  80. });
  81. })(this)((function(_this) {
  82. return function() {
  83. (function(__iced_k) {
  84. if (typeof err === "undefined" || err === null) {
  85. (function(__iced_k) {
  86. __iced_deferrals = new iced.Deferrals(__iced_k, {
  87. parent: ___iced_passed_deferral,
  88. filename: "/home/jacko/node-client/src/db.iced",
  89. funcname: "DB._upgrade"
  90. });
  91. fs.unlink(f, __iced_deferrals.defer({
  92. assign_fn: (function() {
  93. return function() {
  94. return err = arguments[0];
  95. };
  96. })(),
  97. lineno: 46
  98. }));
  99. __iced_deferrals._fulfill();
  100. })(function() {
  101. return __iced_k(typeof err !== "undefined" && err !== null ? log.warn("Error deleting old DB file " + f + ": " + err) : log.info("Deleting old DB " + f));
  102. });
  103. } else {
  104. return __iced_k();
  105. }
  106. })(function() {
  107. return cb(err);
  108. });
  109. };
  110. })(this));
  111. };
  112. DB.prototype.open = function(cb) {
  113. var err, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  114. __iced_k = __iced_k_noop;
  115. ___iced_passed_deferral = iced.findDeferral(arguments);
  116. err = null;
  117. (function(_this) {
  118. return (function(__iced_k) {
  119. __iced_deferrals = new iced.Deferrals(__iced_k, {
  120. parent: ___iced_passed_deferral,
  121. filename: "/home/jacko/node-client/src/db.iced",
  122. funcname: "DB.open"
  123. });
  124. _this._upgrade(__iced_deferrals.defer({
  125. assign_fn: (function() {
  126. return function() {
  127. return err = arguments[0];
  128. };
  129. })(),
  130. lineno: 57
  131. }));
  132. __iced_deferrals._fulfill();
  133. });
  134. })(this)((function(_this) {
  135. return function() {
  136. (function(__iced_k) {
  137. if (_this.db == null) {
  138. (function(__iced_k) {
  139. __iced_deferrals = new iced.Deferrals(__iced_k, {
  140. parent: ___iced_passed_deferral,
  141. filename: "/home/jacko/node-client/src/db.iced",
  142. funcname: "DB.open"
  143. });
  144. _this._open(__iced_deferrals.defer({
  145. assign_fn: (function() {
  146. return function() {
  147. return err = arguments[0];
  148. };
  149. })(),
  150. lineno: 58
  151. }));
  152. __iced_deferrals._fulfill();
  153. })(__iced_k);
  154. } else {
  155. return __iced_k();
  156. }
  157. })(function() {
  158. return cb(err);
  159. });
  160. };
  161. })(this));
  162. };
  163. DB.prototype.unlink = function(cb) {
  164. var db, err, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  165. __iced_k = __iced_k_noop;
  166. ___iced_passed_deferral = iced.findDeferral(arguments);
  167. db = this.get_db();
  168. log.info("Purging local cache: " + db.root);
  169. (function(_this) {
  170. return (function(__iced_k) {
  171. __iced_deferrals = new iced.Deferrals(__iced_k, {
  172. parent: ___iced_passed_deferral,
  173. filename: "/home/jacko/node-client/src/db.iced",
  174. funcname: "DB.unlink"
  175. });
  176. db.drop(__iced_deferrals.defer({
  177. assign_fn: (function() {
  178. return function() {
  179. return err = arguments[0];
  180. };
  181. })(),
  182. lineno: 66
  183. }));
  184. __iced_deferrals._fulfill();
  185. });
  186. })(this)((function(_this) {
  187. return function() {
  188. return cb(err);
  189. };
  190. })(this));
  191. };
  192. DB.prototype.close = function(cb) {
  193. return cb(null);
  194. };
  195. DB.prototype._open = function(cb) {
  196. var err, esc, fn, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  197. __iced_k = __iced_k_noop;
  198. ___iced_passed_deferral = iced.findDeferral(arguments);
  199. esc = make_esc(cb, "DB::open");
  200. err = null;
  201. fn = this.get_filename();
  202. log.debug("+ opening database file: " + fn);
  203. this.db = this.get_db();
  204. (function(_this) {
  205. return (function(__iced_k) {
  206. __iced_deferrals = new iced.Deferrals(__iced_k, {
  207. parent: ___iced_passed_deferral,
  208. filename: "/home/jacko/node-client/src/db.iced",
  209. funcname: "DB._open"
  210. });
  211. _this._init_db(esc(__iced_deferrals.defer({
  212. lineno: 82
  213. })));
  214. __iced_deferrals._fulfill();
  215. });
  216. })(this)((function(_this) {
  217. return function() {
  218. log.debug("- DB opened");
  219. return cb(null);
  220. };
  221. })(this));
  222. };
  223. DB.prototype.put = function(_arg, cb) {
  224. var debug, err, hkey, json, key, kvsk, lk, name, names, obj, tmp, type, value, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  225. __iced_k = __iced_k_noop;
  226. ___iced_passed_deferral = iced.findDeferral(arguments);
  227. type = _arg.type, key = _arg.key, value = _arg.value, name = _arg.name, names = _arg.names, debug = _arg.debug, json = _arg.json;
  228. kvsk = make_kvstore_key({
  229. type: type,
  230. key: key
  231. });
  232. if (debug) {
  233. log.debug("| DB put value " + kvsk);
  234. }
  235. (function(_this) {
  236. return (function(__iced_k) {
  237. __iced_deferrals = new iced.Deferrals(__iced_k, {
  238. parent: ___iced_passed_deferral,
  239. filename: "/home/jacko/node-client/src/db.iced",
  240. funcname: "DB.put"
  241. });
  242. _this.db.put({
  243. key: kvsk,
  244. value: value,
  245. json: json
  246. }, __iced_deferrals.defer({
  247. assign_fn: (function() {
  248. return function() {
  249. err = arguments[0];
  250. return obj = arguments[1];
  251. };
  252. })(),
  253. lineno: 91
  254. }));
  255. __iced_deferrals._fulfill();
  256. });
  257. })(this)((function(_this) {
  258. return function() {
  259. (function(__iced_k) {
  260. if (typeof err === "undefined" || err === null) {
  261. hkey = obj.hkey;
  262. if ((name != null) && (names == null)) {
  263. names = [name];
  264. }
  265. (function(__iced_k) {
  266. if (names && names.length) {
  267. (function(__iced_k) {
  268. var _i, _len, _ref1, _results, _while;
  269. _ref1 = names;
  270. _len = _ref1.length;
  271. _i = 0;
  272. _results = [];
  273. _while = function(__iced_k) {
  274. var _break, _continue, _next;
  275. _break = function() {
  276. return __iced_k(_results);
  277. };
  278. _continue = function() {
  279. return iced.trampoline(function() {
  280. ++_i;
  281. return _while(__iced_k);
  282. });
  283. };
  284. _next = function(__iced_next_arg) {
  285. _results.push(__iced_next_arg);
  286. return _continue();
  287. };
  288. if (!(_i < _len)) {
  289. return _break();
  290. } else {
  291. name = _ref1[_i];
  292. lk = make_lookup_key(name);
  293. if (debug) {
  294. log.debug("| DB put lookup: " + lk + " -> " + hkey);
  295. }
  296. (function(__iced_k) {
  297. __iced_deferrals = new iced.Deferrals(__iced_k, {
  298. parent: ___iced_passed_deferral,
  299. filename: "/home/jacko/node-client/src/db.iced",
  300. funcname: "DB.put"
  301. });
  302. _this.db.put({
  303. key: lk,
  304. value: hkey
  305. }, __iced_deferrals.defer({
  306. assign_fn: (function() {
  307. return function() {
  308. return tmp = arguments[0];
  309. };
  310. })(),
  311. lineno: 99
  312. }));
  313. __iced_deferrals._fulfill();
  314. })(function() {
  315. return _next((typeof tmp !== "undefined" && tmp !== null) && (typeof err === "undefined" || err === null) ? err = tmp : void 0);
  316. });
  317. }
  318. };
  319. _while(__iced_k);
  320. })(__iced_k);
  321. } else {
  322. return __iced_k();
  323. }
  324. })(__iced_k);
  325. } else {
  326. return __iced_k();
  327. }
  328. })(function() {
  329. return cb(err);
  330. });
  331. };
  332. })(this));
  333. };
  334. DB.prototype.remove = function(_arg, cb) {
  335. var err, k, key, optional, type, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  336. __iced_k = __iced_k_noop;
  337. ___iced_passed_deferral = iced.findDeferral(arguments);
  338. type = _arg.type, key = _arg.key, optional = _arg.optional;
  339. k = make_kvstore_key({
  340. type: type,
  341. key: key
  342. });
  343. err = null;
  344. log.debug("+ DB remove " + k);
  345. (function(_this) {
  346. return (function(__iced_k) {
  347. __iced_deferrals = new iced.Deferrals(__iced_k, {
  348. parent: ___iced_passed_deferral,
  349. filename: "/home/jacko/node-client/src/db.iced",
  350. funcname: "DB.remove"
  351. });
  352. _this.db.del({
  353. key: k
  354. }, __iced_deferrals.defer({
  355. assign_fn: (function() {
  356. return function() {
  357. return err = arguments[0];
  358. };
  359. })(),
  360. lineno: 112
  361. }));
  362. __iced_deferrals._fulfill();
  363. });
  364. })(this)((function(_this) {
  365. return function() {
  366. if ((err != null) && (err instanceof idb.E.NotFoundError) && optional) {
  367. log.debug("| No object found for " + k);
  368. err = null;
  369. }
  370. log.debug("- DB remove " + k + " -> " + err);
  371. return cb(null);
  372. };
  373. })(this));
  374. };
  375. DB.prototype.find1 = function(q, cb) {
  376. var err, value, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  377. __iced_k = __iced_k_noop;
  378. ___iced_passed_deferral = iced.findDeferral(arguments);
  379. err = value = null;
  380. (function(_this) {
  381. return (function(__iced_k) {
  382. __iced_deferrals = new iced.Deferrals(__iced_k, {
  383. parent: ___iced_passed_deferral,
  384. filename: "/home/jacko/node-client/src/db.iced",
  385. funcname: "DB.find1"
  386. });
  387. _this.db.get(q, __iced_deferrals.defer({
  388. assign_fn: (function() {
  389. return function() {
  390. err = arguments[0];
  391. return value = arguments[1];
  392. };
  393. })(),
  394. lineno: 125
  395. }));
  396. __iced_deferrals._fulfill();
  397. });
  398. })(this)((function(_this) {
  399. return function() {
  400. if ((err != null) && (err instanceof idb.E.NotFoundError)) {
  401. err = null;
  402. } else if (err != null) {
  403. }
  404. return cb(err, value);
  405. };
  406. })(this));
  407. };
  408. DB.prototype.get = function(_arg, cb) {
  409. var err, json, k, key, type, value, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  410. __iced_k = __iced_k_noop;
  411. ___iced_passed_deferral = iced.findDeferral(arguments);
  412. type = _arg.type, key = _arg.key, json = _arg.json;
  413. k = make_kvstore_key({
  414. type: type,
  415. key: key
  416. });
  417. (function(_this) {
  418. return (function(__iced_k) {
  419. __iced_deferrals = new iced.Deferrals(__iced_k, {
  420. parent: ___iced_passed_deferral,
  421. filename: "/home/jacko/node-client/src/db.iced",
  422. funcname: "DB.get"
  423. });
  424. _this.find1({
  425. key: k,
  426. json: json
  427. }, __iced_deferrals.defer({
  428. assign_fn: (function() {
  429. return function() {
  430. err = arguments[0];
  431. return value = arguments[1];
  432. };
  433. })(),
  434. lineno: 134
  435. }));
  436. __iced_deferrals._fulfill();
  437. });
  438. })(this)((function(_this) {
  439. return function() {
  440. return cb(err, value);
  441. };
  442. })(this));
  443. };
  444. DB.prototype.lookup = function(_arg, cb) {
  445. var err, k, name, type, value, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  446. __iced_k = __iced_k_noop;
  447. ___iced_passed_deferral = iced.findDeferral(arguments);
  448. type = _arg.type, name = _arg.name;
  449. k = make_lookup_key({
  450. type: type,
  451. name: name
  452. });
  453. err = value = null;
  454. (function(_this) {
  455. return (function(__iced_k) {
  456. __iced_deferrals = new iced.Deferrals(__iced_k, {
  457. parent: ___iced_passed_deferral,
  458. filename: "/home/jacko/node-client/src/db.iced",
  459. funcname: "DB.lookup"
  460. });
  461. _this.find1({
  462. key: k
  463. }, __iced_deferrals.defer({
  464. assign_fn: (function() {
  465. return function() {
  466. err = arguments[0];
  467. return value = arguments[1];
  468. };
  469. })(),
  470. lineno: 142
  471. }));
  472. __iced_deferrals._fulfill();
  473. });
  474. })(this)((function(_this) {
  475. return function() {
  476. (function(__iced_k) {
  477. if ((err == null) && (value != null)) {
  478. (function(__iced_k) {
  479. __iced_deferrals = new iced.Deferrals(__iced_k, {
  480. parent: ___iced_passed_deferral,
  481. filename: "/home/jacko/node-client/src/db.iced",
  482. funcname: "DB.lookup"
  483. });
  484. _this.find1({
  485. hkey: value
  486. }, __iced_deferrals.defer({
  487. assign_fn: (function() {
  488. return function() {
  489. err = arguments[0];
  490. return value = arguments[1];
  491. };
  492. })(),
  493. lineno: 144
  494. }));
  495. __iced_deferrals._fulfill();
  496. })(__iced_k);
  497. } else {
  498. return __iced_k();
  499. }
  500. })(function() {
  501. return cb(err, value);
  502. });
  503. };
  504. })(this));
  505. };
  506. DB.prototype._init_db = function(cb) {
  507. var esc, made, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  508. __iced_k = __iced_k_noop;
  509. ___iced_passed_deferral = iced.findDeferral(arguments);
  510. log.debug("+ DB::_init_db");
  511. esc = make_esc(cb, "DB::_init_db");
  512. (function(_this) {
  513. return (function(__iced_k) {
  514. __iced_deferrals = new iced.Deferrals(__iced_k, {
  515. parent: ___iced_passed_deferral,
  516. filename: "/home/jacko/node-client/src/db.iced",
  517. funcname: "DB._init_db"
  518. });
  519. _this.db.create(esc(__iced_deferrals.defer({
  520. assign_fn: (function() {
  521. return function() {
  522. return made = arguments[0];
  523. };
  524. })(),
  525. lineno: 152
  526. })));
  527. __iced_deferrals._fulfill();
  528. });
  529. })(this)((function(_this) {
  530. return function() {
  531. log.debug("- DB::_init_db -> " + made);
  532. return cb(null);
  533. };
  534. })(this));
  535. };
  536. return DB;
  537. })();
  538. exports.db = _db = new DB({});
  539. exports.DB = DB;
  540. _ref1 = DB.prototype;
  541. _fn = function(key) {
  542. return exports[key] = function() {
  543. var args;
  544. args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
  545. return _db[key].apply(_db, args);
  546. };
  547. };
  548. for (k in _ref1) {
  549. v = _ref1[k];
  550. _fn(k);
  551. }
  552. }).call(this);