Skip to content
This repository was archived by the owner on Apr 11, 2023. It is now read-only.

Commit 19b0bfe

Browse files
borzavlazarv
authored andcommitted
fix: batch execute query error on query result
fix: batch execute query invalid batch response count add: unit tests
1 parent 13515da commit 19b0bfe

File tree

3 files changed

+83
-22
lines changed

3 files changed

+83
-22
lines changed

Types/EntityContext.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -945,19 +945,23 @@ $data.Class.define('$data.EntityContext', null, null,
945945
success: function (results) {
946946
var batchResult = [];
947947
var hasError = false;
948+
var errorValue = null;
948949
for (var i = 0; i < results.length && !hasError; i++) {
949950
var query = results[i];
950951
self.executeQuerySuccess(self, returnTransaction, {
951952
success: function (result) {
952953
batchResult.push(result);
953954
},
954-
error: function () {
955+
error: function (err) {
955956
hasError = true;
957+
errorValue = err;
956958
}
957959
})(query);
958960
}
959961
if (!hasError) {
960962
self._applyTransaction(cbWrapper, cbWrapper.success, [batchResult], batchExecuteQuery.transaction, returnTransaction);
963+
} else {
964+
cbWrapper.error(errorValue);
961965
}
962966

963967
},

Types/StorageProviders/oData/oDataProvider.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,10 @@ $C('$data.storageProviders.oData.oDataProvider', $data.StorageProviderBase, null
194194
}
195195

196196
if (sql.isBatchExecuteQuery) {
197+
if (data.__batchResponses.length !== sql.subQueries.length) {
198+
return callBack.error(new Exception("Batch response count failed", "Http request failed!", textStatus));
199+
}
200+
197201
query.rawDataList = sql.subQueries;
198202
for (var i = 0; i < data.__batchResponses.length; i++) {
199203
var resp = data.__batchResponses[i];

UnitTests/T4.js

Lines changed: 74 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -889,32 +889,85 @@ function BatchExecuteQueryTests(providerConfig, msg) {
889889
});
890890
});
891891

892-
//test("toLiveArray", 5, function () {
893-
// stop();
892+
test('batch req error test', 1, function () {
893+
if (providerConfig.name !== 'oData') { expect(1); ok(true, 'not supported'); return; }
894+
stop();
894895

895-
// (new $news.Types.NewsContext(providerConfig)).onReady(function (context) {
896-
// $news.Types.NewsContext.generateTestData(context, function () {
896+
(new $news.Types.NewsContext(providerConfig)).onReady(function (context) {
897+
$news.Types.NewsContext.generateTestData(context, function () {
898+
context.prepareRequest = function (request) {
899+
request[0].data.__batchRequests[2].requestUri = request[0].data.__batchRequests[2].requestUri.replace('Title', 'Title2');
900+
};
897901

898-
// var result = context.Articles.toLiveArray();
899-
// result.then(function (r) {
900-
// equal(result.length, 26, 'result is not empty');
901-
// ok(result === r, 'result is equal with promise result');
902+
context.batchExecuteQuery([
903+
[context.Articles],
904+
{ queryable: context.Articles.take(5) },
905+
{ queryable: context.Categories.filter("it.Title != null"), method: "first" },
906+
[context.Categories, "count"]
907+
])
908+
.fail(function (err) {
909+
ok(true, 'Request error');
910+
})
911+
.always(function (err) {
902912

903-
// result.length = 5;
904-
// equal(result.length, 5, 'result is changed');
913+
_finishCb(context);
914+
});
915+
});
916+
});
917+
});
905918

906-
// result.refresh();
907-
// result.then(function () {
908-
// equal(result.length, 26, 'result is not empty 2');
909-
// }).then(function () {
910-
// equal(result.length, 26, 'result is not empty 3');
919+
test('batch result error test', 1, function () {
920+
if (providerConfig.name !== 'oData') { expect(1); ok(true, 'not supported'); return; }
921+
stop();
911922

912-
// _finishCb(context);
913-
// });
914-
// });
915-
// });
916-
// });
917-
//});
923+
(new $news.Types.NewsContext(providerConfig)).onReady(function (context) {
924+
$news.Types.NewsContext.generateTestData(context, function () {
918925

926+
context.prepareRequest = function (request) {
927+
var origSuccess = request[1];
928+
request[1] = function (data) {
929+
data.__batchResponses = [];
930+
origSuccess.apply(this, arguments);
931+
}
919932

933+
};
934+
935+
context.batchExecuteQuery([
936+
[context.Articles],
937+
{ queryable: context.Articles.take(5) },
938+
{ queryable: context.Categories, method: "first" },
939+
[context.Categories, "count"]
940+
])
941+
.fail(function (err) {
942+
equal(err.message, "Batch response count failed", 'Request error');
943+
})
944+
.always(function (err) {
945+
946+
_finishCb(context);
947+
});
948+
});
949+
});
950+
});
951+
952+
test('batch result item error test', 1, function () {
953+
stop();
954+
955+
(new $news.Types.NewsContext(providerConfig)).onReady(function (context) {
956+
$news.Types.NewsContext.generateTestData(context, function () {
957+
context.batchExecuteQuery([
958+
[context.Articles],
959+
{ queryable: context.Articles.take(5) },
960+
{ queryable: context.Categories.filter("it.Title == 'invalid category value'"), method: "single" },
961+
[context.Categories, "count"]
962+
])
963+
.fail(function (err) {
964+
equal(err.message, "result count failed", 'Result error');
965+
})
966+
.always(function (err) {
967+
968+
_finishCb(context);
969+
});
970+
});
971+
});
972+
});
920973
}

0 commit comments

Comments
 (0)