Skip to content

Commit 024bd4f

Browse files
authored
trace: don't require throw to add trace info for verbose (#1317)
1 parent 5c3c682 commit 024bd4f

File tree

2 files changed

+67
-10
lines changed

2 files changed

+67
-10
lines changed

lib/trace.js

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,14 @@ function extendTrace(object, property, pos) {
1515
var cb = arguments[pos];
1616
if (typeof arguments[pos] === 'function') {
1717
arguments[pos] = function replacement() {
18-
try {
19-
return cb.apply(this, arguments);
20-
} catch (err) {
21-
if (err && err.stack && !err.__augmented) {
22-
err.stack = filter(err).join('\n');
23-
err.stack += '\n--> in ' + name;
24-
err.stack += '\n' + filter(error).slice(1).join('\n');
25-
err.__augmented = true;
26-
}
27-
throw err;
18+
var err = arguments[0];
19+
if (err && err.stack && !err.__augmented) {
20+
err.stack = filter(err).join('\n');
21+
err.stack += '\n--> in ' + name;
22+
err.stack += '\n' + filter(error).slice(1).join('\n');
23+
err.__augmented = true;
2824
}
25+
return cb.apply(this, arguments);
2926
};
3027
}
3128
return old.apply(this, arguments);

test/verbose.test.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
var sqlite3 = require('..');
2+
var assert = require('assert');
3+
4+
var invalid_sql = 'update non_existent_table set id=1';
5+
6+
var originalMethods = {
7+
Database: {},
8+
Statement: {},
9+
};
10+
11+
function backupOriginalMethods() {
12+
for (var obj in originalMethods) {
13+
for (var attr in sqlite3[obj].prototype) {
14+
originalMethods[obj][attr] = sqlite3[obj].prototype[attr];
15+
}
16+
}
17+
}
18+
19+
function resetVerbose() {
20+
for (var obj in originalMethods) {
21+
for (var attr in originalMethods[obj]) {
22+
sqlite3[obj].prototype[attr] = originalMethods[obj][attr];
23+
}
24+
}
25+
}
26+
27+
describe('verbose', function() {
28+
it('Shoud add trace info to error when verbose is called', function(done) {
29+
var db = new sqlite3.Database(':memory:');
30+
backupOriginalMethods();
31+
sqlite3.verbose();
32+
33+
db.run(invalid_sql, function(err) {
34+
assert(err instanceof Error);
35+
36+
assert(
37+
err.stack.indexOf(`Database#run('${invalid_sql}'`) > -1,
38+
`Stack shoud contain trace info, stack = ${err.stack}`
39+
);
40+
41+
done();
42+
resetVerbose();
43+
});
44+
});
45+
46+
it('Shoud not add trace info to error when verbose is not called', function(done) {
47+
var db = new sqlite3.Database(':memory:');
48+
49+
db.run(invalid_sql, function(err) {
50+
assert(err instanceof Error);
51+
52+
assert(
53+
err.stack.indexOf(invalid_sql) === -1,
54+
`Stack shoud not contain trace info, stack = ${err.stack}`
55+
);
56+
57+
done();
58+
});
59+
});
60+
});

0 commit comments

Comments
 (0)