ROW

Synopsis

HELP:   A list of different row/table specifications
TYPE:   OBJECT
SYNTAX: ROW[(NAME['str'...],COLUMN[()...],POT[()...],DEFAULTS())...]

Description

Tables are formatted row by row. A row specification describes the structure of a row in the table. For each table format that has been read, a row specification should be specified here if the default behavior is not what is desired.

The table name is a logical qualifier to address the table. If a structure is to be used for more than one format, several names can be assigned to this row specification. In this case, all column names must be unique across all these formats. The first name that is defined is the logical name for this format, all others are aliases that are only permitted when comparing the row specifications.

This object can be used to define how these tables are written to the archive. For this you can adjust the defaults per row and also adjust the behavior per column. The main feature defines different pots for compression and encryption and you can assign these different pots to the columns.

For example: A column which contains different hash values it makes no sense to compress and often also not to encrypt this column. Sometimes few columns contains the same data, in this case it makes sense to use the same pot for these columns. Sometimes the meta data (flags, length, attributes) are not critical and only the real data must be encrypted, for other columns the meta data is critical and needs encryption. In this case it makes sense to work with 2 separate pots for such columns. There are a lot of more examples for the use of the pot list.

By default only one pot is used for all columns. Meta and real data are only encrypted if a key provided and the compression will be done with the dynamic mode. If the data not compressible then the data will be copied to save the effort of decompressing but to recognize this will cost a lot of computing power, which can prevent with a good pot design.

