.
contact contact


FTS Compatibility - ODX Calls

 
.
  This document describes the ODX calls implemented for FTS backwards compatibility.

The ODX compatibility is implemented in the libftc library. This library must be loaded to enable ODX calls. The libftc library internally makes use of the image3k library (implementing the TurboIMAGE compatibility) and the eqdb library (Eloquence database client library).

A separate B.08.20 "FTC" license key is required to enable ODX compatibility.

Overview

The ODX calls were originally created to allow keyword searches of IMAGE databases.
Eventually, the IMAGE "TPI" convention incorporated a major subset of the keyword search functionality in the IMAGE calls and allowed third parties to provide keyword search functionality with standardized calls.

As Eloquence supports keyword indexing natively the ODX calls (as well as the image3k TPI modes) make use of the Eloquence indexing and do not add functionality. ODX calls are intended to provide backwards compatibility for existing applications.

The ODX calls in the libftc are integrated with the image3k library (Eloquence TurboIMAGE compatibility) and you may mix and match calls from either family. Traditionally, use of the ODX calls required the use of DBI calls to open the database, decode the status array or obtaining structural information.

An important difference to IMAGE conventions is that the ODX calls, like DBI calls, use a 21 element status array of 16-bit words (rather than 10 elements with IMAGE). Also, the ODX calls use two status codes: If the first element of status array is set to 888 then the 11th status element holds a separate ODX status code. Otherwise status reflects an IMAGE status.

The following ODX calls are supported.

The following ODX calls are not supported and return ODX status -800.
  • odxtransfer
  • odxprint
  • odxview

Implementation notes

  • Eloquence does not define a separate numeric range for composite FTS fields and index items.
    As Eloquence supports more than 1024 IMAGE items the original range for composite FTS fields (larger than 1024) or composite index items (larger than 2000) would be conflicting.
    In the Eloquence DBI calls, composite FTS and index items use distinctive item numbers but not in a specific number range.

  • An FTS field is considered "composite" if it refers to more than one item (has multiple segments), defines its own name or its definition differs from the underlying data item (e.g. uses an offset or a deviating length).

  • With Eloquence, each field in a detail set may be configured individually to link to a master set (with the PATH= option). However, only one master set may be specified for a detail set (any fields configured to link to a master set must refer to the same master set).
    odxinfo assumes that a detail set is in a dataset group if at least one FTS field is linked. This may have the effect that previous search results on a detail may not be applicable to the linked master although odxinfo indicates both are part of a search group. For full ODX compatibility all fields in a linked detail should be linked.

odxfind

odxfind searches the FTS index for keywords and the records that contain them. It returns the search items and/or record numbers or just keywords, depending on the data set type and the mode value used. The odxfind results may be obtained with odxget or odxgetword.

odxfind(base,dset,mode,status,field,keywords)
base
Base is the name of an array used as the base parameter when opening the database.

dset
Dset is the name of an array containing the left-justified name of the data set to be accessed, or is an integer referencing the data set by number. The data set name can be up to 16 characters long. If shorter, it must be terminated by a semicolon, a space or the NUL character.

mode
Modes 1, 2, 3, 5, and 30 are used in conjunction with odxget; modes 10 and 11 are used with a subsequent odxgetword call.

Mode Description
1 Returns the number of qualifying FTS references based on the arguments and operations passed in the keywords parameter.
2 Same as mode 1.
3 Enables the parsing of literal and parenthetical operators in the keywords parameter. When mode 3 is specified, the keyword list must be terminated by a semicolon ( ; ).
5 Like mode 3, but precedence of operations matches that of the TPI Interface.
10 Returns the number of qualifying keywords and sets a pointer to the first qualifying keyword.
11 Same as mode 10 but does not return a qualifying count.
30 Converts the FTS result of a search on a linked detail set to the associated master set.

Mode options

  • 100 to 300 have no effect
  • 400 to 700 disable preserving results on odxfind calls that qualify no results

To select mode options, add their value to the mode value. For example, mode 401 specifies a mode 1 odxfind with mode option 400 enabled.

status
Status is the name of an array of 21 halfwords in which the odxfind call returns status information. If the call completed successfully, the first element is zero. If the first element is 888 then element 11 holds the ODX condition word.

Element Contents
1 If the procedure succeeds, the return status is 0. Otherwise it provides a status code to describe the failure.
2 Zero.
3-4 In searches on non-aggregated (record specific) FTS fields in detail sets, contains the number of qualified detail records (represented by their record numbers). In searches on FTS fields in master sets, or aggregated FTS fields in detail sets, contains the number of qualifying master entries (represented by their search items).
5-6 In most searches, contains the number of qualified masters set entries (aggregated keys). In searches on unlinked detail sets, contains the number of qualified detail records (represented by their record numbers).
7-8 contains the FTS references count for the current search before the IDs are applied to any internal ID list stored in memory.
11 ODX condition word is zero.
12-13 Number of qualifying FTS references (modes 1, 2, and 30) or number of qualifying keywords (mode 10).
14-15 not used
16-21 Contains the first 12 characters of the keyword that caused a calling error (if the call was unsuccessful because of an incorrect word in the keywords parameter).

