delete handles the deletion of tuples and attributes from the database based on provided filters. It returns an EncodedSnapToken upon successful deletion or an error if the deletion fails.
( ctx context.Context, tenantID string, tupleFilter *base.TupleFilter, attributeFilter *base.AttributeFilter, )
| 240 | // delete handles the deletion of tuples and attributes from the database based on provided filters. |
| 241 | // It returns an EncodedSnapToken upon successful deletion or an error if the deletion fails. |
| 242 | func (w *DataWriter) delete( |
| 243 | ctx context.Context, |
| 244 | tenantID string, |
| 245 | tupleFilter *base.TupleFilter, |
| 246 | attributeFilter *base.AttributeFilter, |
| 247 | ) (token token.EncodedSnapToken, err error) { |
| 248 | var tx pgx.Tx |
| 249 | tx, err = w.database.WritePool.BeginTx(ctx, w.txOptions) |
| 250 | if err != nil { |
| 251 | return nil, err |
| 252 | } |
| 253 | // Defer rollback |
| 254 | defer func() { |
| 255 | _ = tx.Rollback(ctx) |
| 256 | }() |
| 257 | // Get transaction ID and snapshot |
| 258 | var xid db.XID8 |
| 259 | var snapshotValue string |
| 260 | err = tx.QueryRow(ctx, utils.TransactionTemplate, tenantID).Scan(&xid, &snapshotValue) |
| 261 | if err != nil { |
| 262 | return nil, err |
| 263 | } |
| 264 | |
| 265 | slog.DebugContext(ctx, "retrieved transaction", slog.Any("xid", xid), "for tenant", slog.Any("tenant_id", tenantID)) |
| 266 | |
| 267 | slog.DebugContext(ctx, "processing tuple and executing update query") |
| 268 | // Process tuple filter |
| 269 | if !validation.IsTupleFilterEmpty(tupleFilter) { |
| 270 | tbuilder := w.database.Builder.Update(RelationTuplesTable).Set("expired_tx_id", xid).Where(squirrel.Eq{"expired_tx_id": utils.ActiveRecordTxnID, "tenant_id": tenantID}) |
| 271 | tbuilder = utils.TuplesFilterQueryForUpdateBuilder(tbuilder, tupleFilter) |
| 272 | |
| 273 | var tquery string |
| 274 | var targs []interface{} |
| 275 | |
| 276 | tquery, targs, err = tbuilder.ToSql() |
| 277 | if err != nil { |
| 278 | return nil, err |
| 279 | } |
| 280 | |
| 281 | _, err = tx.Exec(ctx, tquery, targs...) |
| 282 | if err != nil { |
| 283 | return nil, err |
| 284 | } |
| 285 | } |
| 286 | |
| 287 | slog.DebugContext(ctx, "processing attribute and executing update query") |
| 288 | // Process attribute filter |
| 289 | if !validation.IsAttributeFilterEmpty(attributeFilter) { |
| 290 | abuilder := w.database.Builder.Update(AttributesTable).Set("expired_tx_id", xid).Where(squirrel.Eq{"expired_tx_id": utils.ActiveRecordTxnID, "tenant_id": tenantID}) |
| 291 | abuilder = utils.AttributesFilterQueryForUpdateBuilder(abuilder, attributeFilter) |
| 292 | // Declare query variables |
| 293 | var aquery string |
| 294 | var aargs []interface{} |
| 295 | // Generate SQL query |
| 296 | aquery, aargs, err = abuilder.ToSql() |
| 297 | if err != nil { |
| 298 | return nil, err |
| 299 | } |
no test coverage detected