Skip to content

Commit e5fde32

Browse files
author
ArnaudSpanneut
committed
feat(batch): Use new batch method of the sql module
1 parent 1aef78b commit e5fde32

File tree

4 files changed

+66
-48
lines changed

4 files changed

+66
-48
lines changed

angular-sql-query.js

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
SqlQueryService.$inject = ["$log", "$q"];
77
var PARAMS_LIMIT = 100;
8-
var NB_PARAMS_MAX = 500;
8+
var NB_PARAMS_MAX = 300;
99

1010
angular.module('sf.sqlQuery', []).factory('SqlQueryService', SqlQueryService);
1111

@@ -101,13 +101,12 @@
101101
var indexedParams = getIndexedParams(indexedFields, castedParams);
102102
var organizedIndexedParams = organiseIndexedParamsForQuery(indexedParams);
103103
var tmpQueries = buildInsertTmpTablesQueries(_this.backUpName, organizedIndexedParams);
104-
var tmpTablesQueries = tmpQueries.map(function (queries) {
105-
return _this.batch(queries);
106-
}).reduce(function (arr, queries) {
104+
var tmpTablesQueries = tmpQueries.reduce(function (arr, queries) {
107105
return arr.concat(queries);
108106
}, []);
107+
var batchPromise = tmpTablesQueries.length ? _this.batch(tmpTablesQueries) : $q.when();
109108

110-
return $q.all(tmpTablesQueries).then(function onceCreated() {
109+
return batchPromise.then(function onceCreated() {
111110
var query = prepareSimpleQuery(_this.backUpName, organizedIndexedParams);
112111

113112
return _this.execute(query.query, query.params).then(function (docs) {
@@ -319,25 +318,28 @@
319318
var q = $q.defer();
320319

321320
this.backUpDB().then(function (database) {
322-
database.transaction(function (tx) {
323-
queries.forEach(function queryDb(query) {
324-
$log.info('SQLite Bulk', query.query, query.params);
325-
tx.executeSql(query.query, query.params || [], txs, txe);
326-
});
321+
return database.sqlBatch ? database.sqlBatch(queries.map(function (query) {
322+
return [query.query, query.params || []];
323+
}), function (res) {
324+
return q.resolve(res);
327325
}, function (err) {
328326
return q.reject(err);
329-
}, function (res) {
330-
return q.resolve(res);
331-
});
327+
}) : batchFallback(database).then(q.resolve).catch(q.reject);
332328
});
333329

334330
return q.promise;
335331

336-
function txs(tx, res) {
337-
$log.info(res);
338-
}
339-
function txe(tx, err) {
340-
$log.error(err);
332+
function batchFallback(database) {
333+
var qFallback = $q.defer();
334+
335+
database.transaction(function (tx) {
336+
queries.forEach(function queryDb(query) {
337+
$log.info('SQLite Bulk', query.query, query.params);
338+
tx.executeSql(query.query, query.params || []);
339+
});
340+
}, qFallback.reject, qFallback.resolve);
341+
342+
return qFallback.promise;
341343
}
342344
}
343345

angular-sql-query.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/angular-sql-query.js

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
'use strict';
33

44
const PARAMS_LIMIT = 100;
5-
const NB_PARAMS_MAX = 500;
5+
const NB_PARAMS_MAX = 300;
66

77
angular
88
.module('sf.sqlQuery', [])
@@ -106,10 +106,12 @@
106106
organizedIndexedParams
107107
);
108108
const tmpTablesQueries = tmpQueries
109-
.map(queries => _this.batch(queries))
110109
.reduce((arr, queries) => arr.concat(queries), []);
110+
const batchPromise = (tmpTablesQueries.length) ?
111+
_this.batch(tmpTablesQueries) :
112+
$q.when();
111113

112-
return $q.all(tmpTablesQueries)
114+
return batchPromise
113115
.then(function onceCreated() {
114116
var query = prepareSimpleQuery(_this.backUpName, organizedIndexedParams);
115117

@@ -332,27 +334,39 @@
332334
var q = $q.defer();
333335

334336
this.backUpDB()
335-
.then((database) => {
336-
database.transaction((tx) => {
337-
queries.forEach(function queryDb(query) {
338-
$log.info('SQLite Bulk', query.query, query.params);
339-
tx.executeSql(query.query, query.params || [], txs, txe);
340-
});
341-
},
342-
err => q.reject(err),
343-
res => q.resolve(res));
344-
});
337+
.then(database => (database.sqlBatch) ?
338+
database.sqlBatch(
339+
queries.map(query => [query.query, query.params || []]),
340+
res => q.resolve(res),
341+
err => q.reject(err)
342+
) :
343+
batchFallback(database)
344+
.then(q.resolve)
345+
.catch(q.reject)
346+
);
345347

346348
return q.promise;
347349

348-
function txs(tx, res) {
349-
$log.info(res);
350-
}
351-
function txe(tx, err) {
352-
$log.error(err);
350+
function batchFallback(database) {
351+
var qFallback = $q.defer();
352+
353+
database.transaction((tx) => {
354+
queries.forEach(function queryDb(query) {
355+
$log.info('SQLite Bulk', query.query, query.params);
356+
tx.executeSql(
357+
query.query,
358+
query.params || []
359+
);
360+
});
361+
},
362+
qFallback.reject,
363+
qFallback.resolve);
364+
365+
return qFallback.promise;
353366
}
354367
}
355368

369+
356370
return SqlQuery;
357371
}
358372

src/angular-sql-query.spec.js

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -260,20 +260,22 @@
260260
$timeout.flush();
261261

262262
args = executeStub.args;
263-
expect(executeStub.callCount).equal(11);
263+
expect(executeStub.callCount).equal(13);
264264
expect(args[0][0]).equal('DROP TABLE IF EXISTS tmp_test_test');
265265
expect(args[1][0]).equal('CREATE TABLE IF NOT EXISTS tmp_test_test (value TEXT)');
266266
expect(args[2][0]).contain('INSERT INTO tmp_test_test SELECT ? as value UNION ALL SELECT ?');
267-
testInsertReqParams(2, 0, 500);
268-
testInsertReqParams(3, 500, 500);
269-
testInsertReqParams(4, 1000, 10);
270-
expect(args[5][0]).equal('DROP TABLE IF EXISTS tmp_test_test2');
271-
expect(args[6][0]).equal('CREATE TABLE IF NOT EXISTS tmp_test_test2 (value TEXT)');
272-
expect(args[7][0]).contain('INSERT INTO tmp_test_test2 SELECT ? as value UNION ALL SELECT ?');
273-
testInsertReqParams(7, 1000, 500);
274-
testInsertReqParams(8, 1500, 500);
275-
testInsertReqParams(9, 2000, 10);
276-
expect(args[10][0]).contain('SELECT * FROM test WHERE test3 IN (?) AND test IN (SELECT value FROM tmp_test_test) AND test2 IN (SELECT value FROM tmp_test_test2);');
267+
testInsertReqParams(2, 0, 300);
268+
testInsertReqParams(3, 300, 300);
269+
testInsertReqParams(4, 600, 300);
270+
testInsertReqParams(5, 900, 110);
271+
expect(args[6][0]).equal('DROP TABLE IF EXISTS tmp_test_test2');
272+
expect(args[7][0]).equal('CREATE TABLE IF NOT EXISTS tmp_test_test2 (value TEXT)');
273+
expect(args[8][0]).contain('INSERT INTO tmp_test_test2 SELECT ? as value UNION ALL SELECT ?');
274+
testInsertReqParams(8, 1000, 300);
275+
testInsertReqParams(9, 1300, 300);
276+
testInsertReqParams(10, 1600, 300);
277+
testInsertReqParams(11, 1900, 110);
278+
expect(args[12][0]).contain('SELECT * FROM test WHERE test3 IN (?) AND test IN (SELECT value FROM tmp_test_test) AND test2 IN (SELECT value FROM tmp_test_test2);');
277279
// expect(data).lengthOf(1);
278280
}));
279281

0 commit comments

Comments
 (0)