If status word 1 is nonzero, word 11 contains the ODX condition word. DBERROR or DBEXPLAIN can be called to decode the status code.

field
Field is the name of an array containing a left-justified name of a FTS index item or is an integer referencing the FTS field within the data set.

keywords
Keywords is the name of an array containing a list of keywords or partial keywords separated by operators. All records that contain the keywords specified in the keywords parameter for this field (or any field in the same field group) qualify.

In mode 1 or 2 a space, a semicolon or NUL character may used be used to terminate the list. Spaces will not terminate the keywords list if they are enclosed in quotes.

When odxfind is called with mode 3 or 5, the keywords list must be terminated by a semicolon ( ; ) or NUL character. A space is parsed as an AND operator.

The keywords parameter cannot be longer than 1024 bytes. Otherwise ODX status -220 is returned.

Description

odxfind mode 1, 2, 3 or 5 qualify records based on the list of keywords in preparation to calls to odxget and returns the number of results. For aggregated FTS fields the number of results reflects the number of master entries. The keywords parameter must follow the syntax described in the section below.

odxfind mode 10 and 11 qualify keywords in preparation for a subsequent odxgetword call. The keywords parameter specifies a word, a partial word or a range.

odxfind mode 30 may be used to convert a previous detail specific search result into unique master set entries (for linked fields). As a consequence, a subsequent odxget will obtain master set entries instead of detail entries. This may also be useful when refining a previous search on a linked detail into other sets within the same set group. The keywords parameter is ignored.

odxfind keywords syntax

odxfind mode 1, 2, 3 or 5 qualify records based on the list of keywords. The keywords argument consists of keywords (or ranges), separated by operators. A leading operator applies the odxfind search results to previous search results.
[op] word [[op] word...]
  • word is a keyword or a range. Words are separated by operators. Double quotes may be used to designate a literal word.

  • The argument list is terminated with either a space, a semicolon or a NUL character. For odxfind mode 3 and 5 the keyword list must be terminated by a semicolon or NUL character.

  • op indicates an operator
The keywords are searched in the FTS dictionary index and operators define the relationship of the keywords. For example:
mike AND wuppertal
This consists of the keywords mike and wuppertal. As the boolean AND operator is used only records qualify having both mike and wuppertal.

Keywords and operators are case insensitive (with the exception of keywords designated specifically to be case sensitive).

Ranges

A keyword range may be specified by entering a minimum value, the range operator (:) and a maximum value. Either the minimum value or the maximum value is optional. For example,
A:B, 10:15, X:
indicates all words between A and B (inclusive), all keywords between 10 and 15 or any keywords larger than X.

Pattern matching and generic words

Partial words, such as MAN@ (matching MANAGER, MANAGED, ...) may be used. In addition, match characters, such as "?" or "#" may be used in a keyword. For example:
MAN@ or AB#D

This matches all words that start with "MAN" or any word that starts with "AB", followed by a digit and the character "D".

Boolean operators

The boolean operators AND, OR and NOT may be used to define keyword relationships. For example,
mike AND NOT wuppertal
NOT test
would only qualify records with "mike" but not wuppertal. The second example would qualify any records NOT having the keyword test.

odxfind Mode 1 and 2 Syntax

odxfind mode 1 and 2 implement backwards compatibility to older ODX versions. odxfind mode 1 and 2 use a different set of operators.

*   (asterisk) Refers to the previous search results, may only be used at the beginning of the search expression and must be followed by a boolean OR or AND operator.
+   (plus sign) Boolean OR operator. For example, marxmeier+software qualifies all entries that have either the keyword marxmeier OR software.
,   (comma) Boolean AND operator. For example, marxmeier,software qualifies entries that have both the keywords marxmeier AND software.
-   (minus sign) Boolean NOT operator, may be used with the boolean AND operator. For example, marxmeier,-software qualifies entries that have the keyword marxmeier but not the keyword software. The NOT operator does not separate words and is only recognized at the beginning of a word.
:   (colon) Range operator

Operator precedence

:, OR, NOT, AND

Mode 3 and 5 syntax

The odxfind modes 3 and 5 add support for literal operators (AND, OR, NOT, TO and THRU). A space is not considered a terminator but an implied AND operator. Parenthesis may be used to specify the precedence of boolean operators.

Literal operators

OR   Boolean OR operator
AND   Boolean AND operator
NOT   Boolean NOT operator
TO   Range operator
THRU   Range operator

The range operators TO and THRU may be used as an alternative to a colon.

Operator precedence

The operator precedence for odxfind mode 3 is:
:, OR, NOT, AND

The operator precedence for odxfind mode 5 is:
:, NOT, AND, OR

Syntax description

Keywords

Keywords are words or ranges, separated by operators or a space.

When searching numeric fields only numbers (or numeric ranges) are valid. In numbers a dot (.) is understood as the decimal point.

Quoting

Use double quotes around a keyword value to prevent it from being parsed. This is useful when searching for keywords that contain special characters or spaces or when a keyword could be interpreted as an operator (for example, "OR" in a search for a state code).

