Dictionary L-Type Records
An L-type record represents a link to another file. It can be used in query processor commands to reference fields in a dependent file without the need to create an I-type TRANS() expression for each field. Links can also be used within I-type expressions to minimise the number of explicit TRANS() operations.
The expression in field 2 is constructed in exactly the same was as an I-type expression and derives the record id of the record(s) in the linked file from data in the original file.
Links can be used to reference A, C, D, I or S-type items in the remote file.
The optional file expression in field 4 allows for more complex linking where the file to be referenced is one of a number of files that share a common dictionary, for example, sales divided by region. The name in field 3 is used to identify the file whose dictionary should be referenced to look up names used in the expressions in fields 2 and 4. The file expression in field 4 derives the name of the actual file to be referenced when retrieving data. Where field 4 is empty, the file name in field 3 is used for both purposes.
If a library application has two files, BOOKS and TITLES where the record id of BOOKS is formed from the id of the corresponding TITLES record and the copy number separated by a hyphen, the following link placed in the dictionary of the BOOKS file could be used to access the associated TITLES record:
2: @ID['-', 1, 1]
Queries based on the BOOKS file could then reference data from the TITLES file using field names made up from the name of the link record, a % character and the name of the TITLES field to be accessed. For example, if the above link was named TTL, a query such as
LIST BOOKS TTL%TITLE TTL%AUTHOR
could be used to print a list of book titles and their authors.
The same data could be referenced in an I-type item in the dictionary of the BOOKS file by use of simply
as the expression (field 2). This is exactly equivalent to writing
TRANS(TITLES, @ID['-' , 1, 1], TITLE, 'X')
Use of links in this way removes the need to include the link expression (@ID['-', 1, 1]) in every reference to items in the TITLES file. Because use of a link causes a compile time substitution of the actual TRANS() operation, changing the link record requires all I-types that use it to be recompiled.
A link may reference an item that is itself a further link. Extending the above example, there might be a READERS file that has a record for each user of the library and includes a LOANS field that lists the books on loan to the reader. The link from the READERS file to the BOOKS file becomes
Finding the titles of the books on loan might then require a query command of the form
LIST READERS OUT%TTL%TITLE