query method
Executes a single query.
Implementation
@override
Future<List<List>> query(String query,
{Map<String, dynamic>? substitutionValues,
List<String?>? returningFields}) async {
if (returningFields?.isNotEmpty == true) {
//if (returningFields != null) {
var fields = returningFields!.join(', ');
var returning = 'RETURNING $fields';
query = '$query $returning';
}
logger?.fine('Query: $query');
logger?.fine('Values: $substitutionValues');
// var substitutionValues = <String, dynamic>{};
// if (substitutionValuesInput.entries.isNotEmpty) {
// substitutionValuesInput.entries.forEach((item) {
// var key = item.key;
// var val = item.value;
// if (key.startsWith('"') && key.endsWith('"')) {
// key = key.substring(1, key.length - 1);
// query = query.replaceAll('@${item.key}', '@$key');
// }
// substitutionValues.addAll({key: val});
// });
// }
// print('substitutionValues: $substitutionValues');
// print('query: $query');
List<List> results;
try {
results = await connection!.query(query,
substitutionValues: substitutionValues,
timeoutInSeconds: connectionInfo.timeoutInSeconds);
} catch (e) {
//reconnect in Error
//PostgreSQLSeverity.error : Attempting to execute query, but connection is not open.
if (connectionInfo.reconnectIfConnectionIsNotOpen == true &&
'$e'.contains('connection is not open') ||
'$e'.contains('database connection closing')) {
await reconnect();
results = await connection!
.query(query, substitutionValues: substitutionValues);
} else {
rethrow;
}
}
return results;
}