Ranges

A keyword range may be specified by supplying a start value, the range operator and a stop value. Either the start value or the stop value is optional.

[startvalue]:[stopvalue]
If both the start and stop values are present, any keywords between (and including) the specified values qualify.
If either the start or stop value is not present then a range specifies an open range qualifying any value from the start or up to the stop value. For example:
a:z
2011:2012
2011:
:2012
The first example qualifies all keywords between "a" and "z", the second example qualifies any keywords between 2011 and 2012. The third example qualifies any keyword larger than or equal to 2011. The fourth example qualifies any keyword smaller than or equal to 2012.

Ranges can also use partial keywords by appending an at sign (@).

word:word   Range with start and stop value
word TO word   Same using the TO range operator
>=word<=word   Same using relational operators to specify a range
:word   Open range with a stop value specified (<= relation)
TO word   Same using the TO range operator
<=word   Same using relational operator
word:   Open range with start value specified (>= relation)
word THRU   Same using the THRU range operator
>=word   Same using relational operator
a@:z@   Range using partial keywords
10:20   Numeric range
%DATE(...)   %DATE function with partial date format

Relational operators

Relational operators are an alternate means for specifying ranges.

=  Equal to (redundant)
>=  Greater than or equal
>  Greater than
<=  Less than or equal
<  Less than

A relational operator is specified with the keyword (no separating space allowed). For example, >=A@ has the same meaning as A@: indicating an open range starting with A.

Two relational terms may also combined to specify a range with both a lower an upper boundary. For example, >=A@<=B@ is equivalent to A@:B@. Please note that no space is allowed between the two relational terms.

Pattern matching

odxfind supports the following wildcard characters anywhere in a keyword argument:
  • ? - represents any single printable character
  • # - represents any single digit (0-9) of an ASCII number
  • @ - represents any number of ASCII characters, including spaces
In relational expressions, wildcards may only be used at the end of an argument string.

Soundex phonetic searches

To specify a phonetic or "Soundex" search on an FTS field add the Soundex operator ( ! ) to a keyword(s). For example, ALAN! AND CHRIS!.

If the FTS field does not support Soundex searches (the SX option must be specified for the FTS field) ODX status -224 "Not a Soundex field" is returned.
If a Soundex field is grouped with other fields, be sure to specify the Soundex field name in the field parameter when calling odxfind for a Soundex retrieval.

The %DATE function

The %DATE function supports the conversion of different date formats. This feature enables:
  • consistent entry formats with differing storage formats
  • partial-date arguments converted to ranges (for example, YYMM, YYYYMM, YY, etc.)
%DATE may be entered as a keyword in a keyword list using the following syntax:
%DATE(date, [date_fmt], storage_fmt)
  • date represents the date value. For example, 930512 or 050912.

  • date_fmt represents the format of the date value. The supported values for entry format are: YYMMDD (the default format), YYYYMMDD, YY, YYYY, YYMM, YYYYMM, MMDDYY, MMDDYYYY, MMYY, MMYYYY, DDMMYY and DDMMYYYY.
    If date_fmt argument is empty it defaults to YYMMDD.

  • storage_fmt represents the storage format of the date field on which you are searching. The following formats are supported: YYMMDD, YYYYMMDD, MMDDYY, MMDDYYYY, DDMMYY, DDMMYYYY.
When a partial date format is used (for example, YY, YYYY, YYMM, YYYYMM, MMYY or MMYYYY) supported storage formats are limited to YYMMDD or YYYYMMDD. Partial date formats are not supported for range operations (they already represent a range).

Below are some examples of the %DATE function.

Convert a YYMMDD date argument into the YYYYMMDD date format:

%DATE(120101,YYMMDD,YYYYYMMDD)
This converts the date 120101 to 20120101. As YYMMDD is the default the date format it may be omitted.
%DATE(120101,,YYYYMMDD)
Convert a century date format into the YYMMDD storage format:
%DATE(01012012,MMDDYYYY,YYMMDD)
The %DATE function also supports partial date formats. When a partial date format is used, odxfind converts the partial date value into an equivalent range operation. The example below converts a partial century date (MMYYYY) into a keyword range.
%DATE(012012,MMYYYY,YYYYMMDD)
This is equivalent to a range of 20120100:20120199.

Unless a partial date format is used, each %DATE expression is treated as a single keyword and may be combined in any of the operations supported for keyword keys. In the example below, two %DATE expressions are combined in a range operation:

%DATE(093012,MMDDYY,YYMMDD):%DATE(123112,MMDDYY,YYMMDD)
Note that partial date formats (like YYMM) may not be used in a range.

Multifind

The "multifind" operation allows to apply item values from previous odxfind search results as search criteria for the FTS field passed in the field parameter.
& [item]
The Multifind operator ( & ) must be specified as the first character in the keywords parameter. An item name may be specified as an option.

The specified FTS field is then searched for item values obtained from a previous FTS search.

  • If the optional item name is not present, the master set search item values are used implicitly. Any FTS results on a linked detail set (unless an aggregated FTS field is used) need to be converted to the master set (using odxfind mode 30). This mode cannot be used for unlinked detail sets.

  • If the optional item is present, the given FTS field is searched for values of the specified item. The FTS search results are consolidated if the item is in a master set to avoid duplicate values.
