| Title: | DB Integrator Public Conference |
| Notice: | Database Integration - today! Kit/Doc info see note 36 |
| Moderator: | BROKE::ABUGOV |
| Created: | Mon Sep 21 1992 |
| Last Modified: | Fri Jun 06 1997 |
| Last Successful Update: | Fri Jun 06 1997 |
| Number of topics: | 1171 |
| Total number of notes: | 5187 |
Oracle Rdb V6.1A
Custom Driver gtwy V3.0E
Hi,
background :
a customer is looking for a way to combine different datasources
into a single 'logical' database.
Datasources are Oracle Rdb databases and a non-relational datasource
on a Unisys system.
To access this last data source customer plans to use Custom Driver
gateway.
DECmessageQ is used to exchange data from/to OpenVMS/Alpha to Unisys
system.
The Cust. Driver gateway will hook into DECmessageQ messages.
Picture:
Rdb applic.--->DBI--->NSDS gtwy--->DMQ msg--->COMS--->DMSII(Unisys).
Problem:
A certain type of activity (function) at the Unisys side is linked
to a DMQ msg type.
This should be under Rdb application control.
There are several way to achieve this:
- define an NSDS table for every DMQ msg type. Gtwy selects a record
from a table per DMQ msg type.
Easy to implement but not very SQL like. Lot of tables and lot
of WHERE clauses.
- combine all DMQ msg types in a single NSDS table. WHERE clause
determines wich msg type to use.
Disadvantage: difficult to maintain.
- a combination of both. Combine certain msg types into one NSDS table.
This results in less tables.
WHERE clause determines which msg type to use.
Questions:
- A multi segment (F1 and F2) key will be defined on the table.
How does the APS structure look like?. Is there a an APS per
segment ?
In other words is possible to use a WHERE clause like:
10 <F1 < 20 AND 30 < F2 < 40) ??
- Suppose there are 2 multi segment keys defined
I1 (F1,F2) and I2 (F2,F3)
The SELECT refers to F1,F2 and F3.
Are F1,F2 and F3 defined in APS (SET_ACCESS_PATH) or does
NSDS passes only I1 or I2 values ?
- concept of auxiliary access path is not clear.
Should that be used in this case ?
The point is that for this third option the driver always needs ALL
information specified in the query. Not only the fields part of
the used index.
I hope I made myself clear. The customer is currently looking for
the right strategy to implement. Only source available is the
Customer Driver Dev. guide. No prototyping done yet.
As far as I know this will be the first customer overhere using this
type of 'gateway'. Not much knowledge/experience available.
Adri van Driel
| T.R | Title | User | Personal Name | Date | Lines |
|---|---|---|---|---|---|
| 1139.1 | Some info and some pointers... | BROKE::WRIGHT | NYO&W-Trains Spoken Here-SUSIEQ | Mon Mar 31 1997 14:39 | 102 |
<<< NOMAHS::DISK$NOMAHS1:[NOTES$LIBRARY]DBINTEGRATOR_PUBLIC.NOTE;2 >>>
-< DB Integrator Public Conference >-
================================================================================
Note 1139.0 DDI interface questions No replies
NLVMS3::ADRIEL 74 lines 28-MAR-1997 11:06:27.02
--------------------------------------------------------------------------------
Oracle Rdb V6.1A
Custom Driver gtwy V3.0E
Hi,
background :
a customer is looking for a way to combine different datasources
into a single 'logical' database.
Datasources are Oracle Rdb databases and a non-relational datasource
on a Unisys system.
To access this last data source customer plans to use Custom Driver
gateway.
DECmessageQ is used to exchange data from/to OpenVMS/Alpha to Unisys
system.
The Cust. Driver gateway will hook into DECmessageQ messages.
Picture:
Rdb applic.--->DBI--->NSDS gtwy--->DMQ msg--->COMS--->DMSII(Unisys).
Problem:
A certain type of activity (function) at the Unisys side is linked
to a DMQ msg type.
This should be under Rdb application control.
There are several way to achieve this:
- define an NSDS table for every DMQ msg type. Gtwy selects a record
from a table per DMQ msg type.
Easy to implement but not very SQL like. Lot of tables and lot
of WHERE clauses.
- combine all DMQ msg types in a single NSDS table. WHERE clause
determines wich msg type to use.
Disadvantage: difficult to maintain.
- a combination of both. Combine certain msg types into one NSDS table.
This results in less tables.
WHERE clause determines which msg type to use.
Questions:
- A multi segment (F1 and F2) key will be defined on the table.
How does the APS structure look like?. Is there a an APS per
segment ?
>
> I belive there is only one APS per access path even when there are multiple
> key segments.
>
In other words is possible to use a WHERE clause like:
10 <F1 < 20 AND 30 < F2 < 40) ??
>
> You can certainly use a WHERE clause like this, but only the F1 values would
> be used for access path purposes.
>
- Suppose there are 2 multi segment keys defined
I1 (F1,F2) and I2 (F2,F3)
The SELECT refers to F1,F2 and F3.
Are F1,F2 and F3 defined in APS (SET_ACCESS_PATH) or does
NSDS passes only I1 or I2 values ?
>
> No. Only F1 & F2 or F2 & F3 would be defined in the APS for the primary access
> path.See primary vs auxiliary access paths below.
>
- concept of auxiliary access path is not clear.
Should that be used in this case ?
>
> For EACH SELECT statement NSDS will select the access path which it's
> optimizer believes is the most efficient. This access path will be the primary
> access path. (Note-The selection of a primary access path is query dependent.)
>
The point is that for this third option the driver always needs ALL
information specified in the query. Not only the fields part of
the used index.
>
> The driver can request the auxiliary access paths from the engine by setting
> the Auxiliary Access Path capability bit in the Relation Capability Mask as
> described in the DDI_QUERY_RELATION definition in the Driver Development
> Guide. You may have to be very generous in your definition of an access path
> to get all the information you want.
>
I hope I made myself clear. The customer is currently looking for
the right strategy to implement. Only source available is the
Customer Driver Dev. guide. No prototyping done yet.
>
> It may help to read sections 4.5.1 & 4.5.2 in the release notes.
>
As far as I know this will be the first customer overhere using this
type of 'gateway'. Not much knowledge/experience available.
Adri van Driel
| |||||
| 1139.2 | Response to more questions... | BROKE::WRIGHT | NYO&W-Trains Spoken Here-SUSIEQ | Mon Apr 21 1997 16:12 | 18 |
Adri, Here is the response to your offline follow up questions. I am posting it here because I think it will be less cumbersome than a series of emails and so that anyone with similar questions will be able to reference it. Table of Contents: 1139.3 General Discussion of Primary and Auxiliary Access Paths 1139.4 How to Run Your Own Tests Using the RMS Gateway 1139.5 A Sample FDL File 1139.6 A Sample CDO File 1139.7 Answers to Specific Questions 1139.8 Specific Test Results I hope this helps. Tom | |||||
| 1139.3 | General Discussion of Primary and Auxiliary Access Paths | BROKE::WRIGHT | NYO&W-Trains Spoken Here-SUSIEQ | Mon Apr 21 1997 16:13 | 80 |
A General Discussion of Primary and Auxiliary Access Paths
Access Path usage is dependent on TWO set of conditions.
o The indices available in the database
o The predicates used in the query
For a specific database there exists a set of access paths. This set will
consist of one access path for each index (key or fast access path to the data)
available in the database. In general, the access paths of interest for any
specific query are only those where at least the first segment of the index is
used in the query predicate.
NSDS access path processing proceeds as follows.
o The available access paths are examined and the subset of "interesting"
access paths is determined.
o The "interesting" access paths are analyzed by the optimizer and based
on the information available, the most efficient access path is chosen
as the primary access path FOR THAT QUERY. All other "interesting"
access paths become auxiliary access paths FOR THAT QUERY.
o Under "normal" conditions (ie. The primary access path capability bit
is ON from the DDI driver and the auxiliary access path capability bit
is OFF from the DDI driver.) only the primary access path is passed to the
DDI driver.
o Only rows (records) which satisfy the selection criteria specified for
the primary access path are to be passed back to the NSDS engine which
assumes the DDI driver has already eliminated any rows which fail to
meet any selection criteria imposed by the primary access path.
o The auxiliary access paths can be made visible to the DDI driver by
turning ON the auxiliary access path capability bit. However, this
imposes a performance penalty because this will cause the NSDS engine
to incure the overhead of building and populating the data structures
necessary to pass this information to the DDI driver. When auxiliary
access paths have been requested by the DDI driver:
o Only rows (records) which satisfy the selection criteria specified for
the primary access path are to be passed back to the NSDS engine which
assumes the DDI driver has already eliminated any rows which fail to
meet any selection criteria imposed by the primary access path.
o Auxiliary access paths may be applied at the descretion of the DDI
driver for each query. Unlike primary access paths, the NSDS engine
makes no assumption that the DDI driver has applied any selection
criteria imposed by auxiliary access paths and will check each row
returned to verify that it meets any such criteria.
Segmented keys add another level of complexity to access path analysis. With
regard to segmented keys it is important to remember the following.
o Key segments are assumed to only useful in a given query when there are no
preceeding "holes" in the key. For example, for a key with segments s1 ,
s2 , and s3, the predicate "where s1 > and and s3 = 5" will cause only
segment s1 to be used as part of the access path because the absense of
s2 creates a "hole" in front of s3.
o Access paths where the keys are fully specified will be favored over
those whose keys are only partially specified. That is keys where all of
the segments are utilized in the query are generally assumed to be
make more efficient access paths than those keys where some of the
segments are not utilized in the query.
o Key specifiers are built on a key basis and not a segment basis. Therefore,
the nature of the operators in the predicate will influence the
usability of key segments in an access path. For example, for a key
with segments s1 and s2 the predicate s1 > 5 and s2 = 7 would still
only be able to utilize s1 because it is not possible to construct
a key specifier with an upper and lower bound which would properly
filter the result.
o It is perhaps worth noting in the example above that if s1 and
s2 were seperate KEYS then they would each be access paths and could
be made visible to the driver where s2 might be the primary access
path and s1 an auxilliary.
| |||||
| 1139.4 | How to Run Your Own Tests Using the RMS Gateway | BROKE::WRIGHT | NYO&W-Trains Spoken Here-SUSIEQ | Mon Apr 21 1997 16:14 | 8 |
How to Run Your Own Tests Using the RMS Gateway While the RMS Gateway has no way to utilize auxiliary access paths, it has been instrumented to assist in analyzing auxilliary access path behavior. The activate this feature define NSDS$DEBUG_FLAGS to be "F" and NSDS$_RMS_AUX_AP_TEST to be "TRUE". This will allow you to see both the primary and auxiliary access paths passed to the driver for each query. | |||||
| 1139.5 | A Sample FDL File | BROKE::WRIGHT | NYO&W-Trains Spoken Here-SUSIEQ | Mon Apr 21 1997 16:14 | 285 |
IDENT " 8-APR-1997 13:07:57 VAX/VMS ANALYZE/RMS_FILE Utility" SYSTEM SOURCE VAX/VMS FILE ALLOCATION 48 BEST_TRY_CONTIGUOUS no BUCKET_SIZE 2 CLUSTER_SIZE 4 CONTIGUOUS no EXTENSION 0 FILE_MONITORING no GLOBAL_BUFFER_COUNT 0 NAME "devname:[directory]adri.dat" ORGANIZATION indexed OWNER [???,???] PROTECTION (system:RWED, owner:RWED, group:RWED, world:) RECORD BLOCK_SPAN yes CARRIAGE_CONTROL none FORMAT fixed SIZE 40 AREA 0 ALLOCATION 45 BUCKET_SIZE 2 EXTENSION 0 KEY 0 CHANGES no DATA_KEY_COMPRESSION no DATA_RECORD_COMPRESSION yes DATA_AREA 0 DATA_FILL 100 DUPLICATES no INDEX_AREA 0 INDEX_COMPRESSION no INDEX_FILL 100 LEVEL1_INDEX_AREA 0 NAME "KEY0" NULL_KEY no PROLOG 3 SEG0_LENGTH 2 SEG0_POSITION 0 TYPE string KEY 1 CHANGES no DATA_KEY_COMPRESSION no DATA_RECORD_COMPRESSION yes DATA_AREA 0 DATA_FILL 100 DUPLICATES no INDEX_AREA 0 INDEX_COMPRESSION no INDEX_FILL 100 LEVEL1_INDEX_AREA 0 NAME "KEY1" NULL_KEY no PROLOG 3 SEG0_LENGTH 2 SEG0_POSITION 2 TYPE string KEY 2 CHANGES no DATA_KEY_COMPRESSION no DATA_RECORD_COMPRESSION yes DATA_AREA 0 DATA_FILL 100 DUPLICATES no INDEX_AREA 0 INDEX_COMPRESSION no INDEX_FILL 100 LEVEL1_INDEX_AREA 0 NAME "KEY2" NULL_KEY no PROLOG 3 SEG0_LENGTH 2 SEG0_POSITION 0 SEG1_LENGTH 2 SEG1_POSITION 2 TYPE string KEY 3 CHANGES yes DATA_KEY_COMPRESSION yes DATA_AREA 0 DATA_FILL 100 DUPLICATES yes INDEX_AREA 0 INDEX_COMPRESSION yes INDEX_FILL 100 LEVEL1_INDEX_AREA 0 NAME "KEY3" NULL_KEY no SEG0_LENGTH 2 SEG0_POSITION 4 TYPE string KEY 4 CHANGES yes DATA_KEY_COMPRESSION yes DATA_AREA 0 DATA_FILL 100 DUPLICATES yes INDEX_AREA 0 INDEX_COMPRESSION yes INDEX_FILL 100 LEVEL1_INDEX_AREA 0 NAME "KEY4" NULL_KEY no SEG0_LENGTH 2 SEG0_POSITION 6 TYPE string KEY 5 CHANGES yes DATA_KEY_COMPRESSION yes DATA_AREA 0 DATA_FILL 100 DUPLICATES yes INDEX_AREA 0 INDEX_COMPRESSION yes INDEX_FILL 100 LEVEL1_INDEX_AREA 0 NAME "KEY5" NULL_KEY no SEG0_LENGTH 2 SEG0_POSITION 8 TYPE string KEY 6 CHANGES yes DATA_KEY_COMPRESSION yes DATA_AREA 0 DATA_FILL 100 DUPLICATES yes INDEX_AREA 0 INDEX_COMPRESSION yes INDEX_FILL 100 LEVEL1_INDEX_AREA 0 NAME "KEY6" NULL_KEY no SEG0_LENGTH 2 SEG0_POSITION 4 SEG1_LENGTH 2 SEG1_POSITION 6 TYPE string KEY 7 CHANGES yes DATA_KEY_COMPRESSION yes DATA_AREA 0 DATA_FILL 100 DUPLICATES yes INDEX_AREA 0 INDEX_COMPRESSION yes INDEX_FILL 100 LEVEL1_INDEX_AREA 0 NAME "KEY7" NULL_KEY no SEG0_LENGTH 2 SEG0_POSITION 6 SEG1_LENGTH 2 SEG1_POSITION 8 TYPE string ANALYSIS_OF_AREA 0 RECLAIMED_SPACE 0 ANALYSIS_OF_KEY 0 DATA_FILL 87 DATA_KEY_COMPRESSION 0 DATA_RECORD_COMPRESSION 32 DATA_RECORD_COUNT 100 DATA_SPACE_OCCUPIED 20 DEPTH 1 INDEX_COMPRESSION 0 INDEX_FILL 8 INDEX_SPACE_OCCUPIED 2 LEVEL1_RECORD_COUNT 10 MEAN_DATA_LENGTH 40 MEAN_INDEX_LENGTH 2 ANALYSIS_OF_KEY 1 DATA_FILL 80 DATA_KEY_COMPRESSION 35 DATA_RECORD_COUNT 83 DATA_SPACE_OCCUPIED 4 DEPTH 1 DUPLICATES_PER_SIDR 0 INDEX_COMPRESSION 46 INDEX_FILL 3 INDEX_SPACE_OCCUPIED 2 LEVEL1_RECORD_COUNT 2 MEAN_DATA_LENGTH 40 MEAN_INDEX_LENGTH 2 ANALYSIS_OF_KEY 2 DATA_FILL 80 DATA_KEY_COMPRESSION 35 DATA_RECORD_COUNT 83 DATA_SPACE_OCCUPIED 4 DEPTH 1 DUPLICATES_PER_SIDR 0 INDEX_COMPRESSION 46 INDEX_FILL 3 INDEX_SPACE_OCCUPIED 2 LEVEL1_RECORD_COUNT 2 MEAN_DATA_LENGTH 40 MEAN_INDEX_LENGTH 4 ANALYSIS_OF_KEY 3 DATA_FILL 80 DATA_KEY_COMPRESSION 35 DATA_RECORD_COUNT 83 DATA_SPACE_OCCUPIED 4 DEPTH 1 DUPLICATES_PER_SIDR 0 INDEX_COMPRESSION 46 INDEX_FILL 3 INDEX_SPACE_OCCUPIED 2 LEVEL1_RECORD_COUNT 2 MEAN_DATA_LENGTH 40 MEAN_INDEX_LENGTH 2 ANALYSIS_OF_KEY 4 DATA_FILL 80 DATA_KEY_COMPRESSION 35 DATA_RECORD_COUNT 83 DATA_SPACE_OCCUPIED 4 DEPTH 1 DUPLICATES_PER_SIDR 0 INDEX_COMPRESSION 46 INDEX_FILL 3 INDEX_SPACE_OCCUPIED 2 LEVEL1_RECORD_COUNT 2 MEAN_DATA_LENGTH 40 MEAN_INDEX_LENGTH 2 ANALYSIS_OF_KEY 5 DATA_FILL 80 DATA_KEY_COMPRESSION 35 DATA_RECORD_COUNT 83 DATA_SPACE_OCCUPIED 4 DEPTH 1 DUPLICATES_PER_SIDR 0 INDEX_COMPRESSION 46 INDEX_FILL 3 INDEX_SPACE_OCCUPIED 2 LEVEL1_RECORD_COUNT 2 MEAN_DATA_LENGTH 40 MEAN_INDEX_LENGTH 2 ANALYSIS_OF_KEY 6 DATA_FILL 80 DATA_KEY_COMPRESSION 35 DATA_RECORD_COUNT 83 DATA_SPACE_OCCUPIED 4 DEPTH 1 DUPLICATES_PER_SIDR 0 INDEX_COMPRESSION 46 INDEX_FILL 3 INDEX_SPACE_OCCUPIED 2 LEVEL1_RECORD_COUNT 2 MEAN_DATA_LENGTH 40 MEAN_INDEX_LENGTH 4 ANALYSIS_OF_KEY 7 DATA_FILL 80 DATA_KEY_COMPRESSION 35 DATA_RECORD_COUNT 83 DATA_SPACE_OCCUPIED 4 DEPTH 1 DUPLICATES_PER_SIDR 0 INDEX_COMPRESSION 46 INDEX_FILL 3 INDEX_SPACE_OCCUPIED 2 LEVEL1_RECORD_COUNT 2 MEAN_DATA_LENGTH 40 MEAN_INDEX_LENGTH 4 | |||||
| 1139.6 | A Sample CDO File | BROKE::WRIGHT | NYO&W-Trains Spoken Here-SUSIEQ | Mon Apr 21 1997 16:15 | 92 |
!!!!! CDO Definition
!
! This file provides CDO metadata for tests required to analyze conditions
! as requested by Adri van Driel on behalf of a potential Custom Driver
! customer in.
!
set verify
define field f1
datatype is text
size is 2 characters.
define field f2
datatype is text
size is 2 characters.
define field f3
datatype is text
size is 2 characters.
define field f4
datatype is text
size is 2 characters.
define field f5
datatype is text
size is 2 characters.
define field f6
datatype is text
size is 30 characters.
!============================================================================
define record r1.
f1.
f2.
f3.
f4.
f5.
f6.
end r1 record.
!===========================================================================
define rms_database adri_rms.
record r1.
file_definition
organization indexed.
keys.
key 0
segment f1 in r1.
key 1
segment f2 in r1.
key 2
segment f1 in r1
segment f2 in r1.
key 3
changes
duplicates
segment f3 in r1.
key 4
changes
duplicates
segment f4 in r1.
key 5
changes
duplicates
segment f5 in r1.
key 6
changes
duplicates
segment f3 in r1
segment f4 in r1.
key 7
changes
duplicates
segment f4 in r1
segment f5 in r1.
end.
end.
!===========================================================================
define database adri_db
using adri_rms
on devname:[directory]adri.dat.
| |||||
| 1139.7 | Answers to Specific Questions | BROKE::WRIGHT | NYO&W-Trains Spoken Here-SUSIEQ | Mon Apr 21 1997 16:16 | 333 |
Answers to Specific Questions
Key: "-" = Original Questions
">" = Responses to Original Questions
"*NEW*" = Second Round of Questions
">>" = Responses to Second Round Questions
- A multi segment (F1 and F2) key will be defined on the table.
- How does the APS structure look like?. Is there a an APS per
segment ?
>
> I believe there is only one APS per access path even when there are
> multiple key segments.
>
- In other words is possible to use a WHERE clause like:
- (10 <F1 < 20 AND 30 < F2 < 40) ??
>
> You can certainly use a WHERE clause like this, but only
> the F1 values would be used for access path purposes.
> *(1)*
*NEW* Will the DDI_SET_ACCESS_PATH call look like this ?
*NEW* (assuming F1 and F2 are two 32-bit integers
*NEW* with F1 starting at offset 6)
*NEW* ...,
*NEW* apply_primary_access_path := TRUE
*NEW* apply_auxiliary_access_path := FALSE
*NEW* primary_access_path := *path --------+
*NEW* auxiliary_access_path_list := nil |
*NEW* |
*NEW* +------------------------------------+
*NEW* |
*NEW* v
*NEW* nsdsaps$a_next_ptr := nil
*NEW* nsdsaps$a_key_name := IF1F2
*NEW* nsdsaps$l_key_offset := 6
*NEW* nsdsaps$l_key_size := 8
*NEW* nsdsaps$l_key_ptr := *kse -----------+
*NEW* |
*NEW* +------------------------------------+
*NEW* |
*NEW* v
*NEW* nsdskse$a_next_ptr := nil
*NEW* nsdskse$l_lb_operator := NSDS$K_GTR
*NEW* nsdskse$l_lb_compare_size := 4
*NEW* nsdskse$l_lb_compare_ptr := *value --> 10
*NEW* nsdskse$l_ub_operator := NSDS$K_LSS
*NEW* nsdskse$l_ub_compare_size := 4
*NEW* nsdskse$l_ub_compare_ptr := *value --> 20
*NEW* nsdskse$l_ub_selection_id := id
>>
>> I believe this is correct.
>>
*NEW* Will this also be the case if auxiliary paths
*NEW* are enabled ?
>>
>> Yes. Enabling auxiliary access paths should not influence the primary
>> access path.
>>
*NEW* Will F1 be chosen to be the primary path and
*NEW* F2 the auxiliary path ? Or will F2 not be
*NEW* mentioned in any path ?
>>
>> Given the available information it is essentially a toss up between F1 and
>> F2 as to which would be the most efficient access path and all other things
>> being equal I believe they would cost out the same. Therefore, I can't
>> state conclusively that F1 would be the primary access path. However, if
>> F1 is chosen as the primary access path then F2 should be the auxiliary.
>> Similarly, if F2 is chosen as the primary then F1 should be the auxiliary.
>>
*NEW* What happens if query is something like:
*NEW* WHERE F1 = 10 AND 30<F2<40
*NEW* Will: F1 be primary and F2 auxiliary ?
*NEW* or: F1||F2 be primary
*NEW* or: F1 be primary and F2 not mentioned ?
>>
>> It makes a big difference whether F1 and F2 are seperate keys are multiple
>> segments of the same key. Assuming the following.
>>
>> o F1 and F2 are seperate keys.
>> o F1 and F2 are unique keys. (ie. Duplicate values are NOT allowed.)
>> o Auxiliary access paths are enabled by the DDI driver.
>>
>> F1 will be chosen as the primary access paths as equality costs better
>> than inequality.
>>
>> F1 || F2 is not an option unless they are multiple segments of a single key.
>>
>> F2 would be an auxiliary key visable to the DDI driver.
>>
>> Note: Additional tests based on different assumptions can be conducted by
>> refering to note 1139.4.
>>
*NEW* Will the DDI_SET_ACCESS_PATH call look like this ?
*NEW* (assuming F1 and F2 are two 32-bit integers
*NEW* with F1 starting at offset 6)
*NEW* ...,
*NEW* apply_primary_access_path := TRUE
*NEW* apply_auxiliary_access_path := FALSE
*NEW* primary_access_path := *path --------+
*NEW* auxiliary_access_path_list := nil |
*NEW* |
*NEW* +------------------------------------+
*NEW* |
*NEW* v
*NEW* nsdsaps$a_next_ptr := nil
*NEW* nsdsaps$a_key_name := IF1F2
*NEW* nsdsaps$l_key_offset := 6
*NEW* nsdsaps$l_key_size := 8
*NEW* nsdsaps$l_key_ptr := *kse -----------+
*NEW* |
*NEW* +------------------------------------+
*NEW* |
*NEW* v
*NEW* nsdskse$a_next_ptr := nil
*NEW* nsdskse$l_lb_operator := NSDS$K_GTR
*NEW* nsdskse$l_lb_compare_size := 8
*NEW* nsdskse$l_lb_compare_ptr := *value --> 10||30
*NEW* nsdskse$l_ub_operator := NSDS$K_LSS
*NEW* nsdskse$l_ub_compare_size := 8
*NEW* nsdskse$l_ub_compare_ptr := *value --> 10||40
*NEW* nsdskse$l_ub_selection_id := id
>>
>> I don't believe so. Refer to the previous answer.
>>
>> Also I doubt you can concatenate integers. I believe these have to be
>> text values in order to allow concatination.
>>
*NEW* What if:
*NEW* WHERE F1 IN (10, 20) AND 30<F2<40
*NEW* Will the DDI_SET_ACCESS_PATH call look like this ?
*NEW* (assuming F1 and F2 are two 32-bit integers
*NEW* with F1 starting at offset 6)
*NEW* ...,
*NEW* apply_primary_access_path := TRUE
*NEW* apply_auxiliary_access_path := FALSE
*NEW* primary_access_path := *path --------+
*NEW* auxiliary_access_path_list := nil |
*NEW* |
*NEW* +------------------------------------+
*NEW* |
*NEW* v
*NEW* nsdsaps$a_next_ptr := nil
*NEW* nsdsaps$a_key_name := IF1F2
*NEW* nsdsaps$l_key_offset := 6
*NEW* nsdsaps$l_key_size := 8
*NEW* nsdsaps$l_key_ptr := *kse -----------+
*NEW* |
*NEW* +------------------------------------+
*NEW* |
*NEW* v
*NEW* nsdskse$a_next_ptr := *nextkse ----------------+
*NEW* nsdskse$l_lb_operator := NSDS$K_GTR |
*NEW* nsdskse$l_lb_compare_size := 8 |
*NEW* nsdskse$l_lb_compare_ptr := *value --> 10||30 |
*NEW* nsdskse$l_ub_operator := NSDS$K_LSS |
*NEW* nsdskse$l_ub_compare_size := 8 |
*NEW* nsdskse$l_ub_compare_ptr := *value --> 10||40 |
*NEW* nsdskse$l_ub_selection_id := id |
*NEW* |
*NEW* +----------------------------------------------+
*NEW* |
*NEW* v
*NEW* nsdskse$a_next_ptr := nil
*NEW* nsdskse$l_lb_operator := NSDS$K_GTR
*NEW* nsdskse$l_lb_compare_size := 8
*NEW* nsdskse$l_lb_compare_ptr := *value --> 20||30
*NEW* nsdskse$l_ub_operator := NSDS$K_LSS
*NEW* nsdskse$l_ub_compare_size := 8
*NEW* nsdskse$l_ub_compare_ptr := *value --> 20||40
*NEW* nsdskse$l_ub_selection_id := id
>>
>> No. I believe you would have a primary access paths based on F1 and an
>> auxiliary path based on F2. It should look something like:
>>
>> APS: Primary: Key: F1 Offset: 6 Size: 4
>>
>> KSE: Lower Bound:
>> Operator: EQUAL TO
>> Offset: 6
>> Size: 4
>> Value: 10
>> Upper Bound:
>> Operator: EQUAL TO
>> Offset: 6
>> Size: 4
>> Value: 20
>>
>> APS: Auxiliary: Key: F2 Offset: ? Size: 4
>>
>> KSE: Lower Bound:
>> Operator: GREATER THAN
>> Offset: ?
>> Size: 4
>> Value: 30
>> Upper Bound:
>> Operator: LESS THAN
>> Offset: ?
>> Size: 4
>> Value: 40
>>
- Suppose there are 2 multi segment keys defined I1 (F1,F2)
- and I2 (F2,F3)
- The SELECT refers to F1,F2 and F3.
- Are F1,F2 and F3 defined in APS (SET_ACCESS_PATH) or does
- NSDS passes only I1 or I2 values ?
>
> No. Only F1 & F2 or F2 & F3 would be defined in the APS for the
primary
> access path.See primary vs auxiliary access paths below.
> *(2)*
*NEW* So if we combine *(1)* and *(2)*, only F1 will be used
*NEW* in case of F1&F2 or F2 in case of F2&F3 ?
>>
>> I believe that this is true as there would be an access path for I1 and
>> another access path for I2, but in neither case is the second field usable
>> in the specified query.
>>
*NEW* Or is it dependent on the operator that specifies F1
*NEW* (with F1&F2) or F2 (F2&F3) so '=' means that also the
*NEW* second segment will be used and all other operators leave
*NEW* the second segment useless ?
>>
>> I believe this is true.
>>
*NEW* Could this work if F1 and F2 are incompatible
*NEW* (e.g. if a single binary comparison of two concatenated
*NEW* fields with the keyvalue does not yield the correct result) ?
>>
>> No. Note my comment above regarding concatination.
>>
*NEW* What happens if auxiliary paths are enabled ?
*NEW* - F1 as primary path and F2 as auxiliary path or
*NEW* - F2 as primary path and F3 as auxiliary path or will also be possible
*NEW* - F1 as primary, F2 and F3 as auxiliary paths ?
>>
>> This is confused. You stated that F1 , F2 , F3 , and F4 were segments of
>> keys I1 and I2. Access paths are keys specific not segment specific.
>>
*NEW* What if my SELECT refers to F1 and F2 and F3 and auxiliary
*NEW* paths are enabled. Will it make any difference in (APS)
*NEW* (primary and/or auxiliary) if I make three indexes each
*NEW* using one field (i.e. not segmented) or making one index
*NEW* with all fields (i.e. segmented) ?
>>
>> Absolutely.
>>
- concept of auxiliary access path is not clear.
- Should that be used in this case ?
>
> For EACH SELECT statement NSDS will select the access path which
it's
> optimizer believes is the most efficient. This access path will be
the
> primary access path. (Note-The selection of a primary access path
is
> query dependent.)
>
- The point is that for this third option the driver always needs
- ALL information specified in the query. Not only the fields part
of
- the used index.
>
> The driver can request the auxiliary access paths from the engine
by
> setting the Auxiliary Access Path capability bit in the Relation
> Capability Mask as described in the DDI_QUERY_RELATION definition
in the
> Driver Development
> Guide. You may have to be very generous in your definition of an
access
> path to get all the information you want.
*NEW* If I'm being generous - i.e. specifying an access-path for
*NEW* each and every column that will ever be used in a predicate -
*NEW* can I be sure (garanteed) that the auxiliary paths
*NEW* will state all the predicates in my SQL ?
>>
>> I believe so.
>>
*NEW* If I don't alter my SQL-query nor my access path definition
*NEW* given by DDI_QUERY_RELATION, will the primary&auxiliary paths
*NEW* (fields in the APS + fieldoperators in the KSE) always remain
*NEW* the same each time the query is executed? Or might the access path
*NEW* strategy be adapted due to statistical information about query
*NEW* responsetimes?
>>
>> I believe this is essentially true although very low cardinalities might
>> cause indices (and therefore access paths) not to be used at all.
>>
*NEW* Section 4.3 Access Paths in the release notes reads:
*NEW* "Only one access path may originate at a given record offset"
*NEW* Section 2.12 for the RMS-driver states that this driver
*NEW* can distinguish multiple indexes starting at the same offset
*NEW* if I use unique indexnames.
*NEW* If every segmented key in the custom driver has an unique
*NEW* name (access_path_name_dsc in DDI access Path Callback
*NEW* function), it should be possible to differenciate indexes
*NEW* by name (nsdsaps$a_key_name in APS) even if they originate
*NEW* at the same offset ?
>>
>> I don't see these references in my copy of the Release Notes, however,
>> the second statement, which says "it should be possible to differenciate
>> indexes by name" is correct.
>>
*NEW* Developer Guide states for DDI_SET_ACCESS_PATH routine:
*NEW* "The compare size may be less than the key field size"
*NEW* What is 'the key field size' when using segmented index ?
*NEW* Is it the total length of all fields that make out the index ?
>>
>> Yes. I believe that the total length is the sum of the lengths of the
>> segments. In fact, the costing algorithm takes into account whether
>> and multi segmented key is fully specified or not.
>>
*NEW* Developer Guide states for DDI_SET_ACCESS_PATH routine:
*NEW* "The key value is always in the same datatype as the key field"
*NEW* What is 'same datatype' when using segmented index ?
*NEW* Is it the binary concatenation of all segments ?
>>
>> I believe there are very strict limits on the ability to concatinate
>> segments with regards to datatype. To begin with, I believe that anything
>> which would mess up the "normal" sort sequence is not allowed.
>>
| |||||
| 1139.8 | Test Results | BROKE::WRIGHT | NYO&W-Trains Spoken Here-SUSIEQ | Mon Apr 21 1997 16:16 | 1438 |
$ !
$ show logical nsds$debug_flags
"NSDS$DEBUG_FLAGS" = "F" (LNM$JOB_83DB4450)
$ show logical nsds$_bypass_journaling
"NSDS$_BYPASS_JOURNALING" = "TRUE" (LNM$JOB_83DB4450)
$ show logical nsds$_rms_aux_ap_test
"NSDS$_RMS_AUX_AP_TEST" = "TRUE" (LNM$JOB_83DB4450)
$ sql
show version ;
Current version of SQL is: VAX SQL V4.1-0
@adri
SQL> set verify
SQL> attach 'f /type=nsds/path=adri.cdo/dict=nsds$mdi_cdo_reader_shr.exe' ;
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_INI
Driver Initialization Information:
Driver Name NSDS RMS Data Driver
Driver Version V3.0E-1
DDI Protocol V2.1-2
Negotiated Capability Mask: 0001, Engine Mask: 0001
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_ATTACH_DATABASE
RMS DDI: Dbkey scope: TRANSACTION
SQL> show table ADRI_DB ;
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_START_TRANSACTION
RMS DDI: Access is READ ONLY
RMS DDI: Wait time 5
*** RMS data driver: VMS version 'V5.5-2 ', major=5, minor=5
Information for table ADRI_DB
Columns for table ADRI_DB:
Column Name Data Type Domain
----------- --------- ------
F1 CHAR(2) F1
Query Header: F1
F2 CHAR(2) F2
Query Header: F2
F3 CHAR(2) F3
Query Header: F3
F4 CHAR(2) F4
Query Header: F4
F5 CHAR(2) F5
Query Header: F5
F6 CHAR(30) F6
Query Header: F6
Constraints referencing table ADRI_DB:
No constraints found
Indexes on table ADRI_DB:
ADRI_RMS$0 with column F1
no duplicates allowed
type is sorted
ADRI_RMS$1 with column F2
no duplicates allowed
type is sorted
ADRI_RMS$2 with column F1
and column F2
no duplicates allowed
type is sorted
ADRI_RMS$3 with column F3
duplicates are allowed
type is sorted
ADRI_RMS$4 with column F4
duplicates are allowed
type is sorted
ADRI_RMS$5 with column F5
duplicates are allowed
type is sorted
ADRI_RMS$6 with column F3
and column F4
duplicates are allowed
type is sorted
ADRI_RMS$7 with column F4
and column F5
duplicates are allowed
type is sorted
Triggers on table ADRI_DB:
No triggers found
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_ROLLBACK_TRANSACTION
RMS DDI: Call to DDI function
RMS DDI: cleanup_xact
SQL> select * from ADRI_DB ;
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_START_TRANSACTION
RMS DDI: Access is READ ONLY
RMS DDI: Wait time 5
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_QUERY_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Opening relation READ ONLY
RMS DDI: Call to RMS service
RMS DDI: SYS$OPEN
RMS DDI: Journaling is not active
RMS DDI: File access = 02 ( GET )
RMS DDI: File sharing options = 0F ( SHRPUT SHRGET SHRDEL SHRUPD )
RMS DDI: Call to RMS service
RMS DDI: SYS$CLOSE (re-open for indexed file)
RMS DDI: Call to RMS service
RMS DDI: SYS$OPEN (indexed file)
RMS DDI: Creating new FIT db: 4DFC60, database 28BC00
RMS DDI: Creating new FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT db: 4DFC60, FIT file: 4DFC00, FAB: 4DE800
RMS DDI: FIT db: 4DFC60, FIT file entries are:
FIT file: 4DFC00 = ADRI_DB
RMS DDI: Record lock option = 02020000 ( TMO WAT )
RMS DDI: Call to RMS service
RMS DDI: SYS$CONNECT
RMS DDI: Connecting RAB to FAB relation ADRI_DB, database 28BC00
RMS DDI: FAB: 4DE800, RAB: 4DEFF0
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: This is a local file
RMS DDI: Call to DDI function
RMS DDI: Close RMS file
RMS DDI: Close for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DFC00, FAB: 4DE800
RMS DDI: Disconnecting record stream
RMS DDI: Call to RMS service
RMS DDI: SYS$DISCONNECT
RMS DDI: Call to RMS service
RMS DDI: SYS$CLOSE
RMS DDI: Releasing FIT db: 4DFC60, database 28BC00
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_OPEN_DATA_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Opening relation READ ONLY
RMS DDI: Call to RMS service
RMS DDI: SYS$OPEN
RMS DDI: Journaling is not active
RMS DDI: File access = 02 ( GET )
RMS DDI: File sharing options = 0F ( SHRPUT SHRGET SHRDEL SHRUPD )
RMS DDI: Call to RMS service
RMS DDI: SYS$CLOSE (re-open for indexed file)
RMS DDI: Call to RMS service
RMS DDI: SYS$OPEN (indexed file)
RMS DDI: Creating new FIT db: 4DAC60, database 28BC00
RMS DDI: Creating new FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT db: 4DAC60, FIT file: 4DAC00, FAB: 4D5C00
RMS DDI: FIT db: 4DAC60, FIT file entries are:
FIT file: 4DAC00 = ADRI_DB
RMS DDI: Record lock option = 02120000 ( NLK TMO WAT )
RMS DDI: Call to RMS service
RMS DDI: SYS$CONNECT
RMS DDI: Connecting RAB to FAB relation ADRI_DB, database 28BC00
RMS DDI: FAB: 4D5C00, RAB: 4D63F0
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_ALLOCATE_METADATA_MEM
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_RECEIVE_METADATA_INFO
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_ACCESS_PATH
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_DATA_SELECTION
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple first call
RMS DDI: Call to RMS service
RMS DDI: SYS$REWIND
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
F1 F2 F3 F4 F5 F6
11 21 31 41 51 record b
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
12 22 32 42 52 record c
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
13 23 33 43 53 record d
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
14 24 34 44 54 record e
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
15 25 35 45 55 record f
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
16 26 36 46 56 record g
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
17 27 37 47 57 record h
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
18 28 38 48 58 record i
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: End of data
RMS DDI: 9 records read
%RMS-E-EOF, end of file detected
19 29 39 49 59 record j
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_CLOSE_DATA_RELATION
9 rows selected
SQL> !
SQL> !----- f1 & f2 w/ k0 , k1 , & k3
SQL> ! where k0 = f0
SQL> ! k1 = f1
SQL> ! k2 = f0 + f1
SQL> !
SQL> select * from ADRI_DB
cont> where '13' < f1
cont> and f1 < '17'
cont> and '23' < f2
cont> and f2 < '27' ;
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_QUERY_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: This is a local file
RMS DDI: Call to DDI function
RMS DDI: Close RMS file
RMS DDI: Close for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI: Decrementing stream count: 1
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_OPEN_DATA_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_ALLOCATE_METADATA_MEM
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_RECEIVE_METADATA_INFO
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_ACCESS_PATH
Primary Access path Key offset, size: 0, 2
Access path Key name: KEY0
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003331"
Value (ascii): "13"
Value (ebcdic): "\\"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 004edc00
Value size: 2
Offset (within key): 0
Value (hex): "00003731"
Value (ascii): "17"
Value (ebcdic): "\ "
Auxiliary Access path Key offset, size: 2, 2
Access path Key name: KEY1
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003332"
Value (ascii): "23"
Value (ebcdic): " \"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 004f9c00
Value size: 2
Offset (within key): 0
Value (hex): "00003732"
Value (ascii): "27"
Value (ebcdic): " "
Auxiliary Access path Key offset, size: 0, 2
Access path Key name: KEY2
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003331"
Value (ascii): "13"
Value (ebcdic): "\\"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 004f1c00
Value size: 2
Offset (within key): 0
Value (hex): "00003731"
Value (ascii): "17"
Value (ebcdic): "\ "
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_DATA_SELECTION
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple first call
RMS DDI: Call to DDI function
RMS DDI: Begin first key specifier pass
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
F1 F2 F3 F4 F5 F6
14 24 34 44 54 record e
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
15 25 35 45 55 record f
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: End of data
RMS DDI: 3 records read
%RMS-S-NORMAL, normal successful completion
16 26 36 46 56 record g
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_CLOSE_DATA_RELATION
3 rows selected
SQL> select * from ADRI_DB
cont> where '15' = f1
cont> and '23' < f2
cont> and f2 < '27' ;
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_QUERY_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: This is a local file
RMS DDI: Call to DDI function
RMS DDI: Close RMS file
RMS DDI: Close for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI: Decrementing stream count: 2
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_OPEN_DATA_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_ALLOCATE_METADATA_MEM
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_RECEIVE_METADATA_INFO
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_ACCESS_PATH
Primary Access path Key offset, size: 0, 2
Access path Key name: KEY0
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003531"
Value (ascii): "15"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 004ea000
Value size: 2
Offset (within key): 0
Value (hex): "00003531"
Value (ascii): "15"
Value (ebcdic): "\\"
Auxiliary Access path Key offset, size: 2, 2
Access path Key name: KEY1
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003332"
Value (ascii): "23"
Value (ebcdic): " \"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 00612600
Value size: 2
Offset (within key): 0
Value (hex): "00003732"
Value (ascii): "27"
Value (ebcdic): " "
Auxiliary Access path Key offset, size: 0, 2
Access path Key name: KEY2
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003531"
Value (ascii): "15"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 004edc00
Value size: 2
Offset (within key): 0
Value (hex): "00003531"
Value (ascii): "15"
Value (ebcdic): "\\"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_DATA_SELECTION
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple first call
RMS DDI: Call to DDI function
RMS DDI: Begin first key specifier pass
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Begin next key specifier pass
RMS DDI: End of data
RMS DDI: 1 records read
%RMS-S-NORMAL, normal successful completion
F1 F2 F3 F4 F5 F6
15 25 35 45 55 record f
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_CLOSE_DATA_RELATION
1 row selected
SQL> select * from ADRI_DB
cont> where f1 in ( '14' , '16' )
cont> and '23' < f2
cont> and f2 < '27' ;
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_QUERY_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: This is a local file
RMS DDI: Call to DDI function
RMS DDI: Close RMS file
RMS DDI: Close for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI: Decrementing stream count: 3
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_OPEN_DATA_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_ALLOCATE_METADATA_MEM
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_RECEIVE_METADATA_INFO
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_ACCESS_PATH
Primary Access path Key offset, size: 0, 2
Access path Key name: KEY0
RMS DDI: #key specifiers: 2
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003431"
Value (ascii): "14"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00614200
Value size: 2
Offset (within key): 0
Value (hex): "00003431"
Value (ascii): "14"
Value (ebcdic): "\\"
Key #2
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003631"
Value (ascii): "16"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00614e00
Value size: 2
Offset (within key): 0
Value (hex): "00003631"
Value (ascii): "16"
Value (ebcdic): "\\"
Auxiliary Access path Key offset, size: 2, 2
Access path Key name: KEY1
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003332"
Value (ascii): "23"
Value (ebcdic): " \"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 0061a200
Value size: 2
Offset (within key): 0
Value (hex): "00003732"
Value (ascii): "27"
Value (ebcdic): " "
Auxiliary Access path Key offset, size: 0, 2
Access path Key name: KEY2
RMS DDI: #key specifiers: 2
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003431"
Value (ascii): "14"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00615200
Value size: 2
Offset (within key): 0
Value (hex): "00003431"
Value (ascii): "14"
Value (ebcdic): "\\"
Key #2
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003631"
Value (ascii): "16"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00616e00
Value size: 2
Offset (within key): 0
Value (hex): "00003631"
Value (ascii): "16"
Value (ebcdic): "\\"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_DATA_SELECTION
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple first call
RMS DDI: Call to DDI function
RMS DDI: Begin first key specifier pass
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Begin next key specifier pass
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
F1 F2 F3 F4 F5 F6
14 24 34 44 54 record e
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Begin next key specifier pass
RMS DDI: End of data
RMS DDI: 2 records read
%RMS-S-NORMAL, normal successful completion
16 26 36 46 56 record g
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_CLOSE_DATA_RELATION
2 rows selected
SQL> select * from ADRI_DB
cont> where ( f1 = '14' or f1 = '16' )
cont> and '23' < f2
cont> and f2 < '27' ;
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_QUERY_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: This is a local file
RMS DDI: Call to DDI function
RMS DDI: Close RMS file
RMS DDI: Close for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI: Decrementing stream count: 4
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_OPEN_DATA_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_ALLOCATE_METADATA_MEM
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_RECEIVE_METADATA_INFO
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_ACCESS_PATH
Primary Access path Key offset, size: 0, 2
Access path Key name: KEY0
RMS DDI: #key specifiers: 2
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003431"
Value (ascii): "14"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00614200
Value size: 2
Offset (within key): 0
Value (hex): "00003431"
Value (ascii): "14"
Value (ebcdic): "\\"
Key #2
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003631"
Value (ascii): "16"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00614e00
Value size: 2
Offset (within key): 0
Value (hex): "00003631"
Value (ascii): "16"
Value (ebcdic): "\\"
Auxiliary Access path Key offset, size: 2, 2
Access path Key name: KEY1
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003332"
Value (ascii): "23"
Value (ebcdic): " \"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 0061a600
Value size: 2
Offset (within key): 0
Value (hex): "00003732"
Value (ascii): "27"
Value (ebcdic): " "
Auxiliary Access path Key offset, size: 0, 2
Access path Key name: KEY2
RMS DDI: #key specifiers: 2
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003431"
Value (ascii): "14"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00617a00
Value size: 2
Offset (within key): 0
Value (hex): "00003431"
Value (ascii): "14"
Value (ebcdic): "\\"
Key #2
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003631"
Value (ascii): "16"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00617e00
Value size: 2
Offset (within key): 0
Value (hex): "00003631"
Value (ascii): "16"
Value (ebcdic): "\\"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_DATA_SELECTION
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple first call
RMS DDI: Call to DDI function
RMS DDI: Begin first key specifier pass
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Begin next key specifier pass
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
F1 F2 F3 F4 F5 F6
14 24 34 44 54 record e
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Begin next key specifier pass
RMS DDI: End of data
RMS DDI: 2 records read
%RMS-S-NORMAL, normal successful completion
16 26 36 46 56 record g
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_CLOSE_DATA_RELATION
2 rows selected
SQL> !
SQL> !----- f3 , f4 , & , f5 w/ k3 , k4 , k5 , k6 , & k7
SQL> ! where k3 = f3
SQL> ! k4 = f4
SQL> ! k5 = f5
SQL> ! k6 = k3 + k4
SQL> ! k7 = k4 + k5
SQL> !
SQL> select * from ADRI_DB
cont> where '35' = f3
cont> and '45' = f4 ;
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_QUERY_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: This is a local file
RMS DDI: Call to DDI function
RMS DDI: Close RMS file
RMS DDI: Close for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI: Decrementing stream count: 5
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_OPEN_DATA_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_ALLOCATE_METADATA_MEM
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_RECEIVE_METADATA_INFO
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_ACCESS_PATH
Primary Access path Key offset, size: 4, 2
Access path Key name: KEY6
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 4
Offset (within key): 0
Value (hex): "35343533"
Value (ascii): "3545"
Value (ebcdic): "\\\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 004e7c00
Value size: 4
Offset (within key): 0
Value (hex): "35343533"
Value (ascii): "3545"
Value (ebcdic): "\\\\"
Auxiliary Access path Key offset, size: 6, 2
Access path Key name: KEY4
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003534"
Value (ascii): "45"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00613200
Value size: 2
Offset (within key): 0
Value (hex): "00003534"
Value (ascii): "45"
Value (ebcdic): "\\"
Auxiliary Access path Key offset, size: 6, 2
Access path Key name: KEY7
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003534"
Value (ascii): "45"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00611a00
Value size: 2
Offset (within key): 0
Value (hex): "00003534"
Value (ascii): "45"
Value (ebcdic): "\\"
Auxiliary Access path Key offset, size: 4, 2
Access path Key name: KEY3
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003533"
Value (ascii): "35"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 004ea000
Value size: 2
Offset (within key): 0
Value (hex): "00003533"
Value (ascii): "35"
Value (ebcdic): "\\"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_DATA_SELECTION
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple first call
RMS DDI: Call to DDI function
RMS DDI: Begin first key specifier pass
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: End of data
RMS DDI: 1 records read
%RMS-S-OK_LIM, retrieved record exceeds specified key value
F1 F2 F3 F4 F5 F6
15 25 35 45 55 record f
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_CLOSE_DATA_RELATION
1 row selected
SQL> select * from ADRI_DB
cont> where '33' < f3
cont> and f3 < '37'
cont> and '45' = f4 ;
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_QUERY_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: This is a local file
RMS DDI: Call to DDI function
RMS DDI: Close RMS file
RMS DDI: Close for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI: Decrementing stream count: 6
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_OPEN_DATA_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_ALLOCATE_METADATA_MEM
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_RECEIVE_METADATA_INFO
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_ACCESS_PATH
Primary Access path Key offset, size: 4, 2
Access path Key name: KEY6
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003333"
Value (ascii): "33"
Value (ebcdic): "\\"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 00611600
Value size: 2
Offset (within key): 0
Value (hex): "00003733"
Value (ascii): "37"
Value (ebcdic): "\ "
Auxiliary Access path Key offset, size: 6, 2
Access path Key name: KEY4
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003534"
Value (ascii): "45"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00614e00
Value size: 2
Offset (within key): 0
Value (hex): "00003534"
Value (ascii): "45"
Value (ebcdic): "\\"
Auxiliary Access path Key offset, size: 6, 2
Access path Key name: KEY7
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003534"
Value (ascii): "45"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00614200
Value size: 2
Offset (within key): 0
Value (hex): "00003534"
Value (ascii): "45"
Value (ebcdic): "\\"
Auxiliary Access path Key offset, size: 4, 2
Access path Key name: KEY3
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003333"
Value (ascii): "33"
Value (ebcdic): "\\"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 00613600
Value size: 2
Offset (within key): 0
Value (hex): "00003733"
Value (ascii): "37"
Value (ebcdic): "\ "
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_DATA_SELECTION
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple first call
RMS DDI: Call to DDI function
RMS DDI: Begin first key specifier pass
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: End of data
RMS DDI: 1 records read
%RMS-S-NORMAL, normal successful completion
F1 F2 F3 F4 F5 F6
15 25 35 45 55 record f
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_CLOSE_DATA_RELATION
1 row selected
SQL> select * from ADRI_DB
cont> where f3 = '35'
cont> and '43' < f4
cont> and f4 < '47' ;
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_QUERY_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: This is a local file
RMS DDI: Call to DDI function
RMS DDI: Close RMS file
RMS DDI: Close for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI: Decrementing stream count: 7
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_OPEN_DATA_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_ALLOCATE_METADATA_MEM
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_RECEIVE_METADATA_INFO
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_ACCESS_PATH
Primary Access path Key offset, size: 6, 2
Access path Key name: KEY7
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003334"
Value (ascii): "43"
Value (ebcdic): "\\"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 00611600
Value size: 2
Offset (within key): 0
Value (hex): "00003734"
Value (ascii): "47"
Value (ebcdic): "\ "
Auxiliary Access path Key offset, size: 6, 2
Access path Key name: KEY4
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003334"
Value (ascii): "43"
Value (ebcdic): "\\"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 00627200
Value size: 2
Offset (within key): 0
Value (hex): "00003734"
Value (ascii): "47"
Value (ebcdic): "\ "
Auxiliary Access path Key offset, size: 4, 2
Access path Key name: KEY3
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003533"
Value (ascii): "35"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 00626e00
Value size: 2
Offset (within key): 0
Value (hex): "00003533"
Value (ascii): "35"
Value (ebcdic): "\\"
Auxiliary Access path Key offset, size: 4, 2
Access path Key name: KEY6
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: EQUAL TO
Value size: 2
Offset (within key): 0
Value (hex): "00003533"
Value (ascii): "35"
Value (ebcdic): "\\"
Upper bound
Operator type: EQUAL TO
Upper Bound Selection Eval callback ID: 0061da00
Value size: 2
Offset (within key): 0
Value (hex): "00003533"
Value (ascii): "35"
Value (ebcdic): "\\"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_DATA_SELECTION
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple first call
RMS DDI: Call to DDI function
RMS DDI: Begin first key specifier pass
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: End of data
RMS DDI: 1 records read
%RMS-S-NORMAL, normal successful completion
F1 F2 F3 F4 F5 F6
15 25 35 45 55 record f
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_CLOSE_DATA_RELATION
1 row selected
SQL> select * from ADRI_DB
cont> where '33' < f3
cont> and f3 < '37'
cont> and '43' < f4
cont> and f4 < '47' ;
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_QUERY_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: This is a local file
RMS DDI: Call to DDI function
RMS DDI: Close RMS file
RMS DDI: Close for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI: Decrementing stream count: 8
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_OPEN_DATA_RELATION
RMS DDI: Call to DDI function
RMS DDI: Open RMS file
RMS DDI: Reusing FIT entry for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI:-Opening data relation = "ADRI_DB"
RMS DDI:-Related file at location = "devname:[directory]ADRI.DAT"
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_ALLOCATE_METADATA_MEM
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_RECEIVE_METADATA_INFO
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_ACCESS_PATH
Primary Access path Key offset, size: 4, 2
Access path Key name: KEY6
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003333"
Value (ascii): "33"
Value (ebcdic): "\\"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 0062b600
Value size: 2
Offset (within key): 0
Value (hex): "00003733"
Value (ascii): "37"
Value (ebcdic): "\ "
Auxiliary Access path Key offset, size: 6, 2
Access path Key name: KEY4
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003334"
Value (ascii): "43"
Value (ebcdic): "\\"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 0062e200
Value size: 2
Offset (within key): 0
Value (hex): "00003734"
Value (ascii): "47"
Value (ebcdic): "\ "
Auxiliary Access path Key offset, size: 6, 2
Access path Key name: KEY7
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003334"
Value (ascii): "43"
Value (ebcdic): "\\"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 0062de00
Value size: 2
Offset (within key): 0
Value (hex): "00003734"
Value (ascii): "47"
Value (ebcdic): "\ "
Auxiliary Access path Key offset, size: 4, 2
Access path Key name: KEY3
RMS DDI: #key specifiers: 1
Key #1
Lower bound
Operator type: GREATER THAN
Value size: 2
Offset (within key): 0
Value (hex): "00003333"
Value (ascii): "33"
Value (ebcdic): "\\"
Upper bound
Operator type: LESS THAN
Upper Bound Selection Eval callback ID: 0062ba00
Value size: 2
Offset (within key): 0
Value (hex): "00003733"
Value (ascii): "37"
Value (ebcdic): "\ "
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_SET_DATA_SELECTION
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple first call
RMS DDI: Call to DDI function
RMS DDI: Begin first key specifier pass
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
F1 F2 F3 F4 F5 F6
14 24 34 44 54 record e
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
15 25 35 45 55 record f
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_GET_NEXT_TUPLE
RMS DDI: Call to DDI function
RMS DDI: Get Next Tuple subsequent call
RMS DDI: Call to RMS service
RMS DDI: SYS$GET
RMS DDI: End of data
RMS DDI: 3 records read
%RMS-S-NORMAL, normal successful completion
16 26 36 46 56 record g
RMS DDI: Call to DDI function
RMS DDI: NSDS$DDI_CLOSE_DATA_RELATION
3 rows selected
exit ;
RMS DDI: Call to RMS service
RMS DDI: NSDS$DDI_COMMIT_TRANSACTION
RMS DDI: Call to DDI function
RMS DDI: cleanup_xact
RMS DDI: Call to DDI function
RMS DDI: Close RMS file
RMS DDI: Close for relation ADRI_DB, database 28BC00
RMS DDI: FIT: 4DAC00, FAB: 4D5C00
RMS DDI: Decrementing stream count: 8
RMS DDI: Disconnecting record stream
RMS DDI: Call to RMS service
RMS DDI: SYS$DISCONNECT
RMS DDI: Call to RMS service
RMS DDI: SYS$CLOSE
RMS DDI: Releasing FIT db: 4DAC60, database 28BC00
$ !
$ close sys$output
$ deassign sys$output
| |||||