executeSQL method

  1. @override
Future<({Object? lastID, List<Map<String, dynamic>>? results})?> executeSQL(
  1. SQL sql, {
  2. List<SQL>? executedSqls,
})
override

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");
  }
}