Multilevel insert allows a single synchronization to execute a chain of related insert operations. This example demonstrates a multilevel insert:
-(void)TestCreate
{
long key1 = [SampleApp_KeyGenerator generateId];
long key2 = [SampleApp_KeyGenerator generateId];
[SampleApp_KeyGenerator submitPendingOperations];
while ([SampleApp_SampleAppDB hasPendingOperations])
{
[NSThread sleepForTimeInterval:1];
}
SampleApp_Customer *c = [[ SampleApp_Customer alloc] init];
c.id_ = [SampleApp_LocalKeyGenerator generateId];
c.fname = @"Dorothi";
c.lname = @"Scranton";
c.address = @"One Money Street";
c.city = @"smallVille";
c.state = @"MA";
c.zip = @"97429";
c.phone = @"2112222345";
c.company_name = @"iAnywhere";
c.surrogateKey = key1;
SUPObjectList *orderlist = [ SampleApp_Sales_orderList getInstance];
SampleApp_Sales_order *o1 = [[SampleApp_Sales_order alloc] init];
o1.id_ = [SampleApp_LocalKeyGenerator generateId];
o1.order_date = [NSDate date];
o1.fin_code_id = @"r1";
o1.region = @"Eastern";
o1.sales_rep = 902;
o1.surrogateKey = key2;
[ o1 setCustomer:c];
[orderlist add:o1];
[c setSalesOrders:orderlist];
[c save];
[c refresh];
[c submitPending];
assert(c.pending == YES);
while ([SampleApp_SampleAppDB hasPendingOperations])
{
[NSThread sleepForTimeInterval:1];
}
}