1. 1var sqlite3 = require('..');
2. 1var assert = require('assert');
3. 1
4. 1describe('interrupt', function() {
5. 1 it('should interrupt queries', function(done) {
6. 1 var interrupted = false;
7. 1 var saved = null;
8. 1
9. 1 var db = new sqlite3.Database(':memory:', function() {
10. 1 db.serialize();
11. 1
12. 1 var setup = 'create table t (n int);';
13. 8 for (var i = 0; i < 8; i += 1) {
14. 8 setup += 'insert into t values (' + i + ');';
15. 8 }
16. 1
17. 1 db.exec(setup, function(err) {
18. 0 if (err) {
19. 0 return done(err);
20. 0 }
21. 1
22. 1 var query = 'select last.n ' +
23. 1 'from t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t as last';
24. 1
25. 258 db.each(query, function(err) {
26. 1 if (err) {
27. 1 saved = err;
28. 257 } else if (!interrupted) {
29. 257 interrupted = true;
30. 257 db.interrupt();
31. 257 }
32. 258 });
33. 1
34. 1 db.close(function() {
35. 1 if (saved) {
36. 1 assert.equal(saved.message, 'SQLITE_INTERRUPT: interrupted');
37. 1 assert.equal(saved.errno, sqlite3.INTERRUPT);
38. 1 assert.equal(saved.code, 'SQLITE_INTERRUPT');
39. 1 done();
40. 0 } else {
41. 0 done(new Error('Completed query without error, but expected error'));
42. 0 }
43. 1 });
44. 1 });
45. 1 });
46. 1 });
47. 1
48. 1 it('should throw if interrupt is called before open', function(done) {
49. 1 var db = new sqlite3.Database(':memory:');
50. 1
51. 1 assert.throws(function() {
52. 1 db.interrupt();
53. 1 }, (/Database is not open/));
54. 1
55. 1 db.close();
56. 1 done();
57. 1 });
58. 1
59. 1 it('should throw if interrupt is called after close', function(done) {
60. 1 var db = new sqlite3.Database(':memory:');
61. 1
62. 1 db.close(function() {
63. 1 assert.throws(function() {
64. 1 db.interrupt();
65. 1 }, (/Database is not open/));
66. 1
67. 1 done();
68. 1 });
69. 1 });
70. 1
71. 1 it('should throw if interrupt is called during close', function(done) {
72. 1 var db = new sqlite3.Database(':memory:', function() {
73. 1 db.close();
74. 1 assert.throws(function() {
75. 1 db.interrupt();
76. 1 }, (/Database is closing/));
77. 1 done();
78. 1 });
79. 1 });
80. 1});
81. 1