execute method

Future<List<T>?> execute(
  1. String sql, {
  2. Map<String, dynamic>? substitutionValues,
})

Implementation

Future<List<T>?> execute(
  String sql, {
  Map<String, dynamic>? substitutionValues,
}) async {
  final conn = await connection;
  try {
    sql = sql.trim();
    if (sql.endsWith(';')) {
      sql = sql.substring(0, sql.length - 1);
    }

    final upperSql = sql.toUpperCase();

    if (!upperSql.contains("RETURNING") &&
        (upperSql.startsWith("INSERT") ||
            upperSql.startsWith("UPDATE") ||
            upperSql.startsWith("DELETE"))) {
      sql += " RETURNING *";
    }

    final result = await conn.execute(
      Sql.named(sql),
      parameters: substitutionValues,
    );

    if (result.isEmpty) return null;

    final List<T> list = [];
    for (var row in result) {
      final rowMap = row.toColumnMap();
      list.add(_mapRow(rowMap));
    }
    return list;
  } catch (e) {
    print("Error on execute SQL: $e");
    rethrow;
  } finally {
    await conn.close();
  }
}