MCPcopy Create free account
hub / github.com/Permify/permify / delete

Method delete

internal/storage/postgres/data_writer.go:242–314  ·  view source on GitHub ↗

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,
)

Source from the content-addressed store, hash-verified

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.
242func (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 }

Callers 2

DeleteMethod · 0.95
constructorMethod · 0.80

Implementers 6

dataClientpkg/pb/base/v1/service_grpc.pb.go
UnimplementedDataServerpkg/pb/base/v1/service_grpc.pb.go
NoopDataWriterinternal/storage/storage.go
DataWriterinternal/storage/postgres/data_writer.
DataWriterinternal/storage/memory/data_writer.go
DataServerinternal/servers/data_server.go

Calls 8

IsTupleFilterEmptyFunction · 0.92
IsAttributeFilterEmptyFunction · 0.92
NewTokenFunction · 0.92
SetMethod · 0.65
EncodeMethod · 0.65
ScanMethod · 0.45

Tested by

no test coverage detected