/* BEGIN mrds_search_ops.incl.pl1 -- 2/23/79 */ /* HISTORY: 81-06-01 Jim Gray : removed assn_type and len from the move_info structure, since these are not used with the advent of mu_covert. 81-06-30 Jim Gray : added range_val_ptr to init_info structure, so that ranges (10 < x < 20) could be handled in one call to vfile select, instead of two. Also added range bit to show when usable. 81-07-06 Jim Gray : changed init_info op type encodings for those access methods currently available in mrds, plus added bits for whether mrds or vfile needs to do tid list intersection, and whether an unordered, faster sequential search can be done. 81-07-18 Jim Gray : added many comments, after changing the named constants to refer to the new access methods. 82-09-01 Mike Kubicar : converted from tuple structure to vector structure. This meant changing fields which pointed directly to tuple space to use indices into the tuple_info structure instead. 82-10-01 Davids: removed the encd_hash flag from move_info since it is never used and removed the encd_index flag from move_info since changes to mrds_dsl_gen_srch_prog have rendered it obsolute. Increased size of the reserved element from 28 to 30 bits. 83-04-04 Mike Kubicar : Removed init_info.unordered. It is no longer used. 83-04-22 Mike Kubicar : Added search_specification_ptr to select_info. This is the search spec to be used when retrieving tuple from a relation. Also deleted the init_info strucuture and associated constants. It is no longer used. 83-05-31 Mike Kubicar : Renamed search_specification_ptr to relation_search_specification_ptr. */ /* DESCRIPTION: BEGIN_DESCRIPTION The search ops structure holds the operations to be performed during a search of the database. It is a step-by-step actuallization of the selection expression specified by the user. For each tuple variable, there will be an move-init-select set of operations. The first operations is always an initizization~ one called PICKUP_SVP, The last operation is always a case for a failure condition called RETNUL, to return tuple_not_found. The move_init_select groups each have their own RETVAl step to return a tuple, if they succeed in finding an acceptable tuple. If there are multiple tuple variables, each T.V. group calls the move step of the next group once it has found an acceptable tuple in order to satisfy all conditions of the and group. Multiple and groups are processed until they exhaust all possible tuple variables, before the mini-search for the next and group is called. END_DESCRIPTION */ dcl 1 search_ops aligned based (so_ptr), /* the search "program" */ 2 ic fixed bin, /* index to next instruction */ 2 nops fixed bin, /* no. of operations in list */ 2 op (so_nops_init refer (search_ops.nops)), 3 code fixed bin, /* op code 1 => init. range 2 => move values 3 => select tuple 4 => return value 5 => return null 6 => pick up new search vars ptr */ 3 var_ind fixed bin, /* index of tuple variable */ 3 good_xfer fixed bin, /* rel. index of instr. if this op. successful */ 3 err_xfer fixed bin, /* rel. index of instr. if this op is unsuccess. */ 3 info_ptr ptr; /* pointer to op. dependent info. */ dcl so_ptr ptr; dcl so_nops_init fixed bin; dcl ((INIT init (1)), (MOVE init (2)), (SEL init (3)), (RETVAL init (4)), (RETNUL init (5)), (PICKUP_SVP init (6))) fixed bin int static options (constant); /* the move info structure is used to obtain needed information for the next database access specified by the init_info. This may involve moving data from tuples in other tuple variable relations in the database, doing a data conversion to a needed data type, encoding the data for key usage, or evaluating an expression */ dcl 1 move_info aligned based (mi_ptr), /* info for move op. */ /* note: items must be processed in order since items may depend on prior items in list */ 2 bit_move bit (1) unal, /* if just straight move */ 2 var_move bit (1) unal, /* if straignt move of var len attr. */ 2 thread bit (1) unal, /* on if moving thread */ 2 expr bit (1) unal, /* if evaluating an expr. */ 2 encd_attr bit (1) unal, /* if encoding a comparison value */ 2 extr_attr bit (1) unal, /* if the value must be extracted from a tuple */ 2 reserved bit (30) unal, 2 var_ind fixed bin, /* index of source var, or 0 */ 2 tuple_var_index fixed bin, /* index of tuple variable (tuple_info.tuple) to use */ 2 tuple_attr_index fixed bin, /* index of attribute to extract */ 2 s_ptr ptr, /* to source (tuple.data if var., ksl_ptr if key */ 2 t_ptr ptr, /* target, (encoded key value if encode) tuple ptr if expr */ 2 sbit_len fixed bin (35), /* bit length (bit offset if var.) thd type if thd */ 2 tbit_len fixed bin (35), /* target length */ 2 s_desc bit (36), /* descriptor for source */ 2 t_desc bit (36), /* descriptor for target */ 2 encd_desc bit (36), /* descriptor for encd attr */ 2 fwd_thd ptr; /* to next move info */ dcl mi_ptr ptr; dcl mi_nitems_init fixed bin; /* the select info structure is used to hold info about where to put a tuple that satisfies all conditions, and to point to a list of comparisons to be made against the tuple, before it is considered acceptable */ dcl 1 select_info aligned based (seli_ptr), /* info for select op. */ 2 tuple_info_index fixed bin, /* to output tuple */ 2 tid_ptr ptr, /* to place to store tuple id */ 2 relation_search_specification_ptr ptr, /* Search spec for relation manager gets */ 2 cvla_ptr ptr; /* pointer to cvl_array */ dcl seli_ptr ptr; /* END mrds_search_ops.incl.pl1 */ */ ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group Bull including Bull HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell Bull Inc., Groupe Bull and Bull HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, Bull or Bull HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by Bull HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved */