Add <%= job_id %>
template support for onerror and onsuccess fallback queries
This commit is contained in:
parent
ebe30b108c
commit
be0f059f01
7
NEWS.md
7
NEWS.md
@ -1,3 +1,10 @@
|
||||
1.33.0 - 2016-mm-dd
|
||||
-------------------
|
||||
|
||||
New features:
|
||||
* Add `<%= job_id %>` template support for onerror and onsuccess fallback queries.
|
||||
|
||||
|
||||
1.32.0 - 2016-06-30
|
||||
-------------------
|
||||
|
||||
|
@ -30,7 +30,11 @@ Fallback.prototype.getNextQuery = function (job) {
|
||||
Fallback.prototype.getOnSuccess = function (job) {
|
||||
if (job.query.query[this.index].status === jobStatus.DONE &&
|
||||
job.query.query[this.index].fallback_status === jobStatus.PENDING) {
|
||||
return job.query.query[this.index].onsuccess;
|
||||
var onsuccessQuery = job.query.query[this.index].onsuccess;
|
||||
if (onsuccessQuery) {
|
||||
onsuccessQuery = onsuccessQuery.replace(/<%=\s*job_id\s*%>/g, job.job_id);
|
||||
}
|
||||
return onsuccessQuery;
|
||||
}
|
||||
};
|
||||
|
||||
@ -43,6 +47,7 @@ Fallback.prototype.getOnError = function (job) {
|
||||
job.query.query[this.index].fallback_status === jobStatus.PENDING) {
|
||||
var onerrorQuery = job.query.query[this.index].onerror;
|
||||
if (onerrorQuery) {
|
||||
onerrorQuery = onerrorQuery.replace(/<%=\s*job_id\s*%>/g, job.job_id);
|
||||
onerrorQuery = onerrorQuery.replace(/<%=\s*error_message\s*%>/g, job.query.query[this.index].failed_reason);
|
||||
}
|
||||
return onerrorQuery;
|
||||
|
2
npm-shrinkwrap.json
generated
2
npm-shrinkwrap.json
generated
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cartodb_sql_api",
|
||||
"version": "1.31.1",
|
||||
"version": "1.33.0",
|
||||
"dependencies": {
|
||||
"cartodb-psql": {
|
||||
"version": "0.6.1",
|
||||
|
@ -5,7 +5,7 @@
|
||||
"keywords": [
|
||||
"cartodb"
|
||||
],
|
||||
"version": "1.32.0",
|
||||
"version": "1.33.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/CartoDB/CartoDB-SQL-API.git"
|
||||
|
@ -13,7 +13,7 @@ var metadataBackend = require('cartodb-redis')({
|
||||
var batchFactory = require('../../batch');
|
||||
var jobStatus = require('../../batch/job_status');
|
||||
|
||||
describe('Batch API query timing', function () {
|
||||
describe('Batch API callback templates', function () {
|
||||
|
||||
function createJob(jobDefinition, callback) {
|
||||
assert.response(app, {
|
||||
@ -100,18 +100,18 @@ describe('Batch API query timing', function () {
|
||||
});
|
||||
});
|
||||
|
||||
describe('should report start and end time for each query with fallback queries', function () {
|
||||
describe('should use templates for error_message and job_id onerror callback', function () {
|
||||
var jobResponse;
|
||||
before(function(done) {
|
||||
createJob({
|
||||
"query": {
|
||||
"query": [
|
||||
{
|
||||
"query": "create table batch_errors (error_message text)"
|
||||
"query": "create table batch_errors (job_id text, error_message text)"
|
||||
},
|
||||
{
|
||||
"query": "SELECT * FROM invalid_table",
|
||||
"onerror": "INSERT INTO batch_errors values ('<%= error_message %>')"
|
||||
"onerror": "INSERT INTO batch_errors values ('<%= job_id %>', '<%= error_message %>')"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -125,12 +125,12 @@ describe('Batch API query timing', function () {
|
||||
var expectedQuery = {
|
||||
query: [
|
||||
{
|
||||
"query": "create table batch_errors (error_message text)",
|
||||
"query": "create table batch_errors (job_id text, error_message text)",
|
||||
status: 'done'
|
||||
},
|
||||
{
|
||||
"query": "SELECT * FROM invalid_table",
|
||||
"onerror": "INSERT INTO batch_errors values ('<%= error_message %>')",
|
||||
"onerror": "INSERT INTO batch_errors values ('<%= job_id %>', '<%= error_message %>')",
|
||||
status: 'failed',
|
||||
fallback_status: 'done'
|
||||
}
|
||||
@ -146,6 +146,7 @@ describe('Batch API query timing', function () {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
assert.equal(result.rows[0].job_id, jobResponse.job_id);
|
||||
assert.equal(result.rows[0].error_message, 'relation "invalid_table" does not exist');
|
||||
getQueryResult('drop table batch_errors', done);
|
||||
});
|
||||
@ -158,4 +159,62 @@ describe('Batch API query timing', function () {
|
||||
});
|
||||
});
|
||||
|
||||
describe('should use template for job_id onsuccess callback', function () {
|
||||
var jobResponse;
|
||||
before(function(done) {
|
||||
createJob({
|
||||
"query": {
|
||||
"query": [
|
||||
{
|
||||
query: "create table batch_jobs (job_id text)"
|
||||
},
|
||||
{
|
||||
"query": "SELECT 1",
|
||||
"onsuccess": "INSERT INTO batch_jobs values ('<%= job_id %>')"
|
||||
}
|
||||
]
|
||||
}
|
||||
}, function(err, job) {
|
||||
jobResponse = job;
|
||||
return done(err);
|
||||
});
|
||||
});
|
||||
|
||||
it('should keep the original templated query but use the job_id', function (done) {
|
||||
var expectedQuery = {
|
||||
query: [
|
||||
{
|
||||
query: "create table batch_jobs (job_id text)",
|
||||
status: 'done'
|
||||
},
|
||||
{
|
||||
query: "SELECT 1",
|
||||
onsuccess: "INSERT INTO batch_jobs values ('<%= job_id %>')",
|
||||
status: 'done',
|
||||
fallback_status: 'done'
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
var interval = setInterval(function () {
|
||||
getJobStatus(jobResponse.job_id, function(err, job) {
|
||||
if (job.status === jobStatus.DONE) {
|
||||
clearInterval(interval);
|
||||
validateExpectedResponse(job.query, expectedQuery);
|
||||
getQueryResult('select * from batch_jobs', function(err, result) {
|
||||
if (err) {
|
||||
return done(err);
|
||||
}
|
||||
assert.equal(result.rows[0].job_id, jobResponse.job_id);
|
||||
getQueryResult('drop table batch_jobs', done);
|
||||
});
|
||||
} else if (job.status === jobStatus.FAILED || job.status === jobStatus.CANCELLED) {
|
||||
clearInterval(interval);
|
||||
done(new Error('Job ' + job.job_id + ' is ' + job.status + ', expected to be "done"'));
|
||||
}
|
||||
});
|
||||
}, 50);
|
||||
});
|
||||
});
|
||||
|
||||
});
|
Loading…
Reference in New Issue
Block a user