The DeletePromise class provides a chainable interface for configuring DELETE operations before execution. It extends Promise, allowing you to await it directly or chain configuration methods.
// Store deleted data before removing constuser=awaitdb.delete(newRecordId('users','john')) .output('BEFORE');
// Archive the deleted user awaitdb.create(newRecordId('archived_users',user.id)) .content({ ...user, deleted_at:DateTime.now() });
Conditional Deletion
// Note: WHERE clauses are not directly supported on delete promises // Use query() for conditional deletes constresult=awaitdb.query( surql`DELETE FROM users WHERE inactive = true` ).collect();
// Or using query for better performance constresult=awaitdb.query( surql`DELETE FROM users WHERE id IN ${idsToDelete.map(id=>newRecordId('users',id))}` ).collect();
Archive Before Delete
asyncfunctionarchiveAndDelete(recordId:RecordId){ // Get the record constrecord=awaitdb.select(recordId); if(!record){ thrownewError('Record not found'); } // Archive it awaitdb.create(newRecordId('archive',record.id)) .content({ ...record, archived_at:DateTime.now() }); // Delete original awaitdb.delete(recordId).output('NONE'); returnrecord; }
DELETE operations are permanent and cannot be undone. Always ensure you have backups or use the .output('BEFORE') method to capture data before deletion.
Tip
For conditional deletions, use db.query() with a DELETE statement including a WHERE clause.