Skip to content

Commit 0e226d5

Browse files
committed
refactoring errors reporting.
1 parent 1d64d2a commit 0e226d5

File tree

2 files changed

+63
-61
lines changed

2 files changed

+63
-61
lines changed

lib/query.js

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ function $query(ctx, query, values, qrm, config) {
3535
isResult = qrm.isResult;
3636
}
3737

38-
var errMsg, isFunc,
38+
var error, isFunc,
3939
opt = ctx.options,
4040
pgFormatting = opt.pgFormatting,
4141
capSQL = opt.capSQL,
@@ -45,7 +45,7 @@ function $query(ctx, query, values, qrm, config) {
4545
if (query instanceof $npm.queryFile) {
4646
query.prepare();
4747
if (query.error) {
48-
errMsg = query.error;
48+
error = query.error;
4949
query = query.file;
5050
} else {
5151
query = query.query;
@@ -75,31 +75,31 @@ function $query(ctx, query, values, qrm, config) {
7575
}
7676
}
7777

78-
if (!errMsg) {
78+
if (!error) {
7979
if (!pgFormatting && !$npm.utils.isText(query)) {
80-
errMsg = isFunc ? "Invalid function name." : "Invalid query format.";
80+
error = new Error(isFunc ? "Invalid function name." : "Invalid query format.");
8181
}
8282
if (query instanceof ExternalQuery) {
8383
var qp = query.parse();
8484
if (qp instanceof Error) {
85-
errMsg = qp;
85+
error = qp;
8686
} else {
8787
query = qp;
8888
}
8989
}
9090
}
9191

92-
if (!errMsg && !isResult) {
92+
if (!error && !isResult) {
9393
if ($npm.utils.isNull(qrm)) {
9494
qrm = $npm.result.any; // default query result;
9595
} else {
9696
if (qrm !== parseInt(qrm) || (qrm & badMask) === badMask || qrm < 1 || qrm > 6) {
97-
errMsg = "Invalid Query Result Mask specified.";
97+
error = new Error("Invalid Query Result Mask specified.");
9898
}
9999
}
100100
}
101-
102-
if (!errMsg && (!pgFormatting || isFunc)) {
101+
102+
if (!error && (!pgFormatting || isFunc)) {
103103
try {
104104
// use 'pg-promise' implementation of values formatting;
105105
if (isFunc) {
@@ -112,7 +112,7 @@ function $query(ctx, query, values, qrm, config) {
112112
var prefix = capSQL ? 'SELECT * FROM' : 'select * from';
113113
query = prefix + ' ' + query + '(...)';
114114
}
115-
errMsg = e;
115+
error = e;
116116
params = values;
117117
}
118118
}
@@ -122,7 +122,7 @@ function $query(ctx, query, values, qrm, config) {
122122
if (notifyReject()) {
123123
return;
124124
}
125-
errMsg = $npm.events.query(opt, getContext());
125+
error = $npm.events.query(opt, getContext());
126126
if (notifyReject()) {
127127
return;
128128
}
@@ -135,11 +135,11 @@ function $query(ctx, query, values, qrm, config) {
135135
$npm.utils.addReadProp(result.rows, 'duration', result.duration, true);
136136
if (result.rows.length) {
137137
err = $npm.events.receive(opt, result.rows, result, getContext());
138-
err = err || errMsg;
138+
err = err || error;
139139
}
140140
}
141141
if (err) {
142-
errMsg = err;
142+
error = err;
143143
} else {
144144
if (isResult) {
145145
data = result; // raw object requested (Result type);
@@ -149,11 +149,11 @@ function $query(ctx, query, values, qrm, config) {
149149
if (len) {
150150
if (len > 1 && qrm & $npm.result.one) {
151151
// one row was expected, but returned multiple;
152-
errMsg = new QueryResultError(qrec.multiple, result, query, params);
152+
error = new QueryResultError(qrec.multiple, result, query, params);
153153
} else {
154154
if (!(qrm & ($npm.result.one | $npm.result.many))) {
155155
// no data should have been returned;
156-
errMsg = new QueryResultError(qrec.notEmpty, result, query, params);
156+
error = new QueryResultError(qrec.notEmpty, result, query, params);
157157
} else {
158158
if (!(qrm & $npm.result.many)) {
159159
data = data[0];
@@ -169,7 +169,7 @@ function $query(ctx, query, values, qrm, config) {
169169
data = qrm & $npm.result.many ? data : undefined;
170170
}
171171
} else {
172-
errMsg = new QueryResultError(qrec.noData, result, query, params);
172+
error = new QueryResultError(qrec.noData, result, query, params);
173173
}
174174
}
175175
}
@@ -180,15 +180,15 @@ function $query(ctx, query, values, qrm, config) {
180180
});
181181
} catch (e) {
182182
// can only happen when pgFormatting = true;
183-
errMsg = e;
183+
error = e;
184184
}
185185

186186
function getContext() {
187187
var client;
188188
if (ctx.db) {
189189
client = ctx.db.client;
190190
} else {
191-
errMsg = "Loose request outside an expired connection.";
191+
error = new Error("Loose request outside an expired connection.");
192192
}
193193
return {
194194
client: client,
@@ -203,12 +203,13 @@ function $query(ctx, query, values, qrm, config) {
203203

204204
function notifyReject() {
205205
var context = getContext();
206-
if (errMsg !== undefined) {
207-
if (errMsg instanceof InternalError) {
208-
errMsg = errMsg.message;
206+
if (error !== undefined) {
207+
// TODO: Consider using a custom error type here instead:
208+
if (error instanceof InternalError) {
209+
error = new Error(error.message);
209210
}
210-
$npm.events.error(opt, errMsg, context);
211-
reject(errMsg instanceof Error ? errMsg : new Error(errMsg));
211+
$npm.events.error(opt, error, context);
212+
reject(error);
212213
return true;
213214
}
214215
}

test/eventSpec.js

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,13 @@ describe("Connect/Disconnect events", function () {
7676
disconnect++;
7777
};
7878
db.tx(function (t) {
79-
ctx = t.ctx;
80-
return this.batch([
81-
t.query("select 'one'"),
82-
t.query("select 'two'"),
83-
t.query("select 'three'")
84-
]);
85-
})
79+
ctx = t.ctx;
80+
return this.batch([
81+
t.query("select 'one'"),
82+
t.query("select 'two'"),
83+
t.query("select 'three'")
84+
]);
85+
})
8686
.then(dummy, dummy)
8787
.finally(function () {
8888
done();
@@ -187,8 +187,8 @@ describe("Start/Finish transaction events", function () {
187187
throw "### Testing error output in 'transact'. Please ignore. ###";
188188
};
189189
db.tx("myTransaction", function () {
190-
return promise.resolve('SUCCESS');
191-
})
190+
return promise.resolve('SUCCESS');
191+
})
192192
.then(function (data) {
193193
result = data;
194194
})
@@ -225,8 +225,8 @@ describe("Error event", function () {
225225
throw new Error("### Testing error output in 'error'. Please ignore. ###");
226226
};
227227
db.tx("Error Transaction", function () {
228-
throw new Error("Test Error");
229-
})
228+
throw new Error("Test Error");
229+
})
230230
.then(dummy, function (reason) {
231231
r = reason;
232232
})
@@ -249,11 +249,11 @@ describe("Error event", function () {
249249
});
250250

251251
describe("for null-queries", function () {
252-
var txt, context, counter = 0;
252+
var error, context, counter = 0;
253253
beforeEach(function (done) {
254254
options.error = function (err, e) {
255255
counter++;
256-
txt = err;
256+
error = err;
257257
context = e;
258258
};
259259
db.query(null)
@@ -263,8 +263,8 @@ describe("Error event", function () {
263263
});
264264
});
265265
it("must fail correctly", function () {
266-
var msg = "Invalid query format.";
267-
expect(txt).toBe(msg);
266+
expect(error instanceof Error).toBe(true);
267+
expect(error.message).toBe("Invalid query format.");
268268
expect(context.params).toBeUndefined();
269269
if (!options.pgNative) {
270270
expect(context.client instanceof pgClient).toBe(true);
@@ -274,11 +274,11 @@ describe("Error event", function () {
274274
});
275275

276276
describe("for incorrect QRM", function () {
277-
var txt, context, counter = 0;
277+
var error, context, counter = 0;
278278
beforeEach(function (done) {
279279
options.error = function (err, e) {
280280
counter++;
281-
txt = err;
281+
error = err;
282282
context = e;
283283
};
284284
db.query("Bla-Bla", undefined, 42)
@@ -288,8 +288,8 @@ describe("Error event", function () {
288288
});
289289
});
290290
it("must reject with correct error", function () {
291-
var msg = "Invalid Query Result Mask specified.";
292-
expect(txt).toBe(msg);
291+
expect(error instanceof Error).toBe(true);
292+
expect(error.message).toBe("Invalid Query Result Mask specified.");
293293
expect(context.query).toBe("Bla-Bla");
294294
expect(context.params).toBeUndefined();
295295
if (!options.pgNative) {
@@ -378,11 +378,11 @@ describe("Error event", function () {
378378
});
379379

380380
describe("for loose query requests", function () {
381-
var errTxt, r, context, counter = 0, msg = "Loose request outside an expired connection.";
381+
var error, r, context, counter = 0, msg = "Loose request outside an expired connection.";
382382
beforeEach(function (done) {
383383
options.error = function (err, e) {
384384
counter++;
385-
errTxt = err;
385+
error = err;
386386
context = e;
387387
};
388388
var query, sco;
@@ -404,7 +404,8 @@ describe("Error event", function () {
404404
});
405405
});
406406
it("must notify with correct error", function () {
407-
expect(errTxt).toBe(msg);
407+
expect(error instanceof Error).toBe(true);
408+
expect(error.message).toBe(msg);
408409
expect(r instanceof Error).toBe(true);
409410
expect(r.message).toBe(msg);
410411
expect(context.query).toBe("select * from users where(false)");
@@ -569,8 +570,8 @@ describe("Receive event", function () {
569570
};
570571
var qs = new QueryStream("select $1::int as value", [123]);
571572
db.stream(qs, function (s) {
572-
s.pipe(JSONStream.stringify());
573-
})
573+
s.pipe(JSONStream.stringify());
574+
})
574575
.then(function () {
575576
done();
576577
});
@@ -594,8 +595,8 @@ describe("Receive event", function () {
594595
};
595596
var qs = new QueryStream("select $1::int as value", [123]);
596597
db.stream(qs, function (s) {
597-
s.pipe(JSONStream.stringify());
598-
})
598+
s.pipe(JSONStream.stringify());
599+
})
599600
.catch(function (error) {
600601
result = error;
601602
done();
@@ -614,8 +615,8 @@ describe("Receive event", function () {
614615
};
615616
var qs = new QueryStream("select $1::int as value", [123]);
616617
db.stream(qs, function (s) {
617-
s.pipe(JSONStream.stringify());
618-
})
618+
s.pipe(JSONStream.stringify());
619+
})
619620
.catch(function (error) {
620621
handled = true;
621622
result = error;
@@ -651,9 +652,9 @@ describe("pgFormatting", function () {
651652
ctx.push(e);
652653
};
653654
promise.all([
654-
db.func("findUser", 1),
655-
db.one("select * from users where id=$1", [1])
656-
])
655+
db.func("findUser", 1),
656+
db.one("select * from users where id=$1", [1])
657+
])
657658
.then(function (data) {
658659
result = data;
659660
})
@@ -681,9 +682,9 @@ describe("pgFormatting", function () {
681682
var err;
682683
beforeEach(function (done) {
683684
promise.any([
684-
db.query(),
685-
db.query(null)
686-
])
685+
db.query(),
686+
db.query(null)
687+
])
687688
.then(function (data) {
688689
}, function (reason) {
689690
err = reason;
@@ -704,10 +705,10 @@ describe("pgFormatting", function () {
704705
describe("empty query", function () {
705706
beforeEach(function (done) {
706707
promise.all([
707-
db.query({}),
708-
db.query(""),
709-
db.query(" ")
710-
])
708+
db.query({}),
709+
db.query(""),
710+
db.query(" ")
711+
])
711712
.then(function (data) {
712713
result = data;
713714
}, function (reason) {

0 commit comments

Comments
 (0)