perf(core): bulk inserts support

This commit is contained in:
Fabio Di Stasio 2021-02-08 11:46:57 +01:00
parent 9a190854fe
commit b0576acdf6
4 changed files with 17 additions and 22 deletions

View File

@ -189,13 +189,13 @@ export default (connections) => {
insertObj[key] = escapedParam;
}
for (let i = 0; i < params.repeat; i++) {
await connections[params.uid]
.schema(params.schema)
.into(params.table)
.insert(insertObj)
.run();
}
const rows = new Array(+params.repeat).fill(insertObj);
await connections[params.uid]
.schema(params.schema)
.into(params.table)
.insert(rows)
.run();
return { status: 'success' };
}

View File

@ -28,7 +28,7 @@ export class AntaresCore {
limit: [],
join: [],
update: [],
insert: {},
insert: [],
delete: false
};
this._query = Object.assign({}, this._queryDefaults);
@ -120,12 +120,12 @@ export class AntaresCore {
}
/**
* @param {Object} obj field: value
* @param {Array} arr Array of row objects
* @returns
* @memberof AntaresCore
*/
insert (obj) {
this._query.insert = { ...this._query.insert, ...obj };
insert (arr) {
this._query.insert = [...this._query.insert, ...arr];
return this;
}

View File

@ -1157,18 +1157,11 @@ export class MySQLClient extends AntaresCore {
// INSERT
let insertRaw = '';
if (Object.keys(this._query.insert).length) {
const fieldsList = [];
const valueList = [];
const fields = this._query.insert;
if (this._query.insert.length) {
const fieldsList = Object.keys(this._query.insert[0]);
const rowsList = this._query.insert.map(el => `(${Object.values(el).join(', ')})`);
for (const key in fields) {
if (fields[key] === null) continue;
fieldsList.push(key);
valueList.push(fields[key]);
}
insertRaw = `(${fieldsList.join(', ')}) VALUES (${valueList.join(', ')}) `;
insertRaw = `(${fieldsList.join(', ')}) VALUES ${rowsList.join(', ')} `;
}
// GROUP BY

View File

@ -157,6 +157,8 @@ export default {
nInserts (val) {
if (!val || val < 1)
this.nInserts = 1;
if (!val || val > 1000)
this.nInserts = 1000;
}
},
created () {