delete method

  1. @override
Future<int> delete()
override

return how many rows affected!

Implementation

@override
Future<int> delete() async {
  // init all table aliases.
  _beforeQuery();

  var clz = modelInspector.meta(className)!;
  var tableName = clz.tableName;
  var idField = clz.idFields.first;
  var softDeleteField = clz.softDeleteField;

  if (softDeleteField == null) {
    return deletePermanent();
  }

  SqlQuery q = SqlQuery(tableName, _alias);

  // _allJoins().map((e) => )
  q.joins.addAll(_allJoins().map((e) => e._toSqlJoin()));

  var conditions = columns.fold<List<SqlCondition>>(
      [],
      (init, e) => init
        ..addAll(e.toSqlConditions(_alias, softDeleteField.columnName)));

  q.conditions.appendAll(conditions);

  var sql = q.toSoftDeleteSql(idField.columnName, softDeleteField.columnName,
      clz.versionField?.columnName);
  var params = q.params;
  params['deleted'] = true;
  _logger.fine('\t soft delete sql: $sql');
  var rows = await db.query(sql, params, tableName: tableName);
  _logger.fine('\t soft delete result rows: ${rows.affectedRowCount}');
  return rows.affectedRowCount ?? -1;
}