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

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