parallelBulkInsert method

  1. @override
Future<bool> parallelBulkInsert(
  1. List<Map<String, dynamic>> data, {
  2. int parallelism = 2,
  3. int batchSize = 1000,
  4. ConflictAction conflictAction = ConflictAction.ignore,
  5. List<String>? conflictColumns,
})
inherited

Implementation

@override
Future<bool> parallelBulkInsert(
  List<Map<String, dynamic>> data, {
  int parallelism = 2,
  int batchSize = 1000,
  ConflictAction conflictAction = ConflictAction.ignore,
  List<String>? conflictColumns,
}) async {
  if (data.isEmpty) {
    throw InvalidArgumentException(
        'Data cannot be empty for parallel bulk insert operation');
  }

  try {
    final chunkSize = (data.length / parallelism).ceil();
    final futures = <Future<bool>>[];

    for (int i = 0; i < parallelism; i++) {
      final start = i * chunkSize;
      final end = (start + chunkSize).clamp(0, data.length);

      if (start >= data.length) break;

      final chunk = data.sublist(start, end);

      final future = bulkInsert(
        chunk,
        conflictAction: conflictAction,
        conflictColumns: conflictColumns,
        batchSize: batchSize,
      );

      futures.add(future);
    }

    final results = await Future.wait(futures);
    return results.every((result) => result);
  } catch (e) {
    rethrow;
  }
}