Multifind requires that the target field in the target data set is an FTS field. The name of the target field for a multifind search is passed via the field parameter, as in any odxfind.

Referencing previous search results

Previous search results may be refined by subsequent searches.
  • For mode 1, start the keyword list with an asterisk ( * ).
  • For mode 3 or 5, start the keyword list with a leading AND or OR operator.
After performing an odxfind you can use an asterisk or a leading AND or OR operator (mode 3 or 5) to reference previous search results. You can then further qualify the list, add to it or subtract from it by specifying additional keywords in Boolean operations.

A leading AND operator (or *, for mode 1) and any keywords that follow it intersects the previous and current search results. A leading OR operator (or *+ for mode 1) and any keywords that follow it add the current search results. A leading AND NOT operator (or *- for mode 1) and any keywords that follow it filters the previous search results by the current search.

To reference previous search results without further qualifying, place an asterisk ( * ) alone in the keyword list.

When no records qualify

If a keyword in the keyword list does not exist for the specified FTS field or group, no entries qualify unless the non-existent keyword is combined with other keywords that do exist via an OR operation. Otherwise ODX status 217 "No entries with keyword" is returned.

Even if all keywords in the list exist, no entries may qualify based on the boolean conditions. For example, no entries qualify if two keyword arguments in an AND operation exist but do not apply to the same record (or same master record for an aggregated FTS field).
Eloquence returns ODX status 217 if no records qualify in a search.

By default, previous search results are retained so a search my be re-tried by the user. However, in batch applications (such as reports) there is typically no way to re-try a search if no records qualify and it may be critical that a keyword search returns no results rather than previous search results.
In this case the odxfind mode option 400 may be used which will cancel previous search results when a search qualifies no records. For example, to perform a mode 5 odxfind without preserving any previous results call odxfind in mode 405.

Undo previous search

After every call to odxfind in mode 1, 2, 3 or 5 (except those that qualify no records) odxfind saves currently qualified and previously qualified results in memory.

Two results are maintained:

  • The odxfind search result just performed
  • The odxfind search results that immediately preceded the search just performed
This allows to undo the most recent odxfind keyword search. For example, if 100 customers initially qualified and the result was subsequently refined to customers in Wuppertal it is possible to undo the last search and re-instate the previous result reflecting 100 customers. One may then retry the search with different arguments.

To back out of the most recent search, call odxfind in mode 1, 2, 3 or 5 and pass a less-than operator ( < ) in the keywords parameter.

Note that you can only back out of the last search performed. Any attempt to perform several undo operations in succession, will result in odxfind returning an error.

odxfind condition codes

205   No undo available
217   No entries with keyword
297   Bad base ID or database not opened
-202   Bad odxfind mode
-203   Bad data set or data set does not use FTS indexing
-205   Bad keyword list (syntax error)
-206   Invalid use of range operator
-209   Bad item specified
-210   Item not an FTS index field
-212   List must contain a generic keyword or keyword range
-214   FTC license not available
-217   Bad number on numeric field
-219   Unmatched quote
-220   Missing terminator (semicolon or blank)
-224   Not a soundex field
-232   Bad or improper multifind link item
-244   No previous search results or incompatible sets

Notes

  • odxfind mode 1, 2 and 3 implement backwards compatibility to older ODX versions. odxfind mode 5 is similar to the TPI DBFIND syntax.

  • Eloquence supports a flexible use of the NOT boolean operator. For example, "NOT testing" qualifies all records that do not contain the testing keyword.
    When using NOT search results are considered an exception list, any records on this list are not qualified. Consequently, when obtaining FTS search results with odxget and an exception list exists the data set is read sequentially, excluding any record on the exception list. This should be used with care as this could result in unexpected database workload when used inadequately.
    Please note that this is different to using a NOT with AND (as in "A AND NOT B"). This use of NOT does not cause any overhead.

  • The Eloquence odxfind "multifind" does not support referencing a file. The odxtransfer call (not supported with Eloquence) could be used to save odxfind search results to a file. This could then be referenced in odxfind by specifying the file name after a leading &. Eloquence uses this syntax to specify an item name.

  • Excluded words are ignored in odxfind and do return ODX status 217 if no records are qualified. If a search for an excluded word is used in a boolean expression it will not influence the result though. For example, "mike and stopword" will return all qualified records for the keyword mike.

  • The Eloquence odxfind call will always return ODX status 217 if no results qualify.

  • Aggregated and non-aggregated fields may be combined in a search. In this case the result is converted to an aggregated result.

  • When converting two to four digit years the %DATE function assumes years below 40 to be relative to the year 2000 and otherwise relative to the year 1900. So 12 is understood as 2012 and 80 is considered 1980.

  • The %DATE function currently does not support the PHDATE, JDATE and ASKDATE storage formats.

odxget

After qualifying records based on the desired list of keywords (with odxfind mode 1, 2, 3 or 5), odxget is then used to obtain the results.

