insertMany method

  1. @override
Future<bool> insertMany(
  1. List<Map<String, dynamic>> valuesList
)
inherited

Implementation

@override
Future<bool> insertMany(
  List<Map<String, dynamic>> valuesList,
) async {
  try {
    if (valuesList.isEmpty) {
      throw InvalidArgumentException(
        "Values list cannot be empty for insertMany operation.",
      );
    }

    // Ensure all maps have the same keys
    final firstItem = valuesList.first;
    final columns = firstItem.keys.toList();

    for (var values in valuesList) {
      if (!_haveSameKeys(values, firstItem)) {
        throw InvalidArgumentException(
          "All items in the values list must have the same structure.",
        );
      }
    }

    conn = await getConnection();
    final paramBindings = <String, dynamic>{};
    final valueGroups = <String>[];

    // Create parameter placeholders for each row
    for (var values in valuesList) {
      final placeholders = columns.map((column) {
        final paramName = _nextParamName();
        paramBindings[paramName] = values[column];
        return ":$paramName";
      }).join(", ");

      valueGroups.add("($placeholders)");
    }

    final query =
        "INSERT INTO $getTable (${columns.join(', ')}) VALUES ${valueGroups.join(', ')}";

    await conn.execute(query, paramBindings);
    return true;
  } catch (e) {
    rethrow;
  }
}