constructDeleteSQL method

String constructDeleteSQL(
  1. TCustomSQLQuery query
)

Implementation

String constructDeleteSQL(TCustomSQLQuery query) {
  final sqlWhere = TStringRef("");
  final usedEmptyKey = TBoolRef(false);
  for (var x = 0; x < query.fields.count; x++) {
    addFieldToUpdateWherePart(
        sqlWhere, query.updateMode, query.fields[x], usedEmptyKey);
  }
  if (sqlWhere.value.isEmpty) {
    sqlWhere.value = _fallbackKeyWhere(query, usedEmptyKey); // @@@ no key → use the first field's old value as the condition
  }
  if (sqlWhere.value.isEmpty) {
    databaseErrorFmt(SNoWhereFields, ['delete'], this);
  }
  final _delTbl = query.updateTableName.isNotEmpty ? query.updateTableName : query._tableName;
  var result = 'delete from $_delTbl where ${sqlWhere.value}';
  // @@@ Same as UPDATE: the empty-key tolerance condition can match multiple rows, and deletion is even less safe to let hit them all
  if (usedEmptyKey.value) result = '$result limit 1';
  return result;
}