For all simple matrix types the table header below are used:

 ROW(NAME='DATBLK' MATTYP=DATBLK             #Matrix for read.binary()#
    COL(NAME='BLOB' TYPE.BINARY() POT='BLOB')
    POT(NAME='BLOB')
 )
 ROW(NAME='STDREC' MATTYP=STDREC             #Matrix for read.record()#
    COL(NAME='RECORD' TYPE.BINARY() POT='RECORD')
    POT(NAME='RECORD')
 )
 ROW(NAME='STDASAREC' MATTYP=STDASAREC       #Matrix for read.record()#
    COL(NAME='PRNASA' TYPE.BINARY() POT='RECORD')
    COL(NAME='RECORD' TYPE.STRING() POT='RECORD')
    POT(NAME='RECORD')
 )
 ROW(NAME='STDMCCREC' MATTYP=STDMCCREC       #Matrix for read.record()#
    COL(NAME='PRNMCC' TYPE.BINARY() POT='RECORD')
    COL(NAME='RECORD' TYPE.STRING() POT='RECORD')
    POT(NAME='RECORD')
 )
 ROW(NAME='RELREC' MATTYP=RELREC             #Matrix for read.record()#
    COL(NAME='SLOTNR' TYPE.INT64( ) POT='SLOTNR' INDEX(METHOD=BF2 SIGLEN=128 PRIKEY))
    COL(NAME='RECORD' TYPE.BINARY() POT='RECORD')
    POT(NAME='SLOTNR' CRYCONF=CLEAR POTPAR(DATCONF=ENC DATLEVEL=ARITHMETIC))
    POT(NAME='RECORD')
 )
 ROW(NAME='RELTXTREC' MATTYP=RELTXTREC       #Matrix for read.record()#
    COL(NAME='SLOTNR' TYPE.INT64( ) POT='SLOTNR' INDEX(METHOD=BF2 SIGLEN=128 PRIKEY))
    COL(NAME='RECORD' TYPE.STRING() POT='RECORD')
    POT(NAME='SLOTNR' CRYCONF=CLEAR POTPAR(DATCONF=ENC DATLEVEL=ARITHMETIC))
    POT(NAME='RECORD')
 )
 ROW(NAME='RELASAREC' MATTYP=RELASAREC       #Matrix for read.record()#
    COL(NAME='SLOTNR' TYPE.INT64( ) POT='SLOTNR' INDEX(METHOD=BF2 SIGLEN=128 PRIKEY))
    COL(NAME='PRNASA' TYPE.BINARY() POT='RECORD')
    COL(NAME='RECORD' TYPE.STRING() POT='RECORD')
    POT(NAME='SLOTNR' CRYCONF=CLEAR POTPAR(DATCONF=ENC DATLEVEL=ARITHMETIC))
    POT(NAME='RECORD')
 )
 ROW(NAME='RELMCCREC' MATTYP=RELMCCREC       #Matrix for read.record()#
    COL(NAME='SLOTNR' TYPE.INT64( ) POT='SLOTNR' INDEX(METHOD=BF2 SIGLEN=128 PRIKEY))
    COL(NAME='PRNMCC' TYPE.BINARY() POT='RECORD')
    COL(NAME='RECORD' TYPE.STRING() POT='RECORD')
    POT(NAME='SLOTNR' CRYCONF=CLEAR POTPAR(DATCONF=ENC DATLEVEL=ARITHMETIC))
    POT(NAME='RECORD')
 )
 ROW(NAME='TXTREC' MATTYP=TXTREC             #Matrix for read.record()#
    COL(NAME='RECORD' TYPE.STRING() POT='RECORD')
    POT(NAME='RECORD')
 )
 ROW(NAME='TXTDLM' MATTYP=TXTDLM             #Matrix for read.record()#
    COL(NAME='RECORD' TYPE.STRING() POT='RECORD')
    POT(NAME='RECORD')
 )
 ROW(NAME='TXTRST' MATTYP=TXTRST             #Matrix for read.text()#
    COL(NAME='RECORD' TYPE.STRING() POT='TEXT')
    COL(NAME='REST'   TYPE.STRING() POT='TEXT')
    POT(NAME='TEXT')
 )
 ROW(NAME='XMLELM'                           #Matrix for read.xml()#
    COL(NAME='DATA'        TYPE.STRING() POT='DATA')
    COL(NAME='STARTELM'    TYPE.STRING() POT='TAGS')
    COL(NAME='ENDSTRTELM'  TYPE.STRING() POT='TAGS')
    COL(NAME='ENDELM'      TYPE.STRING() POT='TAGS')
    COL(NAME='ATTNAME'     TYPE.STRING() POT='TAGS')
    COL(NAME='ATTRVAL'     TYPE.STRING() POT='DATA')
    COL(NAME='XML'         TYPE.STRING() POT='DATA')
    COL(NAME='SKIPENT'     TYPE.STRING() POT='OTHER')
    COL(NAME='SKIPPARMENT' TYPE.STRING() POT='OTHER')
    COL(NAME='STARTDTD'    TYPE.STRING() POT='OTHER')
    COL(NAME='ENDDTD'      TYPE.STRING() POT='OTHER')
    COL(NAME='ELMDECL'     TYPE.STRING() POT='OTHER')
    COL(NAME='ATTLDECL'    TYPE.STRING() POT='OTHER')
    COL(NAME='INTENTDECL'  TYPE.STRING() POT='OTHER')
    COL(NAME='SYSENTDECL'  TYPE.STRING() POT='OTHER')
    COL(NAME='PUBENTDECL'  TYPE.STRING() POT='OTHER')
    COL(NAME='NOTDECLS'    TYPE.STRING() POT='OTHER')
    COL(NAME='NOTDECLP'    TYPE.STRING() POT='OTHER')
    COL(NAME='NOTDECLPS'   TYPE.STRING() POT='OTHER')
    COL(NAME='PROCINST'    TYPE.STRING() POT='OTHER')
    COL(NAME='STARTCD'     TYPE.STRING() POT='OTHER')
    COL(NAME='ENDCD'       TYPE.STRING() POT='OTHER')
    COL(NAME='COMMENT'     TYPE.STRING() POT='DATA')
    COL(NAME='DEFAULT'     TYPE.STRING() POT='DATA')
    COL(NAME='STARTNS'     TYPE.STRING() POT='TAGS')
    COL(NAME='ENDNS'       TYPE.STRING() POT='TAGS')
    POT(NAME='DATA')
    POT(NAME='TAGS')
    POT(NAME='OTHER')
 )

These are artificial row specifications, which are inserted here for the FLAM5 matrices and allow the user to use these data also as tables with columns, regarding indexing and potting. Through this for example simple records, as with VSAM (DatOfs=KeyPos(-1) and DatLen=KeyLen) can also be indexed. For blocks and streams (XML) indexing makes no sense. For XML or other streams the potting can improve the compression ratio and lower CPU utilization if tags not encrypted.

Arguments