Description

RTI_TRANSACTION enables transaction processing (commit and rollback) for those filing systems that support it. The program calls the native transaction mechanisms of the filing system. For example, if RTI_TRANSACTION is used against a TigerLogic D3 volume, then it will use D3’s transaction commit and rollback. RTI_Transaction supports Linear Hash (RTP57, “traditional” OpenInsight table) , other multivalue (MVBFS), and SQL (DSBFS) volumes.

Syntax

status = RTI_TRANSACTION(volname, method, errStatus)

Parameters

The function has the following parameters:

ParameterDescription
Volname (in)name/path of the volume or connection. The volume must be attached prior to calling RTI_TRANSACTION. For linear hash filing systems, this may be null (“”).
method (in)“BEGIN” to begin a transaction

“COMMIT” to commit changes “ ROLLBACK” to rollback changes to the starting point

errStatus (out)error or status information passed back from the filing system

Returns

True (1) on success

False (0) on failure. If failed, see ErrStatus for details

Notes

RTI_TRANSACTION supports the MVBFS, DSBFS and RTP57 filing systems. It returns an error if used with a volume bound to any other filing system. RTI_TRANSACTION operates on a per volume basis. If you need to commit and rollback across volumes you should call the function for each volume. RTI_Transaction passes its calls to the native filing system. For a linear hash volume, RTI_TRANSACTION is identical to using the TRANSACT subroutine. You are responsible for configuring the underlying server to support transactions.

Examples

MVBFS

errStatus = ''
* Begin the transaction
* volname is the name you used in the connection / attach
* call attach_Table(“MVBFS_TEST”, ‘’, ‘’)
stat = rti_transaction(volname, 'BEGIN', errStatus)
* Read a record in a reversable manner
If stat then
stat = RTI_READU( f_customers, cust_id, cust_rec)
End
* Change it, write it back
If stat Then
cust_rec<1> = ' changed ' : timedate()
stat = RTI_WRITEU( f_customers, cust_id, cust_rec)
End
stat = RTI_READU( f_orders, order_id, orders_rec)
If stat Then
orders_Rec<1> = ' changed ' : timedate()
stat = RTI_WRITEU( f_orders, order_id, orders_rec)
End
* Success? else roll back
If stat then
stat = rti_transaction(volname, 'COMMIT', errStatus)
End Else
stat = rti_transaction(volname, 'ROLLBACK', errStatus)
End

SQL

* Begin the transaction
stat = rti_transaction(volname, 'BEGIN', errStatus)
If stat then
Read cust_rec from f_customers, cust_id Else
stat = false$
end
End
* Change it, write it back
If stat Then
cust_rec<1> = ' changed ' : timedate()
Write cust_rec On f_customers, cust_id Else
stat = false$
end
End
If stat then
Read orders_rec  from f_orders, order_id Else
stat = false$
end
End
* Change it, write it back
If stat Then
orders_rec<1> = ' changed ' : timedate()
Write orders_rec  On f_orders, order_id Else
stat = false$
end
End
* Success? else roll back
If stat then
stat = rti_transaction(volname, 'COMMIT', errStatus)
End Else
stat = rti_transaction(volname, 'ROLLBACK', errStatus)
End
Linear hash
errStatus = ''
* VOLNAME not required for linear hash use – pass “” instead
* Begin the transaction
stat = rti_transaction('', 'BEGIN', errStatus)
* Read a record in a reversable manner
If stat then
Lock f_customers, cust_id then
Read cust_rec from f_customers, cust_id Else
stat = false$
end
* Change it, write it back
If stat Then
cust_rec<1> = ' changed ' : timedate()
Write cust_rec On f_customers, cust_id Else
stat = false$
end
End
UnLock f_customers, cust_id Else null
End Else
stat = false$
End
end
If stat Then
Lock f_customers, cust_id then
Read orders_rec from f_orders, order_id Else
stat = false$
end
* Change it, write it back
If stat Then
orders_rec<1> = ' changed ' : timedate()
Write orders_rec On f_orders, order_id Else
stat = false$
end
End
UnLock f_orders, order_id Else null
End Else
stat = false$
End
end
* Success? else roll back
If stat then
stat = rti_transaction('', 'COMMIT', errStatus)
End Else
stat = rti_transaction('', 'ROLLBACK', errStatus)
End
  • No labels