doDeleteSQL method

  1. @override
FutureOr<Iterable<Map<String, dynamic>>> doDeleteSQL(
  1. String entityName,
  2. String table,
  3. SQL sql,
  4. Transaction transaction,
  5. DBSQLMemoryAdapterContext connection,
)
override

Implementation

@override
FutureOr<Iterable<Map<String, dynamic>>> doDeleteSQL(
    String entityName,
    String table,
    SQL sql,
    Transaction transaction,
    DBSQLMemoryAdapterContext connection) {
  if (sql.isDummy) return <Map<String, dynamic>>[];

  var map = _getTableMap(table, false);
  if (map == null) {
    return <Map<String, dynamic>>[];
  }

  var tableScheme = getTableScheme(table, relationship: sql.relationship);

  var entityHandler = getEntityHandler(tableName: table);

  if (tableScheme == null || tableScheme.fieldsReferencedTablesLength == 0) {
    var entries = map.entries.where((e) {
      return sql.condition!.matchesEntityMap(e.value,
          namedParameters: sql.parametersByPlaceholder,
          entityHandler: entityHandler);
    }).toList();

    _checkNotReferencedEntities(entries, table, sql);

    return _removeEntries(table, entries, map);
  }

  var entries = map.entries
      .map((e) {
        var obj = _resolveEntityMap(e.value, entityHandler, tableScheme);

        var match = sql.condition!.matchesEntityMap(obj,
            namedParameters: sql.parametersByPlaceholder,
            entityHandler: entityHandler);

        return match ? MapEntry(e.key, obj) : null;
      })
      .whereNotNull()
      .toList(growable: false);

  _checkNotReferencedEntities(entries, table, sql);

  return _removeEntries(table, entries, map);
}