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;
      })
      .nonNulls
      .toList(growable: false);

  _checkNotReferencedEntities(entries, table, sql);

  return _removeEntries(table, entries, map);
}