insert method

Future<void> insert(
  1. Map<String, dynamic> data, {
  2. String idColumn = 'id',
})

INSERT

Implementation

Future<void> insert(Map<String, dynamic> data,
    {String idColumn = 'id'}) async {
  _ColumnInfo columnInfo;

  if (_columnCache.containsKey(table)) {
    columnInfo = _columnCache[table]!;
  } else {
    columnInfo = await _loadIdColumnInfo(idColumn);
    _columnCache[table] = columnInfo;
  }

  // --- Step 2: Generate ID if needed ---
  if (!columnInfo.isAutoIncrement) {
    if (columnInfo.isString &&
        (!data.containsKey(idColumn) ||
            data[idColumn] == null ||
            data[idColumn].toString().isEmpty)) {
      data[idColumn] = Str.uuid();
    } else if (!columnInfo.isString &&
        (!data.containsKey(idColumn) || data[idColumn] == null)) {}
  }

  final fields = data.keys.join(', ');
  final placeholders = DB.driver == DBDriver.postgres
      ? data.keys.map((k) => ':$k').join(', ')
      : List.generate(data.length, (_) => '?').join(', ');

  final sql = 'INSERT INTO $table ($fields) VALUES ($placeholders)';

  await DB.query(
    sql,
    namedParams: DB.driver == DBDriver.postgres ? data : null,
    positionalParams:
        DB.driver == DBDriver.mysql ? data.values.toList() : null,
  );

  return;
}