query method
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;
}
}