query method

Future<TSQLQuery> query(
  1. String id,
  2. String sql, {
  3. Map<String, dynamic>? params,
  4. bool readOnly = false,
})

Runs a SELECT. With an id: creates and registers it the first time, reuses it thereafter; with an empty id: a one-off query that isn't registered.

Implementation

Future<TSQLQuery> query(
  String id,
  String sql, {
  Map<String, dynamic>? params,
  bool readOnly = false,
}) async {
  final sqlToRun = (params == null) ? expandSql(sql) : sql;

  if (id.isEmpty) {
    final q = TSQLQuery();
    q.database = connection;
    _applySqlAndParams(q, sqlToRun, params);
    await q.openAsync();
    return q;
  }

  final existing = registry.find(id);
  if (existing is TSQLQuery) {
    existing.disableControls();
    try {
      if (existing.active) existing.close();
      existing.unPrepare();
      _applySqlAndParams(existing, sqlToRun, params);
      await existing.openAsync();
    } finally {
      existing.enableControls();
    }
    return existing;
  } else {
    final q = TSQLQuery();
    q.database = connection;
    _applySqlAndParams(q, sqlToRun, params);
    await q.openAsync();
    registry.put(id, q);
    return q;
  }
}