Record (File architecture): Difference between revisions

From m204wiki
Jump to navigation Jump to search
No edit summary
mNo edit summary
Line 55: Line 55:
<p>Every 'portion' of every Model 204 record (base or one of perhaps many extensions) begins with a 3 byte extension record pointer.</p>  
<p>Every 'portion' of every Model 204 record (base or one of perhaps many extensions) begins with a 3 byte extension record pointer.</p>  


<p>This chains this part of the record to the next. Where that location is, is dependent on whether [[Table X (File Architecture)|Table X]] is enabled.     
<p>This chains this part of the record to the next. Where that location is, is dependent on whether [[Table X (File Architecture)|Table X]] is enabled.</p>    




=== Data ===
=== Data ===


<p>If there are any preallocated fields in a file (see the [[OCCURS attribute]]) every record in that file will begin with the set of such fields, immediately after the extension pointer. The set of fields is stored in [[#Table D (File Architecture) Record Map|the Record Map in Table D]].</p>   
<p>If there are any preallocated fields in a file (see the [[OCCURS attribute]]) every record in that file will begin with the set of such fields, immediately after the extension pointer. The structure of the fields is held in [[#Table D (File Architecture) Record Map|the Record Map in Table D]].</p>   


<p>After the preallocated fields, is the rest of the data; a series of: field value pairs; repeating field groups; and / or pointers to large objects. These will be physically positioned in: either the order they were [[ADD statement|ADD]]ed (which always adds the entity at the end of the record); or positioned by an [[INSERT statement]]. Hence, the application code controls the relative order of the data in the record, once past the preallocated fields.</p>   
<p>After the preallocated fields, is the rest of the data; a series of: field value pairs; repeating field groups; and / or pointers to large objects. These will be physically positioned in: either the order they were [[ADD statement|ADD]]ed (which always adds the entity at the end of the record); or positioned by an [[INSERT statement]]. Hence, the application code controls the relative order of the data in the record, once past the preallocated fields.</p>   
Line 83: Line 83:
===== Large Objects Without Table E =====
===== Large Objects Without Table E =====


<p>If [[Table E (File Architecture)|Table E]] is not enabled, and the File Manager still wishes to store data which is more than 255 bytes long, it must be done by the application code. </p>
<p>The technique is to store the data as a series of repeating fields, each containing (up to) 255 bytes. The 





Revision as of 05:58, 12 April 2013

Overview

A Model 204 Record is a collection of fields (either individually or in Repeating Field Groups (RFGs)) containing a set of data about a thing. Admittedly, this is a very vague description, because the flexibility of Model 204 permits the File Manager to create files whose records are best suited to the required purpose, whatever it may be.

Each record is variable in length and need contain only the fields that pertain to it. The limit of the number of field value pairs in a record is in the tens of millions.

There is only a limited fixed format for data within a record (pre-allocated fields). Almost any number of fields can appear almost any number of times in almost any order. Each record is automatically assigned a unique internal record number that is used by the system to build index entries for the record.

For example, the following code:

IN filename STORE RECORD END STORE

Does, in fact, physically store a record. It has been assigned an #Internal Record Number and would contain the pre-allocated field structure (if any), but no data.


The Concept of a Model 204 Record

As noted above, a Model 204 record is highly variable in length.




Base Records

Extension Records

The Internal Record Number (IRN)

not permanent (changes during a reorganization)

used as target index (both hashed and B-tree indexing)


The Structure of a Model 204 Record

As shown in Table B, Model 204 records grow from the end toward the beginning of the page it is stored upon. So, a proper representation of the record shows it as:



In any discussion of the record, the 'beginning' of the record is to the left, and the growth (represented by the blue arrow) is toward the right.


Extension Pointer

Every 'portion' of every Model 204 record (base or one of perhaps many extensions) begins with a 3 byte extension record pointer.

This chains this part of the record to the next. Where that location is, is dependent on whether Table X is enabled.


Data

If there are any preallocated fields in a file (see the OCCURS attribute) every record in that file will begin with the set of such fields, immediately after the extension pointer. The structure of the fields is held in the Record Map in Table D.

After the preallocated fields, is the rest of the data; a series of: field value pairs; repeating field groups; and / or pointers to large objects. These will be physically positioned in: either the order they were ADDed (which always adds the entity at the end of the record); or positioned by an INSERT statement. Hence, the application code controls the relative order of the data in the record, once past the preallocated fields.

Each of the four is briefly described below, but refer to the specific topic for each for further detail:

Preallocated Fields

Field Value Pairs

Field Value Pairs, or, more precisely, Field Name 'Equals' Value Pairs are the most common way data is held in a Model 204 Record. (Even the Repeating Field Group structure is a set of Field Value Pairs which occur in tandem).



Repeating Field Groups

Large Objects

Native Large Objects
Large Objects Without Table E

If Table E is not enabled, and the File Manager still wishes to store data which is more than 255 bytes long, it must be done by the application code.

The technique is to store the data as a series of repeating fields, each containing (up to) 255 bytes. The