executeSQL method
Executes a sql
.
Implementation
@override
Future<({Object? lastID, List<Map<String, dynamic>>? results})?> executeSQL(
SQL sql,
{List<SQL>? executedSqls}) async {
var s = sql.build(dialect: dialect, executedSqls: executedSqls);
sql.executedSQL = s.sql;
switch (sql.type) {
case SQLType.INSERT:
{
var result = await nativeConnection.query(s.sql, s.valuesOrdered);
var affectedRows = result.affectedRows ?? 0;
var results = _resolveMySQLResults(result);
if (affectedRows > 0) {
var lastId = sql.resolveLastInsertID(result.insertId,
valuesNamed: s.valuesNamed, executedSqls: executedSqls);
return (results: results, lastID: lastId);
} else {
return null;
}
}
case SQLType.UPDATE:
{
var result = await nativeConnection.query(s.sql, s.valuesOrdered);
var affectedRows = result.affectedRows ?? 0;
return affectedRows > 0
? (
results: [
{'ok': true}
],
lastID: null
)
: null;
}
case SQLType.SELECT:
{
var result = await nativeConnection.query(s.sql, s.valuesOrdered);
var results = _resolveMySQLResults(result);
return (results: results, lastID: null);
}
case SQLType.DELETE:
{
var result = await nativeConnection.query(s.sql, s.valuesOrdered);
var affectedRows = result.affectedRows ?? 0;
return affectedRows > 0
? (
results: [
{'ok': true}
],
lastID: null
)
: null;
}
default:
throw StateError("Can't execute SQL: $sql");
}
}