1 ;"Build GDM Schema Directory
3 Contains directory related parser action routines and
4 the routines that create the schema directory. Directory
5 data structure definitions are contained in GDM-DIR.MUD
38 DIR-ENTITY-FUNC-EXTENT
107 DIR-VISIBLE-CONSTRAINTS
112 ;"The following atoms are tokens that are referenced in here. They
113 must be included here so ==? comparisons will work. They were moved from gdm-parser"
155 <USE "GDM-DIR" "GDM-UTIL" "PARSE-DEFINITIONS" "DEMO">
156 <USE "EM" "BUILD-VIEW" "BUILD-CONSTRAINTS">
160 ;"CREATE-DB performs context analysis of a data base schema definition
161 command. If no errors are detected, the new entity types defined
162 in the schema are added to the ENTITY-TYPE-TABLE."
164 <DEFINE CREATE-DB (DB "AUX" (VID <+ 1 <LENGTH ,VIEW-TAB>>)
165 (EV <IVECTOR <LENGTH <3 .DB>><>>)
166 (EID-BASE <LENGTH ,ET-TABLE>)
171 #DECL ((DB EV FV) VECTOR
172 (I VID EID-BASE DBMS-ID) FIX)
174 ;"Check that database name matches name on END statement"
177 <COND (<NOT <==? <1 .DB> <2 .DB>>>
178 <ERR "Name on END statement does not match database name">
181 ;"Check that database name is unique"
186 <COND (<==? <1 .DB> <V-NAME .V>>
187 <ERR <STRING "Database name "
189 " is already defined.">>
193 ;"Check that database name matches an existing DBMS name and save its
201 <COND (<==? <DB-SCHEMA-NAME .D> <1 .DB>>
205 <ERR <STRING "No local DBMS defined for "
206 <SPNAME <1 .DB>> ".">>
209 ;"Build entity type table for database"
215 <COND (<FIND-ETID .EV <1 .E>>
216 <ERR <STRING "Entity type "
218 " is defined more than once.">>
221 <PUT .EV .I <CHTYPE [<1 .E>
224 <CHTYPE () ETID-LIST>
225 <CHTYPE () ETID-LIST>
226 <CHTYPE () ETID-LIST>
227 <CREATE-FUNCTIONS <1 .E>
228 <2 .E> .DBMS-ID .ACT>
229 <CREATE-DEFAULT-EREP .DBMS-ID>
230 ET-LOCAL-SCHEMA] ENTITY-TYPE>>>
233 ;"Make a pass through all functions of type F-ENTITY and replace
234 entity type name with ETID. Also set '# chars to print' default
235 for all functions of type F-STRING."
238 <FUNCTION (E "AUX" (FL <ET-FUNCTIONS .E>))
239 #DECL ((E) ENTITY-TYPE (FL) VECTOR)
240 <PUT <ET-MAP-INFO .E> ,E-SPELLING <SPNAME <ET-NAME .E>>>
242 <FUNCTION (F "AUX" X)
243 #DECL ((F) ENTITY-FUNC (X) <OR FIX FALSE>)
244 <PUT <F-MAP-INFO .F> ,F-SPELLING <SPNAME <F-NAME .F>>>
245 <COND (<==? <F-TYPE .F> F-ENTITY>
246 <SET X <FIND-ETID .EV <F-ETID .F>>>
250 <ERR <STRING "Entity type "
252 " is undefined.">>)>)>
253 <COND (<==? <F-TYPE .F> F-STRING>
254 <PUT <F-MAP-INFO .F> ,F-MIN-CHR <F-MIN .F>>
255 <PUT <F-MAP-INFO .F> ,F-MAX-CHR <F-MAX .F>>
256 <PUT <F-MAP-INFO .F> ,F-CONV-CHARS <F-MAX .F>>)>>
260 ;"Process mapping information"
263 <FUNCTION (E "AUX" ETID EMAP)
264 #DECL ((E) LIST (ETID) <OR FIX FALSE> (EMAP) E-PHY-REP)
265 <COND (<NOT <SET ETID <FIND-ETID .EV <1 .E>>>>
266 <ERR <STRING "Entity name " <SPNAME <1 .E>>
269 <SET ETID <- .ETID .EID-BASE>> ;"Setup index into EV"
270 <SET EMAP <ET-MAP-INFO <.ETID .EV>>>
271 <SET FV <ET-FUNCTIONS <.ETID .EV>>>
272 <COND ( <NOT <FIND KEY <2 .E> 1>>
273 <ERR "Entity " <SPNAME <ET-NAME <.ETID .EV>>> " does not have any keys.">
278 <COND (<==? <1 .M> FOUND>
279 <PUT .EMAP ,E-CONTEXT <2 .M>>)>
280 <COND (<==? <1 .M> SYS-EP>
284 <COND ( <==? <1 .OPTN> SETNAME>
285 <PUT .EMAP ,E-SYS-SET <2 .OPTN>>)
286 ( <==? <1 .OPTN> ACCESS>
287 <PUT .EMAP ,E-SYS-EP-AP-ONLY T>)
288 ( <==? <1 .OPTN> KEYS>
289 <PUT .EMAP ,E-SYS-EP-KEYS <2 .OPTN>>)>
293 <PUT .EMAP ,E-SYS-EP T>)>
294 <COND (<==? <1 .M> SPELLED>
295 <PUT .EMAP ,E-SPELLING <2 .M>>)>
296 <COND (<==? <1 .M> AREA>
297 <PUT .EMAP ,E-AREAS <2 .M>>)>
298 <COND (<==? <1 .M> OWNED>
300 <FUNCTION (OWNER "AUX" X)
301 #DECL ((OWNER) IDENTIFIER (X) <OR FALSE FIX>)
302 <COND (<SET X <FIND-ETID .EV <ID-NAME .OWNER>>>
303 <PUT .EMAP ,E-OWNERS <CHTYPE (.X !<E-OWNERS .EMAP>) ETID-LIST>>)
305 <ERR <STRING "Entity type "
306 <SPNAME <ID-NAME .OWNER>>
310 <COND (<==? <1 .M> PRED-OPTN>
314 <COND (<==? <1 .M> ITER-DOMAIN>
315 <PUT .EMAP ,E-ITER-PRED <2 .M>>)>
316 <COND (<==? <1 .M> QUANT-DOMAIN>
317 <PUT .EMAP ,E-QUANT-PRED <2 .M>>)>
318 <COND (<==? <1 .M> NO-QUANT>
319 <PUT .EMAP ,E-NO-QUANT T>)>
322 <COND ( <==? <1 .M> KEY>
324 <FUNCTION (ID "AUX" X)
325 #DECL((ID) LIST (X) <OR FIX FALSE>)
326 <COND (<SET X <FIND-FID .FV <ID-NAME <1 .ID>>>>
330 <SPNAME <ID-NAME <1 .ID>>>
331 " is not defined in entity type "
332 <SPNAME <ET-NAME <.ETID .EV>>>>
335 <PUT .EMAP ,E-KEY <CHTYPE <2 .M> FCNID-LIST>>)>
339 <FUNCTION (F "AUX" FID FMAP)
340 #DECL ((F) LIST (FID) <OR FIX FALSE> (FMAP) F-PHY-REP)
341 <COND (<NOT <SET FID <FIND-FID .FV <1 .F>>>>
342 <ERR <STRING "Function " <SPNAME <1 .F>>
343 " is not defined in entity type "
344 <SPNAME <ET-NAME <.ETID .EV>>>>>
346 <SET FMAP <F-MAP-INFO <.FID .FV>>>
348 ;"If this is really an integer string then setup correct defaults."
353 <COND (<==? <1 .FM> INT-STR>
355 <DB-DEF-STR-REP <DB-OPTIONS <.DBMS-ID ,DBMS-TAB>>>>
357 <DB-DEF-STR-BITS <DB-OPTIONS <.DBMS-ID ,DBMS-TAB>>>>
358 <PUT .FMAP ,F-CONV-CHARS
365 <COND (<==? <1 .FM> ACCESS>
366 <PUT .FMAP ,F-AP-SPELLING <F-SPELLING .FMAP>>
368 <FUNCTION (OPTN "AUX" X)
369 #DECL ((OPTN) LIST (X) <OR FIX FALSE>)
370 <COND (<==? <1 .OPTN> UNIQUE>
371 <PUT .FMAP ,F-AP-UNIQUE T>)
372 (<==? <1 .OPTN> SPELLED>
373 <PUT .FMAP ,F-AP-SPELLING <2 .OPTN>>)
374 (<==? <1 .OPTN> SELECTS>
375 <COND (<SET X <FIND-ETID .EV <ID-NAME <2 .OPTN>>>>
376 <PUT .FMAP ,F-AP-SELECTS .X>)
379 <SPNAME <ID-NAME <2 .OPTN>>>
382 (<==? <1 .OPTN> WITH>
384 <FUNCTION (ID "AUX" X)
385 #DECL((ID) LIST (X) <OR FIX FALSE>)
386 <COND (<SET X <FIND-FID .FV <ID-NAME <1 .ID>>>>
390 <SPNAME <ID-NAME <1 .ID>>>
391 " is not defined in entity type "
392 <SPNAME <ET-NAME <.ETID .EV>>>>
395 <PUT .FMAP ,F-AP-CO-FCNS <CHTYPE <2 .OPTN> FCNID-LIST>>)>
398 <COND (<==? <2 .FM> EQUALITY>
399 <PUT .EMAP ,E-AP-EQ-COUNT
400 <+ <E-AP-EQ-COUNT .EMAP> 1>>
401 <PUT .FMAP ,F-AP-EQ T>)>
402 <COND (<==? <2 .FM> INEQUALITY>
403 <PUT .FMAP ,F-AP-NQ T>)>
404 <COND (<==? <2 .FM> RANGE>
405 <PUT .FMAP ,F-AP-RANGE T>)>)>
406 <COND (<==? <1 .FM> SPELLED>
407 <PUT .FMAP ,F-SPELLING <2 .FM>>)>
408 <COND (<==? <1 .FM> SET>
409 <PUT .FMAP ,F-SET T>)>
410 <COND (<==? <1 .FM> REPEAT>
411 <PUT .FMAP ,F-REPEAT-GRP T>)>
412 <COND (<==? <1 .FM> INT-STR>
413 <PUT .FMAP ,F-INT-STR T>
414 <PUT .FMAP ,F-MIN-CHR <2 .FM>>
415 <PUT .FMAP ,F-MAX-CHR <3 .FM>>)>
416 <COND (<==? <1 .FM> PRINTING>
417 <PUT .FMAP ,F-CONV-CHARS <2 .FM>>)>
418 <COND (<==? <1 .FM> BIT>
419 <PUT .FMAP ,F-BITS <2 .FM>>
420 <COND (<==? <3 .FM> ASCII>
421 <PUT .FMAP ,F-REP DB-ASCII>)>
422 <COND (<==? <3 .FM> BCD>
423 <PUT .FMAP ,F-REP DB-BCD>)>
424 <COND (<==? <3 .FM> ONES>
425 <PUT .FMAP ,F-REP DB-ONES-COMP>)>
426 <COND (<==? <3 .FM> TWOS>
427 <PUT .FMAP ,F-REP DB-TWOS-COMP>)>)>
428 <COND (<==? <1 .FM> AOPS>
429 <PUT .FMAP ,F-ARITH-OPS <2 .FM>>)>
430 <COND (<==? <1 .FM> ROPS>
431 <PUT .FMAP ,F-REL-OPS <2 .FM>>)>
437 ;"Add entity type constraints"
439 <COND ( <NOT <BUILD-CONSTRAINTS .EV <5 .DB>>>
442 ;"Now add structures to schema directory"
444 <PUT ,SCHEMA-DIR ,VIEW-TABLE
445 [!<VIEW-TABLE ,SCHEMA-DIR> <CHTYPE [<1 .DB>] VIEW>]>
446 <SETG VIEW-TAB <VIEW-TABLE ,SCHEMA-DIR>>
447 <PUT ,SCHEMA-DIR ,ENTITY-TYPE-TABLE
448 [!<ENTITY-TYPE-TABLE ,SCHEMA-DIR> !.EV]>
449 <SETG ET-TABLE <ENTITY-TYPE-TABLE ,SCHEMA-DIR>>
450 <SETG LEN-ET-TABLE <LENGTH ,ET-TABLE>>
451 <MSG <STRING "Database " <SPNAME <1 .DB>> " added to global schema.">>
455 ;"CREATE-DBMS performs context analysis of the local DBMS specification
456 command. If no errors are found a new entry will be created in the
459 <DEFINE CREATE-DBMS (DBMS-ENTRY)
460 #DECL ((DBMS-ENTRY) DBMS)
461 <COND (<NOT <MAPF <> ;"Make one pass to insure unique DBMS name"
464 <COND (<==? <DB-SCHEMA-NAME .DBMS-ENTRY>
466 <ERR <STRING "Local DBMS " <SPNAME <DB-SCHEMA-NAME .E>> " is already defined.">>
468 <DBMS-TABLE ,SCHEMA-DIR>>>
469 <PUT ,SCHEMA-DIR ,DBMS-TABLE [!<DBMS-TABLE ,SCHEMA-DIR>
471 <SETG DBMS-TAB <DBMS-TABLE ,SCHEMA-DIR>>
472 <MSG <STRING "DBMS " <SPNAME <DB-SCHEMA-NAME .DBMS-ENTRY>>
473 " added to global schema.">>)>>
475 ;"CREATE-DEFAULT-EREP creates a default physical entity type
476 representation. DBMS-ID is the index into the DBMS-TABLE."
478 <DEFINE CREATE-DEFAULT-EREP (DBMS-ID)
479 #DECL ((DBMS-ID) FIX)
480 <CHTYPE [.DBMS-ID <> <> <CHTYPE () ETID-LIST> <> 0 <> <>
481 <> <> <> <> <> <> <>] E-PHY-REP>>
487 ;"CREATE-DEFAULT-FREP creates a default physical function
488 representation. FUNC-TYPE is the function type (string, integer...)
489 and DBMS-ID is the index into the DBMS-TABLE"
491 <DEFINE CREATE-DEFAULT-FREP (FUNC-TYPE DBMS-ID
492 "AUX" (O <DB-OPTIONS <.DBMS-ID ,DBMS-TAB>>))
493 #DECL ((FUNC-TYPE) ATOM (DBMS-ID) FIX (O) DBMS-OPTIONS)
494 <COND (<==? .FUNC-TYPE F-STRING>
495 <CHTYPE [<> <> <> <DB-DEF-STR-BITS .O>
501 <DB-ARITH-OPS .O>] F-PHY-REP>)
503 <CHTYPE [<> <> <> <DB-DEF-INT-BITS .O>
510 <DB-ARITH-OPS .O>] F-PHY-REP>)>>
512 ;"CREATE-FUNCTIONS creates a vector of entity function specifications."
514 <DEFINE CREATE-FUNCTIONS (ENAME FL DBMS-ID ERROR-EXIT "AUX" (V []))
515 #DECL ((FL) LIST (DBMS-ID) FIX (V) VECTOR
517 (ERROR-EXIT) ACTIVATION)
520 #DECL ((F) ENTITY-FUNC)
523 #DECL ((VF) ENTITY-FUNC)
524 <COND (<==? <F-NAME .VF> <F-NAME .F>>
525 <ERR <STRING "Function name "
529 " defined more than once.">>
530 <RETURN <> .ERROR-EXIT>)>>
532 <PUT .F ,F-MAP-TYPE F-LOCAL-SCHEMA>
533 <PUT .F ,F-MAP-INFO <CREATE-DEFAULT-FREP <F-TYPE .F> .DBMS-ID>>
538 ;"DEMO-COMMAND processes various demo commands."
540 <DEFINE DEMO-COMMAND (CMD)
542 <COND (<==? .CMD DEMO-ON>
545 <CALL-ALL-LDIS-SIMPLE "DEMO-CMD" ON>)
548 <CALL-ALL-LDIS-SIMPLE "DEMO-CMD" <>>)
550 <ERR "Unknown demo command.">)>
551 <RESERVE-SPACE> ;"tries to make sure there is enough garbage collection room"
554 ;"All routines beginning with DIR- are DBA command action routines."
556 ;"DIR-AC returns the keyword AC
557 Production: ALPHA_COLLATING "
563 ;"DIR-ACCESS-ENT returns a list which indicates the entity
564 selected by an access path.
565 Production: SELECTS entity-name ; "
567 <DEFINE DIR-ACCESS-ENT (X ENTITY Y)
568 #DECL ( (ENTITY) IDENTIFIER)
573 ;"DIR-ACCESS-FCN returns a list which indicates other functions
574 which must be present to make a complete access path.
575 Production: WITH functin_list ; "
577 <DEFINE DIR-ACCESS-FCN (X FCN-LIST Y)
578 #DECL ( (FCN-LIST) LIST)
583 ;"DIR-ACCESS-PATH returns a list containing the keyword ACCESS and
584 the type of comparison that can be done.
585 Production: ACCESS PATH VIA compare_type ; "
587 <DEFINE DIR-ACCESS-PATH (W X Y CTYPE Z)
594 ;"DIR-ACCESS-UNIQUE returns a list indicating that the access path is unique.
595 Production: UNIQUE ; "
597 <DEFINE DIR-ACCESS-UNIQUE (X Y)
601 ;"DIR-AP-OPTIONS returns a list containing the keyword ACCESS and the
602 list of options specified for the access path.
603 Production: ACCESS PATH VIA compare_type access_paht_list "
605 <DEFINE DIR-AP-OPTIONS (V W X CTYPE OPTN)
606 #DECL ((CTYPE) ATOM (OPTN) LIST)
607 (ACCESS .CTYPE .OPTN)>
612 ;"DIR-AYREA creates a list containing the keyword AREA and a list
614 Production: AREAS area_list "
616 <DEFINE DIR-AYREA (X AREA-LIST Y)
617 #DECL ((AREA-LIST) LIST)
618 (AREA <CHTYPE .AREA-LIST AREAS>)>
620 ;"DIR-BIT returns a list containing the keyword BIT and the bit size
621 of the function value and its representation.
622 Production: number BIT representation "
624 <DEFINE DIR-BIT (NUM X VREP)
625 #DECL ((NUM) FIX (VREP) ATOM)
632 ;"DIR-CHR-BITS returns a list containing the keyword CHR-BIT and
633 the character size in bits.
634 Production: DEFAULT CHAR BIT SIZE IS number "
636 <DEFINE DIR-CHR-BITS (V W X Y Z BIT-SIZE)
637 #DECL ((BIT-SIZE) FIX)
643 ;"DIR-CHR-REP returns a list containing the keyword CHR-REP and
644 the character representation.
645 Production: DEFAULT CHAR REP IS representation "
647 <DEFINE DIR-CHR-REP (W X Y Z VREP)
655 ;"DIR-CONTEXT returns a list containing the keyword FOUND and a string
656 representing the context in which the entity type is found.
657 Production: FOUND UNDER character_string ; "
659 <DEFINE DIR-CONTEXT (X Y CONTEXT Z)
660 #DECL ((CONTEXT) STRING)
667 ;"DIR-CONTEXT-DBA is the main entry point for context analysis. Determines
668 the DBA command type and invokes the appropriate routine."
670 <DEFINE DIR-CONTEXT-DBA (COMMAND "ACT" ACT)
671 #DECL ((COMMAND) <OR DBMS-DEF DB-DEF VIEW-DEF DIR-CMD DEMO-CMD>
673 <COND (<TYPE? .COMMAND DBMS-DEF>
674 <CREATE-DBMS <1 .COMMAND>>)
675 (<TYPE? .COMMAND DIR-CMD>
677 (<TYPE? .COMMAND DB-DEF>
678 <CREATE-DB <1 .COMMAND>>)
679 (<TYPE? .COMMAND VIEW-DEF>
680 <CREATE-VIEW .COMMAND>)
681 (<TYPE? .COMMAND DEMO-CMD>
682 <DEMO-COMMAND <1 .COMMAND>>)>>
685 ;"Production: SHARE entity_name WITH entity_list ; "
687 <DEFINE DIR-COTYPE (X ID Y EL Z)
688 #DECL ((EL) LIST (ID) IDENTIFIER)
689 <ERR "Share statement not implemented">
690 <CHTYPE [.ID .EL] SHARE>
697 ;"DIR-DATABASE-ID is called when a database definition containing a
698 database name on its END statement is recognized. The name is saved
699 and later checked against the database name for consistency.
700 Production: basic_database database_name ; "
702 <DEFINE DIR-DATABASE-ID (BASIC-DB DB-NAME X)
703 #DECL ((BASIC-DB) VECTOR (DB-NAME) IDENTIFIER)
704 <PUT .BASIC-DB 2 <ID-NAME .DB-NAME>>>
710 ;"DIR-DB-DEF changes the structure built while parsing a data base
711 definition command to be a vector of type DB-DEF.
712 Production: database_definition "
714 <DEFINE DIR-DB-DEF (STRUCT)
715 #DECL ((STRUCT) VECTOR)
716 <CHTYPE [.STRUCT] DB-DEF>>
722 ;"DIR-DB-MAPPING inserts the list containing entity mapping information
723 into the vector describing the database.
724 Production: DATABASE db_visible_part db_map_part END "
726 <DEFINE DIR-DB-MAPPING (X VP MP Y)
727 #DECL ((VP) VECTOR (MP) LIST)
734 ;"DIR-DBMS-DEF changes the structure built while parsing a local
735 DBMS specification command to be a vector of type DBMS-DEF.
736 Production: dbms_definition "
738 <DEFINE DIR-DBMS-DEF (STRUCT)
739 #DECL ((STRUCT) DBMS)
740 <CHTYPE [.STRUCT] DBMS-DEF>>
742 ;"DIR-DBMS-OPTIONS builds a complete DBMS-TABLE entry by formating
743 a DBMS options list and adding it to the fixed portion of a
744 DBMS-TABLE entry. The DBMS options list contains information
745 describing which operations are supported on a local DBMS.
746 Production: basic_dbms_definition dbms_option_list ; "
748 <DEFINE DIR-DBMS-OPTIONS (DBMS-ENTRY OPTION-LIST X
749 "AUX" (OPT <CHTYPE <VECTOR ,SYS-DEF-INT-BITS
758 <> <> <> <> <> <> <> <>
759 <> <> <> <> <> <> <> <>
762 #DECL ((DBMS-ENTRY) DBMS (OPTION-LIST) LIST (OPT) DBMS-OPTIONS)
765 <COND (<TYPE? .O GLOBAL-OPS>
766 <PUT .OPT ,DB-GLOBAL-OPS .O>)
767 (<TYPE? .O DISPLAY-OPS>
768 <PUT .OPT ,DB-DISPLAY-OPS .O>)
770 <PUT .OPT ,DB-FIND-OPS .O>)
771 (<TYPE? .O QUANTIFIERS-OPS>
772 <PUT .OPT ,DB-QUANTIFIERS .O>)
774 <COND (<==? <1 .O> INT-BIT>
775 <PUT .OPT ,DB-DEF-INT-BITS <2 .O>>)
776 (<==? <1 .O> INT-REP>
777 <COND (<==? <2 .O> ONES>
778 <PUT .OPT ,DB-DEF-INT-REP DB-ONES-COMP>)
780 <PUT .OPT ,DB-DEF-INT-REP DB-TWOS-COMP>)>)
781 (<==? <1 .O> CHR-BIT>
782 <PUT .OPT ,DB-DEF-STR-BITS <2 .O>>)
783 (<==? <1 .O> CHR-REP>
784 <COND (<==? <2 .O> ASCII>
785 <PUT .OPT ,DB-DEF-STR-REP DB-ASCII>)
787 <PUT .OPT ,DB-DEF-STR-REP DB-BCD>)>)
788 (<==? <1 .O> MAX-PRED>
789 <PUT .OPT ,DB-MAX-NON-QUANT-ITER <2 .O>>)
790 (<==? <1 .O> MAX-QPRED>
791 <PUT .OPT ,DB-MAX-QUANT-ITER <2 .O>>)
792 (<==? <1 .O> MAX-QREL>
793 <PUT .OPT ,DB-MAX-QUANT-REL <2 .O>>)
794 (<==? <1 .O> PRED-OPTN>
797 <COND(<TYPE? .O ARITHMETIC-OPS>
798 <PUT .OPT ,DB-ARITH-OPS .O>)
799 (<TYPE? .O COMPARE-OPS>
800 <PUT .OPT ,DB-COMPARE-OPS .O>)
801 (<TYPE? .O LOGICAL-OPS>
802 <PUT .OPT ,DB-LOG-OPS .O>)
803 (<TYPE? .O QUANTIFIED-OPS>
804 <PUT .OPT ,DB-QUANT-REL .O>)
805 (<TYPE? .O RELATIONAL-OPS>
806 <PUT .OPT ,DB-REL-OPS .O>)
807 (<AND <TYPE? .O LIST>
808 <==? <1 .O> EXIST-OPS>>
809 <PUT .OPT ,DB-EXIST-OPS <2 .O>>)
811 <PUT .OPT ,DB-AP-REQUIRED T>)
813 <PUT .OPT ,DB-AP-ONLY T>)
814 (<FATAL-ERROR "DIR-DBMS-OPTIONS: Unknown option" .O>)>>
816 (<==? <1 .O> QPRED-OPTN>
819 <COND(<TYPE? .O ARITHMETIC-OPS>
820 <PUT .OPT ,DB-QP-ARITH-OPS .O>)
821 (<TYPE? .O COMPARE-OPS>
822 <PUT .OPT ,DB-QP-COMPARE-OPS .O>)
823 (<TYPE? .O LOGICAL-OPS>
824 <PUT .OPT ,DB-QP-LOG-OPS .O>)
825 (<TYPE? .O QUANTIFIED-OPS>
826 <PUT .OPT ,DB-QP-QUANT-REL .O>)
827 (<TYPE? .O RELATIONAL-OPS>
828 <PUT .OPT ,DB-QP-REL-OPS .O>)
829 (<AND <TYPE? .O LIST>
830 <==? <1 .O> EXIST-OPS>>
831 <PUT .OPT ,DB-QP-EXIST-OPS <2 .O>>)
833 <PUT .OPT ,DB-QP-AP-REQUIRED T>)
835 <PUT .OPT ,DB-QP-AP-ONLY T>)
836 (<FATAL-ERROR "DIR-DBMS-OPTIONS: Unknown option" .O>)>>
838 (<FATAL-ERROR "DIR-DBMS-OPTIONS: Unknown option" .O>)>)
840 <PUT .OPT ,DB-MULTIPLE-ITER T>)
842 <PUT .OPT ,DB-RESTRICT-PROP T>)
844 <PUT .OPT ,DB-STRICT-NESTING-ONLY T>)
845 (<FATAL-ERROR "DIR-DBMS-OPTIONS: Unknown option" .O>)>>
847 <PUT .DBMS-ENTRY ,DB-OPTIONS .OPT>>
849 ;"DIR-DBMS-TABLE builds the fixed portion of a DBMS-TABLE entry.
850 Production: LOCAL NODE IS
851 LOCAL SCHEMA IS identifier
854 LDI IS procedure_name ldi_choice "
856 <DEFINE DIR-DBMS-TABLE (A B C D E F SCHEMA-NAME H I SYS-NAME K L M SYS-TYPE
857 O P HOST R S PROC-NAME LDI)
858 #DECL ((SCHEMA-NAME SYS-NAME HOST) IDENTIFIER (SYS-TYPE) ATOM
859 (PROC-NAME) STRING (LDI) LDI-DATA)
860 <PUT .LDI ,LDI-PROC-NAME .PROC-NAME>
861 <CHTYPE [ <ID-NAME .SCHEMA-NAME>
871 ;"DIR-DELETE-DB deletes a database specification from the schema directory.
872 Production: DELETE DATABASE identifier ; "
874 <DEFINE DIR-DELETE-DB (X Y ID Z)
875 #DECL ((ID) IDENTIFIER)
876 <ERR "Not implemented yet">
882 ;"DIR-DELETE-DBMS deletes a DBMS specification from the schema directory.
883 Production: DELETE DBMS identifier ; "
885 <DEFINE DIR-DELETE-DBMS (X Y ID Z)
886 #DECL ((ID) IDENTIFIER)
887 <ERR "Not implemented yet">
890 ;"DIR-DELETE-DIR deletes the schema directory.
891 Production: DELETE DIRECTORY ; "
893 <DEFINE DIR-DELETE-DIR (X Y Z)
894 <SETG SCHEMA-DIR <CHTYPE <IVECTOR 3 '<VECTOR>> DIRECTORY>> ;"poof"
895 <RENAME ,DIRECTORY-FILE-NAME> ;"Delete the disk file, too"
897 <INITIALIZE-DIRECTORY>> ;"Read it back in and init various ptrs"
903 ;"DIR-DEMO-CMD is called when a demo command is recognized
904 Production: demo_command "
906 <DEFINE DIR-DEMO-CMD (STRUCT)
907 #DECL ((STRUCT) ATOM)
908 <CHTYPE [.STRUCT] DEMO-CMD>>
913 ;"DIR-DEMO-OFF returns the keyword DEMO-OFF
914 Production: DEMO OFF ; "
916 <DEFINE DIR-DEMO-OFF (X Y Z)
922 ;"DIR-DEMO-ON returns the keyword DEMO-ON
923 Production: DEMO ON ; "
925 <DEFINE DIR-DEMO-ON (X Y Z)
931 ;"DIR-DIR-CMD changes the structure built while parsing a directory
932 command to be a vector of type DIR-CMD.
933 Production: directory_command "
935 <DEFINE DIR-DIR-CMD (STRUCT)
937 <CHTYPE [.STRUCT] DIR-CMD>>
943 ;"DIR-ENTITY-EXTENT creates a list containing an entity name and its
944 associated mapping information plus and empty list since no function
945 mapping was supplied.
946 Production: EXTENT identifier IS db_entity_map db_extent_end "
948 <DEFINE DIR-ENTITY-EXTENT (X ENAME Y EMAP Z)
949 #DECL ((ENAME) IDENTIFIER (EMAP) LIST)
950 (<ID-NAME .ENAME> .EMAP ())>
956 ;"DIR-ENTITY-FUNC-EXTENT creates a list containing an entity name its
957 associated mapping info and its function mapping info.
958 Production: EXTENT identifier IS db_entity_map db_func_map db_extent_end "
960 <DEFINE DIR-ENTITY-FUNC-EXTENT (X ENAME Y EMAP FMAP Z)
961 #DECL ((ENAME) IDENTIFIER (EMAP FMAP) LIST)
962 (<ID-NAME .ENAME> .EMAP .FMAP)>
968 ;"DIR-ENTITY-PRED-OPTN returns the predicate options of the entity
969 Production: RESTRICTED predicate_option_list "
971 <DEFINE DIR-ENTITY-PRED-OPTN (X OPTN)
978 ;"DIR-ENTITY-TYPE creates a two element list containing the entity
979 name and a list describing its functions.
980 Production: TYPE entity_name IS ENTITY entity_body entity_end ; "
982 <DEFINE DIR-ENTITY-TYPE (W ENAME X Y EBODY Z V)
983 #DECL ((ENAME) IDENTIFIER (EBODY) LIST)
984 (<ID-NAME .ENAME> .EBODY)>
987 ;"Production: TYPE entity_name IS ENTITY entity_end ; "
988 <DEFINE DIR-ENTITY-TYPE-EMPTY(W ENAME X Y Z V)
989 #DECL((ENAME) IDENTIFIER)
990 (<ID-NAME .ENAME> () )
994 ;"DIR-FCN-DEF adds the function name to an ENTITY-FUNC vector
995 Production: function_name : value_format ; "
997 <DEFINE DIR-FCN-DEF (ID X F Y)
998 #DECL ((ID) IDENTIFIER (F) ENTITY-FUNC)
999 <PUT .F ,F-NAME <ID-NAME .ID>>>
1004 ;"DIR-FLUSH-DIR deletes the schema directory in memory only.
1005 Production: FLUSH DIRECTORY ; or
1008 <DEFINE DIR-FLUSH-DIR (X Y "OPT" Z "AUX" FOO)
1009 #DECL ((FOO) <OR ATOM FALSE>)
1010 <SET FOO ,DONT-RELOAD-DIR>
1011 <SETG DONT-RELOAD-DIR T>
1012 <SETG SCHEMA-DIR <CHTYPE <IVECTOR 3 '<VECTOR>> DIRECTORY>> ;"poof"
1013 <INITIALIZE-DIRECTORY>
1014 <SETG DONT-RELOAD-DIR .FOO>
1020 ;"DIR-FOP-CALC returns the keyword FIND-CALC.
1023 <DEFINE DIR-FOP-CALC (X)
1026 ;"DIR-FOP-CUR returns the keyword FIND-CUR.
1027 Production: CURRENT "
1029 <DEFINE DIR-FOP-CUR (X)
1032 ;"DIR-FOP-KEY returns the keyword FIND-KEY.
1033 Production: DATABASE_KEY "
1035 <DEFINE DIR-FOP-KEY (X)
1038 ;"DIR-FOP-OWN returns the keyword FIND-OWN.
1041 <DEFINE DIR-FOP-OWN (X)
1044 ;"DIR-FOP-POS returns the keyword FIND-POS.
1045 Production: POSITIONAL "
1047 <DEFINE DIR-FOP-POS (X)
1050 ;"DIR-FOP-USE-CUR returns the keyword FIND-USE-CUR.
1051 Production: USING_CURRENT "
1053 <DEFINE DIR-FOP-USE-CUR (X)
1056 ;"DIR-FOP-USE-NCUR returns the keyword FIND-USE-NCUR.
1057 Production: USING_NON_CURRENT "
1059 <DEFINE DIR-FOP-USE-NCUR (X)
1063 ;"DIR-FUNC-AOPS returns a list containing the arithmetic operators
1064 supported for the specific function.
1065 Production: RESTRICTED TO ARITHMETIC OPERATIONS supported_arith_list ; "
1067 <DEFINE DIR-FUNC-AOPS (V W X Y OPS Z)
1069 (AOPS <DIR-SUPPORTED-AOPS X Y Z .OPS>)>
1074 ;"DIR-FUNC-EXTENT creates a list containing the function name and its
1075 associated mapping information.
1076 Production: identifier IS db_func_map "
1078 <DEFINE DIR-FUNC-EXTENT (FNAME X MAPPING)
1079 #DECL ((FNAME) IDENTIFIER (MAPPING) LIST)
1080 (<ID-NAME .FNAME> .MAPPING)>
1085 ;"DIR-FUNC-ROPS returns a list containing the relational operators
1086 supported for the specific function.
1087 Production: RESTRICTED TO RELATIONAL OPERATIONS supported_rel_list ; "
1089 <DEFINE DIR-FUNC-ROPS (V W X Y OPS Z)
1091 (ROPS <DIR-SUPPORTED-ROPS X Y Z .OPS>)>
1097 ;"DIR-INT-BITS returns a list containing the keyword INT-BIT and
1098 the default bit size for integers.
1099 Production: DEFAULT INTEGER BIT SIZE IS number "
1101 <DEFINE DIR-INT-BITS (V W X Y Z BIT-SIZE)
1102 #DECL ((BIT-SIZE) FIX)
1103 (INT-BIT .BIT-SIZE)>
1109 ;"DIR-INT-REP returns a list containing the keyword INT-REP and
1110 the default representation for integers.
1111 Production: DEFAULT INTEGER REP IS representation "
1113 <DEFINE DIR-INT-REP (W X Y Z VREP)
1120 ;"DIR-INT-STR creates a list containing the keyword INT-STR and
1121 the min/max number of characters in the integer string.
1122 Production: STORED AS STRING ( number_characters ) "
1124 <DEFINE DIR-INT-STR (X Y Z V MIN-MAX W)
1125 #DECL ((MIN-MAX) LIST)
1126 (INT-STR <1 .MIN-MAX> <2 .MIN-MAX>)>
1131 ;"DIR-KEY returns the key specification for the entity.
1132 Production: KEY key_spec ; "
1134 <DEFINE DIR-KEY (Y KEY-SPEC Z)
1135 #DECL ( (KEY-SPEC) <OR ATOM LIST>)
1136 <COND (<TYPE? .KEY-SPEC ATOM>
1137 (KEY ()) ) ;"DATABASE_KEY"
1143 ;"DIR-LOCAL-LDI builds an LDI-DATA vector containing information
1147 <DEFINE DIR-LOCAL-LDI (X)
1156 ;"DIR-MAX-ONLY creates a list containing the range of a STRING.
1157 Production: number "
1159 <DEFINE DIR-MAX-ONLY (VMAX)
1165 ;"DIR-MAX-PRED returns the non-quantified iteration predicate limit.
1166 Production: MAXIMUM OF number NON_QUANTIFIED ITERATION PREDICATES "
1168 <DEFINE DIR-MAX-PRED (V W NUM X Y Z)
1175 ;"DIR-MAX-QPRED returns the quantified iteration predicate limit.
1176 Production: MAXIMUM OF number QUANTIFIED ITERATION PREDICATES "
1178 <DEFINE DIR-MAX-QPRED (V W NUM X Y Z)
1185 ;"DIR-MAX-QREL returns the quantified relation within a predicate limit.
1186 Production: MAXIMUM OF number QUANTIFIED RELATIONS PER ITERATION "
1188 <DEFINE DIR-MAX-QREL (V W NUM X Y Z U)
1195 ;"DIR-MIN-MAX creates a list containing the range of a STRING.
1196 Production: number .. number "
1198 <DEFINE DIR-MIN-MAX (VMIN X VMAX)
1199 #DECL ((VMIN VMAX) FIX)
1205 ;"DIR-NO-AOPS is called to process a declaration of no arithmetic ops.
1206 Production: RESTRICTED TO NO ARITHMETIC OPERATINS ; "
1208 <DEFINE DIR-NO-AOPS (U V W X Y Z)
1209 (AOPS <DIR-SUPPORTED-AOPS X Y Z '()>) >
1214 ;"DIR-NO-QUANT is called for an entity which cannot be the domain
1215 of a quantification.
1216 Production: TO NO QUANTIFICATION ; "
1218 <DEFINE DIR-NO-QUANT (W X Y Z)
1224 ;"DIR-NO-ROPS is called to process a declaration of no relational ops.
1225 Production: RESTRICTED TO NO RELATIONAL OPERATINS ; "
1227 <DEFINE DIR-NO-ROPS (U V W X Y Z)
1228 (ROPS <DIR-SUPPORTED-ROPS X Y Z '()>) >
1233 ;"DIR-OPTIONAL is called when a partial function is recognized.
1234 Production: range_type PARTIAL "
1236 <DEFINE DIR-OPTIONAL (F)
1237 #DECL ((F) ENTITY-FUNC)
1238 .F> ;"No-op for now"
1244 ;"DIR-OWNER creates a list containing the keyword OWNED and a list
1245 of entity types that are owners.
1246 Production: OWNED BY entity_list ; "
1248 <DEFINE DIR-OWNER (X Y EL Z)
1256 ;"DIR-PRED-ITER returns information on the type of predicates
1257 permitted when an entity is the domain of an iteration.
1258 Production: WHEN DOMAIN OF ITERATION TO type PREDICATES ; "
1260 <DEFINE DIR-PRED-ITER (S U V W X TYP Y Z)
1262 (ITER-DOMAIN <DIR-SUPPORTED-PRED-TYPES .TYP>)>
1267 ;"DIR-PRED-OPTN returns the predicate options of the dbms
1268 Production: WITHIN NON_QUANTIFIED PREDICATES predicate_option_list "
1270 <DEFINE DIR-PRED-OPTN (X Y Z OPTN)
1271 #DECL ( (OPTN) LIST)
1277 ;"DIR-PRED-QUANT returns information on the type of predicates
1278 permitted when an entity is the domain of a quantification.
1279 Production: WHEN DOMAIN OF QUANTIFICATION TO type PREDICATES ; "
1281 <DEFINE DIR-PRED-QUANT (S U V W X TYP Y Z)
1283 (QUANT-DOMAIN <DIR-SUPPORTED-PRED-TYPES .TYP>)>
1288 ;"DIR-PRINT-CH creates a list containing the keyword PRINTING and
1289 the max number of characters required to print a function value.
1290 Production: number PRINTING CHARS "
1292 <DEFINE DIR-PRINT-CH (NUM X Y)
1300 ;"DIR-PRINT-DB pretty prints a database or view.
1301 Production: PRINT DATABASE identifier ; "
1303 <DEFINE DIR-PRINT-DB (X Y DNAME Z "AUX" (I 0))
1304 #DECL ((DNAME) IDENTIFIER (I) FIX)
1309 <COND (<==? <V-NAME .V> <ID-NAME .DNAME>>
1313 (<ERR <STRING "Database or view " <SPNAME <ID-NAME .DNAME>>
1314 " is undefined.">>)>>
1320 ;"DIR-PRINT-DBMS pretty prints a DBMS table entry.
1321 Production: PRINT DBMS identifier ; "
1323 <DEFINE DIR-PRINT-DBMS (X Y SYS-NAME Z)
1324 #DECL ((SYS-NAME) IDENTIFIER)
1328 <COND (<==? <DB-SCHEMA-NAME .D> <ID-NAME .SYS-NAME>>
1332 (<ERR <STRING "DBMS " <SPNAME <ID-NAME .SYS-NAME>>
1333 " is undefined.">>)>>
1339 ;"DIR-PRINT-DIR pretty prints the schema directory.
1340 Production: PRINT DIRECTORY ; "
1342 <DEFINE DIR-PRINT-DIR (X Y Z)
1344 <>> ;"Return false to skip context analysis"
1350 ;"DIR-PRINT-ET prints an entity type table entry. Note that only
1351 the current view context is searched.
1352 Production: PRINT ENTITY TYPE identifier ; "
1354 <DEFINE DIR-PRINT-ET (W X Y ENAME Z)
1355 #DECL ((ENAME) IDENTIFIER)
1356 <COND (<FIND-ENTITY-TYPE .ENAME>
1357 <PP-ENTITY-TYPE <<ID-ETID .ENAME> ,ET-TABLE>>)>>
1363 ;"DIR-QPRED-OPTN returns the quantified predicate optins.
1364 Production: WITHIN QUANTIFIED PREDICATES predicate_option_list "
1366 <DEFINE DIR-QPRED-OPTN (X Y Z OPTN)
1367 #DECL ( (OPTN) LIST)
1370 ;"DIR-RANGE-ENTITY creates a default ENTITY-FUNC vector for a
1371 function whose range is entity. Elements in the vector may
1372 be changed as more is learned about the function.
1373 Production: entity_name "
1375 <DEFINE DIR-RANGE-ENTITY (E)
1376 #DECL ((E) IDENTIFIER)
1377 <CHTYPE [<> F-ENTITY F-SV <ID-NAME .E> <> <> <>] ENTITY-FUNC>>
1382 ;"DIR-RANGE-INTEGER creates a default ENTITY-FUNC vector for a
1383 function whose range is integer. Elements in the vector may
1384 be changed as more is learned about the function.
1385 Production: INTEGER "
1387 <DEFINE DIR-RANGE-INTEGER (X)
1388 <CHTYPE <VECTOR <> F-INTEGER F-SV -34359738366 34359738367 <> <>>
1393 ;"DIR-RANGE-STR creates a default ENTITY-FUNC vector for a
1394 function whose range is string. Elements in the vector may
1395 be changed as more is learned about the function.
1396 Production: STRING ( number_characters ) "
1398 <DEFINE DIR-RANGE-STR (X Y MIN-MAX Z)
1399 #DECL ((MIN-MAX) LIST)
1400 <CHTYPE [<> F-STRING F-SV <1 .MIN-MAX> <2 .MIN-MAX> <> <>]
1406 ;"DIR-READ-DIR reads the schema directory from disk.
1407 (24-jun-81) Note that reading the directory with READ-DIRECTORY
1408 is, in fact, useless because the atoms ET-TABLE, etc. which all
1409 of Multibase uses are not rebound. The directory must be read
1410 using INITIALIZE-DIRECTORY, which not only reads the directory,
1411 but also rebinds these atoms.
1412 Production: READ DIRECTORY ; "
1414 <DEFINE DIR-READ-DIR (X Y Z) <INITIALIZE-DIRECTORY>>
1415 <DEFINE DIR-READ-DIR-FILE (X Y FILE Z "AUX" ANS)
1416 #DECL ((FILE) STRING (ANS) <OR ATOM FALSE>)
1417 <COND (<SET ANS <FILE-EXISTS? .FILE>>
1418 <SETG DIRECTORY-FILE-NAME .FILE>
1419 <INITIALIZE-DIRECTORY>)
1421 <ERR "File does not exist: " <1 .ANS>>
1428 ;"DIR-REMOTE-LDI builds an LDI-DATA vector containing information
1430 Production: REMOTE host socket "
1432 <DEFINE DIR-REMOTE-LDI (X HOST SOCKET)
1433 #DECL ((HOST) IDENTIFIER (SOCKET) FIX)
1437 .SOCKET ] LDI-DATA>>
1442 ;"DIR-REPEAT-GRP creates a list containing the keyword REPEAT.
1443 Production: REPEATING GROUP "
1445 <DEFINE DIR-REPEAT-GRP (X Y)
1453 ;"DIR-SET creates a list containing the keyword SET.
1462 ;"DIR-SET-OF changes the range of a function to be multi-valued.
1463 Production: SET OF range_type "
1465 <DEFINE DIR-SET-OF (X Y F)
1466 #DECL ((F) ENTITY-FUNC)
1467 <PUT .F ,F-RANGE F-MV>>
1471 ;"DIR-SPELLED creates a list with the keyword SPELLED and a
1473 Production: SPELLED character_string ; "
1475 <DEFINE DIR-SPELLED (X STR "OPT" (Z <>))
1476 #DECL ((STR) STRING)
1480 ;"Production: WHEN SPELLED string ; "
1482 <DEFINE DIR-SPELLED-2 (X Y STR "OPT" (Z <>))
1483 #DECL ((STR) STRING)
1490 ;"Production: CONTAIN entity_name IN entity-list ; "
1492 <DEFINE DIR-SUPERTYPE (X ID Y EL Z)
1493 #DECL ((EL) LIST (ID) IDENTIFIER)
1494 <CHTYPE [.ID .EL] CONTAIN>
1500 ;"DIR-SUPPORTED-AOPS creates a vector describing the arithmetic operations
1501 supported by a dbms.
1502 Production: SUPPORTED ARITHMETIC OPERATIONS supported_arith_list ; "
1504 <DEFINE DIR-SUPPORTED-AOPS (X Y Z AOP-LIST "OPT" S)
1505 #DECL ( (AOP-LIST) LIST)
1506 <CHTYPE [ <IN-LIST? '(ALL) .AOP-LIST>
1507 <IN-LIST? '(+) .AOP-LIST>
1508 <IN-LIST? '(-) .AOP-LIST>
1509 <IN-LIST? '(*) .AOP-LIST>
1510 <IN-LIST? '(/) .AOP-LIST>
1511 <IN-LIST? '(&) .AOP-LIST>
1516 ;"DIR-SUPPORTED-COPS creates a vector describing compare operations
1517 supported by a DBMS.
1518 Production: SUPPORTED COMPARE OPERATIONS supported_comp_list ; "
1520 <DEFINE DIR-SUPPORTED-COPS (X Y Z COP-LIST)
1521 #DECL ((COP-LIST) LIST)
1522 <CHTYPE [ <IN-LIST? '(ALL) .COP-LIST>
1523 <IN-LIST? '(CONSTANT) .COP-LIST>
1524 <IN-LIST? '(FIELD) .COP-LIST>
1525 <IN-LIST? '(EXPRESSION) .COP-LIST> ] COMPARE-OPS>>
1530 ;"DIR-SUPPORTED-DOPS creates a vector describing display operations
1531 supported by a DBMS.
1532 Production: SUPPORTED DISPLAY OPERATIONS supported_comp_list ; "
1534 <DEFINE DIR-SUPPORTED-DOPS (X Y Z COP-LIST)
1535 #DECL ((COP-LIST) LIST)
1536 <CHTYPE [ <IN-LIST? '(ALL) .COP-LIST>
1537 <IN-LIST? '(CONSTANT) .COP-LIST>
1538 <IN-LIST? '(FIELD) .COP-LIST>
1539 <IN-LIST? '(EXPRESSION) .COP-LIST> ] DISPLAY-OPS>>
1544 ;"DIR-SUPPORTED-EOPS creates a description of the existential logical
1545 operations supported by a dbms.
1546 Production: SUPPORTED EXISTENTIAL OPERATIONS supported_log_list "
1548 <DEFINE DIR-SUPPORTED-EOPS (X Y Z LOP-LIST)
1549 #DECL ( (LOP-LIST) LIST)
1550 (EXIST-OPS <DIR-SUPPORTED-LOPS X Y Z .LOP-LIST>)>
1555 ;"DIR-SUPPORTED-FOPS creates a vector describing FIND verbs supported
1557 Production: SUPPORTED FIND VERBS supported_find_list "
1559 <DEFINE DIR-SUPPORTED-FOPS (X Y Z FOP-LIST)
1560 #DECL ((FOP-LIST) LIST)
1561 <CHTYPE [ <IN-LIST? '(FIND-KEY) .FOP-LIST>
1562 <IN-LIST? '(FIND-CUR) .FOP-LIST>
1563 <IN-LIST? '(FIND-POS) .FOP-LIST>
1564 <IN-LIST? '(FIND-OWN) .FOP-LIST>
1565 <IN-LIST? '(FIND-CALC) .FOP-LIST>
1566 <IN-LIST? '(FIND-USE-CUR) .FOP-LIST>
1567 <IN-LIST? '(FIND-USE-NCUR) .FOP-LIST>
1573 ;"DIR-SUPPORTED-GOPS creates a vector describing global
1574 optimizations supported by a DBMS.
1575 Production: SUPPORTED GLOBAL OPTIMIZATIONS global_optimization_list "
1577 <DEFINE DIR-SUPPORTED-GOPS (X Y Z GOP-LIST)
1578 #DECL ((GOP-LIST) LIST)
1579 <CHTYPE [ <IN-LIST? '(ALL) .GOP-LIST>
1580 <IN-LIST? '(CREATE) .GOP-LIST>
1581 <IN-LIST? '(REFERENCE) .GOP-LIST> ] GLOBAL-OPS>>
1586 ;"DIR-SUPPORTED-LOPS creates a vector describing logical
1587 operations supported by a DBMS.
1588 Production: SUPPORTED LOGICAL OPERATIONS supported_log_list "
1590 <DEFINE DIR-SUPPORTED-LOPS (X Y Z LOP-LIST)
1591 #DECL ((LOP-LIST) LIST)
1592 <CHTYPE [ <IN-LIST? '(ALL) .LOP-LIST>
1593 <IN-LIST? '(AND) .LOP-LIST>
1594 <IN-LIST? '(NOT) .LOP-LIST>
1595 <IN-LIST? '(OR) .LOP-LIST>
1601 ;"DIR-SUPPORTED-PRED-TYPES is an internal entry to decode allowable
1604 <DEFINE DIR-SUPPORTED-PRED-TYPES (TYP)
1606 <CHTYPE [ <IN-LIST? '(ALL) .TYP>
1607 <IN-LIST? '(NO) .TYP>
1608 <IN-LIST? '(QUANTIFIED) .TYP>
1609 <IN-LIST? '(NON_QUANTIFIED) .TYP>
1615 ;"DIR-SUPPORTED-QOPS creates a vector describing the quantificatin operations
1616 supported by the dbms.
1617 Productin: SUPPORTED QUANTIFIED RELATIONS supported_quant_list "
1619 <DEFINE DIR-SUPPORTED-QOPS (X Y Z QOP-LIST)
1620 #DECL ( (QOP-LIST) LIST)
1621 <CHTYPE [ <IN-LIST? '(ALL) .QOP-LIST>
1622 <IN-LIST? '(NESTED) .QOP-LIST>
1623 <IN-LIST? '(PARALLEL) .QOP-LIST>
1630 ;"DIR-SUPPORTED-QNTS creates a vector describing the quantificatin operations
1631 supported by the dbms.
1632 Productin: SUPPORTED QUANTIFIERS supported_qnt_list "
1634 <DEFINE DIR-SUPPORTED-QNTS (X Y QOP-LIST)
1635 #DECL ( (QOP-LIST) LIST)
1636 <CHTYPE [ <IN-LIST? '(ALL) .QOP-LIST>
1637 <IN-LIST? '(SOME) .QOP-LIST>
1638 <IN-LIST? '(EVERY) .QOP-LIST>
1639 <IN-LIST? '(NO) .QOP-LIST>
1646 ;"DIR-SUPPORTED-ROPS creates a vector describing relational
1647 operations supported by a DBMS.
1648 Production: SUPPORTED RELATIONAL OPERATIONS supported_rel_list "
1650 <DEFINE DIR-SUPPORTED-ROPS (X Y Z ROP-LIST "OPT" S)
1651 #DECL ((ROP-LIST) LIST)
1652 <CHTYPE [ <IN-LIST? '(ALL) .ROP-LIST>
1653 <IN-LIST? '(\>) .ROP-LIST>
1654 <IN-LIST? '(\<) .ROP-LIST>
1655 <IN-LIST? '(\<=) .ROP-LIST>
1656 <IN-LIST? '(\>=) .ROP-LIST>
1657 <IN-LIST? '(/=) .ROP-LIST>
1658 <IN-LIST? '(=) .ROP-LIST>
1659 <IN-LIST? '(AC) .ROP-LIST>
1660 <IN-LIST? '(ISIN) .ROP-LIST>
1667 ;"DIR-SYS-EP creates a list containing the keyword SYS-EP.
1668 Production: SYSTEM ENTRY POINT ; "
1670 <DEFINE DIR-SYS-EP (W X Y Z)
1676 ;"DIR-SYS-EP-ACCESS creates a list containing the keyword ACCESS.
1677 Productin: BY ACCESS PATH ONLY ; "
1679 <DEFINE DIR-SYS-EP-ACCESS (V W X Y Z)
1684 ;"DIR-SYS-EP-KEYS returns a list of key values to be used in
1685 iterating over a system-entry point.
1686 Productin: ITERATE USING KEYS key_list ; "
1688 <DEFINE DIR-SYS-EP-KEYS (W X Y KEYLIST Z)
1689 #DECL ( (KEYLIST) LIST)
1690 (KEYS <CHTYPE .KEYLIST KEY-LIST>)>
1695 ;"DIR-SYS-EP-OPTN creates a list containing the keyword SYS-EP and
1696 a list of options describing the system entry point.
1697 Production: SYSTEM ENTRY POINT sys_ep_clause "
1699 <DEFINE DIR-SYS-EP-OPTN (W X Y OPTN)
1706 ;"DIR-SYS-EP-SET passes the system set name for a system entry point
1707 Productin: VIA character_string ; "
1709 <DEFINE DIR-SYS-EP-SET (Y SET-NAME Z)
1710 #DECL ( (SET-NAME) STRING)
1711 (SETNAME .SET-NAME)>
1717 ;"DIR-VIEW-DEF changes the structure created by parsing a view
1718 definition command into a vector of type VIEW-DEF.
1719 Production: view_definition "
1721 <DEFINE DIR-VIEW-DEF (STRUCT)
1722 #DECL ((STRUCT) VECTOR)
1723 <CHTYPE [.STRUCT] VIEW-DEF>>
1729 ;"DIR-VISIBLE processes the visible part of a view or database definition.
1730 A vector is created containing the view/db name, a slot that will be
1731 filled in later with the name specified on the END statement, the
1732 list of entity definitions, no constraints and a slot that may be
1733 filled in later with mapping info.
1734 Production: identifier IS group_of_entities "
1736 <DEFINE DIR-VISIBLE (DB-NAME X EL)
1737 #DECL ((DB-NAME) IDENTIFIER (EL) LIST)
1738 [<ID-NAME .DB-NAME> <> .EL <> <>]>
1742 ;"DIR-VISIBLE-CONSTRAINTS is just like DIR-VISIBLE except that a
1743 list of constraints is added to the vector.
1744 Production: identifier IS group_of_entities constraint_list "
1746 <DEFINE DIR-VISIBLE-CONSTRAINTS (DB-NAME X EL CL)
1747 #DECL ((DB-NAME) IDENTIFIER (EL CL) LIST)
1748 [<ID-NAME .DB-NAME> <> .EL <> .CL]>
1754 ;"DIR-WRITE-DIR copies the schema directory to disk.
1755 Production: WRITE DIRECTORY ; "
1757 <DEFINE DIR-WRITE-DIR (X Y Z) <WRITE-DIRECTORY>>
1760 <DEFINE DIR-WRITE-DIR-FILE (X Y FILE Z)
1761 #DECL ((FILE) STRING)
1762 <SETG DIRECTORY-FILE-NAME .FILE>
1765 ;"FIND-ETID is used to lookup a given entity type name in a vector
1766 of ENTITY-TYPEs. Returns the entity types ETID or false."
1768 <DEFINE FIND-ETID (EV ENAME)
1769 #DECL ((EV) VECTOR (ENAME) ATOM)
1772 #DECL ((E) <OR FALSE ENTITY-TYPE>)
1774 <COND (<==? <ET-NAME .E> .ENAME>
1775 <MAPLEAVE <ET-ETID .E>>)>)>>
1781 ;"FIND-FID is used to lookup a given function name in a vector
1782 of ENTITY-FUNCs. Returns the function's FID or false."
1784 <DEFINE FIND-FID (FV FNAME "AUX" (I 0))
1785 #DECL ((FV) VECTOR (FNAME) ATOM (I) FIX)
1788 #DECL ((F) ENTITY-FUNC)
1790 <COND (<==? <F-NAME .F> .FNAME>
1794 ;"Pretty print routines for directory data structures"
1796 ;"PP-DATABASE pretty prints all entity types in a database or view."
1798 <DEFINE PP-DATABASE (VID)
1802 #DECL ((E) ENTITY-TYPE)
1803 <COND (<==? <ET-VID .E> .VID>
1804 <PP-ENTITY-TYPE .E>)>>
1807 ;"PP-DBMS prints one entry in the DBMS-TABLE."
1809 <DEFINE PP-DBMS (D "AUX" GOP DOP FOP (L <DB-LDI-DATA .D>)
1810 (O <DB-OPTIONS .D>))
1811 #DECL ((D) DBMS (L) LDI-DATA (O) <OR DBMS-OPTIONS FALSE>
1812 (GOP) <OR GLOBAL-OPS FALSE>
1813 (DOP) <OR DISPLAY-OPS FALSE>
1814 (FOP) <OR FIND-OPS FALSE>)
1815 <TPRINC "Schema name: "> <PRINC <DB-SCHEMA-NAME .D>> <CRLF>
1816 <TPRINC "DB system name: "> <PRINC <DB-SYS-NAME .D>> <CRLF>
1817 <TPRINC "DB type: "> <PRINC <DB-SYS-TYPE .D>> <CRLF>
1818 <TPRINC "Host: "> <PRINC <DB-HOST .D>> <CRLF>
1819 <TPRINC "LDI procedure name: ">
1820 <PRIN1 <LDI-PROC-NAME .L>>
1822 <COND (<LDI-LOCAL .L>
1823 <TTPRINC "LDI is local">
1826 <TTPRINC "LDI is remote host/socket: ">
1827 <PRINC <LDI-HOST-NAME .L>>
1829 <PRINC <LDI-SOCKET .L>>
1832 <SET GOP <DB-GLOBAL-OPS .O>>
1833 <SET FOP <DB-FIND-OPS .O>>
1834 <SET DOP <DB-DISPLAY-OPS .O>>
1836 <TPRINC "Supported display operations: ">
1837 <COND (<DOP-ALL .DOP>
1839 <COND (<DOP-CONSTANT .DOP>
1840 <PRINC "CONSTANT ">)>
1841 <COND (<DOP-FIELD .DOP>
1843 <COND (<DOP-EXP .DOP>
1847 <TPRINC "Supported global optimizations: ">
1848 <COND (<GOP-ALL .GOP>
1850 <COND (<GOP-TEMP-FILE .GOP>
1851 <PRINC "TEMPORARY-FILES ">)>
1852 <COND (<GOP-EXTERN-FILE .GOP>
1853 <PRINC "EXTERNAL-FILES ">)>
1856 <TPRINC "Supported find verbs: ">
1857 <COND (<FOP-KEY .FOP>
1859 <COND (<FOP-CURRENT .FOP>
1860 <PRINC "CURRENT ">)>
1861 <COND (<FOP-POSITIONAL .FOP>
1862 <PRINC "POSITIONAL ">)>
1863 <COND (<FOP-OWNER .FOP>
1865 <COND (<FOP-CALC .FOP>
1867 <COND (<FOP-USE-CUR .FOP>
1868 <PRINC "USING_CURRENT ">)>
1869 <COND (<FOP-USE-NON-CUR .FOP>
1870 <PRINC "USING_NON_CURRENT ">)>
1872 <TPRINC "Max quantified predicates: ">
1873 <PRINC <DB-MAX-QUANT-ITER .O>> <CRLF>
1874 <TPRINC "Max non-quantified predicates: ">
1875 <PRINC <DB-MAX-NON-QUANT-ITER .O>> <CRLF>
1876 <TPRINC "Max quantified relations: ">
1877 <PRINC <DB-MAX-QUANT-REL .O>> <CRLF>
1878 <COND (<DB-STRICT-NESTING-ONLY .O>
1879 <TPRINC "Strict nesting of entities required">
1881 <COND (<DB-MULTIPLE-ITER .O>
1882 <TPRINC "Multiple iterations over entity supported">
1884 <COND (<DB-RESTRICT-PROP .O>
1885 <TPRINC "Restrictions propagate to all occurrences">
1887 <TPRINC "In non-quantified predicates --"> <CRLF>
1889 <DB-ARITH-OPS .O> <DB-COMPARE-OPS .O>
1890 <DB-EXIST-OPS .O> <DB-LOG-OPS .O>
1891 <DB-QUANT-REL .O> <DB-REL-OPS .O>
1892 <DB-AP-REQUIRED .O> <DB-AP-ONLY .O>
1895 <TPRINC "In quantified predicates --"> <CRLF>
1897 <DB-QP-ARITH-OPS .O> <DB-QP-COMPARE-OPS .O>
1898 <DB-QP-EXIST-OPS .O> <DB-QP-LOG-OPS .O>
1899 <DB-QP-QUANT-REL .O> <DB-QP-REL-OPS .O>
1900 <DB-QP-AP-REQUIRED .O> <DB-QP-AP-ONLY .O>
1903 <TPRINC "Default integer bit size: ">
1904 <PRINC <DB-DEF-INT-BITS .O>> <CRLF>
1905 <TPRINC "Default integer representation: ">
1906 <PRINC <DB-DEF-INT-REP .O>> <CRLF>
1907 <TPRINC "Default character bit size: ">
1908 <PRINC <DB-DEF-STR-BITS .O>> <CRLF>
1909 <TPRINC "Default character representation: ">
1910 <PRINC <DB-DEF-STR-REP .O>> <CRLF>)>>
1912 <DEFINE PP-DBMS-PRED (AOP COP EOP LOP QUAN ROP AP-R AP-O)
1913 #DECL ( (AOP) <OR ARITHMETIC-OPS FALSE>
1914 (COP) <OR COMPARE-OPS FALSE>
1915 (EOP LOP) <OR LOGICAL-OPS FALSE>
1916 (QUAN) <OR QUANTIFIED-OPS FALSE>
1917 (REL) <OR RELATIONAL-OPS FALSE>
1918 (AP-R AP-O) <OR ATOM FALSE>
1921 <TPRINC "Access path usage required"> <CRLF>)>
1923 <TPRINC "Use access paths only"> <CRLF>)>
1925 <TPRINC "Supported arithmetic operations: ">
1926 <COND (<AOP-ALL .AOP>
1928 <COND (<AOP-PLUS .AOP>
1930 <COND (<AOP-MINUS .AOP>
1932 <COND (<AOP-MULTIPLY .AOP>
1933 <PRINC "MULTIPLY ">)>
1934 <COND (<AOP-DIVIDE .AOP>
1936 <COND (<AOP-CONCAT .AOP>
1937 <PRINC "CONCATENATE ">)>
1940 <TPRINC "Supported relational operations: ">
1941 <COND (<ROP-ALL .ROP>
1943 <COND (<ROP-GT .ROP>
1945 <COND (<ROP-LT .ROP>
1947 <COND (<ROP-LE .ROP>
1949 <COND (<ROP-GE .ROP>
1951 <COND (<ROP-NE .ROP>
1953 <COND (<ROP-EQ .ROP>
1955 <COND (<ROP-AC .ROP>
1956 <PRINC "ALPHA-COLLATE ">)>
1957 <COND (<ROP-ISIN .ROP>
1961 <TPRINC "Supported logical operations: ">
1962 <COND (<LOP-ALL .LOP>
1964 <COND (<LOP-AND .LOP>
1966 <COND (<LOP-NOT .LOP>
1968 <COND (<LOP-OR .LOP>
1972 <TPRINC "Supported existential logical operations: ">
1973 <COND (<LOP-ALL .EOP>
1975 <COND (<LOP-AND .EOP>
1977 <COND (<LOP-NOT .EOP>
1979 <COND (<LOP-OR .EOP>
1983 <TPRINC "Supported compare operations: ">
1984 <COND (<COP-ALL .COP>
1986 <COND (<COP-CONSTANT .COP>
1987 <PRINC "CONSTANT ">)>
1988 <COND (<COP-FIELD .COP>
1990 <COND (<COP-EXP .COP>
1994 <TPRINC "Supported quantified relations: ">
1995 <COND (<QOP-ALL .QUAN>
1997 <COND (<QOP-NESTED .QUAN>
1999 <COND (<QOP-PARALLEL .QUAN>
2000 <PRINC "PARALLEL ">)>
2004 ;"PP-DBMS-TABLE pretty prints the DBMS-TABLE."
2006 <DEFINE PP-DBMS-TABLE (DT "AUX" (I 0))
2007 #DECL ((DT) VECTOR (I) FIX)
2008 <CRLF> <PRINC "DBMS Table: "> <CRLF>
2020 ;"PP-DIR pretty prints the entire schema directory."
2022 <DEFINE PP-DIR ("AUX" V E D)
2023 #DECL ((V E D) <OR VECTOR FALSE>)
2024 <COND (<NOT <GASSIGNED? SCHEMA-DIR>>
2025 <INITIALIZE-DIRECTORY>)>
2026 <SET V <VIEW-TABLE ,SCHEMA-DIR>>
2027 <SET E <ENTITY-TYPE-TABLE ,SCHEMA-DIR>>
2028 <SET D <DBMS-TABLE ,SCHEMA-DIR>>
2029 <CRLF> <PRINC " *** Schema Directory ***"> <CRLF>
2032 <PP-VIEW-TABLE .V> <CRLF>)
2034 <PRINC "View table is empty"> <CRLF>)>
2037 <PP-ENTITY-TYPE-TABLE .E> <CRLF>)
2039 <PRINC "Entity Type table is empty"> <CRLF>)>
2042 <PP-DBMS-TABLE .D> <CRLF>)
2044 <PRINC "DBMS table is empty"> <CRLF>)>>
2046 <DEFINE PP-ENTITY-PRED (TYP)
2047 #DECL ( (TYP) PREDICATE-TYPES)
2048 <COND (<PT-ALL .TYP>
2052 <COND (<PT-QUANT .TYP>
2053 <PRINC "QUANTIFIED ">)>
2054 <COND (<PT-NON-QUANT .TYP>
2055 <PRINC "NON-QUANTIFIED ">)>
2058 ;"PP-ENTITY-TYPE pretty prints an entry in the ENTITY-TYPE-TABLE."
2060 <DEFINE PP-ENTITY-TYPE (E "AUX" (F <ET-FUNCTIONS .E>) M)
2061 #DECL ((E) ENTITY-TYPE (F) VECTOR (M) <OR E-PHY-REP FALSE>)
2062 <TPRINC "Entity type name: "> <PRINC <ET-NAME .E>> <CRLF>
2063 <TPRINC "ETID: "> <PRINC <ET-ETID .E>> <CRLF>
2064 <TPRINC "VID: "> <PRINC <ET-VID .E>> <CRLF>
2065 <TPRINC "Supertypes: ">
2066 <PLIST <CHTYPE <ET-SUPERTYPES .E> LIST>>
2068 <TPRINC "Subtypes: ">
2069 <PLIST <CHTYPE <ET-SUBTYPES .E> LIST>>
2071 <TPRINC "Cotypes: ">
2072 <PLIST <CHTYPE <ET-COTYPES .E> LIST>>
2074 <TPRINC "Map type: "> <PRINC <ET-MAP-TYPE .E>> <CRLF>
2075 <TPRINC "Map info: "> <CRLF>
2076 <SET M <ET-MAP-INFO .E>>
2077 <COND (<TYPE? .M E-PHY-REP>
2078 <TTPRINC "Spelled: "> <PRIN1 <E-SPELLING .M>> <CRLF>
2079 <TTPRINC "DBMS id: "> <PRINC <E-DBMS-ID .M>> <CRLF>
2080 <TTPRINC "System entry point: "> <PRINC <E-SYS-EP .M>> <CRLF>
2081 <COND (<E-SYS-EP-AP-ONLY .M>
2082 <TTPRINC "System entry point by access path only">
2084 <TTPRINC "Context: "> <PRIN1 <E-CONTEXT .M>> <CRLF>
2085 <TTPRINC "Owners: "> <PLIST <CHTYPE <E-OWNERS .M> LIST>> <CRLF>
2086 <TTPRINC "# Fast access paths via equality: ">
2087 <PRINC <E-AP-EQ-COUNT .M>> <CRLF>
2089 <TTPRINC "Areas: "> <PLIST <CHTYPE <E-AREAS .M> LIST>>
2091 <COND (<E-SYS-SET .M>
2092 <TTPRINC "System owned set: "> <PRIN1 <E-SYS-SET .M>>
2094 <COND (<E-SYS-EP-KEYS .M>
2095 <TTPRINC "Iterate using keys: ">
2096 <PLIST <CHTYPE <E-SYS-EP-KEYS .M> LIST>>
2098 <COND (<E-ITER-PRED .M>
2099 <TTPRINC "When domain of iteration, may use ">
2100 <PP-ENTITY-PRED <E-ITER-PRED .M>>
2101 <PRINC "predicates">
2103 <COND (<E-QUANT-PRED .M>
2104 <TTPRINC "When domain of quantification, may use ">
2105 <PP-ENTITY-PRED <E-QUANT-PRED .M>>
2106 <PRINC "predicates">
2108 <COND (<E-NO-QUANT .M>
2109 <TTPRINC "May not be domain of quantified expression">
2112 <COND (<EMPTY? <E-KEY .M>>
2113 <TTPRINC "Entity key is database_key.">)
2115 <TTPRINC "Entity key uses functions: ">
2116 <PLIST <CHTYPE <E-KEY .M> LIST>>)>)
2118 <TTPRINC "Entity key is undefined.">)>
2121 <TPRINC "Functions:"> <CRLF> <PP-FUNC-TABLE .F>>
2123 ;"PP-ENTITY-TYPE-TABLE pretty prints the ENTITY-TYPE-TABLE."
2125 <DEFINE PP-ENTITY-TYPE-TABLE (ET "AUX" (I 0))
2126 #DECL ((ET) VECTOR (I) FIX)
2127 <PRINC "Entity Type Table:"> <CRLF>
2135 <PP-ENTITY-TYPE .E>)>>
2138 ;"PP-FUNC-TABLE pretty prints an entity type's functions."
2140 <DEFINE PP-FUNC-TABLE (FT "AUX" (I 0) M)
2141 #DECL ((FT) VECTOR (I) FIX (M) <OR F-PHY-REP FALSE>)
2149 <TPRINC "Name: "> <PRINC <F-NAME .F>> <CRLF>
2150 <TTPRINC "Type: "> <PRINC <F-TYPE .F>> <CRLF>
2151 <TTPRINC "Range: "> <PRINC <F-RANGE .F>> <CRLF>
2152 <TTPRINC "Min or ETID: ">
2153 <PRINC <F-MIN .F>> <CRLF>
2154 <TTPRINC "Max: "> <PRINC <F-MAX .F>> <CRLF>
2155 <TTPRINC "Map type: "> <PRINC <F-MAP-TYPE .F>>
2157 <TTPRINC "Map info:"> <CRLF>
2158 <SET M <F-MAP-INFO .F>>
2159 <COND (<TYPE? .M F-PHY-REP>
2160 <TTTPRINC "Spelled: ">
2161 <PRIN1 <F-SPELLING .M>> <CRLF>
2162 <COND (<OR <F-AP-EQ .M>
2165 <TTTPRINC "Access path: ">
2170 <COND (<F-AP-RANGE .M>
2172 <PRINC " when spelled ">
2173 <PRIN1 <F-AP-SPELLING .M>>
2176 <COND (<F-AP-UNIQUE .M>
2177 <TTTPRINC "CALC keys are unique">
2179 <COND (<F-AP-CO-FCNS .M>
2180 <TTTPRINC "Access path co-functions: ">
2181 <PLIST <CHTYPE <F-AP-CO-FCNS .M> LIST>>
2183 <COND (<F-AP-SELECTS .M>
2184 <TTTPRINC "Access path selects entity: ">
2185 <PRINC <F-AP-SELECTS .M>>
2187 <COND (<OR <==? <F-TYPE .F> F-INTEGER>
2188 <==? <F-TYPE .F> F-STRING>>
2189 <COND (<F-INT-STR .M>
2190 <TTTPRINC "Stored as character string"> <CRLF>)>
2191 <TTTPRINC "Characters to print: ">
2192 <PRINC <F-CONV-CHARS .M>> <CRLF>)>
2193 <COND (<OR <==? <F-TYPE .F> F-STRING>
2195 <TTTPRINC "Min chars: ">
2196 <PRINC <F-MIN-CHR .M>> <CRLF>
2197 <TTTPRINC "Max chars: ">
2198 <PRINC <F-MAX-CHR .M>> <CRLF>)>
2199 <COND (<OR <==? <F-TYPE .F> F-INTEGER>
2201 <TTTPRINC "Size in bits at GDM: ">
2202 <PRINC <F-CONV-BITS .M>> <CRLF>)>
2203 <COND (<OR <F-SET .M>
2206 <TTTPRINC "Implemented as: SET">
2208 <COND (<F-REPEAT-GRP .M>
2209 <TTTPRINC "Implemented as: REPEATING GROUP">
2212 <COND (<NOT <==? <F-TYPE .F>
2214 <TTTPRINC "Size in bits at DBMS: ">
2215 <PRINC <F-BITS .M>> <CRLF>
2216 <TTTPRINC "Representation: ">
2217 <PRINC <F-REP .M>> <CRLF>)>)>
2218 <COND (<SET AOP <F-ARITH-OPS .M>>
2219 <TTTPRINC "Restricted to arithmetic operations: ">
2220 <COND (<AOP-ALL .AOP>
2222 <COND (<AOP-PLUS .AOP>
2224 <COND (<AOP-MINUS .AOP>
2226 <COND (<AOP-MULTIPLY .AOP>
2227 <PRINC "MULTIPLY ">)>
2228 <COND (<AOP-DIVIDE .AOP>
2230 <COND (<AOP-CONCAT .AOP>
2231 <PRINC "CONCATENATE ">)>
2233 <COND (<SET ROP <F-REL-OPS .M>>
2234 <TTTPRINC "Restricted to relational operations: ">
2235 <COND (<ROP-ALL .ROP>
2237 <COND (<ROP-GT .ROP>
2239 <COND (<ROP-LT .ROP>
2241 <COND (<ROP-LE .ROP>
2243 <COND (<ROP-GE .ROP>
2245 <COND (<ROP-NE .ROP>
2247 <COND (<ROP-EQ .ROP>
2249 <COND (<ROP-AC .ROP>
2250 <PRINC "ALPHA-COLLATE ">)>
2251 <COND (<ROP-ISIN .ROP>
2257 ;"PP-VIEW-TABLE pretty prints the VIEW-TABLE."
2259 <DEFINE PP-VIEW-TABLE (VT "AUX" (I 0))
2260 #DECL ((VT) VECTOR (I) FIX)
2261 <CRLF> <PRINC "View Table:"> <CRLF>
2269 <TPRINC "View name: ">
2275 <ENDPACKAGE> ;"BUILD-DIR"