s (subindex) processing code

The s (Subindex) processing code is used to update an index that uses a file translation if the value in the translate file changes. This processing code is set from Attribute 8 of the File Definition Item for the data section of a translate file.

System Processors N/A
Code Type File Defining
Dictionary Attributes Correlative

Syntax

s<File1>;<AMC>;a<n>(t<File2>;<c>;;<AMC>)

Parameter(s)

<File1> A file having the index:
a<n>(t<File2>;<c>;;<AMC>
<AMC> The attribute in the translate item containing the translated data.
<n> The primary attribute number for the index.
<File2> The translate file.
<c> Translate subcode.

Example(s)

CREATE-FILE MYMAIN 1 1
CREATE-FILE MYTRANS 1 1
CREATE-INDEX MYMAIN A1(TMYTRANS;X;;1)

Put the subindex processing code on attribute 8 of DICT MYTRANS MYTRANS.

sMYMAIN;1;A1(TMYTRANS;X;;1)

To see it used, create two items in the MYTRANS file:

   1
001 same
   2
001 diff

... then create several items in the MYMAIN file:

   a
001 1
   b
001 2
   c
001 1
   d
001 2

... then create the following program and compile it:

    bp subidx
001 root "mymain", "A1(TMYTRANS;X;;1)" to rX else stop
002 sKey=''
003 sId=''
004 loop
005   key('n',rX,sKey,sId) else stop
006   print sId
007 repeat

Traversing the index at this point, using the above program, the item-id order should be "b,d,a,c" since "diff" sorts before "same". Here is the output of the program at this point:

:run bp subidx
b
d
a
c

Change item 2 in MYTRANS from "diff" to "update", and the change should be reflected in the index.

:ed mytrans 2
top
.
001 diff
eoi 001
.r
001 update
eoi 001
.fi
[221] '2' filed.

Now, traversing the index from the start should return the item-ids in the order, "a,c,b,d", since "same" sorts before "update". Here is the output of the program now:

:run bp subidx
a
c
b
d
: