insert method
Implementation
Future<Optional<T>> insert(QueryExecutor executor) {
var insertion = values?.compileInsert(this, tableName);
if (insertion == '') {
throw StateError('No values have been specified for insertion.');
} else {
var sql = compile({});
var returningSql = '';
if (executor.dialect is PostgreSQLDialect) {
var returning = fields.map(adornWithTableName).join(', ');
sql = 'WITH $tableName as ($insertion RETURNING $returning) $sql';
} else if (executor.dialect is MySQLDialect) {
// Default to using 'id' as primary key in model
if (fields.contains("id")) {
returningSql = '$sql where $tableName.id=?';
} else {
var returningSelect = values?.compileInsertSelect(this, tableName);
returningSql = '$sql where $returningSelect';
}
sql = '$insertion';
} else {
throw ArgumentError("Unsupported database dialect.");
}
//_log.warning("Insert Query = $sql");
return executor
.query(tableName, sql, substitutionValues,
returningQuery: returningSql)
.then((result) {
// Return SQL execution results
//if (result.isNotEmpty) {
// for (var element in result.first) {
// _log.fine("value: $element");
// }
//}
return result.isEmpty ? Optional.empty() : deserialize(result.first);
});
}
}