[This is preliminary documentation and subject to change.]
The columns of the database tables are formatted in one of the following data types:
The Text data type is a text string. No validation is done on this string.
The UpperCase data type is a text string that must be all uppercase.
The LowerCase data type is a text string that must be all lowercase.
The Integer data type is a two-byte integer value. Unless otherwise restricted, the range of legal values is from -32,767 to +32,767.
The DoubleInteger data type is a four-byte integer value. Unless otherwise restricted, the range of legal values is from - 2,147,483,647 to +2,147,483,647.
The Time/Date data type has the time and the date stored individually, using unsigned integers as bit fields, packed as follows.
Time is encoded in an unsigned 2-byte integer with the following bit fields:
Contents | Bits | Value Range |
---|---|---|
hours | 0 1 2 3 4 | 0-23 |
minutes | 5 6 7 8 9 A | 0-59 |
2-second intervals | B C D E F | 0-29 |
Date is encoded in an unsigned 2-byte integer with the following bit fields:
Contents | Bits | Value Range |
---|---|---|
year | 0 1 2 3 4 5 6 | 0-119 (relative to 1980) |
month | 7 8 9 A | 1-12 |
day | B C D E F | 1-31 |
The Identifier data type is a text string. Identifiers may contain letters, digits, underscores (_), or periods (.). However, every identifier must begin with either a letter or an underscore.
The Property data type is a valid Identifier with the additional syntax "%identifier
," which represents an environment variable.
The Filename data type is a text string containing a file name or folder. By default, the file name is assumed to use short file name syntax; that is, eight-character name, period (.), and 3-character extension. To include a long file name, separate it from the short file name with a vertical bar (|). For example, the following two strings are valid:
status.txt
projec~1.txt|Project Status.txt
Short and long file names must not contain the following characters:
\ ? | > < : / * "
In addition, short file names must not contain the following characters:
+ , ; = [ ]
Short file names may not include a space, although a long file name may. No space is allowed preceding the vertical bar (|) separator for the short file name/long file name syntax. If a space exists after the pipe separator, then the long file name must have a space at the beginning of the file name. No full-path syntax is allowed.
The WildCardFilename data type is a Filename that may also contain the wild card characters "?" for any single character or "*" for zero or more occurrences of any character.
During validation, "*" is treated as representing two or more characters. For example, "weather*.txt" would not pass validation because it does not fit into the eight-character name, period (.), and 3-character extension filename format. However, "weather?.txt" would pass validation.
The Path data type is a text string containing a valid full path.
The string may also contain a property name enclosed in square brackets ([ ]
). In such a case, the name of the property, including the brackets, are replaced in the string by the value of the property. The property name and brackets may not be preceded or succeeded by any alphabetic characters. For example, "\\server\share\[username]
" is valid, but "\\server\share\abc[username]
" is not.
Examples:
\\server\share
c:\temp
[DRIVE]\temp
The Paths data type is a text string containing a list of Path data types, separated by semicolons (;).
The AnyPath data type is a text string containing either a full Path or a relative subpath.
Examples:
The DefaultDir data type is a text string containing either a valid Filename or a valid Identifier. This is used only in the Directory table. It must be an identifier if the directory is a root directory. If the directory is a non-root, this value must be a filename or a filename:filename pair. Note that "." is allowed as a file name and has special meaning in the Directory table.
The RegPath data type is a text string containing a Registry path. Registry paths can include properties, as with the Formatted data type. A RegPath may not begin or end with a backslash (\). The [#file key] and [$component key] can be embedded in the path or preceded by other characters.
The Formatted data type is a text string that is processed to resolve embedded property names, table keys, environment variable references, and other special substrings. The following conventions are recognized to resolve the string:
[propertyname]
is encountered, it is replaced by the value of the property. If propertyname
is not a valid property, then the substring is left unchanged.
The square brackets may be iterated and the property names are resolved from inside out. For example, suppose the substring [[PropertyA]]
appears in the text. First, the value of property PropertyA is retrieved. If the value is a valid property name, such as PropertyB, then the value of PropertyB is retrieved, and the entire substring [[PropertyA]]
is substituted with the value of PropertyB. If PropertyA is not a valid property name, or if the value of PropertyA is not a valid property name, then the substring is blank.
[%environmentvariable]
is found, the value of the environment variable is substituted for the substring.[\x]
is found, it is replaced by the character x
, where x
is one character, without any further processing. Only the first character after the backslash is kept; everything else is removed. { }
), and it contains no property names enclosed in square brackets ([ ]
), the substring is left unchanged, including the curly braces.{ }
), and it contains one or more property names enclosed in square brackets ([ ]
), then, if all the property names are valid, the text (with the resolved substitutions) is displayed without the curly braces.If no properties are found, all the text in the braces, including the braces themselves, is removed.
The KeyFormatted data type is a text string, identical to Formatted, except with the following additional keys:
[#filekey]
is found, it is replaced by the full path of the file, with the value filekey
used as a key into the File table. [$componentkey]
is found, it is replaced by the install directory of the component, with the value componentkey
used as a key into the Component table.The state of the Action column in the Component table affects the install directory used to replace the substring. If the component is selected to be installed locally, the target directory is used. If the component is selected to run from source, the source directory is used. If the component is not selected or missing, the substring is removed.
Multiple instances of KeyFormatted properties are allowed and the KeyFormatted properties can be embedded within a string.
The Template data type is a text string that may contain properties that are enclosed in brackets ([ ]
). The template type allows all of the Formatted type formats, plus [1] where 1 is a number.
The Condition data type is a text string containing a valid conditional statement that can be evaluated as True or False.
The GUID data type is a text string representing a Class identifier (ID). COM must be able to convert the string to a valid Class ID.
The Version data type is a text string containing a valid version string. A version string has the format
xx.xx.xxxx.xxxx
where x
is a digit. Version is only used in the File table. If a file has a version, it must also have a language associated with it. If the language is neutral, specify 0 (zero) in the Language column of the File table.
The Language data type is a text string containing one or more valid numeric language IDs. If there are two or more language IDs, they must be separated by commas.
The Binary data type is a binary data stream containing any type of binary data. Examples include a bitmap or executable code.
The CustomSource data type is either a valid Identifier or an external key depending on the Type column of the CustomAction table. It can be an external key into the Binary table, File table, Directory table, and Property table. Although, as an external key into the Property table, it isn't evaluated because properties can be added at run-time.
The Cabinet data type is usually used in the Cabinet column of the Media table. If the cabinet name is preceded by the pound sign (#), the characters following it are interpreted as a Filename. The (#) is used to denote a cabinet located in a stream inside the database.
The Shortcut data type is usually used in the Target column of the Shortcut table. If it contains square brackets ([ ]
), the shortcut target is evaluated as a KeyFormatted string. Otherwise, the shortcut is evaluated as an Identifier and must be a valid foreign key into the Feature table.