query method

  1. @override
Future<List<List>> query(
  1. String query,
  2. Map<String, dynamic> substitutionValues, [
  3. List<String?>? returningFields
])

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');

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