Depending on the mode and data set type, odxget can either move the position in the search results, or move the position and return search items, record numbers, or both, to the calling application.
The search item or record number values are then used to retrieve records using calls to DBGET or DBFIND plus DBGET for detail records.

By default, odxget returns the search item value for master sets or aggregated FTS fields and a record number for detail sets. Mode option 10 returns the record number instead of the search item value so a DBGET mode 4 may be used to retrieve the record. Mode option 20 returns both the search item value and the record number.

odxget(base,mode,status,si_list,si_count)
base
Base is the name of an array used as the base parameter when opening the database.

mode
Mode indicates the type of retrieval and the positioning in the search results.

Mode Description
0 rewind. Resets the position in the search results. If the next operation is a forward read or spacing (mode 1 or 3) results are obtained from the beginning of the list. If the next operation is a backward read or spacing (modes 2 or 4) results are obtained from the end of the results.
If the previous ODXFIND was performed on a record specific field, status word 16 contains the value -1. Otherwise it contains zero.
1 forward read. Reads the next si_count results into the si_list array and updates the internal position.
2 backward read. Reads the previous si_count results into the si_list array and updates the internal position.
3 space forward. Moves the result position forward by the count specified in si_count. Does not return any data.
4 space backward. Moves the result poisition backward by the count specified in si_count. Does not return any data.

Mode options

Mode options may be used to specify how results are obtained. To use a mode option, add its value to the appropriate mode value. For example, to perform a forward read of record numbers after an odxfind on a key in a linked detail set, add mode option 10 to mode option 1 to get mode 11.

  • 10 - returns the record numbers of qualified records.

  • 20 - returns the search item and the record numbers of qualified records.

status
Completion status, 21 16-bit integer words. If the call completed successfully, word 1 is zero. If word 1 is 888 then word 11 holds the ODX condition word.

Element Contents
1 If the procedure succeeds, the return status is 0. Otherwise it provides a status code to describe the failure.
2-10 Unused
11 ODX condition word is zero.
12-13 Number of search item values or record numbers returned in si_list for modes 1-4. Number of qualified FTS references for mode 0.
14 Search item length in bytes.
15 Current data set number.
16 Contains a nonzero value if the previous odxfind was performed on a record specific (not aggregated) FTS field in a detail set; otherwise contains zero.
17-21 Unused

si_list
si_list is the name of the array into which the requested search items or record numbers are moved. The array must be defined as binary or ASCII, depending on the data type of search items to be returned, and must be large enough to hold the number of search items specified by si_count.

si_count
si_count is a single 16-bit word integer (between 1 and 4096) that indicates how many results to move into si_list. If si_count exceeds the number of results all the remaining results are returned. If no results are left odxget returns an error. The status words 12-13 contain the number of results returned.

In mode 3 or 4, si_count specifies the number of positions the pointer is to be moved forward or backward through the results. This number can be between 1 and 32,767. If the requested si_count would move the pointer to a position before the beginning, or past the end an error is returned and the pointer's position is left unchanged.

odxget condition codes

310   Beginning of result list
311   End of result list
397   Bad base ID or database not opened
-300   Bad odxget mode
-303   No preceding odxfind
-304   Bad count
-314   FTC license not available

Notes

  • Eloquence supports obtaining record numbers also for a master set.

  • The max. size of the result buffer pointed to by the si_list parameter is limited to 32000 bytes. odxget will return once the result buffer reaches this limit, indicating the number of results obtained.

odxgetword

odxfind is first called using mode 10 or 11. The keywords parameter specifies a single keyword, a partial keyword or a keyword range.

odxfind mode 10 returns the number of qualifying keywords in the specified range. Mode 11 does not return a count.

odxgetword is then called to move one keyword into the target array. odxgetword may be called repeatedly to retrieve all the keywords in the list. After the last qualifying keyword is reached, an End of Range condition is returned.

odxgetword automatically converts numeric fields into ASCII characters.

odxgetword(base,mode,status,target)
base
Base is the name of an array used as the base parameter when opening the database.

mode
Mode 1 returns the next keyword in ascending sequential order.
Mode 2 in addition returns the number of references.

status
Status is the name of an array of 21 halfwords in which the odxgetword call returns status information. If the call completed successfully, the first element is zero. If the first element is 888 then element 11 holds the ODX condition word.

Element Contents
1 If the procedure succeeds, the return status is 0. Otherwise it provides a status code to describe the failure.
2-10 Unused
11 ODX condition word is zero.
12-13 For mode 2 returns the number of references for the keyword.
14-15 Zero
16-21 Unused

target
Target is a 32 byte buffer into which the keyword is transferred.

odxgetword condition codes

314   End of Range
397   Bad base ID or database not opened
-300   Bad odxgetword mode
-302   No preceding odxfind mode 10 or 11
-314   FTC license not available

Notes

  • The Eloquence odxgetword returns ODX status 314 if no or no more results are available.

  • The Eloquence odxfind mode 10 or 11 support @ to qualify all keywords (also applicable to numeric items) and relational operators.

  • Using odxfind mode 11 and odxgetword mode 1 is more efficient as odxfind mode 10 requires to read the dictionary index twice, first to count the qualifying keywords and a second time to obtain the keywords. odxgetword mode 2 requires to read all references rather than returning on the first reference.

