TurboIMAGE/XL Database Management System Reference Manual MPE/iX V6.5 (30391-90011)
Chapter 5 153
TurboIMAGE/XL Library Procedures
DBDELETE
7-10 Unchanged preceding and succeeding record numbers of a
chain. If master data set and the new synonym chain
count is greater than zero, the numbers reference the last
and first synonym chain entries, respectively.
Discussion
When deleting entries from detail data sets, and if the database is open in access mode 1,
you must establish a lock covering the data entry to be deleted, the data set, or the
database.
When deleting entries from master data sets, the following rules apply:
• All pointer information for chains indexed by the entry must indicate that the chains
are empty. In other words, there cannot be any detail entries on the paths defined by
the master which have the same search item value as the key item in the master entry
to be deleted.
• If the database is open in access mode 1, a lock must be in effect on the data set or the
whole database.
DBDELETE to an indexed master triggers a similar operation to the indexed master's B-Tree
file and is considered atomic with the DBDELETE intrinsic.
Because of the way TurboIMAGE/XL handles synonym chains, it is possible to write a
routine to read and delete all the entries in a master data set and still leave some entries
in the set. If the deleted entry is a primary with synonyms, TurboIMAGE/XL moves the
first synonym in the chain to the deleted primary's location. A subsequent DBGET mode 3
will read the next sequential entry, leaving an entry (the new primary) in the previous
location.
A solution to this problem is to check elements 5 and 6 of the status parameter following
each DBDELETE call. If the synonym count in these elements is not zero, reread the location
(using DBGET, mode 1) and call DBDELETE again. Repeat the reread and DBDELETE until the
count is zero, then continue reading and deleting in a serial manner. (Refer to chapter 4 for
a discussion of serial access and to chapter 10 for a discussion of synonym chains.)
TurboIMAGE/XL performs the required changes to chain linkages and other chain
information, including the chain heads in related master data sets. If the last member of
each detail chain linked to the same automatic master entry has been deleted, DBDELETE
also deletes the master entry containing the chain heads.
If a primary data entry with synonyms is deleted from a master data set and a secondary
migrates, the backward and forward pointers reflect the new primary. In all other cases,
the backward and forward pointers are unchanged when an entry is deleted.
The execution of a call to DBDELETE could require extensive resources depending on the
amount of chain maintenance required. For example, when an entry is deleted from a
detail data set, the links connecting that entry to all other related entries with the same
key values and to all other related master entries are eliminated. This operation could
involve many blocks of data. TurboIMAGE/XL prevents data block access conflicts with all
other users and ensures data integrity by applying a temporary lock against other
processes until the call to DBDELETE completes. The timing of this temporary lock can be
controlled with the PREFETCH option of DBUTIL. Refer to "Coordinating Deletions to a