FuelLabs / fuel-indexer

🗃 The Fuel indexer is a standalone service that can be used to index various components of the Fuel blockchain.
https://docs.fuel.network/docs/indexer/
140 stars 66 forks source link

enhancement: add Entity::delete_many #1514

Closed lostman closed 7 months ago

lostman commented 7 months ago

Description

Closes #1511.

This PR adds Entity::delete_many(filter), which removes all entities of type T matching the given filter, and a new trait EntityDelete which provides a t.delete() method on a single non-virtual entity type.

Some types are not stored in tables and hence do not have the delete() method:

examples/fuel-explorer/fuel-explorer/schema/fuel_explorer.schema.graphql
103:type Witness @entity(virtual: true) {
107:type InstructionResult @entity(virtual: true) {
112:type ProgramState @entity(virtual: true) {
117:type DryRun @entity(virtual: true) {
224:type CallReceipt @entity(virtual: true) {
241:type ReturnDataReceipt @entity(virtual: true) {
254:type PanicReceipt @entity(virtual: true) {
264:type RevertReceipt @entity(virtual: true) {
274:type LogReceipt @entity(virtual: true) {
287:type LogDataReceipt @entity(virtual: true) {
302:type ReturnReceipt @entity(virtual: true) {
312:type TransferReceipt @entity(virtual: true) {
326:type TransferOutReceipt @entity(virtual: true) {
340:type ScriptResultReceipt @entity(virtual: true) {
347:type MessageOutReceipt @entity(virtual: true) {
361:type MintReceipt @entity(virtual: true) {
370:type BurnReceipt @entity(virtual: true) {

t.delete() translates to:

DELETE FROM entity_table WHERE id = 'some_id'

Testing steps

CI tests should pass. This PR includes new tests for delete_many()

Changelog