odxinfo

odxinfo returns information on FTS indexes.
odxinfo(base,qualifier,mode,status,buffer)
base
Base is the name of an array used as the base parameter when opening the database.

qualifier
Qualifier is the name of an array, its content depends on the odxfind mode.

mode
Mode is an integer indicating the type of information desired.

1 - Identifies the FTS fields for a data set
2 - Identifies the FTS field groups for a data set
3 - Identifies all data sets linked to the specified master
4 - Identifies all field groups in the specified master or any linked details
5 - Identifies all master sets with FTS fields or detail sets without linked FTS fields for a data base
6 - Identifies all FTS fields that belong to the specified group
7 Identifies FTS fields and options for the specified data set
8 - Indicates the type of ID used for a master or unlinked detail set
9 - Indicates the next "free" ID value for the specified master (not supported)
10 - Indicates the next "unused" ID value for the specified master (not supported)
20 - Indicates number of FTS fields in database
312 - Indicates whether the specified FTS field is a composite field, and the location of composite components

status
Completion status, 21 16-bit integer words. If the call completed successfully, word 1 is zero. If word1 is 888 then word 11 holds the ODX condition word. Word 2 returns number of words returned in info area.

Element Contents
1 If the procedure succeeds, the return status is 0. Otherwise it provides a status code to describe the failure.
2 Number of words transferred to buffer.
3-10 Unused
11 ODX condition word is zero.
12 Call id
13 Mode
14-21 Not used

buffer
Buffer is the name of an array in which the requested information is returned. The contents of the buffer array vary according to the mode parameter used.

odxinfo condition codes

597   Bad base ID or database not opened
-500   Bad odxinfo mode
-501   Bad data set or data set does not use FTS indexing
-502   Data set not a master or unlinked detail
-503   Undefined field group
-505   Invalid FTS field
-514   FTC license not available

Notes

  • Eloquence FTS does not need (and does not support) "alternate IDs". It implements the equivalent of "transparent IDs". As Eloquence does not use hashing there is no need to maintain a separate ID to identify the record.
    Consequently, odxinfo mode 8 returns a hard coded response indicating use of transparent IDs and odxinfo modes 9 and 10 are not available.

  • With Eloquence, each field in a detail set may be configured individually to link to a master set (with the PATH= option). However, only one master set may be specified for a detail set (any fields configured to link to a master set must refer to the same master set). odxinfo assumes that a detail set is in a dataset group if at least one field is linked.

odxinfo mode 1

odxinfo mode 1 identifies the FTS fields for a given set.

Qualifier identifies the data set name or number for which the information is requested. The data set must have FTS fields defined or is a master set that has FTS fields linked to it in related details.

Buffer returns the following (each element is a 16-bit word or two bytes):

------------------------------------------------------
|  Element  |              Content                   |
------------------------------------------------------
|    1      | Set number of the specified data set   |
------------------------------------------------------
|    2      | Set number of the linked master for    |
|           | this set                               |
------------------------------------------------------
|    3      | Item number of the search item         |
|           | for this set                           |
------------------------------------------------------
|    4      | Offset in words of the search item     |
|           | in this set                            |
------------------------------------------------------
|    5      | Number of FTS fields in the set        |
------------------------------------------------------
|    6..n   | Item number of the FTS field           |
------------------------------------------------------
Elements 3 and 4 are zero if the set is a detail set without linked FTS fields (unlinked detail).

The size of the array depends on number of FTS fields in the set (as counted in element 5). One 16-bit word is used for each FTS field.

Notes:

  • Eloquence does not have a defined limit on the number of FTS fields per set.

  • For a master set the search item number and offset identify the search item and its offset into the record buffer. For a linked detail set the search item number and offset identify the detail search item (that is used to link the FTS field) and its offset into the record buffer. For an unlinked detail the search item number and offset are zero.

  • Composite FTS fields use separate item number. Otherwise the data item number is used.

  • Eloquence does not define a separate numeric range for composite FTS fields and index items.

odxinfo mode 2

odxinfo mode 2 identifies the FTS fields and grouping for a given set.

Qualifier identifies the data set name or number for which the information is requested. The data set must have FTS fields defined or is a master set that has FTS fields linked to it in related details.

Buffer returns the following (each element is a 16-bit word or two bytes):

------------------------------------------------------
|  Element  |              Content                   |
------------------------------------------------------
|    1      | Set number of the specified data set   |
------------------------------------------------------
|    2      | Set number of the linked master for    |
|           | this set                               |
------------------------------------------------------
|    3      | Item number of the search item         |
|           | for this set                           |
------------------------------------------------------
|    4      | Offset in words of the search item     |
|           | in this set                            |
------------------------------------------------------
|    5      | Number of FTS fields in the set        |
------------------------------------------------------
|    6..    | Item number of the FTS field           |
------------------------------------------------------
|    7..    | Group number for the FTS field         |
------------------------------------------------------
Elements 3 and 4 are zero if the set is a detail set without linked FTS fields (unlinked detail).

