insert method
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;
}