Skip to content

Commit 0e5db08

Browse files
author
Daniel García Aubert
committed
Fix #317, checks if multiquery jobs is valid
1 parent 01d1866 commit 0e5db08

File tree

2 files changed

+75
-9
lines changed

2 files changed

+75
-9
lines changed

batch/models/job_multiple.js

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,52 @@ util.inherits(JobMultiple, JobBase);
1313

1414
module.exports = JobMultiple;
1515

16-
JobMultiple.is = function (query) {
17-
if (!Array.isArray(query)) {
18-
return false;
16+
function isJobParsed(query) {
17+
// From backend: [{ query: 'select * from ...', status: 'pending' },
18+
// { query: 'select * from ...', status: 'pending' } ]
19+
20+
for (var i = 0; i < query.length; i++) {
21+
if (typeof query[i] !== 'object') {
22+
return false;
23+
}
24+
25+
if (typeof query[i].query !== 'string') {
26+
return false;
27+
}
28+
29+
if (typeof query[i].status !== 'string') {
30+
return false;
31+
}
1932
}
2033

21-
// 1. From user: ['select * from ...', 'select * from ...']
22-
// 2. From redis: [ { query: 'select * from ...', status: 'pending' },
23-
// { query: 'select * from ...', status: 'pending' } ]
34+
return true;
35+
}
36+
37+
function isJobRaw(query) {
38+
// From user: ['select * from ...', 'select * from ...']
2439
for (var i = 0; i < query.length; i++) {
2540
if (typeof query[i] !== 'string') {
26-
if (typeof query[i].query !== 'string') {
27-
return false;
28-
}
41+
return false;
42+
}
43+
44+
if (!query[i].length) {
45+
return false;
2946
}
3047
}
3148

49+
return true;
50+
}
51+
52+
JobMultiple.is = function (query) {
53+
54+
if (!Array.isArray(query)) {
55+
return false;
56+
}
57+
58+
if (!isJobRaw(query) && !isJobParsed(query)) {
59+
return false;
60+
}
61+
3262
return true;
3363
};
3464

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
'use strict';
2+
3+
require('../../helper');
4+
5+
var BATCH_SOURCE = '../../../batch/';
6+
var assert = require('../../support/assert');
7+
var JobFactory = require(BATCH_SOURCE + 'models/job_factory');
8+
9+
describe('job factory', function() {
10+
11+
it('should throw error with invalid fallback query', function () {
12+
var jobRaw = {
13+
query: [{
14+
query: "select * from wadus_table",
15+
onerror: "select * from wadus_table"
16+
}]
17+
};
18+
19+
assert.throws(function () {
20+
JobFactory.create(jobRaw);
21+
});
22+
});
23+
24+
it('should throw error with void queries', function () {
25+
var jobRaw = {
26+
query: [
27+
'',
28+
''
29+
]
30+
};
31+
32+
assert.throws(function () {
33+
JobFactory.create(jobRaw);
34+
});
35+
});
36+
});

0 commit comments

Comments
 (0)