The size of the array depends on number of FTS fields in the set (as counted in element 5). Two 16-bit words are used for each FTS field. The first word returns the FTS item number and the second word the FTS field group id or zero if the field is ungrouped.

Notes:

  • This is substantally the same as odxinfo mode 1 but in addition returns the FTS field group id.

odxinfo mode 3

odxinfo mode 3 identifies all sets in a set group.

Qualifier identifies the data set name or number for which the information is requested. The data set must be a master or unlinked detail set that has FTS fields defined or must be a master set that has FTS fields linked to it in a related detail.

Buffer returns the following (each element is a 16-bit word or two bytes):

------------------------------------------------------
|  Element  |              Content                   |
------------------------------------------------------
|    1      | Set number of the specified data set   |
------------------------------------------------------
|    2      | number of sets in the set group        |
------------------------------------------------------
|    3..    | set number in the set group            |
------------------------------------------------------
The size of the array depends on number of data sets in the set group (as counted in element 2). One 16-bit word is used for each data set.

Notes:

  • Eloquence does not have a defined limit on the number data sets in a set group. It is limited by the PATH limit for a master set (currently 64) plus one entry for the master set.

  • The set must either be a master set with FTS fields or linked FTS fields in a related detail or a detail set without any linked FTS fields.

odxinfo mode 4

odxinfo mode 4 identifies all FTS field groups in a set group.

Qualifier identifies the data set name or number for which the information is requested. The data set must be a master or unlinked detail set that has FTS fields defined or must be a master set that has FTS fields linked to it in a related detail.

Buffer returns the following (each element is a 16-bit word or two bytes):

------------------------------------------------------
|  Element  |              Content                   |
------------------------------------------------------
|    1      | Set number of the specified data set   |
------------------------------------------------------
|    2      | Number of field groups defined for     |
|           | this set group                         |
------------------------------------------------------
|    3..    | Item in field group                    |
------------------------------------------------------
|    4..    | Data set containing the item           |
------------------------------------------------------
The size of the array depends on number of field groups in the set group (as counted in element 2). Two 16-bit words are used for each field group id. The first word is the number of an item in the group. The second word is the data set number containing that item.

Notes:

  • Eloquence does not have a defined limit on the group ID number (other than it must be a positive integer) or the number of group IDs in a set group.

  • Each distinctive field group is listed once per set group. Please note that while FTS fields may use the same group ID number they may be maintained separately, for example aggregated and non-aggregated FTS fields in the same field group are considered different.

  • The set must either be a master set with FTS fields or linked FTS fields in a related detail or a detail set without any linked FTS fields.

odxinfo mode 5

odxinfo mode 5 identifies all set groups in the database.

Qualifier is ignored.

Buffer returns the following (each element is a 16-bit word or two bytes):

------------------------------------------------------
|  Element  |              Content                   |
------------------------------------------------------
|    1      | Number of set groups in the database   |
------------------------------------------------------
|    2..    | Data set number of each set group      |
------------------------------------------------------
A data set is included in the list if it is either a master or unlinked detail set that has FTS fields defined or a master set that has FTS fields linked to it in a related detail.

The size of the array depends on number of set groups in the database (as counted in element 1). One 16-bit word is used for each set group.

Notes:

  • Eloquence does not have a defined limit on the number of set groups per database. It is limited by the number of data sets per database (currently 500).

  • This will list any master set that has either FTS fields or a linked FTS field in a related detail set or any unlinked detail set that has FTS fields defined.

odxinfo mode 6

odxinfo mode 6 identifies the FTS fields for a given set and field group.

Qualifier identifies the data set name or number for which the information is requested followed by a group ID at word 9.
The data set must be a master or unlinked detail set that has FTS fields defined or must be a master set that has FTS fields linked to it in a related detail. The group ID may not be zero.

Buffer returns the following (each element is a 16-bit word or two bytes):

------------------------------------------------------
|  Element  |              Content                   |
------------------------------------------------------
|    1      | Set number of the specified data set   |
------------------------------------------------------
|    2      | Number of fields in the specified      |
|           | field group                            |
------------------------------------------------------
|    3..    | Item number in field group             |
------------------------------------------------------
|    4..    | Data set containing the item           |
------------------------------------------------------
The size of the array depends on number of FTS fields in the set group that use the same group ID (as counted in element 2). Two 16-bit words are used for each FTS field in the given set group and field group ID. The first word is the item number and the second word is the data set number containing that item.

Notes:

  • Eloquence does not have a defined limit on the group ID number (other than it must be a positive integer) or the number of group IDs in a set group.

  • The set must either be a master set with FTS fields or linked FTS fields in a related detail or a detail set without any linked FTS fields.

odxinfo mode 7

odxinfo mode 7 identifies the FTS fields for a given set.

Qualifier identifies the data set name or number for which the information is requested. The data set must have FTS fields defined or is a master set that has FTS fields linked to it in related details.

Buffer returns the following (each element is a 16-bit word or two bytes):

