COMPILATION LISTING OF SEGMENT mu_sec_make_res Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 08/01/88 1328.1 mst Mon Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 12 /****^ HISTORY COMMENTS: 13* 1) change(86-05-14,Dupuis), approve(86-08-05,MCR7491), audit(86-08-08,Blair), 14* install(86-08-15,MR12.0-1127): 15* Added code to keep track of the rm_attr_info structures that have been 16* allocated (phx20301, mrds #154). Previously this code allocated one 17* rm_attr_info structure for each attribute in each relation. In the test 18* case for this TR this resulted in 7926 rm_attr_info's being allocated, 19* which took up 206076 words. This new code results in about 435 20* rm_attr_info's being allocated, for the test case. 21* END HISTORY COMMENTS */ 22 23 24 mu_sec_make_res: 25 make_res: 26 proc (insecure_dbrdy_ptr, insecure_frdy_ptr, temp_area_ptr, 27 arg_submodel_iocb_ptr, resultant_attributes_info_ptr_parm, error_code); 28 goto common; 29 30 /* 31* 32* BEGIN_DESCRIPTION 33* 34* This routine builds the part of the resultant model needed to ready a file. 35* this includes rm_rel_info, the rm_rel_infos for the files relations, the 36* rm_attr_infos, and rm_domain_infos for the relations attributes, and 37* rm_plink_infos and rm_clink_infos for the files links. the rm_rel_array, 38* and rm_rel_array are updated to reflect the readied file. the file itself 39* is attached and opened for the given ready mode. note that if the 40* resultant for the file is already built from a previous readying, that only 41* the attach and open process take place. 42* 43* END_DESCRIPTION 44* 45* PARAMETERS: 46* 47* insecure_dbrdy_ptr - - (input) pointer to the db_rdy structure containing 48* the db_index, db_model pointer, and dbcb pointer 49* 50* insecure_frdy_ptr - - (input) pointer to the file_rdy structure containing 51* the file name, file ready mode, and it's index in the file array 52* 53* temp_area_ptr - - (input) pointer to a scratch area for use in calling 54* mus_get_rel_names and mus_get_att_names 55* 56* arg_submodel_iocb_ptr - - (input) submodel iocb pointer, if a submodel 57* opening 58* 59* resultant_attributes_info_ptr_parm - - (input) pointer to resultant_attributes_info structure. 60* 61* error_code - - (output) fixed bin (35), type of error encoding, 0 unless an 62* error occured 63* 64* sub_error_ - - (output) condition, signaled upon detection of error to 65* provide more info 66* 67* 68* HISTORY: 69* 70* 78-08-01 Oris D. Friesen: Originally written. 71* 72* 79-05-01 Jim Gray : Rewritten to 73* 1) add sub_err_ and structured reporting of errors 74* 2) insure cleanup of parameter structures 75* 3) add logic to only attach & open if resultant already built for file 76* 4) correct and complete initialization of resultant structures 77* 5) add logic formerly in mu_sec_complete_res(deleted) to update readied 78* . links 79* 6) add array of varying attribute pointers to rm_rel_info 80* 81* 79-12-01 Jim Gray : Modified to make the build_ptr routine use 82* cv_ptr_ on a path$entry, instead of an hcs_$initiate, which does 83* not work. 84* 85* 79-12-02 Jim Gray : Modified to change get_assign_length, so that 86* packed decimal types would work properly 87* 88* 80-04-01 Jim Gray : Modified to fix attr definition order for 89* submodels. 90* 91* 80-04-02 Jim Gray : Modified to set rm_rel_info.delete/store bits 92* off it submodel view does not contain all attributes. 93* 94* 80-04-03 Jim Gray : Modified to make db path available to 95* mus_attach_open_vile so that the change to relative paths in the 96* model could be expanded for the attach description. 97* 98* 80-05-01 Jim Gray : Modified to include the models num_attrs, and 99* nvar_atts in the rm_rel_info, so that partial view submodels can 100* properly access the tuple structure. 101* 102* 80-05-01 Jim Gray : Modified to make partial view submodel 103* modify, a debug switch for this release. 104* 105* 80-05-02 Jim Gray : Modified to add model_nkey_attr to 106* rm_rel_info for key head submodel access info. 107* 108* 80-06-18 M. Pierret: Modified to accept submodel access 109* information. 110* 111* 80-06-24 Lindsey Spratt: Modified to set the mdbm_secured switch 112* equal to dsm_sw. 113* 114* 80-08-01 Lindsey Spratt: Modified to add access permission bits 115* to mus_get_ interface. 116* 117* 80-11-05 Jim Gray : Modified to set the mdbm_secured bit from the 118* secured bit in the model (as set by secure_mrds_db), instead of 119* from the submodel switch. 120* 121* 80-11-05 Jim Gray : Modified to add mdbm_secured bit to 122* rm_attr_info so that rm_rel_info does not have to be checked in 123* routines that do not have that info (e.g. select/where clause and 124* expr/func routines) 125* 126* 80-11-06 Jim Gray : Modified to set mdbm_secured bit from 127* rm_db_info.mdbm_secured, so that model is only touched once for 128* the setting of the secure bit in the resultant. 129* 130* 80-11-04 Jim Gray : Modified to take the call to attach and open 131* the data vfile out of this routine, now that the file is opened 132* at set_scope time in mrds_dsl_set_fscope instead, so that access 133* checks and access/scope conflict checks can be made indenpendent 134* of opening the file. 135* 136* 80-12-10 Jim Gray : to properly initialize the new version of 137* scope_info. This only happenns for files readied in 138* scope_update/retrieve modes, for other modes open still happens 139* here. 140* 141* 80-12-11 Jim Gray : added initialization of submodel name in 142* scope info 143* 144* 80-12-24 Jim Gray : improved error message for case when null 145* access doesn't allow getting pointer to model segment. 146* 147* 81-01-22 Davids: changed mrds_dsm_open_read to 148* mrds_dsm_open$read. also removed the use of the 149* mrds_dsm_entry_dcls include file 150* 151* 81-01-23 Jim Gray : added initialization of 152* last_model_attr_char_var bit in rm_rel_info, now added to 153* mus_get_att_names interface, so that partial view submodels can 154* determine where the end of a tuple with varying attributes, not 155* in it's view, has it's last bit. Also removed all logic 156* preventing partial view modifies that turned off the 157* rm_rel_info.modify bit. 158* 159* 81-01-27 Jim Gray : added setting of needed access for DBA types 160* if access violation. 161* 162* 81-01-30 Jim Gray : added init of current_tuple_population in 163* rm_rel_info. 164* 165* 81-02-20 Jim Gray : changed init of rm_rel_info.key_attr_ptr 166* array, so that the key attr pointers always appear in model key 167* order. Previously a submodel that re-order the key attributes, 168* and stored data, would have a tuple not retrievable by that key 169* in the model, and vice versa. This is a fix for TR 9038. Now the 170* key is always maintained in the model's key order, for entire 171* view relations, whether the opening is through the model or a 172* submodel. Note that the method used for the fix only works for 173* full view submodels doing a store, if we ever allow null values 174* in key attrs, and partial view stores, this will have to be 175* changed. 176* 177* 81-05-06 Rickie E. Brinegar : Added build_entry and changed the 178* encode, decode and check proc pointers in the resultant model to 179* entry variables. This was done to allow these procedures to be 180* written in other than pl1 and to accommodate the use of 181* cu_$generate_call instead of cu_$gen_call. 182* 183* 81-05-28 Jim Gray : changed code to handle to structure of 184* resultant model. This involved combining the rm_rel/file_array, 185* and combining the rm_rel/file_info. All blocked file and foreign 186* key references were eliminated. The -check option stuff was 187* removed. Now only one rm_domain_info per domain is used. 188* Descriptors are now used, instead of pointers to descriptors. 189* 190* 81-06-16 Jim Gray : changed initization of number of iocb's possible 191* per relation, to allow up to 20 tuple variables on the same relation. 192* 193* 81-07-02 Jim Gray : added initialization of the relation vfile statistics 194* in rm_rel_info, and the statistics update count and time. 195* 196* 81-09-16 Davids: added the rtrim builtin. rel_info.name will 197* never be more than 30 characters but since it is declared as char 198* (32) a stringsize is signaled when the code is compiled with a 199* prefix of stringsize. adding the rtrim allows the code to be 200* compiled. 201* 202* 82-04-21 R. Lackey : Add rm_rel_info.number_selected = 0; 203* To help keep track of how much space is used and delete old subsets. 204* TR12205 (Suggestion). 205* 206* 82-05-12 Roger Lackey : added min to 207* rm_rel_info.file_id_len = min (7, db_model.unblk_file_id_len); 208* because file_id_len is used as a length for substr in several modules 209* where the target variable is only 7 bits long. 210* 211* 82-08-12 Mike Kubicar : Added a fix as part of TR phx 13118. In 212* case of problems accessing an encode/decode procedure, 213* mu_sec_make_res will return mrds_error_$bad_domain_proc. This 214* is because an upper level routine is interpreting 215* error_table_$moderr as incorrect access to model/submodel. This 216* also applies to error_table_$no_info. 217* 218* 82-08-20 D. Woodka : deleted references to rm_attr_info.bit_offset 219* and rm_rel_info.max_data_len for DMS conversion. 220* 221* 82-09-23 Davids: added the setting of rm_rel_info.primary_key_index_id 222* 223* 82-09-24 Woodka : modified for DMS conversion. Deleted references to iocb 224* pointers, and references to deleted fields, and added initialization of 225* several new fields. 226* 227* 82-11-05 Davids: added assignment to the new field model_defn_order in 228* rm_attr_info. 229* 230* 83-02-26 Moberg: added parameters so that the temp_segment is not gotten 231* for each relation and if a submodel_opening, the submodel is not opened 232* for each relation 233* 234* 83-04-06 Davids: Added code to set the new rm_rel_info.scope_flags_ptr. 235* Also deleted references to discard_code, mrds_data_$max_tuple_var, length 236* min, substr. 237* 238* 83-06-06 Davids: Added code in the build_entry procedure so that the error 239* code returned is set before the call to sub_err_ and so that the info_ptr 240* argument in the call to sub_err_ is the addr of the error_code. This is 241* so that the sub_error handler in mrds_dsl_create_res_copy can reset the 242* error code to allow the resultant to be created even if the entry does 243* not exist. It was decided to do this so that the resultant creation code 244* will not need to be duplicated for saving the resultant in the db dir 245* during the database creation. 246**/ 247 248 common: /* initialize */ 249 submodel_iocb_ptr = arg_submodel_iocb_ptr; 250 num_dims = 0; 251 resultant_attributes_info_ptr = resultant_attributes_info_ptr_parm; 252 error_code = 0; 253 254 /* copy the pointer parameters for security purposes */ 255 256 frdy_ptr = insecure_frdy_ptr; 257 dbrdy_ptr = insecure_dbrdy_ptr; 258 259 dbcb_ptr = db_rdy.dbcb_ptr; 260 rdbi_ptr = dbcb.rdbi_ptr; 261 dbm_ptr = db_rdy.db_model_ptr; 262 fa_index = file_rdy.file_array_index; 263 rmra_ptr = rm_db_info.ra_ptr; 264 265 /* get the pointer to the file model for this file */ 266 267 call 268 hcs_$initiate ((rm_db_info.db_path), 269 rtrim (rm_rel_array.rel_data.model_name (fa_index)) || ".m", "", 0, 0, 270 fm_ptr, error_code); 271 272 if error_code = error_table_$moderr then do; 273 call 274 mrds_dm_authorization$set_needed_access (rtrim (rm_db_info.db_path), 275 error_code); 276 if error_code ^= 0 then 277 error_code = error_table_$moderr; 278 else call 279 hcs_$initiate ((rm_db_info.db_path), 280 rtrim (rm_rel_array.rel_data.model_name (fa_index)) || ".m", 281 "", 0, 0, fm_ptr, error_code); 282 end; 283 284 if fm_ptr = null then 285 call 286 sub_err_ (error_code, caller_name, continue, info_ptr, 287 return_value, "^/^a^a^a", 288 "Unable to get a pointer to the model segment """, 289 rtrim (rm_db_info.db_path) || ">" 290 || rtrim (rm_rel_array.rel_data (fa_index).model_name) || ".m", 291 """."); 292 else do; 293 294 error_code = 0; 295 fi_ptr = pointer (dbm_ptr, file_model.fi_ptr); 296 297 /* set up for processing the relation */ 298 299 call get_area_and_rel_init (); 300 301 302 if error_code = 0 then do; 303 304 /* now process each relation within this file */ 305 306 rel_index = 1; 307 call process_relation (); 308 309 /* scope ready modes need the mdbm to manage concurrency, initialize if neccessary */ 310 311 if (file_rdy.mode >= SCOPE_MODES) & (error_code = 0) 312 then call set_up_scope (); /* scope retrieve or scope update */ 313 314 end; 315 316 end; 317 318 return; 319 320 get_area_and_rel_init: 321 procedure (); 322 323 /* routine to get the initial values needed to allocate the rm_rel_info 324* if it hasn't been previously built, else just get the rmfi_ptr */ 325 326 327 /* get space for a parameter area */ 328 329 temp_area_ptr -> parameter_area = empty (); 330 331 /* get the number of relations in the submodel or model for this file */ 332 333 call mus_get_rel_names (dbcb.dsm_sw, rmra_ptr, fa_index, temp_area_ptr, 334 fm_ptr, rns_ptr, error_code); 335 336 end; 337 338 set_up_scope: 339 proc; 340 341 /* get the scope_info pointer, or initialize it if this is its first reference */ 342 343 if dbcb.scope_ptr ^= null () then 344 scope_ptr = dbcb.scope_ptr; 345 else do; /* first time, init structure */ 346 347 max_file_init = rm_rel_array.num_rels; 348 allocate scope_info set (scope_ptr) in (dbcb.static_area); 349 350 dbcb.scope_ptr = scope_ptr; 351 352 scope_info.mbz1 = OFF; 353 scope_info.nfiles = max_file_init; 354 scope_info.active_scopes = 0; 355 356 do i = 1 to scope_info.nfiles; 357 scope_info.scope.name (i) = BLANK; 358 scope_info.scope.sm_name (i) = BLANK; 359 scope_info.scope.flags (i) = OFF; 360 end; 361 end; 362 363 /* enter this files name in an empty slot in the scope array */ 364 365 do i = 1 to scope_info.nfiles while (scope_info.scope.name (i) ^= BLANK); 366 end; 367 368 scope_info.scope.name (i) = rm_rel_info.model_name; 369 scope_info.scope.sm_name (i) = rm_rel_info.name; 370 rm_rel_info.scope_flags_ptr = addr (scope_info.scope (i).flags); 371 372 end set_up_scope; 373 374 process_relation: 375 procedure (); 376 377 /* build the attr/domain/relation/plink/clink resultant infos for this relation */ 378 379 ri_ptr = rel_names.item (rel_index).ri_ptr; 380 381 call 382 mus_get_att_names (dbm_ptr, dbcb.dsm_sw, rns_ptr, rel_index, 383 temp_area_ptr, ans_ptr, error_code); 384 if error_code = 0 then do; 385 386 /* go through each attribute in the users view of this relation */ 387 388 do att_index = 1 to att_names.num while (error_code = 0); 389 390 call init_rm_domain_info (); 391 392 call init_rm_attr_info (); 393 394 att_names.item.rai_ptr (att_index) = rai_ptr; 395 396 end; 397 398 399 /* find an empty slot in the relation array, 400* then fill in the resultant relation info */ 401 402 if error_code = 0 then do; 403 404 rm_rel_index = fa_index; 405 406 call init_rm_rel_info (); 407 408 rm_rel_array.rel_data.ri_ptr (rm_rel_index) = rmri_ptr; 409 410 end; 411 412 end; 413 414 end; 415 416 init_rm_domain_info: 417 proc (); 418 419 /* fill in the resultant domain info */ 420 421 di_ptr = att_names.item.di_ptr (att_index); 422 423 declare found bit (1); /* on => leave loop */ 424 425 found = OFF; 426 rdi_ptr = rm_db_info.domain_list_ptr; 427 do while (^found); 428 429 if rdi_ptr = null () then 430 found = ON; 431 else if rm_domain_info.name = domain_info.name then 432 found = ON; 433 else rdi_ptr = rm_domain_info.next_domain_ptr; 434 435 end; 436 437 if rdi_ptr = null () then do; /* domain name not init yet */ 438 allocate rm_domain_info set (rdi_ptr) in (rm_db_info.static_area); 439 rm_domain_info.next_domain_ptr = rm_db_info.domain_list_ptr; 440 rm_db_info.domain_list_ptr = rdi_ptr; 441 442 443 rm_domain_info.db_desc = domain_info.db_desc; 444 rm_domain_info.user_desc = domain_info.user_desc; 445 rm_domain_info.user_bit_len = 446 mu_data_length ((rm_domain_info.user_desc)); 447 rm_domain_info.name = domain_info.name; 448 449 450 error_source = "domain " || rm_domain_info.name; 451 452 453 rm_domain_info.ck_proc, rm_domain_info.encd_proc, 454 rm_domain_info.decd_proc = "0"b; 455 if domain_info.check_path_ptr ^= NULL_OFFSET then do; 456 rm_domain_info.ck_proc_entry = 457 build_entry (domain_info.check_path_ptr, di_ptr, "check"); 458 rm_domain_info.ck_proc = "1"b; 459 end; 460 if domain_info.encd_path_ptr ^= NULL_OFFSET then do; 461 rm_domain_info.encd_proc_entry = 462 build_entry (domain_info.encd_path_ptr, di_ptr, "encode"); 463 rm_domain_info.encd_proc = "1"b; 464 end; 465 if domain_info.decd_path_ptr ^= NULL_OFFSET then do; 466 rm_domain_info.decd_proc_entry = 467 build_entry (domain_info.decd_path_ptr, di_ptr, "decode"); 468 rm_domain_info.decd_proc = "1"b; 469 end; 470 471 472 473 rm_domain_info.pad = OFF; 474 475 end; 476 477 end init_rm_domain_info; 478 479 init_rm_attr_info: 480 proc (); 481 482 dcl 1 irai_based_rm_attr_info like rm_attr_info based (irai_based_rm_attr_info_ptr); 483 dcl irai_based_rm_attr_info_ptr ptr; 484 dcl irai_havent_found_one_yet bit (1) aligned; 485 dcl irai_loop fixed bin; 486 dcl 1 irai_rm_attr_info like rm_attr_info; 487 /* fill in the resultant attribute info */ 488 489 ai_ptr = att_names.item.ai_ptr (att_index); 490 rai_ptr = addr (irai_rm_attr_info); 491 492 rm_attr_info.name = att_names.item.sm (att_index); 493 rm_attr_info.model_name = attr_info.name; 494 rm_attr_info.key_attr = attr_info.key_attr; 495 rm_attr_info.index_attr = attr_info.index_attr; 496 type = addr (rm_domain_info.db_desc) -> descriptor.type; 497 rm_attr_info.read_perm = att_names.item.r_perm (att_index); 498 rm_attr_info.modify_perm = att_names.item.u_perm (att_index); 499 rm_attr_info.mdbm_secured = rm_db_info.mdbm_secured; 500 rm_attr_info.reserved = OFF; 501 rm_attr_info.index_id = attr_info.index_id; 502 rm_attr_info.defn_order = att_index; /* will be defn order for view */ 503 rm_attr_info.model_defn_order = attr_info.defn_order; /* will be defn order for actual model */ 504 rm_attr_info.key_order = attr_info.key_order; 505 rm_attr_info.bit_length = attr_info.bit_length; 506 rm_attr_info.domain_ptr = rdi_ptr; 507 rm_attr_info.number_of_dups = 0; 508 509 510 if rm_attr_info.index_attr /* Don't update resultant_attributes_info if it's an indexed attribute */ 511 then call allocate_an_rm_attr_info_structure; 512 else if resultant_attributes_info.current_number_of_attributes = 0 513 then do; /* Update it for the first rm_attr_info */ 514 call allocate_an_rm_attr_info_structure; 515 call update_resultant_attributes_info; 516 end; 517 else do; 518 irai_havent_found_one_yet = ON; 519 do irai_loop = 1 to resultant_attributes_info.current_number_of_attributes 520 while (irai_havent_found_one_yet); 521 if resultant_attributes_info.attributes.name (irai_loop) = rm_attr_info.name 522 then do; 523 irai_based_rm_attr_info_ptr = resultant_attributes_info.attributes.value_ptr (irai_loop); 524 if unspec (irai_based_rm_attr_info) = unspec (rm_attr_info) 525 then irai_havent_found_one_yet = OFF; 526 end; 527 end; 528 if irai_havent_found_one_yet 529 then do; 530 call allocate_an_rm_attr_info_structure; 531 call update_resultant_attributes_info; 532 end; 533 else rai_ptr = irai_based_rm_attr_info_ptr; 534 end; 535 536 return; 537 538 allocate_an_rm_attr_info_structure: proc; 539 540 allocate rm_attr_info in (rm_db_info.static_area) set (rai_ptr); 541 unspec (rm_attr_info) = unspec (irai_rm_attr_info); 542 543 return; 544 545 end allocate_an_rm_attr_info_structure; 546 547 update_resultant_attributes_info: proc; 548 549 dcl 1 urai_rai_info like resultant_attributes_info based (urai_rai_info_ptr); 550 dcl urai_rai_info_ptr ptr; 551 dcl urai_save_number_of_attributes fixed bin; 552 553 if resultant_attributes_info.current_number_of_attributes + 1 554 > resultant_attributes_info.number_of_attributes 555 then do; 556 urai_rai_info_ptr = resultant_attributes_info_ptr; 557 urai_save_number_of_attributes = resultant_attributes_info.number_of_attributes; 558 rai_init_number_of_attributes = urai_save_number_of_attributes + mrds_data_$number_of_resultant_attributes; 559 allocate resultant_attributes_info in (dbcb.static_area) 560 set (resultant_attributes_info_ptr); 561 resultant_attributes_info.number_of_attributes = urai_save_number_of_attributes; 562 unspec (resultant_attributes_info) = unspec (urai_rai_info); 563 resultant_attributes_info_ptr_parm = resultant_attributes_info_ptr; 564 free urai_rai_info in (dbcb.static_area); 565 resultant_attributes_info.number_of_attributes = urai_save_number_of_attributes + mrds_data_$number_of_resultant_attributes; 566 resultant_attributes_info.current_number_of_attributes = urai_save_number_of_attributes; 567 end; 568 569 resultant_attributes_info.current_number_of_attributes 570 = resultant_attributes_info.current_number_of_attributes + 1; 571 resultant_attributes_info.value_ptr (resultant_attributes_info.current_number_of_attributes) = rai_ptr; 572 resultant_attributes_info.name (resultant_attributes_info.current_number_of_attributes) = rm_attr_info.name; 573 574 return; 575 576 end update_resultant_attributes_info; 577 578 end init_rm_attr_info; 579 580 init_rm_rel_info: 581 proc (); 582 583 /* fill in the resultant relation info */ 584 585 nvar_atts_init = att_names.num_varying_attrs; 586 nkey_attr_init = att_names.num_key_attrs; 587 natts_init = att_names.num; 588 589 allocate rm_rel_info set (rmri_ptr) in (rm_db_info.static_area); 590 591 entire_view = rel_names.item.total_view (rel_index); 592 rm_rel_info.name = rel_names.item.sm (rel_index); 593 rm_rel_info.model_name = rtrim (rel_info.name); /* CHANGE 81-09-16 */ 594 rm_rel_info.retrieve = (file_rdy.mode ^= LOAD); 595 rm_rel_info.modify = 596 ((file_rdy.mode = UPDATE) | (file_rdy.mode = SCOPE_UPDATE)); 597 rm_rel_info.store = 598 (((file_rdy.mode = LOAD) | rm_rel_info.modify) & entire_view); 599 rm_rel_info.delete = ((rm_rel_info.modify) & entire_view); 600 /* verify str/del/mod flags valid before set */ 601 if rm_rel_info.nkey_attr = rel_info.num_key_attrs then 602 rm_rel_info.total_key = ON; 603 else rm_rel_info.total_key = OFF; 604 rm_rel_info.indexed = rel_info.indexed; 605 rm_rel_info.mdbm_secured = rm_db_info.mdbm_secured; /* check whether secure_mrds_db has set this */ 606 rm_rel_info.status_perm = rel_names.item.status_perm (rel_index); 607 rm_rel_info.append_tuple_perm = 608 rel_names.item.append_tuple_perm (rel_index); 609 rm_rel_info.delete_tuple_perm = 610 rel_names.item.delete_tuple_perm (rel_index); 611 rm_rel_info.unused_perm = rel_names.item.unused_perm (rel_index); 612 rm_rel_info.last_model_attr_char_var = att_names.last_model_attr_char_var; 613 rm_rel_info.reserved = OFF; 614 rm_rel_info.num_attr = natts_init; 615 rm_rel_info.model_num_attr = rel_info.num_attr; 616 rm_rel_info.nkey_attr = nkey_attr_init; 617 rm_rel_info.model_nkey_attr = rel_info.num_key_attrs; 618 rm_rel_info.nsec_inds = 0; /* not counted yet */ 619 rm_rel_info.max_key_len = ceil (rel_info.max_key_len / 9); 620 rm_rel_info.current_tuple_population = 0; /* set later at file attach time */ 621 622 rm_rel_info.last_statistics_update_count = 0; 623 rm_rel_info.last_statistics_update_time = 0; 624 rm_rel_info.last_statistics_update_s_e_ref_num = 0; 625 if rel_info.primary_key_index_id = "111111111111111111111111111111111111"b then do; 626 rm_rel_info.primary_key_index_id = "0"b; 627 rm_rel_info.rel_id = (36)"1"b; 628 end; 629 else do; 630 rm_rel_info.primary_key_index_id = rel_info.primary_key_index_id; 631 rm_rel_info.rel_id = rel_info.id; 632 end; 633 rm_rel_info.reserved = OFF; 634 rm_rel_info.ready_mode = file_rdy.mode; 635 rm_rel_info.file_type = file_model.file_type; 636 rm_rel_info.tuple_id_len = file_model.tuple_id_len; 637 rm_rel_info.scope_flags_ptr = null (); 638 639 640 641 /* fill in the pointer arrays */ 642 643 call fill_rel_ptr_arrays (); /* get good pointers for this process */ 644 645 /* Set up an id_list structure for gets */ 646 647 il_number_of_ids = rm_rel_info.num_attr; 648 allocate id_list in (rm_db_info.static_area) set (id_list_ptr); 649 id_list.version = ID_LIST_VERSION_1; 650 id_list.number_of_ids = il_number_of_ids; 651 do i = 1 to rm_rel_info.num_attr; 652 id_list.id (i) = rm_rel_info.attr_ptrs (i) 653 -> rm_attr_info.model_defn_order; 654 end; 655 rm_rel_info.id_list_ptr = id_list_ptr; 656 657 end init_rm_rel_info; 658 659 fill_rel_ptr_arrays: 660 proc (); 661 662 /* fill in all the pointer arrays in the rel info */ 663 664 665 /* fill in the attribute pointer, key attribute pointer 666* and varying data type attribute pointer arrays, 667* and count up the number of secondary index attributes */ 668 669 j = 0; 670 k = 1; 671 do i = 1 to rm_rel_info.num_attr; 672 673 rai_ptr = att_names.item.rai_ptr (i); 674 rm_rel_info.attr_ptrs (i) = rai_ptr; 675 676 if ^rm_attr_info.key_attr then 677 ; 678 else do; 679 680 if entire_view then 681 j = rm_attr_info.key_order; 682 else j = j + 1; 683 rm_rel_info.key_attr_ptrs (j) = rai_ptr; 684 685 686 end; 687 688 689 if rm_attr_info.index_attr then 690 rm_rel_info.nsec_inds = rm_rel_info.nsec_inds + 1; 691 692 end; 693 694 end fill_rel_ptr_arrays; 695 696 697 698 699 build_entry: 700 proc (path_entry_offset, base_pointer, proc_type) returns (entry); 701 702 /* DESCRIPTION: 703* 704* This procedure initiates the segment referenced by the pathname structure 705* at the given offset The pointer to the initiated segment is returned in the 706* output_ptr parameter. If the segment could not be initiated the error 707* procedure is called. 708* 709**/ 710 711 dcl output_entry entry variable; /* output -- entry of initiated segment */ 712 declare proc_type char (*); /* type of procedure being set up */ 713 declare path_entry_offset bit (18); /* offset in the given area to the path_entry struct */ 714 declare base_pointer ptr; /* baRosin.SysAdmin.a SDº(’PDT >user_dir_dir>Tolts ûTolts >user_dir_dir>Tolts Tolts Bull TOLTS Project R&uѺB­ ¦' ôˆcTolts R&uÑê }Ÿƒ ¨®³xX•|_ŒþFudge.SysAdmin Rosin.SysAdmin Fakoury.*  Other @ ¼dT1ˆžôFakoury  k~8process_overseer_ >user_dir_dir>Tolts>Fakoury < €öá÷åFöá÷öá÷öá÷öá÷öá÷öá÷öá÷öá÷R/ØTŒ7÷noneT¶õRåFrM:ßBhæ97×N‰è ‡ˆ&TšÂ>¥öá÷­X–É¦Ô @ @entry (bit (36)) returns (fixed bin (35)); 794 /* bit length from descriptor */ 795 declare error_source char (48) varying; /* logical structure where setting up proc ptrs */ 796 dcl cv_entry_ entry (char (*), ptr, fixed bin (35)) returns (entry); 797 /* get an entry from path$entry */ 798 declare entire_view bit (1); /* on => all attributes present in view of relation */ 799 declare error_table_$moderr fixed bin (35) ext static; /* no access to entry */ 800 declare mrds_data_$number_of_resultant_attributes fixed bin (35) external; 801 declare mrds_error_$bad_domain_proc fixed bin (35) ext; /* No acces to encode/decode procedure */ 802 declare mrds_dm_authorization$set_needed_access 803 entry (char (*), fixed bin (35)); /* sets access for DBA types */ 804 1 1 /* BEGIN INCLUDE FILE - dm_id_list.incl.pl1 */ 1 2 1 3 /* DESCRIPTION 1 4* The id_list structure is used to identify attributes, fields and 1 5* dimensions by various modules of the Data Management System. 1 6**/ 1 7 1 8 /* HISTORY: 1 9*Written by Matthew Pierret, '82. 1 10*Modified: 1 11*08/17/83 by Matthew Pierret: Made version constant 'internal static options 1 12* (constant)' and to initialize automatic variables. 1 13**/ 1 14 1 15 /* format: style2,ind3 */ 1 16 dcl 1 id_list aligned based (id_list_ptr), 1 17 2 version fixed bin (35), 1 18 2 number_of_ids fixed bin (17), 1 19 2 id (il_number_of_ids refer (id_list.number_of_ids)) fixed bin (17); 1 20 1 21 dcl id_list_ptr ptr init (null); 1 22 dcl il_number_of_ids fixed bin (17) init (-1); 1 23 dcl ID_LIST_VERSION_1 fixed bin (17) init (1) internal static options (constant); 1 24 1 25 /* END INCLUDE FILE - dm_id_list.incl.pl1 */ 805 806 2 1 /* BEGIN INCLUDE FILE mdbm_db_model.incl.pl1 -- jaw, 10/2/78 */ 2 2 2 3 2 4 /****^ HISTORY COMMENTS: 2 5* 1) change(79-02-01,Gray), approve(), audit(), install(): 2 6* modified to save space occupied by model 2 7* 2) change(80-11-03,Gray), approve(), audit(), install(): 2 8* to add mdbm_secured bit in db_model 2 9* 3) change(82-04-09,Davids), approve(), audit(), install(): 2 10* collapsed the following into an unused_offset array: 2 11* chng_before_path_ptr chng_err_path_ptr chng_after_path_ptr 2 12* copy_before_path_ptr copy_err_path_ptr copy_after_path_ptr 2 13* dsply_before_path_pt dsply_err_path_pt dsply_after_path_ptr 2 14* accs_before_path_ptr accs_err_path_ptr accs_after_path_ptr 2 15* unused_1 2 16* Also changed the name of unused_2 to restructuring_history_offset 2 17* and changed the comment on the changer structure to indicate 2 18* that it will contain on database creation information. 2 19* 4) change(82-04-14,Davids), approve(), audit(), install(): 2 20* used one of the unused_offsets to point to a message which indicates 2 21* why the db is inconsistent. The offset will be null when the db is created 2 22* and set the first time the message is used. this is so it will be 2 23* consistent with existing data bases. Also added the message structure. 2 24* 5) change(82-04-28,Davids), approve(), audit(), install(): 2 25* added the undo_request element to the message structure 2 26* 6) change(82-05-04,Davids), approve(), audit(), install(): 2 27* changed unused_offset (12) to last_restructruring_history_offset and 2 28* changed restructuring_history_offset to first_restructuring_history_offset 2 29* 7) change(82-08-19,Davids), approve(), audit(), install(): 2 30* changed the meaning of db_type from 1 => relational and 2 => CODASYL to 2 31* 1@™¿fÐÛî2®àý°¡Šr¶F¶ž @=LÿÿÿÿSñ¹Ý¬™ÿ&H‚ &Úz™¿fÐÒ&™¿fÒMPzz¶Äar,Attendees ™¿fÒRyÓ€àý°„Q’ Tx¶Äa™¿fÐ>T\*@™¿fÒˆÄOffice ™¿fЀ6j*@™¿fÒHussein ™¿fРjMultics ™¿fÐr&™¿fËLë%íÚÚ¶ÄaÒTransactions ™¿fËNåÔÛî2®’øø¶Äa™¿fÐ*@™¿fË6>F*@™¿fÒÒ&™¿fÇLë%î¶Äa.Proceedings.1 ™¿fÇNåÌÛ ‡÷Ã’..¶Äa™¿fÐ*@™¿fÇ® *@™¿fÒ˜Ä*@™¿fÒjCDC ™¿fИ¶*@À™¿fÒžˆSysAdmin ™¿fÐÄFFortran ™¿fЖ*@™¿fÒ–®ˆ*@™¿fÒ\ Operator ™¿fÐx€ž*@™¿fÒ\SysMaint ™¿fÐ 84 2 reserved bit (34) unal, /* reserved for flags */ 2 85 2 blk_file_id_len unal fixed bin, /* no. bits required for blocked file id. */ 2 86 2 unblk_file_id_len unal fixed bin, /* number of file id bits, unblocked file */ 2 87 2 num_blk_files unal fixed bin, /* number of blocked files defined in db */ 2 88 2 num_unblk_files unal fixed bin, /* number of unblocked files defined in db */ 2 89 2 num_rels unal fixed bin, /* number of relations defined in db. */ 2 90 2 num_domains unal fixed bin, /* number of domains defined */ 2 91 2 num_dyn_links unal fixed bin, /* no. dynamic links defined */ 2 92 2 max_max_tuples unal fixed bin (35), /* maximum max_tuples across all files */ 2 93 2 pad_1 unal fixed bin (35), /* for future use */ 2 94 2 pad_2 unal fixed bin (35), /* for future use */ 2 95 2 version_ptr bit (18), /* offset to version structure */ 2 96 2 file_ptr unal bit (18), /* offset to first in threaded list of file_infos */ 2 97 2 domain_ptr unal bit (18), /* offset to first in list of domain_infos */ 2 98 2 unreferenced_attribute_ptr unal bit (18), /* offset to first in list of unreferenced attr_infos */ 2 99 2 unused_offsets (11) unal bit (18), /* extra offsets if needed */ 2 100 2 last_restructuring_history_offset unal bit (18), /* offset to last restructuring history entry */ 2 101 2 inconsistent_message_offset unal bit (18), /* offset to message indicating why db is inconsistent */ 2 102 2 first_restructuring_history_offset unal bit (18), /* offset to first restructuring history entry */ 2 103 2 changer_ptr unal bit (18), /* offset to information about db creation */ 2 104 2 dbm_area area (sys_info$max_seg_size - fixed (rel (addr (db_model.dbm_area))) - 1); 2 105 2 106 dcl dbm_ptr ptr; 2 107 2 108 /* the files in the database each have a file_info containing 2 109* their name, the file_model for each file is found by initiating the 2 110* segment "file_name.m" (i.e. the file's name with suffix ".m") 2 111* the file_info list is a singly linked list in definition order */ 2 112 2 113 dcl 1 file_info aligned based (fi_ptr), /* list of file names and numbers */ 2 114 2 file_name char (30), /* name of file */ 2 115 2 file_id bit (36), /* id number of file */ 2 116 2 fwd_ptr unal bit (18), /* thread to next in list */ 2 117 2 unused unal bit (18); /* for future expansion */ 2 118 2 119 dcl fi_ptr ptr; 2 120 2 121 /* each domain used in the database will have a domain info saved in the db_model 2 122* segment. it describes the domain of the given name, and it's options. 2 123* the domain_info's form a singly linked list in definition order */ 2 124 2 125 dcl 1 domain_info aligned based (di_ptr), /* one for each domain defined */ 2 126 2 name char (32), /* name of domain */ 2 127 2 db_desc_is_ptr bit (1) unal, /* on if descriptor is pointer to real desc. */ 2 128 2 user_desc_is_ptr bit (1) unal, /* on if user desc is ptr */ 2 129 2 no_conversion bit (1) unal, /* if no conversion allowed */ 2 130 2 procedures_present bit (1) unal, /* on => ids type procedures present */ 2 131 2 unreferenced bit (1) unal, /* on => this domain is not used in any attribute */ 2 132 2 reserved bit (31) unal, 2 133 2 db_desc bit (36), /* desc. for item in db, or ptr to it */ 2 134 2 user_desc bit (36), /* desc. for user-visible attr, or ptr */ 2 135 2 ave_len fixed bin (35), /* average length of varying string */ 2 136 2 nck_items unal fixed bin, /* no. items in check stack */ 2 137 2 fwd_thread unal bit (18), /* offset to next in list */ 2 138 2 check_path_ptr unal bit (18), /* integ. check proc. */ 2 139 2 ck_stack_ptr unal bit (18), /* to check stack */ 2 140 2 encd_path_ptr unal bit (18), /* encode procedure */ 2 141 2 decd_path_ptr unal bit (18), /* decode procedure */ 2 142 2 str_before_path_ptr unal bit (18), /* proc paths and entries */ 2 143 2 str_err_path_ptr unal bit (18), 2 144 2 str_after_path_ptr unal bit (18), 2 145 2 get_before_path_ptr unal bit (18), 2 146 2 get_err_path_ptr unal bit (18), 2 147 2 get_after_path_ptr unal bit (18), 2 148 2 mod_before_path_ptr unal bit (18), 2 149 2 mod_err_path_ptr unal bit (18), 2 150 2 mod_after_path_ptr unal bit (18), 2 151 2 unused_1 unal bit (18), /* for future expansion */ 2 152 2 unused_2 unal bit (18), 2 153 2 changer_ptr unal bit (18); /* pointer to change_id and chane_time structure */ 2 154 2 155 dcl di_ptr ptr; 2 156 2 157 /* information necessary for attributes that are not used in any relation */ 2 158 2 159 dcl 1 unreferenced_attribute aligned based (ua_ptr), 2 160 2 name char (32), /* name of attribute */ 2 161 2 domain_ptr bit (18) unal, /* to domain_info */ 2 162 2 fwd_thread bit (18) unal, /* to next in list */ 2 163 2 unused (2) bit (18) unal; 2 164 2 165 dcl ua_ptr ptr; 2 166 2 167 2 168 /* space saving pathname$entryname structure, to be allocated 2 169* only when a path$entry has to be saved, else only a bit(18) 2 170* offset takes up space in the main model structure */ 2 171 2 172 declare 1 path_entry based (path_entry_ptr), 2 173 2 path char (168), /* pathname portion of desired path$entry */ 2 174 2 entry char (32), /* entryname portion of desired path$entry */ 2 175 2 reserved unal bit (36); /* for future use */ 2 176 2 177 declare path_entry_ptr ptr; 2 178 2 179 2 180 2 181 2 182 2 183 /* declarations for model of postfix stack holding the check option boolean expression 2 184* the following encoding values indicate the corresponding type of stack element 2 185* 2 186* 1 = 2 187* 2 ^= 2 188* 3 > 2 189* 4 < 2 190* 5 >= 2 191* 6 <= 2 192* 2 193* 10 and 2 194* 20 or 2 195* 30 not 2 196* 2 197* 40 - (minus) 2 198* 2 199* 50 domain variable(same name as domain) 2 200* 2 201* 60 constant(number, bit string, or character string) 2 202* 2 203**/ 2 204 2 205 2 206 declare 1 stack_item based (stack_item_ptr), /* element of stack model list */ 2 207 2 next bit (18), /* link to next in list */ 2 208 2 type fixed binary, /* code for this element type */ 2 209 2 value_ptr bit (18); /* pointer to variable holding value, 2 210* if this is a constant element type */ 2 211 2 212 declare stack_item_ptr ptr; /* pointer to a stack element */ 2 213 2 214 2 215 2 216 declare 1 constant based (constant_ptr), /* variable size space for constant's value storage */ 2 217 2 length fixed bin (35), /* length allocated to hold value */ 2 218 2 value bit (alloc_length refer (constant.length)) aligned; /* value for this constant */ 2 219 2 220 declare constant_ptr ptr; /* pointer to constant's value space */ 2 221 2 222 declare alloc_length fixed binary (35) internal static; /* amount of space to allocate for constant's value */ 2 223 2 224 /* version structure, giving status of source for CMDB/RMDB, 2 225* status of model, and status of resultant */ 2 226 2 227 /* version number is in form MM.N.Y 2 228* where MM is the major version number, N is the minor version alteration, 2 229* and Y is the lastest modification to that alteration, 2 230* where M and N represent numbers 0-9, and Y is a letter */ 2 231 2 232 declare 1 version_status unal based (version_status_ptr), 2 233 2 cmdb_rmdb, 2 234 3 major fixed bin, 2 235 3 minor fixed bin, 2 236 3 modification char (4), 2 237 2 model, 2 238 3 major fixed bin, 2 239 3 minor fixed bin, 2 240 3 modification char (4), 2 241 2 resultant, 2 242 3 major fixed bin, 2 243 3 minor fixed bin, 2 244 3 modification char (4); 2 245 2 246 declare version_status_ptr ptr; 2 247 2 248 2 249 /* maintains information only about the db creation */ 2 250 2 251 declare 1 changer unal based (changer_ptr), 2 252 2 id char (32), 2 253 2 time fixed bin (71), 2 254 2 next bit (18); /* to next in the singly linked list */ 2 255 2 256 declare changer_ptr ptr; 2 257 2 258 2 259 dcl 01 message_str unal based (message_str_ptr), /* general purpose structure to hold messages */ 2 260 02 len fixed bin, /* length of the message */ 2 261 02 text char (message_str_len refer (message_str.len)), /* actual message */ 2 262 02 name char (32), /* name of thing that set the message */ 2 263 02 undo_request char (100), /* rmdb request that will undo the operation 2 264* that caused the database to become inconsistent */ 2 265 02 mbz bit (36); /* for possible extensions, like an offset to another message */ 2 266 2 267 dcl message_str_ptr ptr; /* pointer to the message_str structure */ 2 268 2 269 dcl message_str_len fixed bin; /* initail length of the text string in message_str */ 2 270 2 271 /* END INCLUDE FILE mdbm_db_model.incl.pl1 */ 2 272 2 273 807 808 3 1 /* BEGIN INCLUDE FILE mdbm_file_model.incl.pl1 -- jaw, 8/29/78 */ 3 2 3 3 3 4 /****^ HISTORY COMMENTS: 3 5* 1) change(79-02-01,JGray), approve(), audit(), install(): 3 6* modified to save space occupied by model 3 7* 2) change(82-05-19,Davids), approve(), audit(), install(): 3 8* renamed rel_info.nsec_inds to rel_info.unused_3 because it really wasn't 3 9* the number of secondary indices in the relation - it was always zero. 3 10* 3) change(82-08-19,DWoodka), approve(), audit(), install(): 3 11* changed rel_info.id and attr_info.index_id to bit (36) unaligned for the 3 12* DMS conversion. 3 13* 4) change(82-09-20,MKubicar), approve(), audit(), install(): 3 14* changed rel_info.id and attr_info.index_id to aligned; they are needed that 3 15* way for relmgr_ calls. Also added rel_info.primary_key_index_id, needed 3 16* for relation manager changes. 3 17* 5) change(85-12-02,Spitzer), approve(85-12-02,MCR7311), 3 18* audit(86-09-02,Blair), install(86-10-16,MR12.0-1187): 3 19* used 2 reserved bits to indicate whether the copy of the <rel>.m and/or 3 20* <rel> files are good (for rmdb) 3 21* END HISTORY COMMENTS */ 3 22 3 23 3 24 /* each file in the database will have a model segment with the name 3 25* file_name.m (i.e. the files name plus a suffix of ".m") 3 26* the file_model structure is allocated at the base of the segment for a given file. 3 27* it contains an area with which all other structures in this include file are allocated. 3 28* these structures contain the information about which relations, foreign keys, 3 29* and attributes are members of this file. all lists are singly linked lists in 3 30* definition order. pointers to these structures are obtained by using the "pointer" 3 31* builtin function with arguments of the segment base pointer, and the 3 32* offset (bit (18)) relative to that pointer that is actually stored in 3 33* the file model itself. this is because pointer segment numbers are 3 34* per process dependent. the major lists pointed to by the file_model structure 3 35* are the list of relations in this file(each with a contained attribute list), 3 36* and the list of foreign keys whose parent relation resides in this file 3 37* (along with a participating attribute sublist, and the child relation list, 3 38* if they are also in this file) */ 3 39 3 40 dcl 1 file_model aligned based (fm_ptr), /* base of segment */ 3 41 2 temporary bit (1) unal, /* on if file not part of db. */ 3 42 2 procedures_present bit (1) unal, /* on => ids procedures present */ 3 43 2 file_model_copy_good bit (1) unaligned, /* on => <rel>.m file is the good copy */ 3 44 2 relation_copy_good bit (1) unaligned, /* on => <rel> file is the good copy */ 3 45 2 reserved bit (32) unal, /* reserved for future flags */ 3 46 2 max_tuples fixed bin (35), /* max no. of tuples in file */ 3 47 2 num_blocks fixed bin (35), /* number of blocks in file */ 3 48 2 num_buckets fixed bin (35), /* number of buckets in file */ 3 49 2 pad_1 fixed bin (35), /* for future use */ 3 50 2 pad_2 fixed bin (35), 3 51 2 ratd_len fixed bin (21), /* length of above */ 3 52 2 mratd_len fixed bin (21), /* length of above */ 3 53 2 uatd_len fixed bin (21), /* char. length of update attach desc. */ 3 54 2 latd_len fixed bin (21), /* char. len. of attach desc. */ 3 55 2 sratd_len fixed bin (21), /* char. length of above attach desc. */ 3 56 2 suatd_len fixed bin (21), /* char. length of attach desc. */ 3 57 2 file_type unal fixed bin, /* 1 => unblocked, 2 => blocked */ 3 58 2 block_size unal fixed bin, /* no. pages in block */ 3 59 2 block_factor unal fixed bin, /* no. tuple slots per block */ 3 60 2 bucket_density unal fixed bin, /* no. of bucket headers per block, neg. => blocks per header */ 3 61 2 tuple_id_len unal fixed bin, /* no. bits needed for local tuple id */ 3 62 2 num_rels unal fixed bin, /* number of relations in file */ 3 63 2 num_links unal fixed bin, /* number of links in file */ 3 64 2 num_children unal fixed bin, /* count of all child_link_infos in this file */ 3 65 2 default_rbs (3) unal fixed bin (8), /* file ring brackets when not MDBM-secured */ 3 66 2 rel_ptr unal bit (18), /* to first of list of rel_infos */ 3 67 2 link_ptr unal bit (18), /* to first in list of parent link_infos */ 3 68 2 children_ptr unal bit (18), /* to list of all child_link_infos in this file model */ 3 69 2 cno_array_ptr unal bit (18), /* pointer to array of data component numbers */ 3 70 2 fi_ptr unal bit (18), /* offset to file_info in db_model */ 3 71 2 suatd_ptr unal bit (18), /* offset of scope_update attach desc. */ 3 72 2 sratd_ptr unal bit (18), /* offset of scope_retrieve attach desc. */ 3 73 2 latd_ptr unal bit (18), /* offset of load attach desc. */ 3 74 2 uatd_ptr unal bit (18), /* offset of update attach description for file */ 3 75 2 mratd_ptr unal bit (18), /* offset of moniter-retrieve attach desc. */ 3 76 2 ratd_ptr unal bit (18), /* offset of retrieve attach desc. */ 3 77 2 open_eu_before_path_ptr unal bit (18), /* paths and ents of file procs. */ 3 78 2 open_eu_err_path_ptr unal bit (18), 3 79 2 open_eu_after_path_ptr unal bit (18), 3 80 2 open_er_before_path_ptr unal bit (18), 3 81 2 open_er_err_path_ptr unal bit (18), 3 82 2 open_er_after_path_ptr unal bit (18), 3 83 2 open_neu_before_path_ptr unal bit (18), /* paths and ents of file procs. */ 3 84 2 open_neu_err_path_ptr unal bit (18), 3 85 2 open_neu_after_path_ptr unal bit (18), 3 86 2 open_ner_before_path_ptr unal bit (18), 3 87 2 open_ner_err_path_ptr unal bit (18), 3 88 2 open_ner_after_path_ptr unal bit (18), 3 89 2 open_pu_before_path_ptr unal bit (18), 3 90 2 open_pu_err_path_ptr unal bit (18), 3 91 2 open_pu_after_path_ptr unal bit (18), 3 92 2 open_pr_before_path_ptr unal bit (18), 3 93 2 open_pr_err_path_ptr unal bit (18), 3 94 2 open_pr_after_path_ptr unal bit (18), 3 95 2 open_cu_before_path_ptr unal bit (18), 3 96 2 open_cu_err_path_ptr unal bit (18), 3 97 2 open_cu_after_path_ptr unal bit (18), 3 98 2 open_cr_before_path_ptr unal bit (18), 3 99 2 open_cr_err_path_ptr unal bit (18), 3 100 2 open_cr_after_path_ptr unal bit (18), 3 101 2 close_before_path_ptr unal bit (18), 3 102 2 close_err_path_ptr unal bit (18), 3 103 2 close_after_path_ptr unal bit (18), 3 104 2 unused_1 unal bit (18), /* for future expansion */ 3 105 2 unused_2 unal bit (18), 3 106 2 changer_ptr unal bit (18), /* pointer to changer_id, changer_time structure */ 3 107 2 fm_area area (sys_info$max_seg_size - fixed (rel (addr (file_model.fm_area))) - 1); 3 108 dcl fm_ptr ptr; 3 109 dcl atd char (atd_len) based (atd_ptr); /* attach description for each file ready mode */ 3 110 dcl atd_ptr ptr; 3 111 dcl atd_len fixed bin; 3 112 dcl 1 comp_no_array unal based (cna_ptr), /* ordered array of data comp. nos. */ 3 113 2 ncomponents fixed bin, 3 114 2 comp_no (ncomp_init refer (comp_no_array.ncomponents)) fixed bin; 3 115 dcl cna_ptr ptr; 3 116 dcl ncomp_init fixed bin; 3 117 3 118 /* a rel_info structure contains information describing a relation. 3 119* a relation may only occur in one file, thus there is one rel_info 3 120* per relation per database, each stored in the file_model area for 3 121* the file that contains it. the list of rel_info's in this file 3 122* form a singly linked list in definition order. 3 123* the rel_info itself points to a list of the attributes it contains, 3 124* and to any parent_link or child_link info's that involve it in a foreign key */ 3 125 3 126 dcl 1 rel_info aligned based (ri_ptr), 3 127 2 name char (32), /* relation name */ 3 128 2 id bit (36) aligned, /* relation id number */ 3 129 2 hashed bit (1) unal, /* on if hashed */ 3 130 2 duplicates bit (1) unal, /* on if allow dup. hash fields */ 3 131 2 via_link bit (1) unal, /* on if to be stored by parent */ 3 132 2 system bit (1) unal, /* on if dont care how stored */ 3 133 2 indexed bit (1) unal, /* on if secondary index */ 3 134 2 mrds_update bit (1) unal, /* on if updateable by MRDS */ 3 135 2 mrds_retrieve bit (1) unal, /* on if retrievable by MRDS */ 3 136 2 virtual bit (1) unal, /* if virtual relation, mapped on IDS records */ 3 137 2 procedures_present bit (1) unal, /* on => ids type procedures present */ 3 138 2 reserved bit (27) unal, /* for future flags */ 3 139 2 num_attr unal fixed bin, /* number of attributes (all levels) defined */ 3 140 2 num_links_child unal fixed bin, /* no. links in which child */ 3 141 2 num_links_par unal fixed bin, /* no. links_in which parent */ 3 142 2 max_attr_index_id unal fixed bin, /* max index id used by attr in this rel or PLI */ 3 143 2 num_key_attrs unal fixed bin, /* number of attributes in primary key for this rel */ 3 144 2 nvar_atts unal fixed bin, /* no. varying len. attributes */ 3 145 2 n36_thds unal fixed bin, /* no. of 36-bit threads */ 3 146 2 n27_thds unal fixed bin, /* no of 27-bit threads */ 3 147 2 n18_thds unal fixed bin, /* no of 18-bit threads */ 3 148 2 unused_3 unal fixed bin, /* element that was never used */ 3 149 2 max_data_len fixed bin (35), /* max length of data portion of tuple */ 3 150 2 avg_data_len fixed bin (35), /* average length of tuple data portion */ 3 151 2 max_key_len fixed bin (35), /* max key length if not hashed */ 3 152 2 var_offset fixed bin (35), /* position of first varying attr. */ 3 153 2 max_tuples fixed bin (35), /* max no. tuples if blocked file */ 3 154 2 fwd_thread unal bit (18), /* offsset to next rel. in file */ 3 155 2 attr_ptr unal bit (18), /* to attr. info */ 3 156 2 primary_key_index_id bit (36) aligned, /* index id of the relation's primary key */ 3 157 2 clink_ptr unal bit (18), /* offset to child info of link determining location */ 3 158 2 map_ptr unal bit (18), /* pointer to mapping info if virtual rel. */ 3 159 2 sec_ind_ptr unal bit (18), /* ptr to list of sec. ind. infos, init. not used */ 3 160 2 locator_proc_path_ptr unal bit (18), /* proc to determ. location */ 3 161 2 link_before_path_ptr unal bit (18), /* op. proc. paths and entries */ 3 162 2 link_err_path_ptr unal bit (18), 3 163 2 link_after_path_ptr unal bit (18), 3 164 2 unlk_before_path_ptr unal bit (18), 3 165 2 unlk_err_path_ptr unal bit (18), 3 166 2 unlk_after_path_ptr unal bit (18), 3 167 2 str_before_path_ptr unal bit (18), 3 168 2 str_err_path_ptr unal bit (18), 3 169 2 str_after_path_ptr unal bit (18), 3 170 2 del_before_path_ptr unal bit (18), 3 171 2 del_err_path_ptr unal bit (18), 3 172 2 del_after_path_ptr unal bit (18), 3 173 2 mod_before_path_ptr unal bit (18), 3 174 2 mod_err_path_ptr unal bit (18), 3 175 2 mod_after_path_ptr unal bit (18), 3 176 2 find_before_path_ptr unal bit (18), 3 177 2 find_err_path_ptr unal bit (18), 3 178 2 find_after_path_ptr unal bit (18), 3 179 2 retr_before_path_ptr unal bit (18), 3 180 2 retr_err_path_ptr unal bit (18), 3 181 2 retr_after_path_ptr unal bit (18), 3 182 2 unused_1 unal bit (18), /* for future expansion */ 3 183 2 unused_2 unal bit (18), 3 184 2 changer_ptr unal bit (18) ; /* pointer to changer_id, changer_time structure */ 3 185 dcl ri_ptr ptr; 3 186 3 187 /* a attr_info structure contains information about an attribute in a given relation. 3 188* since attributes may appear in more than one relation, each occurence of an attribute 3 189* means that an attr_info for it will be put in that relations sublist of attributes. 3 190* the list is singly linked in definition order. the attr_info describes 3 191* the data it represents, and how that data is used during a database search. */ 3 192 dcl 1 attr_info aligned based (ai_ptr), /* info for a single attr. in attr. list */ 3 193 2 name char (32), /* name of attribute */ 3 194 2 key_attr bit (1) unal, /* on if part of primary or hash key */ 3 195 2 index_attr bit (1) unal, /* on if a secondary index */ 3 196 2 link_attr bit (1) unal, /* on if participates in link */ 3 197 2 reserved bit (33) unal, 3 198 2 index_id bit (36) aligned, /* id of index if index attr. */ 3 199 2 defn_order unal fixed bin, /* relative posit. in which defined */ 3 200 2 key_order unal fixed bin, /* relative posit. in key */ 3 201 2 bit_offset fixed bin (35), /* position in tuple */ 3 202 2 bit_length fixed bin (35), /* length if fixed */ 3 203 2 link_child_cnt fixed bin, /* number of uses of attr in child rel of link */ 3 204 2 link_par_cnt fixed bin, /* number of uses of attr in parent rel of link */ 3 205 2 domain_ptr unal bit (18), /* to domain info */ 3 206 2 rslt_ptr unal bit (18), /* ptr to info for "result" clause */ 3 207 2 fwd_thread unal bit (18), /* to next in list */ 3 208 2 changer_ptr unal bit (18) ; /* pointer to changer_id and changer_time */ 3 209 dcl ai_ptr ptr; 3 210 3 211 /* a parent_link_info structure is the carrier of foreign key definition info. 3 212* each time a foreign key definition indicates a relation as it's parent, 3 213* that relation will get a parent_link_info put in a list of associated parent_link_info's. 3 214* a relation can be parent and/or child in any number of foreign keys. 3 215* the parent_link_info structure describes the foreign key, and also points 3 216* to a list of the attributes that participate in this foreign key. 3 217* (this could be from 1 up to all attributes in the relation) 3 218* the attr_list structures are in a singly linked list in definition order 3 219* for this purpose. also pointed to is a list of child_link_info's 3 220* that describe the child relations in this foreign key. since foreign keys 3 221* may span files, not all related child_link_info's have to be in this file's 3 222* model area. */ 3 223 dcl 1 parent_link_info aligned based (pli_ptr), /* gen'l link info, appears in each area spanned by link parent */ 3 224 2 name char (32), /* name of link */ 3 225 2 singular bit (1) unal, /* on if system owned link */ 3 226 2 temp bit (1) unal, /* on if temp. order */ 3 227 2 first bit (1) unal, /* insertion indicators */ 3 228 2 last bit (1) unal, 3 229 2 next bit (1) unal, 3 230 2 prior bit (1) unal, 3 231 2 sort_rel_name bit (1) unal, /* sort -- relation name */ 3 232 2 sort_keys bit (1) unal, /* sort -- defined keys */ 3 233 2 dup_first bit (1) unal, /* duplicates first */ 3 234 2 dup_last bit (1) unal, /* duplicates last */ 3 235 2 indexed bit (1) unal, /* locate parent via index */ 3 236 2 hashed bit (1) unal, /* locate parent via hashed primary key */ 3 237 2 thread_36 bit (1) unal, /* thread size indicators */ 3 238 2 thread_27 bit (1) unal, 3 239 2 thread_18 bit (1) unal, 3 240 2 clustered bit (1) unal, /* ON => cluster option specified for this link */ 3 241 2 procedures_present bit (1) unal, /* on => ids type procedures present */ 3 242 2 reserved bit (19) unal, /* reserved for future flags */ 3 243 2 index_id aligned bit (8), /* id of index if indexed */ 3 244 2 thread_index unal fixed bin, /* index to threads in parent */ 3 245 2 nsel_attr unal fixed bin, /* no. attr. determ. parent */ 3 246 2 n_children unal fixed bin, /* no. children in link */ 3 247 2 child_fn char (30), /* file name for first child in list */ 3 248 2 parent_ptr unal bit (18), /* to parent relation info in file model */ 3 249 2 child_ptr unal bit (18), /* to list of child info ptrs */ 3 250 2 sel_attr_ptr unal bit (18), /* to first in list of attr. determ. parent */ 3 251 2 fwd_thread unal bit (18), /* thread to next parent link info in file */ 3 252 2 rel_fwd_thread unal bit (18), /* for multiple links within a relation */ 3 253 2 sort_before_path_ptr unal bit (18), /* proc. paths and entries */ 3 254 2 sort_err_path_ptr unal bit (18), 3 255 2 sort_after_path_ptr unal bit (18), 3 256 2 srch_before_path_ptr unal bit (18), 3 257 2 srch_err_path_ptr unal bit (18), 3 258 2 srch_after_path_ptr unal bit (18), 3 259 2 link_before_path_ptr unal bit (18), 3 260 2 link_err_path_ptr unal bit (18), 3 261 2 link_after_path_ptr unal bit (18), 3 262 2 unlk_before_path_ptr unal bit (18), 3 263 2 unlk_err_path_ptr unal bit (18), 3 264 2 unlk_after_path_ptr unal bit (18), 3 265 2 unused_1 unal bit (18), /* for future expansion */ 3 266 2 unused_2 unal bit (18), 3 267 2 changer_ptr unal bit (18) ; /* pointer to changer_id, changer_time structure */ 3 268 dcl pli_ptr ptr; 3 269 3 270 /* a child_link_info structure is the counter part of a parent_link_info 3 271* for foreign key child relations. each time a relation is defined to be 3 272* a child in a foreign key, it's list of child_link_infos will be added to. 3 273* this list is singly linked in foreign key definition order. 3 274* the child_link_info points to a list of participating attributes from the 3 275* child relation by means of a singly linked list of attr_list structures 3 276* in definition order. the number of attributes in the parent attr_list 3 277* and the child attr_list lists are the same with corresponding attr_list 3 278* attributes having the same domain. all child_link_infos in this file 3 279* are on a seperately linked list. this may not include all 3 280* child_link_infos for foreign keys whose parent relation resides in this file, 3 281* since foreign keys may span files, and the child_link_info will 3 282* reside in the file containing it's associated relation_info. */ 3 283 dcl 1 child_link_info aligned based (cli_ptr), /* in same files as children */ 3 284 2 link_name char (32), /* name of foreign key involving parent relation for this child */ 3 285 2 mandatory bit (1) unal, /* on if membership mandatory */ 3 286 2 fixed bit (1) unal, /* on if membership fixed */ 3 287 2 optional bit (1) unal, /* on if membership optional */ 3 288 2 auto bit (1) unal, /* on if insertion automatic */ 3 289 2 manual bit (1) unal, /* on if insertion manual */ 3 290 2 struct_const bit (1) unal, /* on if membership constrained by attr. comp. */ 3 291 2 range_sel bit (1) unal, /* on if range type selection */ 3 292 2 key_dup_first bit (1) unal, /* sort key flags */ 3 293 2 key_dup_last bit (1) unal, 3 294 2 key_null bit (1) unal, /* on if null allowed */ 3 295 2 sel_system bit (1) unal, /* selection criteria flags */ 3 296 2 sel_current bit (1) unal, 3 297 2 sel_key bit (1) unal, 3 298 2 sel_proc bit (1) unal, 3 299 2 no_null bit (1) unal, /* if null key values not allowed */ 3 300 2 reserved bit (21) unal, 3 301 2 thread_index unal fixed bin, /* index to thread in tuple */ 3 302 2 chain_len unal fixed bin, /* no. "then-thru's" in selction crit. */ 3 303 2 n_sort_keys unal fixed bin, /* no. attr. in sort key */ 3 304 2 n_sel_items unal fixed bin, /* no. items to sel for link sel. */ 3 305 2 n_dup_prevs unal fixed bin, /* no. attr. for dup prev. */ 3 306 2 link_fwd_fn char (30), /* file name for next child info in link */ 3 307 2 parent_fn char (30), /* file name for parent info */ 3 308 2 parent_ptr unal bit (18), /* offset to parent link info */ 3 309 2 link_fwd_thread unal bit (18), /* offset for next child in link */ 3 310 2 rel_info_ptr unal bit (18), /* to corresponding rel info */ 3 311 2 dup_prev_ptr unal bit (18), /* list of attrs. for dup. prev. */ 3 312 2 sel_ptr unal bit (18), /* list of attr. for link sel. */ 3 313 2 rel_fwd_thread unal bit (18), /* for multiple links within a relation */ 3 314 2 child_fwd_thread unal bit (18), /* pointer to next in list of all child_link_infos in this file */ 3 315 2 sort_key_ptr unal bit (18), /* list of sort keys */ 3 316 2 chain_ptr unal bit (18), /* to "then thru" list */ 3 317 2 sel_proc_path_ptr unal bit (18), /* link selection proc. */ 3 318 2 link_before_path_ptr unal bit (18), /* proc. paths and entries */ 3 319 2 link_err_path_ptr unal bit (18), 3 320 2 link_after_path_ptr unal bit (18), 3 321 2 unlk_before_path_ptr unal bit (18), 3 322 2 unlk_err_path_ptr unal bit (18), 3 323 2 unlk_after_path_ptr unal bit (18), 3 324 2 srch_before_path_ptr unal bit (18), 3 325 2 srch_err_path_ptr unal bit (18), 3 326 2 srch_after_path_ptr unal bit (18), 3 327 2 unused_1 unal bit (18), /* for future expansion */ 3 328 2 unused_2 unal bit (18) ; 3 329 dcl cli_ptr ptr; 3 330 3 331 /* the attr_list structure is associated with the parent_link_info 3 332* and child_link_info structures to represent by means of a singly linked list 3 333* the participating attributes from relations in a foreign key. 3 334* the parent_link_info has a list for the parent relation, 3 335* and the child_link_info has a list for the child relation. 3 336* the participating attributes are a subset(not necessary proper) of 3 337* those attributes contained in a relation definition. 3 338* there are equal numbers of attr_list structures in the parent and 3 339* child lists of the same foreign key. the corresponding attributes in these 3 340* lists must have the same domain. */ 3 341 dcl 1 attr_list aligned based (al_ptr), /* general attr. list */ 3 342 2 attr_fn char (30), /* file name for attr. */ 3 343 2 attr_ptr unal bit (18), /* to attr info block */ 3 344 2 fwd_thread unal bit (18); /* to next in list */ 3 345 dcl al_ptr ptr; 3 346 dcl 1 sort_key aligned based (sk_ptr), /* entry in sort key list */ 3 347 2 ascend bit (1) unal, /* ascending order */ 3 348 2 descend bit (1) unal, /* descending order */ 3 349 2 reserved bit (34) unal, 3 350 2 attr_ptr unal bit (18), /* to attr info */ 3 351 2 fwd_thread unal bit (18); /* to next in list */ 3 352 dcl sk_ptr ptr; 3 353 dcl 1 dup_prev aligned based (dp_ptr), /* dup. prevention list entry */ 3 354 2 attr_ptr unal bit (18), /* to attr info */ 3 355 2 fwd_thread unal bit (18); /* to next in list */ 3 356 dcl dp_ptr ptr; 3 357 dcl 1 select_chain aligned based (sc_ptr), /* "then thru" list entry */ 3 358 2 link_fn char (30), /* file name for thru link */ 3 359 2 link_ptr unal bit (18), /* to parent link info */ 3 360 2 parent_attr_ptr unal bit (18), /* to parent ident. attr. list */ 3 361 2 comp_proc_path_ptr unal bit (18), /* comparison procedure */ 3 362 2 comp_attr_fn char (30), /* file name for comparison attr. */ 3 363 2 comp_attr_ptr unal bit (18), /* to comparison attr list */ 3 364 2 fwd_thread unal bit (18); /* to next in chain */ 3 365 dcl sc_ptr ptr; 3 366 3 367 /* END INCLUDE FILE mdbm_file_model.incl.pl1 */ 3 368 3 369 809 810 4 1 /* BEGIN mdbm_rm_db_info.incl.pl1 -- jaw, 11/7/78 */ 4 2 4 3 4 4 4 5 /****^ HISTORY COMMENTS: 4 6* 1) change(86-08-13,Hergert),, approve(88-06-28,MCR7903), 4 7* audit(88-06-28,Dupuis), install(88-08-01,MR12.2-1073): 4 8* Removed change of 84-11-02. i.e. replaced even_word_pad. 4 9* END HISTORY COMMENTS */ 4 10 4 11 4 12 /* WARNING 4 13* If the rm_db_info structure is changed then the mrds_data_ 4 14* item saved_res_version MUST be incremented to invalidate all 4 15* existing saved resultants 4 16**/ 4 17 4 18 /* DESCRIPTION: This structure is based on a segment 4 19* {unique_name}.mrds.rdbi that represents the secure portion of the 4 20* resultant model that is created partially at database open time, 4 21* (the rm_file_array, and rm_rel_array) and partially at ready_file 4 22* time, (the rm_file_info, rm_rel_info, rm_attr_info, 4 23* rm_domain_info, rm_plink_info and rm_clink_info). it's purpose is 4 24* to provide an efficient means of accessing database model 4 25* information, as seen from the possibly submodel view of the user, 4 26* and his current state of "files readied". it is the secure part 4 27* because it contains the model information which needs to be 4 28* protected from general knowledge, and this segment will 4 29* eventually be capable of being in a lower ring. the structure 4 30* itself points to four arrays that are allocated in it's area, 4 31* that in turn point to the other structures mentions above, also 4 32* allocated in the rm_db_info.static_area. the arrays are the 4 33* rm_file_array, and rm_rel_array. their are a pair for temporary 4 34* relations, initially empty, and a pair for normal model 4 35* files/relations. the normal rm_file_array is initialized to a 4 36* list of all known file names, the rm_rel_array only gets relation 4 37* names as files are readied. the rm_file_array points to 4 38* rm_file_infos for each file (see mdbm_rm_file_info.incl.pl1) and 4 39* the rm_rel_array points to rm_rel_info for each relation 4 40* "readied". (see mdbm_rm_rel_info.incl.pl1). (the arrays are in 4 41* mdbm_rm_file_array.incl.pl1 and mdbm_rm_rel_array.incl.pl1). the 4 42* file infos point to contained rel infos, the rel infos point to 4 43* contained attr infos, and those in turn to domain infos. (see 4 44* mdbm_rm_attr_info.incl.pl1 and mdbm_rm_domain_info.incl.pl1) 4 45* foreign keys are represented by the structures 4 46* mdbm_rm_plink_info.incl.pl1, and mdbm_rm_clink_info.incl.pl1. the 4 47* pathnames of the model and submodel, if any, are also maintained 4 48* in rm_db_info. the pointer to this rm_db_info segment is obtained 4 49* from the dbcb segment tructure(see mrds_dbcb.incl.pl1) see the 4 50* individual include files for further organization information, 4 51* and particular data structures. 4 52* 4 53* HISTORY: 4 54* 4 55* 80-02-01 Jim Gray : Modified to put area on even word boundary, 4 56* so that define_area_ could be used to make it an extensible area 4 57* 4 58* 81-1-9 Jim Gray : added like reference to make the phony 4 59* resultant in mu_database_index easier to keep, since no reference 4 60* to the area is needed. 4 61* 4 62* 81-1-12 Jim Gray : added version of submodel used in opening to 4 63* resultant. 4 64* 4 65* 81-05-13 Rickie E. Brinegar: added the administrator bit to the 4 66* structure. 4 67* 4 68* 81-05-28 Jim Gray : removed pointers to file_arrays, since they 4 69* are now combined into the rel_array. Removed the control file 4 70* info which was unused. Added pointer to head of domain list, 4 71* which is to be used to insure only one copy of each domain info. 4 72* 4 73* 83-05-19 Davids: Added the saved_res_version element. 4 74* 4 75* 84-11-02 Thanh Nguyen: Replaced the even_word_pad by the 4 76* ref_name_proc_ptr to point to list of reference name of the 4 77* check, encode, or decode proc. 4 78* 4 79* CAUTION: The structure entries from db_version to sm_path should 4 80* not be moved or have their declarations changed because they are 4 81* used in the handling of old version database openings. 4 82* 4 83* 4 84**/ 4 85 4 86 dcl 1 rm_db_info aligned based (rdbi_ptr), /* data base info, located at base of res. dm. seg. */ 4 87 2 data like rm_db_info_data, 4 88 2 static_area area (sys_info$max_seg_size - fixed (rel (addr (rm_db_info.static_area)))); 4 89 4 90 dcl rdbi_ptr ptr; 4 91 4 92 declare 1 rm_db_info_data based, /* separate declaration of info, so others can use 4 93* like reference to it without getting the area as well */ 4 94 2 db_version fixed bin, /* version no. of db */ 4 95 2 sm_version fixed bin unal, /* version of submodel used unal, 0 if model opening */ 4 96 2 val_level fixed bin unal, /* validation level for this db. */ 4 97 2 db_path char (168), /* abs. path of db. */ 4 98 2 sm_path char (168), /* path of submodel or model */ 4 99 2 mdbm_secured bit (1) unal, /* ON => database is secured */ 4 100 2 administrator bit (1) unal, /* ON => user is an administrator */ 4 101 2 pad bit (34) unal, /* for future use */ 4 102 2 saved_res_version char (8), /* version of the saved resultant in the 4 103* dbcb and rdbi segments in the db dir */ 4 104 2 domain_list_ptr ptr, /* pointer to head of list of domain_info's */ 4 105 2 ra_ptr ptr, /* pointer to rel. array */ 4 106 2 tra_ptr ptr, /* to rel array for temp rels */ 4 107 2 even_word_pad fixed bin (71) aligned; /* padding to put area on even word boundary */ 4 108 4 109 /* END mdbm_rm_db_info.incl.pl1 */ 4 110 4 111 811 812 5 1 /* BEGIN mrds_dbcb.incl.pl1 -- jaw, 11/7/78 */ 5 2 5 3 5 4 5 5 /****^ HISTORY COMMENTS: 5 6* 1) change(85-11-17,Dupuis), approve(85-12-16,MCR7314), 5 7* audit(86-02-04,Brunelle), install(86-02-05,MR12.0-1013): 5 8* This entry is being made to cover the change made on 85-07-01 by Thanh 5 9* Nguyen. The scopes_changed flag was added to make checking for this 5 10* more efficient (mrds error list #137). 5 11* 2) change(86-06-10,Blair), approve(86-08-07,MCR7491), 5 12* audit(86-08-07,Gilcrease), install(86-08-15,MR12.0-1127): 5 13* Add a bit called dont_check_txn_id to indicate whether or not we should 5 14* care if multiple txns use the same selection_expression. (mrds #156) 5 15* 3) change(87-11-23,Hergert), approve(88-06-28,MCR7903), 5 16* audit(88-06-28,Dupuis), install(88-08-01,MR12.2-1073): 5 17* Added parser_work_area_ptr and mrds_se_info_ptr for new parser. 5 18* END HISTORY COMMENTS */ 5 19 5 20 5 21 /* WARNING 5 22* If the dbcb structure is changed then the mrds_data_ 5 23* item saved_res_version MUST be incremented to invalidate all 5 24* existing saved resultants 5 25**/ 5 26 5 27 /* HISTORY : 5 28* 5 29* modified by Jim Gray - - 80-10-24, to add new_select_expr bit for 5 30* tid_list management 5 31* 5 32* 81-1-9 Jim Gray : added like reference for ease in making the 5 33* phony resultant in mu_database_index, without having the area dcl 5 34* included. 5 35* 5 36* 81-06-17 Roger Lackey : added last_store_rel_name for use by 5 37* mrds_dsl_store 5 38* 5 39* 81-06-26 Roger Lackey : Added no_optimize and print_search_order 5 40* switches 5 41* 5 42* 81-07-06 Jim Gray : added identifier for the current selection 5 43* expression, so that relation statistics can be updated relative 5 44* to number of selection expressions seem. Also removed init for 5 45* last_store_rel_name, as this iw now properly done in 5 46* mrds_dsl_init_res. 5 47* 5 48* 81-07-17 Roger Lackey : added pred_ptr and unused_ptrs. 5 49* 5 50* 82-08-19 Mike Kubicar : added store_vector field. This is needed 5 51* for the conversion to the relation manager. 5 52* 5 53* 82-08-23 Davids: added the relmgr_entries and access_costs 5 54* substructures so that the entries and costs can change 5 55* depending on the type of database that is opened. 5 56* 5 57* 82-09-09 Mike Kubicar : added modify_vector field. This is needed 5 58* since modify uses a different vector type (general) than does store. 5 59* 5 60* 82-09-20 Davids: changed names of (store modify)_vector to 5 61* (store modify)_vector_ptr. Also (delete modify)_tuple_by_id to 5 62* (delete modify)_tuples_by_id. added the element cursor_storage_ptr 5 63* which should be inited to null and will be set by mu_cursor_manager_$get 5 64* during the first call. 5 65* 5 66* 82-09-21 Davids: renamed cursor_storage_ptr to cursor_ptrs_storage_ptr 5 67* since it deals with the pointers to the cursors and not the cursors 5 68* themelves and added the element cursor_storage_area_ptr which points 5 69* to the area where the cursors are kept. 5 70* 5 71* 82-09-22 Davids: renamed the transact_ctl_seg to transactions_needed. 5 72* the transact_ctl_seg always had a value of 0 and really didn't mean 5 73* anything. 5 74* 5 75* 82-09-22 Mike Kubicar : added create_relation, create_index and 5 76* destroy_relation_by_opening to relmgr_entries. They are needed 5 77* by mrds_dsl_define_temp_rel. 5 78* 5 79* 82-09-24 Donna Woodka : added put_tuple to relmgr_entries. It 5 80* is needed by mu_store. 5 81* 5 82* 82-11-12 Davids: changed the declaration of the access_costs from fixed 5 83* bin to float bin since the values are not integers. 5 84* 5 85* 83-02-02 Davids: added the dbc_uid element. This will allow mrds to make 5 86* sure that the dbc_ptr still points to the correct segment. Element was 5 87* added to the end of the structure to allow modules that don't use 5 88* the element to continue to reference the dbcb structure without recompiling. 5 89* 5 90* 83-02-25 Davids: added the concurrency_on and rollback_on elements. These 5 91* are needed so that temp rels can be created with the same file attributes 5 92* as the permanent relations. 5 93* 5 94* 83-05-02 Mike Kubicar : Deleted get_next_search_specification_ptr and 5 95* added the resultant_in_pdir bit. 5 96* 5 97* 83-05-18 Davids: reduced the number of reserved bits to 14 (from 15) and 5 98* added the res_already_made element. 5 99* 5 100* 83-05-24 Mike Kubicar : Updated the relation manager calling sequences. 5 101* 5 102* 83-08-03 Mike Kubicar : Added the element_id_list_segment_ptr and removed 5 103* one of the unused pointers. 5 104* 5 105* 83-09-20 Ron Harvey: Added relmgr_entries.get_population. 5 106* 5 107* 84-08-27 John Hergert: Created compiled_se_info_ptr from unused_ptrs(2) 5 108* leaving unused_ptrs(1). 5 109* 5 110* 85-01-15 Thanh Nguyen: Added the work_area_ptr and removed the last 5 111* unused_ptrs (1). 5 112* 5 113* 85-04-12 Thanh Nguyen: Added user_started_transaction and 5 114* non_shared_to_shared flags. Also added se_transaction_id and some more 5 115* spare ptrs, entries and reserved storages for future enhancement, since 5 116* we changed the saved_res_version from rslt0001 to rslt0002. 5 117* 5 118* 85-07-01 Thanh Nguyen: Added scopes_changed flag. This flag is set by 5 119* common routine of mrds_dsl_set_scope, reset by mrds_dsl_optimize and 5 120* mrds_dsl_gen_srch_prog when building of a new search_vars. 5 121**/ 5 122 5 123 5 124 /* this structure is based on the {unique_name}.mrds.dbcb segment 5 125* that constitutes the non-secure portion of the resultant model that is 5 126* created during the opening of a database. it contains variables that 5 127* are used during the runtime access of the database, and an area 5 128* for evaluation of requests. it points to four other 5 129* segments in the resultant model, {unique_name}.mrds.rdbi, the secure 5 130* portion of the resultant(see mdbm_rm_db_info.incl.pl1), 5 131* {unique_name}.mrds.select, an area for selection expression evaluation, 5 132* {unique_name}.mrds.curdat, and {unique_name}.mrds.stadat, two segments 5 133* used in the elimination of duplicate tuples during a retrieve. 5 134* the dbcb area holds the structure in mdbm_scope_info.incl.pl1 5 135* that is used when the database is using the file scope mechanism 5 136* for concurrency control over file readying. the segment overlayed via 5 137* mrds_dbc.incl.pl1 structure is pointed to and also handles concurrency control, 5 138* across database openings. the pointer to this dbcb structure is kept in a table 5 139* which associates database indexes(returned from a call to dsl_$open), with particular 5 140* opening instances of resultant models. (see mu_database_index routine) */ 5 141 5 142 dcl 1 dbcb aligned based (dbcb_ptr), /* DBCB -- non-secure portion */ 5 143 2 data like dbcb_data, 5 144 2 static_area area (sys_info$max_seg_size - fixed (rel (addr (dbcb.static_area)))); 5 145 5 146 dcl dbcb_ptr ptr; 5 147 5 148 declare 1 dbcb_data based, /* info part of dbcb, separated out so that 5 149* like references can avoid getting the area declaration */ 5 150 2 rdbi_ptr ptr, /* pointer to write protected mdbm_util_ info. */ 5 151 2 range_ptr ptr, /* ptr to range structure, or null */ 5 152 2 select_ptr ptr, /* ptr to select list, or null */ 5 153 2 sv_ptr ptr, /* pointer to search variables */ 5 154 2 so_ptr ptr, /* pointer to search operators */ 5 155 2 ti_ptr ptr, /* pointer to tuple info */ 5 156 2 lit_ptr ptr, /* pointer to the literal area, or null */ 5 157 2 current_ptr ptr, /* ptr to select list resulting from -current clause */ 5 158 2 ss_ptr ptr, /* ptr to select sets block if not simple s.e. */ 5 159 2 retr_info_ptr ptr, /* ptr to retrieve info area */ 5 160 2 trel_info_ptr ptr, /* ptr to retrieve info area */ 5 161 2 sti_ptr ptr, /* pointer to store info */ 5 162 2 dbc_ptr ptr, /* pointer to the data base control segment */ 5 163 2 sfi_ptr ptr, /* points to head of scalar function list */ 5 164 2 scope_ptr ptr, /* points to array of scope tuples */ 5 165 2 select_area_ptr ptr, /* ptr to area for current selection expression allocations */ 5 166 2 current_data_ptr ptr, /* ptr to one of 2 segments used by mrds_dsl_retrieve 5 167* for eliminating duplicate tuples. */ 5 168 2 static_data_ptr ptr, /* ptr to one of 2 segments used by mrds_dsl_retrieve 5 169* for eliminating duplicate tuples. */ 5 170 2 store_area_ptr ptr, /* temp storage area for dsl_$store */ 5 171 2 retrieve_area_ptr ptr, /* temp storage for dsl_$retrieve */ 5 172 2 modify_area_ptr ptr, /* temp storage area for dsl_$modify */ 5 173 2 delete_area_ptr ptr, /* temp storage area for dsl_$delete */ 5 174 2 def_temp_rel_area_ptr ptr, /* temp storage area for dsl_$define_temp_rel */ 5 175 2 pred_ptr ptr, /* Pointer to pred_array */ 5 176 2 store_vector_ptr ptr, /* Vector structure used during store operations */ 5 177 2 modify_vector_ptr ptr, /* Used during modifies */ 5 178 2 element_id_list_segment_ptr ptr, /* Points to the segment used to hold element_id_list structures */ 5 179 2 compiled_se_info_ptr ptr, /* points to the segment containing all info on compiled sexs */ 5 180 2 work_area_ptr ptr, /* Work area for encode/decode value allocations in mu_retrieve */ 5 181 2 se_info_ptr ptr, /* Points to se_info struct. Primarily for error reports */ 5 182 2 parser_work_area_ptr ptr, /* work area for parser */ 5 183 2 reserved_ptrs (4) ptr, /* Reserved for future use */ 5 184 2 another_flag bit (1) unal, /* on if predicate was -another */ 5 185 2 current_flag bit (1) unal, /* on if predicate was -current clause */ 5 186 2 dbc_incr bit (1) unal, /* on if dbc open mode has been incremented for this user */ 5 187 2 delete_flag bit (1) unal, /* On if search was called from mrds_dsl_sec_delete */ 5 188 2 dup_retain bit (1) unaligned, /* On if dup tuples allowed for retrieval */ 5 189 2 prev_select bit (1) unal, /* on if prev. select block processed in this s.e. */ 5 190 2 possible_op bit (1) unal, /* on of arith op. allowed */ 5 191 2 sel_clause bit (1) unal, /* on if currently in select clause */ 5 192 2 dsm_sw bit (1) unal, /* on if data base was opened via data submodel */ 5 193 2 val_rtrv bit (1) unal, /* if s.e. valid for retrieve */ 5 194 2 val_mod bit (1) unal, /* for modify */ 5 195 2 val_del bit (1) unal, /* for delete */ 5 196 2 val_dtr bit (1) unal, /* for define temp rel */ 5 197 2 transactions_needed bit (1) unal, /* On => transaction must be started or in progress does 5 198* not imply that the database is of type page_file */ 5 199 2 open_mode bit (3) unal, /* 0=>unknown, 1=>r, 2=>u, 3=>er, 4=>eu, >4=>bad */ 5 200 2 new_select_expr bit (1) unal, /* on => starting a new tid list management period */ 5 201 2 no_optimize bit (1) unal, /* On => no optimize */ 5 202 2 print_search_order bit (1) unal, /* On => print the search order */ 5 203 2 resultant_in_pdir bit (1) unal, /* On => Temp segments are in the process dir */ 5 204 2 res_already_made bit (1) unal, /* On => resultant has been made based on a saved copy */ 5 205 2 user_started_transaction bit (1) unal, /* On => user already started his own transaction. */ 5 206 2 non_shared_to_shared bit (1) unal, /* On => user changed the scope from non shared to shared 5 207* inside a sequence of -another selection expression. */ 5 208 2 scopes_changed bit (1) unal, /* On => scopes had been changed by set_scopes or delete_scopes */ 5 209 2 dont_check_txn_id bit (1) unal, /* On => cpmd needs same selection exp across multiple txns */ 5 210 2 reserved bit (10) unal, /* reserved for future use */ 5 211 2 nseq_sch fixed bin (35), /* no. tuples located via sequential search */ 5 212 2 nind_sch fixed bin (35), /* no. tuples located via index search */ 5 213 2 nhash_sch fixed bin (35), /* no. tuples located via hash search */ 5 214 2 nlk_sch fixed bin (35), /* no tuples located via link search */ 5 215 2 cur_lit_offset fixed bin (35), /* current bit offset in literal string */ 5 216 2 dbi fixed bin (35), /* database index for this opening */ 5 217 2 last_s_e_id_num fixed bin (35), /* identifying number for last selection expression seen */ 5 218 2 se_transaction_id bit (36) aligned, /* transaction id from beginning of select expression */ 5 219 2 last_store_rel_name char (32), /* Name of relation last used for store */ 5 220 2 cursor_ptrs_storage_ptr ptr, /* pointer to space where cursor ptrs are stored */ 5 221 2 cursor_storage_area_ptr ptr, /* pointer to area where the cursors are kept */ 5 222 2 reserved_words (10) fixed bin (35), /* Reserved for future use */ 5 223 2 relmgr_entries, /* relation manager entries */ 5 224 3 open entry (char (*), char (*), bit (36) aligned, fixed bin (35)), 5 225 3 close entry (bit (36) aligned, fixed bin (35)), 5 226 3 create_cursor entry (bit (36) aligned, ptr, ptr, fixed bin (35)), 5 227 3 destroy_cursor entry (ptr, ptr, fixed bin (35)), 5 228 3 set_scope entry (bit (36) aligned, bit (2) aligned, bit (2) aligned, fixed bin (35)), 5 229 3 delete_tuples_by_id entry (ptr, ptr, fixed bin (35), fixed bin (35)), 5 230 3 modify_tuples_by_id entry (ptr, ptr, ptr, fixed bin (35), fixed bin (35)), 5 231 3 get_tuple_by_id entry (ptr, bit (36) aligned, ptr, ptr, ptr, fixed bin (35)), 5 232 3 get_tuples_by_spec entry (ptr, ptr, ptr, ptr, ptr, fixed bin (35)), 5 233 3 get_tuple_id entry (ptr, ptr, ptr, ptr, fixed bin (35)), 5 234 3 put_tuple entry (ptr, ptr, bit (36) aligned, fixed bin (35)), 5 235 3 get_count entry (ptr, ptr, fixed bin (35), fixed bin (35)), 5 236 3 get_duplicate_key_count entry (ptr, bit (36) aligned, fixed bin (17), fixed bin (35), fixed bin (35)), 5 237 3 get_population entry (ptr, fixed bin (35), fixed bin (35)), 5 238 3 create_relation entry (char (*), char (*), ptr, ptr, bit (36) aligned, bit (36) aligned, fixed bin (35)), 5 239 3 create_index entry (bit (36) aligned, ptr, bit (36) aligned, fixed bin (17), bit (36) aligned, fixed bin (35)), 5 240 3 destroy_relation_by_path entry (char (*), char (*), fixed bin (35)), 5 241 3 reserved_entries (5) entry (), 5 242 2 access_costs, /* access costs for permute */ 5 243 3 total_primary_key_cost float bin, 5 244 3 access_cost float bin, 5 245 3 access_overhead float bin, 5 246 3 us_access_cost float bin, 5 247 3 os_access_cost float bin, 5 248 2 dbc_uid bit (36) aligned, /* uid of the segment containing the dbc structure */ 5 249 2 concurrency_on bit (1) unal, /* "1"b implies dmfile concurrency is being used */ 5 250 2 rollback_on bit (1) unal; /* "1"b iomplies before journaling is to be done */ 5 251 5 252 /* END mrds_dbcb.incl.pl1 */ 5 253 5 254 813 814 6 1 /* BEGIN mdbm_db_file_list.incl.pl1 -- odf, 8/21/78 */ 6 2 /* modified by Jim Gray -- 5/23/79, to add dbm_ptr to db_rdy, and fa_index to file_rdy */ 6 3 /* modified by Jim Gray -- June 1979, to add finish file structures */ 6 4 6 5 /* these structures are used as the parameter interface between 6 6* mrds_dsl_ready_file - mu_sec_make_res and 6 7* mrds_dsl_finish_file - mu_sec_unmake_res. */ 6 8 6 9 dcl 1 db_rdy based (dbrdy_ptr), /* ready file list header */ 6 10 2 dbi fixed bin (35), /* data base index */ 6 11 2 dbcb_ptr ptr, /* points to data base control block */ 6 12 2 db_model_ptr ptr, /* pointer to db_model for this db */ 6 13 2 frdy_ptr ptr; /* points to first in list of files to be readied */ 6 14 6 15 dcl 1 file_rdy based (frdy_ptr), /* files to be readied */ 6 16 2 next ptr, /* next file in list */ 6 17 2 name char (30), /* name of file */ 6 18 2 mode fixed bin, /* mode in which file is to be readied */ 6 19 2 file_array_index fixed bin, /* location in file array */ 6 20 2 file_readied bit (1) unal, /* on => we have readied this file */ 6 21 2 unused bit (35) unal ; /* for future use */ 6 22 6 23 6 24 dcl dbrdy_ptr ptr; 6 25 dcl frdy_ptr ptr; 6 26 6 27 dcl 1 db_fin based (dbfin_ptr), /* finish file list header */ 6 28 2 dbi fixed bin (35), /* data base index */ 6 29 2 dbcb_ptr ptr, /* points to data base control block */ 6 30 2 ffin_ptr ptr; /* points to first in list of files to be finished */ 6 31 6 32 dcl 1 file_fin based (ffin_ptr), /* files to be finished */ 6 33 2 next ptr, /* next file in list */ 6 34 2 name char (30), /* name of file */ 6 35 2 file_array_index fixed bin ; /* index of file name in resultant file array */ 6 36 6 37 6 38 dcl dbfin_ptr ptr; 6 39 dcl ffin_ptr ptr; 6 40 6 41 /* END mdbm_db_file_list.incl.pl1 */ 6 42 815 816 7 1 /* BEGIN mdbm_rel_att_array.incl.pl1 -- odf 8/21/78 */ 7 2 /* modified by Jim Gray - - June/July 1979 to add key/varying attr counts and comments 7 3* Modified by Jim Gray - - April 1980, to add submodel's total_view bit to rel_names. 7 4* Modified by Lindsey Spratt - - August 1980, to add security permission bits to rel/att_names. 7 5* Modified by Jim Gray - - 80-11-06, to change s_perm = append_tuple_perm, 7 6* d_perm = delete_tuple_perm, r_perm = status_perm, m_perm = unused_perm. 7 7* 7 8* 81-01-23 Jim Gray : added bit to att_names so that the resultant can 7 9* be build for partial view submodels, and know whether the last varying attr 7 10* is a character or bit string type, for determining the bit offset of end of tuple. 7 11* 7 12* 81-05-28 Jim Gray : removed structures for foreign key interface. 7 13* 7 14* 7 15* 7 16* NOTE: These structures are used as the parameters in the "mus_get_" routines 7 17* that are called by mu_sec_make_res, to return the users view of 7 18* either the model or submodel he has opened with. */ 7 19 7 20 dcl 1 rel_names based (rns_ptr), /* array of relations in a file to be readied */ 7 21 2 num fixed bin, /* nbr. of relations in this file */ 7 22 2 item (num_rels_init refer (rel_names.num)), 7 23 3 sm char (32), /* submodel name of relation */ 7 24 3 dm char (32), /* data model name */ 7 25 3 natts fixed bin, /* nbr. of attrs. in this relation */ 7 26 3 ri_ptr ptr, /* points to rel_info in file_model */ 7 27 3 total_view bit (1) unal, /* ON --> all attrs in model rel present */ 7 28 3 status_perm bit (1) unal, /* ON --> opener has permission to look at relation */ 7 29 3 append_tuple_perm bit (1) unal, /* ON --> opener has permission to store into this relation */ 7 30 3 delete_tuple_perm bit (1) unal, /* ON --> opener has permission to delete tuples */ 7 31 3 unused_perm bit (1) unal, /* unused perm */ 7 32 3 pad bit (31) unal ; /* for future use */ 7 33 7 34 dcl 1 att_names based (ans_ptr), /* array of attributes in a relation */ 7 35 2 num fixed bin, /* attributes in a relation */ 7 36 2 num_key_attrs fixed bin, /* number of key attributes in model/submodel relation */ 7 37 2 num_varying_attrs fixed bin, /* count of varying bit/char data type attrs */ 7 38 2 last_model_attr_char_var bit (1) unal, /* on => last attr in model view is char varying */ 7 39 2 mbz bit (35) unal, /* for future use */ 7 40 2 item (num_atts_init refer (att_names.num)), 7 41 3 sm char (32), /* submodel name */ 7 42 3 dm char (32), /* data model name */ 7 43 3 ai_ptr ptr, /* points to attr_info in file_model */ 7 44 3 di_ptr ptr, /* points to domain_info in file_model */ 7 45 3 rai_ptr ptr, /* points to attr info in resultant model */ 7 46 3 r_perm bit (1) unal, /* ON --> opener has permission to retrieve attribute */ 7 47 3 u_perm bit (1) unal, /* ON --> opener has permission to update attribute */ 7 48 3 pad bit (34) unal; /* future use */ 7 49 7 50 dcl num_rels_init fixed bin; 7 51 dcl num_atts_init fixed bin; 7 52 7 53 dcl rns_ptr ptr; 7 54 dcl ans_ptr ptr; 7 55 7 56 /* END mdbm_rel_att_array.incl.pl@–É‚\Ûî2®àý°¡‘r¶ ¶Ä@=Lÿÿÿÿ Sñ¹Ý>™ÿ&H‚ &Úz–É‚\Ò&–É‚aLhpzz¶Äar,Attendees –É‚aRyÓ.ŸzŒ¦’®6¶Äa–É‚\6® *@–É‚aÄGuest –É‚\˜¶*@À–É‚aZwick –É‚\ Multics –É‚\r&–É‚hKr'ºÚÚ¶ÄaÒTransactions –É‚hN£~ Ûî2® *’øø¶Äa–É‚\*@–É‚h¶Ä*@–É‚hÒ&–É‚jKr'º¶Äa.Proceedings.1 –É‚jN£~ Û ÍN’..¶Äa–É‚\*@–É‚j˜*@€–É‚ans. 9 31* 9 32**/ 9 33 9 34 9 35 /* 9 36* this structure is allocated in the static area of 9 37* mdbm_rm_db_info.incl.pl1 once for each attribute per relation in 9 38* a readied file. it in turn points to 9 39* mdbm_rm_domain_info.incl.pl1 for the attributes domain. the 9 40* rm_attr_info is pointed to by mdbm_rm_rel_info.incl.pl1. all 9 41* structures are in the rm_db_info area. the attribute data 9 42* position within a tuple as stored in the data file are kept in 9 43* this resultant model of the attribute. 9 44* */ 9 45 9 46 dcl 1 rm_attr_info aligned based (rai_ptr), /* resultant attr. info */ 9 47 2 name char (32), /* from submodel */ 9 48 2 model_name char (32), /* from model */ 9 49 2 key_attr bit (1) unal, /* if key attribute */ 9 50 2 index_attr bit (1) unal, /* if secondary index */ 9 51 2 read_perm bit (1) unal, /* user has retr. permission */ 9 52 2 modify_perm bit (1) unal, /* user has modify permission */ 9 53 2 mdbm_secured bit (1) unal, /* on => database secured */ 9 54 2 reserved bit (30) unal, /* for future use */ 9 55 2 index_id bit (36) aligned, /* index id if index_attr */ 9 56 2 defn_order fixed bin, /* relative order in which attr is defined in the view */ 9 57 2 key_order fixed bin, /* relative order defined in prim. key */ 9 58 2 bit_length fixed bin (35), /* length if fixed, max. len. if var. */ 9 59 2 domain_ptr ptr, /* to domain info */ 9 60 2 number_of_dups fixed bin (35), /* if the attribute is indexed this will 9 61* be the number of duplicate values, exact 9 62* for a page_file database, an estimate for a vfile type */ 9 63 2 model_defn_order fixed bin; /* relative order in which attr is defined in the model */ 9 64 9 65 dcl rai_ptr ptr int automatic init (null ()); 9 66 9 67 /* END mdbm_rm_attr_info.incl.pl1 */ 9 68 9 69 821 822 10 1 /* BEGIN mdbm_rm_rel_array.incl.pl1 -- jaw, 8/9/78 */ 10 2 10 3 /* WARNING 10 4* If the rm_rel_array structure is changed then the mrds_data_ 10 5* item saved_res_version MUST be incremented to invalidate all 10 6* existing saved resultants 10 7**/ 10 8 10 9 /* HISTORY: 10 10* 10 11* 81-05-28 Jim Gray : added model_name and file_id as part of 10 12* combining funtions of file_array and rel_array into one 10 13* structure. This will only allow 1 relation per file model now. 10 14* Also changed structure to allow more efficient searching 10 15* via and index builtin, rather than a programmed loop. 10 16* Search is now I = index(string(rm_rel_array.name), "!" || in_name) 10 17* with I = ((I - 1) / 33) + 1 to convert from a char to array index. 10 18* 10 19**/ 10 20 10 21 10 22 /* this structure is allocated in the static are of the structure 10 23* in mdbm_rm_db_info.incl.pl1, the secure portion of the database 10 24* resultant model upon opening the database. two copies are 10 25* allocated, one for temporary relations, initially empty, and one 10 26* for relations known to the opener, which has a length sufficient 10 27* for all relations known to the user, but whose names, etc. will 10 28* not be filled in until the file containing that particular 10 29* relation is readied. the rm_db_info structure contains a pointer 10 30* to the rel_arrays, and the array entries, when "readied", point 10 31* to the mdbm_rm_rel_info.incl.pl1 structures containing model 10 32* information about the relation, it's attributes, etc. */ 10 33 10 34 dcl 1 rm_rel_array aligned based (rmra_ptr), /* array of open relations */ 10 35 2 num_rels fixed bin, /* no. rels in db. */ 10 36 2 name (1:rm_num_rels_init refer (rm_rel_array.num_rels)) unal, 10 37 3 mark char (1) unal, /* separator character = "!" */ 10 38 3 submodel char (32) unal, /* name of relation is submodel view, model opening => model name */ 10 39 2 rel_data (rm_num_rels_init refer (rm_rel_array.num_rels)), 10 40 3 model_name char (30), /* name of relation in model */ 10 41 3 ri_ptr ptr unal ; /* pointer to rm_rel_info */ 10 42 10 43 dcl rmra_ptr ptr; 10 44 dcl rm_num_rels_init fixed bin; 10 45 10 46 /* END mdbm_rm_rel_array.incl.pl1 */ 10 47 10 48 823 824 11 1 /* BEGIN mdbm_rm_rel_info.incl.pl1 -- jaw, 11/16/78 */ 11 2 11 3 /* WARNING 11 4* If the rm_rel_info structure is changed then the mrds_data_ 11 5* item saved_res_version MUST be incremented to invalidate all 11 6* existing saved resultants 11 7**/ 11 8 11 9 /* HISTORY: 11 10* 11 11* Modified by Jim Gray - - May 1980, to include model number of 11 12* attributes, and varying attributes, so that partial view 11 13* submodels will have the info needed to properly set up the 11 14* varying length array headers in the tuple structure. 11 15* 11 16* Modified by Jim Gray - - 80-11-06, to rename r_perm = 11 17* status_perm, s_perm = append_tuple_perm, d_perm = 11 18* delete_tuple_perm, and make m_perm = unused_perm. 11 19* 11 20* 81-01-23 Jim Gray : added bit to indicate whether the last model 11 21* view attribute was varying character or bit, since a partial view 11 22* submodel will not have this information in the resultant, and it 11 23* is needed for determining the new tuple length in mus_mod_ubtup, 11 24* since with exact length storage of varying length attributes, 11 25* each tuple can be a different length, which is can only be 11 26* determined by examining the tuple itself. 11 27* 11 28* 81-01-29 Jim Gray : added curent tuple count, to provide for 11 29* interface to allow temp rel population to be known, and to 11 30* provide a more efficient means of finding an approx. current perm 11 31* relation population. 11 32* 11 33* 81-05-28 Jim Gray : removed structure elements referring to 11 34* blocked files, foreign keys, and ids procedures. Also set number 11 35* of files per rel to a constant of 1. 11 36* 11 37* 81-05-28 Jim Gray : combined data from rm_file_info into this 11 38* structure so that only one structure per relation is needed. 11 39* 11 40* 81-07-02 Jim Gray : added total_key and dup_key vfile statistics 11 41* counts. Also added number of operations count since last 11 42* statistics update, and a time since the statistics were last 11 43* updated. 11 44* 11 45* 81-07-06 Jim Gray : added a per selection expression update 11 46* identifier so that small relations could be updated on a per S.E. 11 47* basis 11 48* 11 49* 82-04-21 R. Lackey : Added number_selected (ri_niocbs_init refer (rm_rel_info.niocbs)) fixed bin (35) 11 50* to end of structure TR 12205 (Suggestion). 11 51* 11 52* 82-08-19 D. Woodka : Removed rm_rel_info.max_data_len field for 11 53* the DMS conversion. 11 54* 11 55* 82-08-30 Davids: added the opening_id element and removed the iocb 11 56* array and the niocb element for DMS conversion. Also removed the 11 57* number_selected array (and ri_niocbs_init) since subsets are not 11 58* going to be used. 11 59* 11 60* 82-09-20 Mike Kubicar : changed rm_rel_info.rel_id to bit (36) aligned 11 61* so that it can be used with relation manager. Also added 11 62* rm_rel_info.primary_key_index_id for relation manager. 11 63* 11 64* 82-09-22 Mike Kubicar : Removed the, now useless, fields var_attr_ptrs, 11 65* nvar_atts, model_nvar_atts. 11 66* 11 67* 82-09-24 Davids: Removed current_key_count and current_dup_key_count 11 68* since the duplicate key count for each secondary index is now being 11 69* kept in the attr_info structure and key_count was only needed to 11 70* help in calculating the average selectivity of each index which 11 71* can now be gotten directly from each index's dup key count. Also 11 72* removed the file_id element since it is no longer needed for 11 73* anything. 11 74* 11 75* 82-09-27 Mike Kubicar : removed file_id_len for the same reason file_id 11 76* was removed. 11 77* 11 78* 82-11-05 Mike Kubicar : added a pointer to an id_list structure to be 11 79* used when retrieving tuples from this relation. 11 80* 11 81* 83-04-06 Davids: Added the scope_flags_ptr which points to the scope_flags structure 11 82* for the relation. Note that this structure is part of the resultant NOT 11 83* part of the db.control structure. The scopes are duplicated in the resultant 11 84* to reduce contention for the db.control structure. Note also that the pointer 11 85* will always point to a scope_flags structure even if no scopes have been 11 86* set on the relation, the structure is allocated when the db is opened. 11 87**/ 11 88 11 89 11 90 /* DESCRIPTION: 11 91* 11 92* This structure is allocated in the area part of the structure in 11 93* mdbm_rm_db_info.incl.pl1 as part of the resultant model created 11 94* at open time for a database. There will be one of these 11 95* rm_rel_info structures for each relation appearing in the 11 96* database view (there may be less than the total in the database 11 97* for a submodel openings). There will also be one for each 11 98* temporary relation currently defined for that opening. 11 99* 11 100* The structure in mdbm_rm_rel_array.incl.pl1 contains pointers to 11 101* all rm_rel_info structures allocated. It is used for searching 11 102* for the appropriate structure. This array is pointed to by 11 103* rm_db_info. There are two arrays, one for perm rels, one for temp 11 104* rels. 11 105* 11 106* The rm_rel_info structure points to the 11 107* mdbm_rm_attr_info.incl.pl1 structures, one for each attribute 11 108* appearing in this view of the relation. Each of these in turn 11 109* point to a mdbm_rm_domain_info.incl.pl1 structure for the domain 11 110* info for each attr. 11 111* 11 112* Most of the other information here deals with specifics of the 11 113* relation's logical definition, such as key and secondary index 11 114* attribute inidicators, security permissions, and tuple physical 11 115* construction details. 11 116* 11 117**/ 11 118 11 119 dcl 1 rm_rel_info aligned based (rmri_ptr), /* relation information */ 11 120 2 name char (32), /* from submodel */ 11 121 2 model_name char (30), /* from model */ 11 122 2 rel_id bit (36) aligned, /* unique id. */ 11 123 2 retrieve bit (1) unal, /* operations allowed by this view */ 11 124 2 modify bit (1) unal, 11 125 2 delete bit (1) unal, 11 126 2 store bit (1) unal, 11 127 2 total_key bit (1) unal, /* on if view includes full primary key */ 11 128 2 indexed bit (1) unal, /* on if exists sec. index */ 11 129 2 mdbm_secured bit (1) unal, /* on if mdbm must check security */ 11 130 2 status_perm bit (1) unal, /* if user has status. perm. */ 11 131 2 append_tuple_perm bit (1) unal, /* if user has store perm. */ 11 132 2 delete_tuple_perm bit (1) unal, /* if user has del. perm. */ 11 133 2 unused_perm bit (1) unal, /* for future use. */ 11 134 2 last_model_attr_char_var bit (1) unal, /* on => last model varying attr is char */ 11 135 2 reserved bit (24) unal, /* for future use */ 11 136 2 num_attr fixed bin, /* total no. of attr. in rel. */ 11 137 2 model_num_attr fixed bin, /* total attrs in model relation */ 11 138 2 nkey_attr fixed bin, /* no. of key attr. */ 11 139 2 model_nkey_attr fixed bin, /* total number of keys in model */ 11 140 2 primary_key_index_id bit (36) aligned, /* Index id of relation's primary key */ 11 141 2 nsec_inds fixed bin, /* no. sec. indexes */ 11 142 2 max_key_len fixed bin (35), /* max length (chars) of primary key */ 11 143 2 current_tuple_population fixed bin (35), /* last known total tuple count for this relation */ 11 144 2 last_statistics_update_count fixed bin, /* number of operations's, since this rels stats were updated */ 11 145 2 last_statistics_update_time fixed bin (71),/* last time this rels stats were updated */ 11 146 2 last_statistics_update_s_e_ref_num fixed bin (35), /* last select expr ID that updated this rels stats */ 11 147 2 ready_mode fixed bin, /* 1 => r, 2 => mr, 3 => u, 4 => l, 5 => sr, 6 => su */ 11 148 2 file_type fixed bin, /* 1 => unblocked, 2 => blocked, 3 => temporary */ 11 149 2 tuple_id_len fixed bin, /* no. bits in local tuple id */ 11 150 2 opening_id bit (36) aligned, /* relation manager opening is */ 11 151 2 key_attr_ptrs (nkey_attr_init refer (rm_rel_info.nkey_attr)) ptr, /* ptrs to key attr. */ 11 152 2 attr_ptrs (natts_init refer (rm_rel_info.num_attr)) ptr, /* ptrs to all attr. */ 11 153 2 id_list_ptr ptr, /* Id list for retrieves from the relation */ 11 154 2 scope_flags_ptr ptr; /* pointer to the scope_flags structure for the rel */ 11 155 11 156 dcl rmri_ptr ptr; 11 157 dcl (nkey_attr_init, 11 158 natts_init, 11 159 nvar_atts_init) fixed bin; 11 160 11 161 /* END mdbm_rm_rel_info.incl.pl1 */ 11 162 11 163 825 826 12 1 /* BEGIN mdbm_descriptor.incl.pl1 -- jaw 5/31/78 */ 12 2 /* modified by Jim Gray - - Nov. 1979, to change type from fixed bin(5) to 12 3* unsigned fixed bin(6), so new packed decimal data types could be handled. 12 4* also the duplicate mrds_descriptor.incl.pl1 was eliminated. */ 12 5 12 6 dcl 1 descriptor based (desc_ptr), /* map of Multics descriptor */ 12 7 2 version bit (1) unal, /* DBM handles vers. 1 only */ 12 8 2 type unsigned fixed bin (6) unal, /* data type */ 12 9 2 packed bit (1) unal, /* on if data item is packed */ 12 10 2 number_dims bit (4) unal, /* dimensions */ 12 11 2 size, /* size for string data */ 12 12 3 scale bit (12) unal, /* scale for num. data */ 12 13 3 precision bit (12) unal, /* prec. for num. data */ 12 14 2 array_info (num_dims), 12 15 3 lower_bound fixed bin (35), /* lower bound of dimension */ 12 16 3 upper_bound fixed bin (35), /* upper bound of dimension */ 12 17 3 multiplier fixed bin (35); /* element separation */ 12 18 12 19 dcl desc_ptr ptr; 12 20 dcl num_dims fixed bin init (0) ; /* more useful form of number_dims */ 12 21 12 22 /* END mdbm_descriptor.incl.pl1 */ 12 23 12 24 827 828 13 1 /* BEGIN mdbm_scope_info.incl.pl1 -- odf 8/8/78 */ 13 2 13 3 /* WARNING 13 4* If the scope_info or scope_flags structure is changed then the 13 5* mrds_data_ item saved_res_version MUST be incremented to invalidate 13 6* all existing saved resultants 13 7**/ 13 8 13 9 /* Modified by Jim Gray - - 80-11-17, to add back store/delete/modify permissions */ 13 10 13 11 /* 80-12-10 Jim Gray : change name of store to append_tuple, delete to delete_tuple, 13 12* modify to modify_attr, retrieve to read_attr, remvoe update, put level 4 13 13* qualifiers for permit/prevent modes and to put pads in standard format */ 13 14 13 15 /* 80-12-11 Jim Gray : added submodel version of file/rel name for convenience */ 13 16 13 17 /* 80-12-22 Jim Gray : added like referenced structure so linus_scope_data.incl 13 18* could make use of it for compatibility. */ 13 19 13 20 /* 81-1-11 Jim Gray : added touched bit to scope_flags, so that 13 21* the fact that null scope has been set can be displayed */ 13 22 13 23 /* 85-04-14 Thanh Nguyen: Made scope_flags to be aligned so we could access the 13 24* prevent flags from any pointer which directly pointed to scope_flags itself 13 25* (i.e rm_rel_info.scope_flags_ptr). */ 13 26 13 27 /* this structure is to be allocated in the mrds_dbcb.incl.pl1 static area, 13 28* and is used to maintain the scope mechanism for file access. 13 29* It contains the scope permit/prevent operations that this user 13 30* has set in his view for this opening instance. */ 13 31 13 32 dcl 1 scope_info aligned based (scope_ptr), /* array of scope tuples for this user */ 13 33 2 mbz1 bit (144), /* Reserved for future use */ 13 34 2 nfiles fixed bin, /* Number of scope tuples in user's scope */ 13 35 2 active_scopes fixed bin, /* number of scopes currently active for a given user */ 13 36 2 scope (max_file_init refer (scope_info.nfiles)), /* defines user's scope of access to files */ 13 37 3 name char (30) aligned, /* filename */ 13 38 3 sm_name char (32), /* name of file(rel) in submodel */ 13 39 3 flags like scope_flags ; 13 40 13 41 13 42 declare 1 scope_flags aligned based, /* common layout of scope flag bits */ 13 43 2 permits, /* modes to permit this user */ 13 44 3 read_attr bit (1) unal, /* read_attr access to this file in scope */ 13 45 3 append_tuple bit (1) unal, /* append_tuple concnrrency permission */ 13 46 3 delete_tuple bit (1) unal, /* delete_tuple concurrency permission on rel */ 13 47 3 modify_attr bit (1) unal, /* modify_attr concurrency permission */ 13 48 3 mbz2 bit (10) unal, /* for expansion of permit ops */ 13 49 2 prevents, /* modes to be denyed to other users */ 13 50 3 read_attr bit (1) unal, /* on if user has prevent on read_attr for this file */ 13 51 3 append_tuple bit (1) unal, /* prevent of append_tuple concurrency */ 13 52 3 delete_tuple bit (1) unal, /* prevent of delete_tuple concurrency */ 13 53 3 modify_attr bit (1) unal, /* prevent of modify_attr concurrency */ 13 54 3 mbz3 bit (10) unal, /* for future prevent concurrency modes */ 13 55 2 touched bit (1) unal, /* on => scope set for this relation */ 13 56 2 mbz4 bit (7) unal ; /* for future flags */ 13 57 13 58 dcl max_file_init fixed bin; /* nbr. of files in data base */ 13 59 dcl scope_ptr ptr init (null ()); /* points to scope_info array */ 13 60 dcl scope_rdy bit (6) unal init ("000011"b) int static options (constant); /* scope file ready modes (5 or 6) */ 13 61 dcl scope_rdy_array (6) bit (1) unal based; /* array format of scope_rdy string */ 13 62 13 63 /* END mdbm_scope_info.incl.pl1 */ 829 830 14 1 /* BEGIN INCLUDE FILE mrds_res_attr_info.incl.pl1 */ 14 2 14 3 14 4 /****^ HISTORY COMMENTS: 14 5* 1) change(86-05-14,Dupuis), approve(86-08-05,MCR7491), audit(86-08-08,Blair), 14 6* install(86-08-15,MR12.0-1127): 14 7* Created by Al Dupuis to resolve a problem where the "rdbi" segment was 14 8* overflowing. Previously mrds was allocating a "rm_attr_info" structure for 14 9* each attribute in each relation. In certain cases (phx20301, mrds #154) 14 10* with very large databases, this resulted in thousands of structures being 14 11* allocated. This new include keeps track of "rm_attr_info" structures and 14 12* stops duplicates from being allocated, bringing the allocation counts down 14 13* from the thousands to the hundreds. 14 14* END HISTORY COMMENTS */ 14 15 14 16 dcl 1 resultant_attributes_info aligned based (resultant_attributes_info_ptr), 14 17 2 number_of_attributes fixed bin, 14 18 2 current_number_of_attributes fixed bin, 14 19 2 attributes (rai_init_number_of_attributes refer (resultant_attributes_info.number_of_attributes)), 14 20 3 name char (32) unaligned, 14 21 3 value_ptr ptr; 14 22 dcl rai_init_number_of_attributes fixed bin; 14 23 dcl resultant_attributes_info_ptr ptr; 14 24 14 25 /* END INCLUDE FILE mrds_res_attr_info.incl.pl1 */ 831 832 end mu_sec_make_res; 833 SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/01/88 1314.3 mu_sec_make_res.pl1 >special_ldd>install>MR12.2-1073>mu_sec_make_res.pl1 805 1 10/14/83 1609.1 dm_id_list.incl.pl1 >ldd>include>dm_id_list.incl.pl1 807 2 10/17/86 1404.3 mdbm_db_model.incl.pl1 >ldd>include>mdbm_db_model.incl.pl1 809 3 10/17/86 1404.5 mdbm_file_model.incl.pl1 >ldd>include>mdbm_file_model.incl.pl1 811 4 08/01/88 1310.7 mdbm_rm_db_info.incl.pl1 >special_ldd>install>MR12.2-1073>mdbm_rm_db_info.incl.pl1 813 5 08/01/88 1300.0 mrds_dbcb.incl.pl1 >special_ldd>install>MR12.2-1073>mrds_dbcb.incl.pl1 815 6 10/14/83 1608.6 mdbm_db_file_list.incl.pl1 >ldd>include>mdbm_db_file_list.incl.pl1 817 7 10/14/83 1608.9 mdbm_rel_att_array.incl.pl1 >ldd>include>mdbm_rel_att_array.incl.pl1 819 8 10/14/83 1609.1 mdbm_rm_domain_info.incl.pl1 >ldd>include>mdbm_rm_domain_info.incl.pl1 821 9 10/14/83 1609.1 mdbm_rm_attr_info.incl.pl1 >ldd>include>mdbm_rm_attr_info.incl.pl1 823 10 10/14/83 1609.1 mdbm_rm_rel_array.incl.pl1 >ldd>include>mdbm_rm_rel_array.incl.pl1 825 11 10/14/83 1609.1 mdbm_rm_rel_info.incl.pl1 >ldd>include>mdbm_rm_rel_info.incl.pl1 827 12 10/14/83 1608.6 mdbm_descriptor.incl.pl1 >ldd>include>mdbm_descriptor.incl.pl1 829 13 04/18/85 1628.1 mdbm_scope_info.incl.pl1 >ldd>include>mdbm_scope_info.incl.pl1 831 14 08/15/86 1715.1 mrds_res_attr_info.incl.pl1 >ldd>include>mrds_res_attr_info.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. BLANK 000126 automatic char(1) initial packed unaligned dcl 792 set ref 357 358 365 792* ID_LIST_VERSION_1 constant fixed bin(17,0) initial dcl 1-23 ref 649 LOAD 000122 automatic fixed bin(17,0) initial dcl 788 set ref 594 597 788* LOAD_MODE 000116 automatic fixed bin(17,0) initial dcl 784 set ref 784* NEVER_READIED 000120 automatic bit(36) initial packed unaligned dcl 786 set ref 786* NULL_OFFSET 000107 automatic bit(18) initial packed unaligned dcl 764 set ref 455 460 465 764* OFF 000110 automatic bit(1) initial packed unaligned dcl 774 set ref 352 359 425 473 500 524 603 613 633 774* ON 000121 automatic bit(1) initial packed unaligned dcl 787 set ref 429 431 518 601 787* SCOPE_MODES 000117 automatic fixed bin(17,0) initial dcl 785 set ref 311 785* SCOPE_UPDATE 000124 automatic fixed bin(17,0) initial dcl 790 set ref 595 790* UNBLOCKED 000115 automatic fixed bin(17,0) initial dcl 783 set ref 783* UPDATE 000123 automatic fixed bin(17,0) initial dcl 789 set ref 595 789* active_scopes 5 based fixed bin(17,0) level 2 dcl 13-32 set ref 354* addr builtin function dcl 756 ref 370 490 496 726 726 ai_ptr 000166 automatic pointer dcl 3-209 in procedure "make_res" set ref 489* 493 494 495 501 503 504 505 ai_ptr 24 based pointer array level 3 in structure "att_names" dcl 7-34 in procedure "make_res" ref 489 ans_ptr 000202 automatic pointer dcl 7-54 set ref 381* 388 394 421 489 492 497 498 585 586 587 612 673 append_tuple_perm 21(08) based bit(1) level 2 in structure "rm_rel_info" packed packed unaligned dcl 11-119 in procedure "make_res" set ref 607* append_tuple_perm 26(02) based bit(1) array level 3 in structure "rel_names" packed packed unaligned dcl 7-20 in procedure "make_res" ref 607 arg_submodel_iocb_ptr parameter pointer dcl 761 ref 24 24 248 att_index 000105 automatic fixed bin(17,0) dcl 746 set ref 388* 394* 421 489 492 497 498 502 att_names based structure level 1 unaligned dcl 7-34 attr_info based structure level 1 dcl 3-192 attr_ptrs based pointer array level 2 dcl 11-119 set ref 652 674* attributes 2 based structure array level 2 dcl 14-16 base_pointer parameter pointer dcl 714 ref 699 718 bit_length 24 based fixed bin(35,0) level 2 in structure "rm_attr_info" dcl 9-46 in procedure "make_res" set ref 505* bit_length 14 based fixed bin(35,0) level 2 in structure "attr_info" dcl 3-192 in procedure "make_res" ref 505 caller_name 000000 constant char(19) initial packed unaligned dcl 776 set ref 284* 726* ceil builtin function dcl 756 ref 619 check_path_ptr 15 based bit(18) level 2 packed packed unaligned dcl 2-125 set ref 455 456* ck_proc 30 based bit(1) level 2 packed packed unaligned dcl 8-35 set ref 453* 458* ck_proc_entry 14 based entry variable level 2 dcl 8-35 set ref 456* continue 000111 automatic char(1) initial packed unaligned dcl 778 set ref 284* 778* current_number_of_attributes 1 based fixed bin(17,0) level 2 dcl 14-16 set ref 512 519 553 566* 569* 569 571 572 current_tuple_population 31 based fixed bin(35,0) level 2 dcl 11-119 set ref 620* cv_entry_ 000026 constant entry external dcl 796 ref 719 data based structure level 2 in structure "dbcb" dcl 5-142 in procedure "make_res" data based structure level 2 in structure "rm_db_info" dcl 4-86 in procedure "make_res" db_desc 11 based bit(36) level 2 in structure "domain_info" dcl 2-125 in procedure "make_res" ref 443 db_desc 10 based bit(36) level 2 in structure "rm_domain_info" dcl 8-35 in procedure "make_res" set ref 443* 496 db_model_ptr 4 based pointer level 2 dcl 6-9 ref 261 db_path 2 based char(168) level 3 dcl 4-86 ref 267 273 273 278 284 db_rdy based structure level 1 unaligned dcl 6-9 dbcb based structure level 1 dcl 5-142 dbcb_data based structure level 1 unaligned dcl 5-148 dbcb_ptr 000172 automatic pointer dcl 5-146 in procedure "make_res" set ref 259* 260 333 343 343 348 350 381 559 564 dbcb_ptr 2 based pointer level 2 in structure "db_rdy" dcl 6-9 in procedure "make_res" ref 259 dbm_ptr 000152 automatic pointer dcl 2-106 set ref 261* 295 381* dbrdy_ptr 000174 automatic pointer dcl 6-24 set ref 257* 259 261 decd_path_ptr 16(18) based bit(18) level 2 packed packed unaligned dcl 2-125 set ref 465 466* decd_proc 30(02) based bit(1) level 2 packed packed unaligned dcl 8-35 set ref 453* 468* decd_proc_entry 24 based entry variable level 2 dcl 8-35 set ref 466* defn_order 12 based fixed bin(17,0) level 2 in structure "attr_info" packed packed unaligned dcl 3-192 in procedure "make_res" ref 503 defn_order 22 based fixed bin(17,0) level 2 in structure "rm_attr_info" dcl 9-46 in procedure "make_res" set ref 502* delete 21(02) based bit(1) level 2 packed packed unaligned dcl 11-119 set ref 599* delete_tuple_perm 26(03) based bit(1) array level 3 in structure "rel_names" packed packed unaligned dcl 7-20 in procedure "make_res" ref 609 delete_tuple_perm 21(09) based bit(1) level 2 in structure "rm_rel_info" packed packed unaligned dcl 11-119 in procedure "make_res" set ref 609* descriptor based structure level 1 unaligned dcl 12-6 di_ptr 000156 automatic pointer dcl 2-155 in procedure "make_res" set ref 421* 431 443 444 447 455 456 456* 460 461 461* 465 466 466* di_ptr 26 based pointer array level 3 in structure "att_names" dcl 7-34 in procedure "make_res" ref 421 domain_info based structure level 1 dcl 2-125 domain_list_ptr 132 based pointer level 3 dcl 4-86 set ref 426 439 440* domain_ptr 26 based pointer level 2 dcl 9-46 set ref 506* dsm_sw 106(08) based bit(1) level 3 packed packed unaligned dcl 5-142 set ref 333* 381* empty builtin function dcl 757 ref 329 encd_path_ptr 16 based bit(18) level 2 packed packed unaligned dcl 2-125 set ref 460 461* encd_proc 30(01) based bit(1) level 2 packed packed unaligned dcl 8-35 set ref 453* 463* encd_proc_entry 20 based entry variable level 2 dcl 8-35 set ref 461* entire_view 000144 automatic bit(1) packed unaligned dcl 798 set ref 591* 597 599 680 entry 52 based char(32) level 2 packed packed unaligned dcl 2-172 set ref 719 726* error_code parameter fixed bin(35,0) dcl 744 set ref 24 24 252* 267* 272 273* 276 276* 278* 284* 294* 302 311 333* 381* 384 388 402 717 719* 723 724 725* 726 726 error_source 000127 automatic varying char(48) dcl 795 set ref 450* 726* error_table_$moderr 000030 external static fixed bin(35,0) dcl 799 ref 272 276 fa_index 000100 automatic fixed bin(17,0) dcl 746 set ref 262* 267 278 284 333* 404 fi_ptr 22(27) based bit(18) level 2 in structure "file_model" packed packed unaligned dcl 3-40 in procedure "make_res" ref 295 fi_ptr 000154 automatic pointer dcl 2-119 in procedure "make_res" set ref 295* file_array_index 13 based fixed bin(17,0) level 2 dcl 6-15 ref 262 file_model based structure level 1 dcl 3-40 file_rdy based structure level 1 unaligned dcl 6-15 file_type 40 based fixed bin(17,0) level 2 in structure "rm_rel_info" dcl 11-119 in procedure "make_res" set ref 635* file_type 14 based fixed bin(17,0) level 2 in structure "file_model" packed packed unaligned dcl 3-40 in procedure "make_res" ref 635 flags 26 based structure array level 3 dcl 13-32 set ref 359* 370 fm_ptr 000162 automatic pointer dcl 3-108 set ref 267* 278* 284 295 333* 635 636 found 000264 automatic bit(1) packed unaligned dcl 423 set ref 425* 427 429* 431* frdy_ptr 000176 automatic pointer dcl 6-25 set ref 256* 262 311 594 595 595 597 634 hcs_$initiate 000014 constant entry external dcl 766 ref 267 278 i 000101 automatic fixed bin(17,0) dcl 746 set ref 356* 357 358 359 359 359 359 359 359 359 359 359 359 359 359 359 359* 365* 365* 368 369 370 651* 652 652* 671* 673 674* id 10 based bit(36) level 2 in structure "rel_info" dcl 3-126 in procedure "make_res" ref 631 id 2 based fixed bin(17,0) array level 2 in structure "id_list" dcl 1-16 in procedure "make_res" set ref 652* id_list based structure level 1 dcl 1-16 set ref 648 id_list_ptr 000146 automatic pointer initial dcl 1-21 in procedure "make_res" set ref 1-21* 648* 649 650 652 655 id_list_ptr based pointer level 2 in structure "rm_rel_info" dcl 11-119 in procedure "make_res" set ref 655* il_number_of_ids 000150 automatic fixed bin(17,0) initial dcl 1-22 set ref 1-22* 647* 648 648 650 index_attr 10(01) based bit(1) level 2 in structure "attr_info" packed packed unaligned dcl 3-192 in procedure "make_res" ref 495 index_attr 20(01) based bit(1) level 2 in structure "rm_attr_info" packed packed unaligned dcl 9-46 in procedure "make_res" set ref 495* 510 689 index_id 21 based bit(36) level 2 in structure "rm_attr_info" dcl 9-46 in procedure "make_res" set ref 501* index_id 11 based bit(36) level 2 in structure "attr_info" dcl 3-192 in procedure "make_res" ref 501 indexed 21(05) based bit(1) level 2 in structure "rm_rel_info" packed packed unaligned dcl 11-119 in procedure "make_res" set ref 604* indexed 11(04) based bit(1) level 2 in structure "rel_info" packed packed unaligned dcl 3-126 in procedure "make_res" ref 604 info_ptr 000112 automatic pointer initial dcl 779 set ref 284* 779* insecure_dbrdy_ptr parameter pointer dcl 738 ref 24 24 257 insecure_frdy_ptr parameter pointer dcl 738 ref 24 24 256 irai_based_rm_attr_info based structure level 1 unaligned dcl 482 ref 524 irai_based_rm_attr_info_ptr 000274 automatic pointer dcl 483 set ref 523* 524 533 irai_havent_found_one_yet 000276 automatic bit(1) dcl 484 set ref 518* 519 524* 528 irai_loop 000277 automatic fixed bin(17,0) dcl 485 set ref 519* 521 523* irai_rm_attr_info 000300 automatic structure level 1 unaligned dcl 486 set ref 490 541 item 2 based structure array level 2 in structure "rel_names" unaligned dcl 7-20 in procedure "make_res" item 4 based structure array level 2 in structure "att_names" unaligned dcl 7-34 in procedure "make_res" j 000102 automatic fixed bin(17,0) dcl 746 set ref 669* 680* 682* 682 683 k 000103 automatic fixed bin(17,0) dcl 746 set ref 670* key_attr 10 based bit(1) level 2 in structure "attr_info" packed packed unaligned dcl 3-192 in procedure "make_res" ref 494 key_attr 20 based bit(1) level 2 in structure "rm_attr_info" packed packed unaligned dcl 9-46 in procedure "make_res" set ref 494* 676 key_attr_ptrs 44 based pointer array level 2 dcl 11-119 set ref 683* key_order 23 based fixed bin(17,0) level 2 in structure "rm_attr_info" dcl 9-46 in procedure "make_res" set ref 504* 680 key_order 12(18) based fixed bin(17,0) level 2 in structure "attr_info" packed packed unaligned dcl 3-192 in procedure "make_res" ref 504 last_model_attr_char_var 3 based bit(1) level 2 in structure "att_names" packed packed unaligned dcl 7-34 in procedure "make_res" ref 612 last_model_attr_char_var 21(11) based bit(1) level 2 in structure "rm_rel_info" packed packed unaligned dcl 11-119 in procedure "make_res" set ref 612* last_statistics_update_count 32 based fixed bin(17,0) level 2 dcl 11-119 set ref 622* last_statistics_update_s_e_ref_num 36 based fixed bin(35,0) level 2 dcl 11-119 set ref 624* last_statistics_update_time 34 based fixed bin(71,0) level 2 dcl 11-119 set ref 623* max_file_init 000220 automatic fixed bin(17,0) dcl 13-58 set ref 347* 348 348 353 max_key_len 30 based fixed bin(35,0) level 2 in structure "rm_rel_info" dcl 11-119 in procedure "make_res" set ref 619* max_key_len 21 based fixed bin(35,0) level 2 in structure "rel_info" dcl 3-126 in procedure "make_res" ref 619 mbz1 based bit(144) level 2 dcl 13-32 set ref 352* mdbm_secured 20(04) based bit(1) level 2 in structure "rm_attr_info" packed packed unaligned dcl 9-46 in procedure "make_res" set ref 499* mdbm_secured 126 based bit(1) level 3 in structure "rm_db_info" packed packed unaligned dcl 4-86 in procedure "make_res" ref 499 605 mdbm_secured 21(06) based bit(1) level 2 in structure "rm_rel_info" packed packed unaligned dcl 11-119 in procedure "make_res" set ref 605* mode 12 based fixed bin(17,0) level 2 dcl 6-15 ref 311 594 595 595 597 634 model_defn_order 31 based fixed bin(17,0) level 2 dcl 9-46 set ref 503* 652 model_name based char(30) array level 3 in structure "rm_rel_array" dcl 10-34 in procedure "make_res" ref 267 278 284 model_name 10 based char(30) level 2 in structure "rm_rel_info" dcl 11-119 in procedure "make_res" set ref 368 593* model_name 10 based char(32) level 2 in structure "rm_attr_info" dcl 9-46 in procedure "make_res" set ref 493* model_nkey_attr 25 based fixed bin(17,0) level 2 dcl 11-119 set ref 617* model_num_attr 23 based fixed bin(17,0) level 2 dcl 11-119 set ref 615* modify 21(01) based bit(1) level 2 packed packed unaligned dcl 11-119 set ref 595* 597 599 modify_perm 20(03) based bit(1) level 2 packed packed unaligned dcl 9-46 set ref 498* mrds_data_$number_of_resultant_attributes 000032 external static fixed bin(35,0) dcl 800 ref 558 565 mrds_dm_authorization$set_needed_access 000036 constant entry external dcl 802 ref 273 mrds_error_$bad_domain_proc 000034 external static fixed bin(35,0) dcl 801 ref 725 mu_data_length 000024 constant entry external dcl 793 ref 445 mus_get_att_names 000020 constant entry external dcl 772 ref 381 mus_get_rel_names 000016 constant entry external dcl 770 ref 333 name based char(32) level 2 in structure "rm_rel_info" dcl 11-119 in procedure "make_res" set ref 369 592* name based char(32) level 2 in structure "domain_info" dcl 2-125 in procedure "make_res" ref 431 447 name 6 based char(30) array level 3 in structure "scope_info" dcl 13-32 in procedure "make_res" set ref 357* 365 368* name based char(32) level 2 in structure "attr_info" dcl 3-192 in procedure "make_res" ref 493 name 2 based char(32) array level 3 in structure "resultant_attributes_info" packed packed unaligned dcl 14-16 in procedure "make_res" set ref 521 572* name based char(32) level 2 in structure "rel_info" dcl 3-126 in procedure "make_res" ref 593 name based char(32) level 2 in structure "rm_domain_info" dcl 8-35 in procedure "make_res" set ref 431 447* 450 name based char(32) level 2 in structure "rm_attr_info" dcl 9-46 in procedure "make_res" set ref 492* 521 572 natts_init 000215 automatic fixed bin(17,0) dcl 11-157 set ref 587* 589 589 614 next_domain_ptr 32 based pointer level 2 dcl 8-35 set ref 433 439* nfiles 4 based fixed bin(17,0) level 2 dcl 13-32 set ref 348* 353* 356 365 nkey_attr 24 based fixed bin(17,0) level 2 dcl 11-119 set ref 370 589* 601 616* 637 652 655 674 nkey_attr_init 000214 automatic fixed bin(17,0) dcl 11-157 set ref 586* 589 589 616 nsec_inds 27 based fixed bin(17,0) level 2 dcl 11-119 set ref 618* 689* 689 null builtin function dcl 756 ref 284 779 1-21 8-51 9-65 13-59 343 429 437 637 719 719 num based fixed bin(17,0) level 2 dcl 7-34 ref 388 587 num_attr 12 based fixed bin(17,0) level 2 in structure "rel_info" packed packed unaligned dcl 3-126 in procedure "make_res" ref 615 num_attr 22 based fixed bin(17,0) level 2 in structure "rm_rel_info" dcl 11-119 in procedure "make_res" set ref 370 589* 614* 637 647 651 655 671 num_dims 000217 automatic fixed bin(17,0) initial dcl 12-20 set ref 250* 12-20* num_key_attrs 14 based fixed bin(17,0) level 2 in structure "rel_info" packed packed unaligned dcl 3-126 in procedure "make_res" ref 601 617 num_key_attrs 1 based fixed bin(17,0) level 2 in structure "att_names" dcl 7-34 in procedure "make_res" ref 586 num_rels based fixed bin(17,0) level 2 dcl 10-34 ref 267 278 284 347 408 num_varying_attrs 2 based fixed bin(17,0) level 2 dcl 7-34 ref 585 number_of_attributes based fixed bin(17,0) level 2 dcl 14-16 set ref 553 557 559* 561* 562 562 564 565* number_of_dups 30 based fixed bin(35,0) level 2 dcl 9-46 set ref 507* number_of_ids 1 based fixed bin(17,0) level 2 dcl 1-16 set ref 648* 650* nvar_atts_init 000216 automatic fixed bin(17,0) dcl 11-157 set ref 585* output_entry 000402 automatic entry variable dcl 711 set ref 719* 734 pad 30(03) based bit(33) level 2 packed packed unaligned dcl 8-35 set ref 473* parameter_area based area dcl 782 set ref 329* path based char(168) level 2 packed packed unaligned dcl 2-172 set ref 719 726* path_entry based structure level 1 packed packed unaligned dcl 2-172 path_entry_offset parameter bit(18) packed unaligned dcl 713 ref 699 718 path_entry_ptr 000160 automatic pointer dcl 2-177 set ref 718* 719 719 726 726 pointer builtin function dcl 757 ref 295 718 primary_key_index_id 26 based bit(36) level 2 in structure "rm_rel_info" dcl 11-119 in procedure "make_res" set ref 626* 630* primary_key_index_id 25 based bit(36) level 2 in structure "rel_info" dcl 3-126 in procedure "make_res" ref 625 630 proc_type parameter char packed unaligned dcl 712 set ref 699 726* r_perm 32 based bit(1) array level 3 packed packed unaligned dcl 7-34 ref 497 ra_ptr 134 based pointer level 3 dcl 4-86 ref 263 rai_init_number_of_attributes 000224 automatic fixed bin(17,0) dcl 14-22 set ref 558* 559 559 rai_ptr 000206 automatic pointer initial dcl 9-65 in procedure "make_res" set ref 9-65* 394 490* 492 493 494 495 497 498 499 500 501 502 503 504 505 506 507 510 521 524 533* 540* 541 571 572 673* 674 676 680 683 689 rai_ptr 30 based pointer array level 3 in structure "att_names" dcl 7-34 in procedure "make_res" set ref 394* 673 rdbi_ptr based pointer level 3 in structure "dbcb" dcl 5-142 in procedure "make_res" ref 260 rdbi_ptr 000170 automatic pointer dcl 4-90 in procedure "make_res" set ref 260* 263 267 273 273 278 284 426 438 439 440 499 540 589 605 648 rdi_ptr 000204 automatic pointer initial dcl 8-51 set ref 8-51* 426* 429 431 433* 433 437 438* 439 440 443 444 445 445 447 450 453 453 453 456 458 461 463 466 468 473 496 506 read_perm 20(02) based bit(1) level 2 packed packed unaligned dcl 9-46 set ref 497* ready_mode 37 based fixed bin(17,0) level 2 dcl 11-119 set ref 634* rel_data based structure array level 2 dcl 10-34 rel_id 20 based bit(36) level 2 dcl 11-119 set ref 627* 631* rel_index 000104 automatic fixed bin(17,0) dcl 746 set ref 306* 379 381* 591 592 606 607 609 611 rel_info based structure level 1 dcl 3-126 rel_names based structure level 1 unaligned dcl 7-20 reported_error 000406 automatic fixed bin(35,0) dcl 715 set ref 724* 726* reserved 20(05) based bit(30) level 2 in structure "rm_attr_info" packed packed unaligned dcl 9-46 in procedure "make_res" set ref 500* reserved 21(12) based bit(24) level 2 in structure "rm_rel_info" packed packed unaligned dcl 11-119 in procedure "make_res" set ref 613* 633* resultant_attributes_info based structure level 1 dcl 14-16 set ref 559 562* resultant_attributes_info_ptr 000226 automatic pointer dcl 14-23 set ref 251* 512 519 521 523 553 553 556 557 559* 561 562 563 565 566 569 569 571 571 572 572 resultant_attributes_info_ptr_parm parameter pointer dcl 743 set ref 24 24 251 563* retrieve 21 based bit(1) level 2 packed packed unaligned dcl 11-119 set ref 594* return_value 000114 automatic fixed bin(35,0) initial dcl 780 set ref 284* 726* 780* ri_ptr 000164 automatic pointer dcl 3-185 in procedure "make_res" set ref 379* 593 601 604 615 617 619 625 630 631 ri_ptr based pointer array level 3 in structure "rm_rel_array" packed packed unaligned dcl 10-34 in procedure "make_res" set ref 408* ri_ptr 24 based pointer array level 3 in structure "rel_names" dcl 7-20 in procedure "make_res" ref 379 rm_attr_info based structure level 1 dcl 9-46 set ref 524 540 541* rm_db_info based structure level 1 dcl 4-86 rm_db_info_data based structure level 1 unaligned dcl 4-92 rm_domain_info based structure level 1 dcl 8-35 set ref 438 rm_rel_array based structure level 1 dcl 10-34 rm_rel_index 000106 automatic fixed bin(17,0) dcl 746 set ref 404* 408 rm_rel_info based structure level 1 dcl 11-119 set ref 589 rmra_ptr 000210 automatic pointer dcl 10-43 set ref 263* 267 278 284 333* 347 408 rmri_ptr 000212 automatic pointer dcl 11-156 set ref 368 369 370 408 589* 592 593 594 595 597 597 599 599 601 601 603 604 605 606 607 609 611 612 613 614 615 616 617 618 619 620 622 623 624 626 627 630 631 633 634 635 636 637 647 651 652 655 671 674 683 689 689 rns_ptr 000200 automatic pointer dcl 7-53 set ref 333* 379 381* 591 592 606 607 609 611 rtrim builtin function dcl 757 ref 267 273 273 278 284 284 593 scope 6 based structure array level 2 dcl 13-32 scope_flags based structure level 1 dcl 13-42 scope_flags_ptr based pointer level 2 dcl 11-119 set ref 370* 637* scope_info based structure level 1 dcl 13-32 set ref 348 scope_ptr 34 based pointer level 3 in structure "dbcb" dcl 5-142 in procedure "make_res" set ref 343 343 350* scope_ptr 000222 automatic pointer initial dcl 13-59 in procedure "make_res" set ref 13-59* 343* 348* 350 352 353 354 356 357 358 359 365 365 368 369 370 sm 4 based char(32) array level 3 in structure "att_names" packed packed unaligned dcl 7-34 in procedure "make_res" ref 492 sm 2 based char(32) array level 3 in structure "rel_names" packed packed unaligned dcl 7-20 in procedure "make_res" ref 592 sm_name 16 based char(32) array level 3 dcl 13-32 set ref 358* 369* static_area 142 based area level 2 in structure "rm_db_info" dcl 4-86 in procedure "make_res" ref 438 540 589 648 static_area 306 based area level 2 in structure "dbcb" dcl 5-142 in procedure "make_res" ref 348 559 564 status_perm 21(07) based bit(1) level 2 in structure "rm_rel_info" packed packed unaligned dcl 11-119 in procedure "make_res" set ref 606* status_perm 26(01) based bit(1) array level 3 in structure "rel_names" packed packed unaligned dcl 7-20 in procedure "make_res" ref 606 store 21(03) based bit(1) level 2 packed packed unaligned dcl 11-119 set ref 597* sub_err_ 000022 constant entry external dcl 775 ref 284 726 submodel_iocb_ptr 000012 external static pointer dcl 762 set ref 248* sys_info$max_seg_size 000010 external static fixed bin(17,0) dcl 759 ref 329 temp_area_ptr parameter pointer dcl 781 set ref 24 24 329 333* 381* total_key 21(04) based bit(1) level 2 packed packed unaligned dcl 11-119 set ref 601* 603* total_view 26 based bit(1) array level 3 packed packed unaligned dcl 7-20 ref 591 tuple_id_len 16 based fixed bin(17,0) level 2 in structure "file_model" packed packed unaligned dcl 3-40 in procedure "make_res" ref 636 tuple_id_len 41 based fixed bin(17,0) level 2 in structure "rm_rel_info" dcl 11-119 in procedure "make_res" set ref 636* type 0(01) based fixed bin(6,0) level 2 in structure "descriptor" packed packed unsigned unaligned dcl 12-6 in procedure "make_res" ref 496 type 000125 automatic fixed bin(17,0) dcl 791 in procedure "make_res" set ref 496* u_perm 32(01) based bit(1) array level 3 packed packed unaligned dcl 7-34 ref 498 unspec builtin function dcl 757 set ref 524 524 541* 541 562* 562 unused_perm 21(10) based bit(1) level 2 in structure "rm_rel_info" packed packed unaligned dcl 11-119 in procedure "make_res" set ref 611* unused_perm 26(04) based bit(1) array level 3 in structure "rel_names" packed packed unaligned dcl 7-20 in procedure "make_res" ref 611 urai_rai_info based structure level 1 unaligned dcl 549 ref 562 564 urai_rai_info_ptr 000350 automatic pointer dcl 550 set ref 556* 562 564 urai_save_number_of_attributes 000352 automatic fixed bin(17,0) dcl 551 set ref 557* 558 561 565 566 user_bit_len 12 based fixed bin(17,0) level 2 dcl 8-35 set ref 445* user_desc 12 based bit(36) level 2 in structure "domain_info" dcl 2-125 in procedure "make_res" ref 444 user_desc 11 based bit(36) level 2 in structure "rm_domain_info" dcl 8-35 in procedure "make_res" set ref 444* 445 value_ptr 12 based pointer array level 3 dcl 14-16 set ref 523 571* version based fixed bin(35,0) level 2 dcl 1-16 set ref 649* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. al_ptr automatic pointer dcl 3-345 alloc_length internal static fixed bin(35,0) dcl 2-222 atd based char packed unaligned dcl 3-109 atd_len automatic fixed bin(17,0) dcl 3-111 atd_ptr automatic pointer dcl 3-110 attr_list based structure level 1 dcl 3-341 changer based structure level 1 packed packed unaligned dcl 2-251 changer_ptr automatic pointer dcl 2-256 child_link_info based structure level 1 dcl 3-283 cli_ptr automatic pointer dcl 3-329 cna_ptr automatic pointer dcl 3-115 comp_no_array based structure level 1 packed packed unaligned dcl 3-112 constant based structure level 1 unaligned dcl 2-216 constant_ptr automatic pointer dcl 2-220 db_fin based structure level 1 unaligned dcl 6-27 db_model based structure level 1 dcl 2-72 dbfin_ptr automatic pointer dcl 6-38 desc_ptr automatic pointer dcl 12-19 dp_ptr automatic pointer dcl 3-356 dup_prev based structure level 1 dcl 3-353 ffin_ptr automatic pointer dcl 6-39 file_fin based structure level 1 unaligned dcl 6-32 file_info based structure level 1 dcl 2-113 fixed builtin function dcl 756 message_str based structure level 1 packed packed unaligned dcl 2-259 message_str_len automatic fixed bin(17,0) dcl 2-269 message_str_ptr automatic pointer dcl 2-267 ncomp_init automatic fixed bin(17,0) dcl 3-116 num_atts_init automatic fixed bin(17,0) dcl 7-51 num_rels_init automatic fixed bin(17,0) dcl 7-50 parent_link_info based structure level 1 dcl 3-223 pli_ptr automatic pointer dcl 3-268 rel builtin function dcl 757 rm_num_rels_init automatic fixed bin(17,0) dcl 10-44 sc_ptr automatic pointer dcl 3-365 scope_rdy internal static bit(6) initial packed unaligned dcl 13-60 scope_rdy_array based bit(1) array packed unaligned dcl 13-61 select_chain based structure level 1 dcl 3-357 sk_ptr automatic pointer dcl 3-352 sort_key based structure level 1 dcl 3-346 stack_item based structure level 1 unaligned dcl 2-206 stack_item_ptr automatic pointer dcl 2-212 ua_ptr automatic pointer dcl 2-165 unreferenced_attribute based structure level 1 dcl 2-159 version_status based structure level 1 packed packed unaligned dcl 2-232 version_status_ptr automatic pointer dcl 2-246 NAMES DECLARED BY EXPLICIT CONTEXT. allocate_an_rm_attr_info_structure 002051 constant entry internal dcl 538 ref 510 514 530 build_entry 002626 constant entry internal dcl 699 ref 456 461 466 common 000217 constant label dcl 248 set ref 28 fill_rel_ptr_arrays 002550 constant entry internal dcl 659 ref 643 get_area_and_rel_init 000776 constant entry internal dcl 320 ref 299 init_rm_attr_info 001662 constant entry internal dcl 479 ref 392 init_rm_domain_info 001370 constant entry internal dcl 416 ref 390 init_rm_rel_info 002164 constant entry internal dcl 580 ref 406 make_res 000177 constant entry external dcl 24 mu_sec_make_res 000210 constant entry external dcl 24 process_relation 001261 constant entry internal dcl 374 ref 307 set_up_scope 001035 constant entry internal dcl 338 ref 311 update_resultant_attributes_info 002064 constant entry internal dcl 547 ref 515 531 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3312 3352 3101 3322 Length 4062 3101 40 473 211 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME make_res 568 external procedure is an external procedure. get_area_and_rel_init internal procedure shares stack frame of external procedure make_res. set_up_scope internal procedure shares stack frame of external procedure make_res. process_relation internal procedure shares stack frame of external procedure make_res. init_rm_domain_info internal procedure shares stack frame of external procedure make_res. init_rm_attr_info internal procedure shares stack frame of external procedure make_res. allocate_an_rm_attr_info_structure internal procedure shares stack frame of external procedure make_res. update_resultant_attributes_info internal procedure shares stack frame of external procedure make_res. init_rm_rel_info internal procedure shares stack frame of external procedure make_res. fill_rel_ptr_arrays internal procedure shares stack frame of external procedure make_res. build_entry internal procedure shares stack frame of external procedure make_res. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME make_res 000100 fa_index make_res 000101 i make_res 000102 j make_res 000103 k make_res 000104 rel_index make_res 000105 att_index make_res 000106 rm_rel_index make_res 000107 NULL_OFFSET make_res 000110 OFF make_res 000111 continue make_res 000112 info_ptr make_res 000114 return_value make_res 000115 UNBLOCKED make_res 000116 LOAD_MODE make_res 000117 SCOPE_MODES make_res 000120 NEVER_READIED make_res 000121 ON make_res 000122 LOAD make_res 000123 UPDATE make_res 000124 SCOPE_UPDATE make_res 000125 type make_res 000126 BLANK make_res 000127 error_source make_res 000144 entire_view make_res 000146 id_list_ptr make_res 000150 il_number_of_ids make_res 000152 dbm_ptr make_res 000154 fi_ptr make_res 000156 di_ptr make_res 000160 path_entry_ptr make_res 000162 fm_ptr make_res 000164 ri_ptr make_res 000166 ai_ptr make_res 000170 rdbi_ptr make_res 000172 dbcb_ptr make_res 000174 dbrdy_ptr make_res 000176 frdy_ptr make_res 000200 rns_ptr make_res 000202 ans_ptr make_res 000204 rdi_ptr make_res 000206 rai_ptr make_res 000210 rmra_ptr make_res 000212 rmri_ptr make_res 000214 nkey_attr_init make_res 000215 natts_init make_res 000216 nvar_atts_init make_res 000217 num_dims make_res 000220 max_file_init make_res 000222 scope_ptr make_res 000224 rai_init_number_of_attributes make_res 000226 resultant_attributes_info_ptr make_res 000264 found init_rm_domain_info 000274 irai_based_rm_attr_info_ptr init_rm_attr_info 000276 irai_havent_found_one_yet init_rm_attr_info 000277 irai_loop init_rm_attr_info 000300 irai_rm_attr_info init_rm_attr_info 000350 urai_rai_info_ptr update_resultant_attributes_info 000352 urai_save_number_of_attributes update_resultant_attributes_info 000402 output_entry build_entry 000406 reported_error build_entry THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as r_ne_as alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out return_mac shorten_stack ext_entry ceil_fx2 divide_fx1 op_alloc_ op_freen_ op_empty_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cv_entry_ hcs_$initiate mrds_dm_authorization$set_needed_access mu_data_length mus_get_att_names mus_get_rel_names sub_err_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$moderr mrds_data_$number_of_resultant_attributes mrds_error_$bad_domain_proc submodel_iocb_ptr sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 764 000125 774 000127 778 000130 779 000132 780 000134 783 000135 784 000137 785 000141 786 000143 787 000144 788 000146 789 000150 790 000152 792 000154 1 21 000156 1 22 000160 8 51 000162 9 65 000164 12 20 000165 13 59 000166 24 000171 28 000216 248 000217 250 000224 251 000225 252 000230 256 000231 257 000234 259 000237 260 000241 261 000243 262 000245 263 000250 267 000253 272 000365 273 000373 276 000430 278 000440 282 000553 284 000554 292 000743 294 000744 295 000746 299 000756 302 000757 306 000762 307 000764 311 000765 318 000775 320 000776 329 000777 333 001005 336 001034 338 001035 343 001036 347 001046 348 001050 350 001062 352 001064 354 001067 356 001070 357 001077 358 001105 359 001112 360 001204 365 001206 366 001226 368 001230 369 001240 370 001245 372 001260 374 001261 379 001262 381 001267 384 001316 388 001321 390 001334 392 001335 394 001336 396 001342 402 001344 404 001347 406 001351 408 001352 414 001367 416 001370 421 001371 425 001376 426 001400 427 001403 429 001406 431 001415 433 001426 435 001430 437 001431 438 001435 439 001443 440 001446 443 001450 444 001453 445 001455 447 001472 450 001476 453 001512 455 001521 456 001525 458 001553 460 001556 461 001563 463 001611 465 001614 466 001621 468 001651 473 001654 477 001661 479 001662 489 001663 490 001670 492 001672 493 001677 494 001702 495 001706 496 001712 497 001720 498 001726 499 001733 500 001741 501 001746 502 001751 503 001753 504 001756 505 001762 506 001764 507 001766 510 001767 512 001774 514 001777 515 002000 516 002001 518 002002 519 002004 521 002015 523 002026 524 002031 527 002037 528 002041 530 002043 531 002044 532 002045 533 002046 536 002050 538 002051 540 002052 541 002060 543 002063 547 002064 553 002065 556 002072 557 002073 558 002075 559 002102 561 002114 562 002116 563 002133 564 002135 565 002142 566 002147 569 002152 571 002153 572 002157 574 002163 580 002164 585 002165 586 002170 587 002172 589 002174 591 002215 592 002223 593 002230 594 002245 595 002254 597 002266 599 002303 601 002313 603 002327 604 002334 605 002341 606 002347 607 002354 609 002361 611 002366 612 002373 613 002401 615 002404 616 002407 617 002411 618 002413 619 002414 620 002425 622 002426 623 002427 624 002431 625 002432 626 002435 627 002436 628 002440 630 002441 631 002442 634 002444 635 002447 636 002453 637 002456 643 002470 647 002471 648 002474 649 002505 651 002507 652 002517 654 002533 655 002535 657 002547 659 002550 669 002551 670 002552 671 002554 673 002565 674 002571 676 002602 680 002606 682 002613 683 002614 689 002617 692 002623 694 002625 699 002626 717 002637 718 002642 719 002654 723 002721 724 002725 725 002726 726 002731 734 003060