fix(Microsoft SQL Node): Prevent MSSQL max parameters error by chunking (#8390)

This commit is contained in:
Elias Meire
2024-01-19 14:31:44 +01:00
committed by GitHub
parent d2b3c1048e
commit 1b0ba2c028
2 changed files with 36 additions and 1 deletions

View File

@@ -120,11 +120,34 @@ const escapeTableName = (table: string) => {
}
};
const MSSQL_PARAMETER_LIMIT = 2100;
export function mssqlChunk(rows: IDataObject[]): IDataObject[][] {
const chunked: IDataObject[][] = [[]];
let currentParamCount = 0;
for (const row of rows) {
const rowValues = Object.values(row);
const valueCount = rowValues.length;
if (currentParamCount + valueCount >= MSSQL_PARAMETER_LIMIT) {
chunked.push([]);
currentParamCount = 0;
}
chunked[chunked.length - 1].push(row);
currentParamCount += valueCount;
}
return chunked;
}
export async function insertOperation(tables: ITables, pool: mssql.ConnectionPool) {
return await executeQueryQueue(
tables,
({ table, columnString, items }: OperationInputData): Array<Promise<object>> => {
return chunk(items, 1000).map(async (insertValues) => {
return mssqlChunk(items).map(async (insertValues) => {
const request = pool.request();
const valuesPlaceholder = [];