------------------------------------------------------
|  Element  |              Content                   |
------------------------------------------------------
|    1      | Set number of the specified data set   |
------------------------------------------------------
|    2      | Set number of the linked master for    |
|           | this set                               |
------------------------------------------------------
|    3      | Item number of the search item         |
|           | for this set                           |
------------------------------------------------------
|    4      | Offset in words of the search item     |
|           | in this set                            |
------------------------------------------------------
|    5      | Number of FTS fields in the set        |
------------------------------------------------------
|    6..    | Item number of the FTS field           |
------------------------------------------------------
|    7..    | Bit mapped field options               |
------------------------------------------------------
Elements 3 and 4 are zero if the set is a detail set without linked FTS fields (unlinked detail).

The size of the array depends on number of FTS fields in the set (as counted in element 5). Two 16-bit words are used for each FTS field. The first word returns the FTS item number and the second word the FTS field options.

Field options

Bit:length Option Bit Mask
0:1 No Exclude (NE) 0x8000
1:1 No Parse (NP) 0x4000
2:1 Record specific 0x2000
3:1 No Translate (NT) 0x1000
4:1 Soundex (SX) 0x0800
5:3 Not used, zero 0x0700
8:4 Not used, zero 0x00F0
12:4 Field type
0 TEXT (U,X,Z)
1 Integer (I,J)
2 Unsigned integer (K)
3 Packed (P)
4 Real (R), not used
5 IEEE floating point (E)
6 Not used
7 Zoned (Z)
0x000F

Notes:

  • This is substantally the same as odxinfo mode 1 but in addition returns the FTS field options.

odxinfo mode 8

odxinfo mode 8 identifies the item number for the alternate ID field.

Qualifier identifies the data set name or number for which the information is requested. The data set must be a master or unlinked detail set that has FTS fields defined or must be a master set that has FTS fields linked to it in a related detail.

Buffer returns the following (each element is a 16-bit word or two bytes):

------------------------------------------------------
|  Element  |              Content                   |
------------------------------------------------------
|    1      | ID type                                |
|           |  0 - search item or ID                 |
|           | -1 - transparent ID (master)           |
|           | -2 - unlinked detail set               |
------------------------------------------------------
Notes:
  • The set must either be a master set with FTS fields or linked FTS fields in a related detail or a detail set without any linked FTS fields.

  • Eloquence does not need (and does not support) "alternate IDs". It implements the equivalent of "transparent IDs". As Eloquence does not use hashing there is no need to maintain a separate ID to identify the record.
    Consequently, odxinfo mode 8 returns a hard coded response indicating use of transparent IDs and odxinfo modes 9 and 10 are not available.

  • The returned ID type is -1 for a master set or -2 for an unlinked detail set.

odxinfo mode 20

odxinfo mode 20 obtains the number of FTS fields in the database

Qualifier is ignored.

Buffer returns the following (each element is a 16-bit word or two bytes):

------------------------------------------------------
|  Element  |              Content                   |
------------------------------------------------------
|    1      | Number of FTS fields                   |
------------------------------------------------------

odxinfo mode 312

odxinfo mode 312 indicates whether the specified FTS field is a composite field, and the location of composite field components.

Qualifier identifies the data set name or number for which the information is requested followed by a field name or number starting at word 9.

Buffer returns the following (each element is a 16-bit word or two bytes):

------------------------------------------------------
|  Element  |              Content                   |
------------------------------------------------------
|    1      | FTS item number                        |
------------------------------------------------------
|    2      | FTS field group                        |
------------------------------------------------------
|    3      | Length in bytes                        |
|           | For compound items this value          |
|           | represents the sub-item length.        |
------------------------------------------------------
|    4      | Number of components in composite key  |
|           | or compound item                       |
|           | A positive number indicates the        |
|           | number of segments                     |
|           | A negative number indicates a          |
|           | compound (array) field                 |
------------------------------------------------------
|    5..    | Record byte offset of component        |
------------------------------------------------------
|    6..    | Length of component                    |
------------------------------------------------------
Elements 5 and 6 each must contain as many 16-bit words as there are segments counted in element 4.

Notes:

  • Composite FTS fields uses separate item number. Otherwise the data item number is used.

  • Eloquence does not define a specific numeric range for composite FTS item numbers.

  • A positive number returned in element 4 indicates the number of segments. A negative number indicates a compound field (array). For example, for a 5X40 item the value would be -5. In this case only a single segment is present.

Unsupported ODX calls

The following ODX calls are not supported and return ODX status -800.
odxtransfer(base,mode,status,filename,options)
odxprint(filename,keywords,control,status,plabels)
odxview(filename,keywords,control,status,plabels)
odxtransfer was used to transfer odxfind search results to a file that could subsequently be referenced in another odxfind. The Eloquence odxfind uses a different approach to allow applying previous odxfind search results to another set or field.

status is a 21 16-bit integer words array holding the return status. The first element is set to 888 and the eleventh element to -800.


 
 
 
  Privacy | GDPR / DSGVO | Webmaster | Terms of use | Impressum Revision: 2016-06-01  
  Copyright © 1995-2024 Marxmeier Software AG