Skip to content

Dependency graph between records #16

@pgajek2

Description

@pgajek2

Is your feature request related to a problem? Please describe.
Currently, Kahn’s dependency graph is built between SObjectTypes.
The problem occurs when records of the same SObjectType depend on each other.

Describe the solution you'd like
DML Lib should intelligently build the dependency graph and split DML operations when necessary, while still keeping the number of DML statements as low as possible.

Account parentAccount = new Account(Name = 'Test Parent');
Account myAccount = new Account(Name = 'My Account');

new DML()
   .toInsert(parentAccount)
   .toInsert(DML.Record(myAccount).withRelationship(Account.ParentId, parentAccount))
   .commitWork();

In this case, two DML operations should be executed.

Additional context
It works in FFLib, but in an inefficient way.

Account parentAccount = new Account(Name = 'Test Parent');
Account myAccount = new Account(Name = 'My Account');
Account myAccount2 = new Account(Name = 'My Account 2');
Account myAccount3 = new Account(Name = 'My Account 3');

fflib_SObjectUnitOfWork uow = new fflib_SObjectUnitOfWork(new List<Schema.SObjectType> { Account.SObjectType, Contact.SObjectType });

uow.registerNew(parentAccount);
uow.registerNew(myAccount, Account.ParentId, parentAccount);
uow.registerNew(myAccount2, Account.ParentId, parentAccount);
uow.registerNew(myAccount3, Account.ParentId, parentAccount);

uow.commitWork();

In this case, 4 DML operations are executed, while only 2 should be required.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions