| 1 | DMSQF ;SFISC/JHM-INITIALIZE SQLI_FILE ;11/17/97  13:28
 | 
|---|
| 2 |  ;;22.0;VA FileMan;;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 | INI ;INITIALIZE ^DMSQ - CLEAR ALL TABLES
 | 
|---|
| 6 |  N I F I="S","KF","T","E","C","P","F","EX","ET","DT","DM","OF" D CLF^DMSQU(I)
 | 
|---|
| 7 |  D DMDT^DMSQD,LCKF^DMSQD ;INSTALL DOMAINS, DATA TYPES AND KEY FORMATS
 | 
|---|
| 8 |  D SCHEMA^DMSQS ;BUILD STANDARD SQLI SCHEMA
 | 
|---|
| 9 |  Q
 | 
|---|
| 10 | ET(T) D ET^DMSQU(T)
 | 
|---|
| 11 |  Q
 | 
|---|
| 12 | ALLF(I) ;INITIALIZE IF I. COMPILE ALL FILES, TABLE ELEMENTS AND INDICIES
 | 
|---|
| 13 |  I $G(DUZ(0))'["@" Q
 | 
|---|
| 14 |  N @$$NEW^DMSQU
 | 
|---|
| 15 |  N GF,PE,%H,F,IEN,IENL,FCI,FDI,T,TI,TT,KFI,KIE,KIX,KL,LK,FI,CEI,CI,FKI
 | 
|---|
| 16 |  N ET,TCT S ET=$H D INI:I,ENV^DMSQU
 | 
|---|
| 17 |  S (TCT,F)=0 F  S F=$O(^DIC(F)) Q:'F  D STORE(F),SF(F,""):TI
 | 
|---|
| 18 |  W ! D ET(ET) W ! S (TCT,TI)=0
 | 
|---|
| 19 |  F  S TI=$O(^DMSQ("T",TI)) Q:'TI  D
 | 
|---|
| 20 |  . D E(TI) I $D(ZTQUEUED)!$D(DMDOT) S TCT=TCT+1 W:$Y>29 ! W:TCT#20=1 "."
 | 
|---|
| 21 |  . E  W $C(13),"Columns of ",TI
 | 
|---|
| 22 |  W ! D ET(ET) W !
 | 
|---|
| 23 |  S CEI="",TCT=0 F  S CEI=$O(^DMSQ("E","C",13,CEI)) Q:CEI=""  D
 | 
|---|
| 24 |  . S CI=$O(^DMSQ("C","B",CEI,""))
 | 
|---|
| 25 |  . I CI S FKI=$$FK^DMSQF1(CI) I FKI D
 | 
|---|
| 26 |  . . I $D(ZTQUEUED)!$D(DMDOT) S TCT=TCT+1 W:$Y>29 ! W:TCT#20=1 "."
 | 
|---|
| 27 |  . . E  W $C(13),"Foreign key ",FKI
 | 
|---|
| 28 |  W ! D ET(ET) W !
 | 
|---|
| 29 |  S (TCT,TI)=0 F  S TI=$O(^DMSQ("T",TI)) Q:'TI  D
 | 
|---|
| 30 |  . Q:$P(^DMSQ("T",TI,0),U,4)  D INDEX^DMSQF2(TI)
 | 
|---|
| 31 |  . I $D(ZTQUEUED)!$D(DMDOT) S TCT=TCT+1 W:$Y>29 ! W:TCT#20=1 "."
 | 
|---|
| 32 |  . E  W $C(13),"Index ",TI
 | 
|---|
| 33 |  . D PFK^DMSQF2(TI)
 | 
|---|
| 34 |  W ! D ET(ET)
 | 
|---|
| 35 |  Q
 | 
|---|
| 36 | ONEF(F) ;COMPILE FILE F, COLUMNS AND INDICIES
 | 
|---|
| 37 |  I $G(DUZ(0))'="@" Q
 | 
|---|
| 38 |  I '$$FIL^DMSQU(F) D ERR^DMSQU(F,"","ONEF: NO PARENT STRUCTURE") Q
 | 
|---|
| 39 |  N @$$NEW^DMSQU,TI,CEI,CI,FKI D ENV^DMSQU
 | 
|---|
| 40 |  S TI=$$FILE(F) I 'TI Q
 | 
|---|
| 41 |  D E(TI) S CEI="" F  S CEI=$O(^DMSQ("E","D",TI,CEI)) Q:'CEI  D
 | 
|---|
| 42 |  . S E=^DMSQ("E",CEI,0) Q:$P(E,U,2)'=13
 | 
|---|
| 43 |  . S CI=$O(^DMSQ("C","B",CEI,"")) Q:'CI
 | 
|---|
| 44 |  . S FKI=$$FK^DMSQF1(CI)
 | 
|---|
| 45 |  D PFK^DMSQF2(TI)
 | 
|---|
| 46 |  I '$P(^DMSQ("T",TI,0),U,4) D INDEX^DMSQF2(TI)
 | 
|---|
| 47 |  Q
 | 
|---|
| 48 | SF(P,F) ;RECURSIVELY PARSE AND COMPILE SUBFILES (F) OF PARENT FILE (P)
 | 
|---|
| 49 |  F  S F=$O(^DD(P,"SB",F)) Q:'F  D
 | 
|---|
| 50 |  . I $G(^DD(F,0,"UP"))'=P D ERR^DMSQU(F,P,"SUBFILE: BAD UP-LINK TO PARENT") Q
 | 
|---|
| 51 |  . D STORE(F),SF(F,""):TI
 | 
|---|
| 52 |  Q
 | 
|---|
| 53 | STORE(F) S TI=$$FILE(F)
 | 
|---|
| 54 |  I $D(ZTQUEUED)!$D(DMDOT) S TCT=TCT+1 W:$Y>29 ! W:TCT#20=1 "."
 | 
|---|
| 55 |  E  W:TI $C(13),"Table ",TI
 | 
|---|
| 56 |  Q
 | 
|---|
| 57 | E(TI) ;BUILD COLUMNS
 | 
|---|
| 58 |  N LK,F,FI,CI
 | 
|---|
| 59 |  S F=$P(^DMSQ("T",TI,0),U,7),FI=.001
 | 
|---|
| 60 |  F  S FI=$O(^DD(F,FI)) Q:'FI  S CI=$$C(F,FI)
 | 
|---|
| 61 |  Q
 | 
|---|
| 62 | FILE(F) ;COMPILE SQLI FOR FILE #F
 | 
|---|
| 63 |  N TI,DS,P,X,TF,IEN,FIL,NM,FDA
 | 
|---|
| 64 |  S TI=$O(^DMSQ("T","C",F,""))
 | 
|---|
| 65 |  I F=.6!(F=1.1) D ERR^DMSQU(F,"","FILE: NOT FILEMAN COMPATIBLE") Q ""
 | 
|---|
| 66 |  I $D(^DIC(F)) D  Q:$D(ERR) ""
 | 
|---|
| 67 |  . K ERR,DIERR D FILE^DID(F,"","NAME;DESCRIPTION","FIL","ERR")
 | 
|---|
| 68 |  . I $D(ERR) D ERR^DMSQU(F,"","FILE: NO DESCRIPTION") Q
 | 
|---|
| 69 |  . I '$D(FIL("DESCRIPTION")) D ERR^DMSQU(F,"","FILE: NULL DESCRIPTION") Q
 | 
|---|
| 70 |  . S DS=$E($G(FIL("DESCRIPTION",1)),1,60)
 | 
|---|
| 71 |  . F  Q:DS'[U  S DS=$P(DS,U)_"<94>"_$P(DS,U,2,99)
 | 
|---|
| 72 |  E  D  I 'P D ERR^DMSQU(F,"","FILE: SUBFILE WITHOUT PARENT") Q ""
 | 
|---|
| 73 |  . S FIL("NAME")=$O(^DD(F,0,"NM","")),P=$G(^DD(F,0,"UP"))
 | 
|---|
| 74 |  . I P S DS="Subfile of "_$O(^DD(P,0,"NM",""))
 | 
|---|
| 75 |  I $G(FIL("NAME"))="" D ERR^DMSQU(F,"","FILE: NO NAME") Q ""
 | 
|---|
| 76 |  I FIL("NAME")?1"*".E D ERR^DMSQU(F,"","FILE: OBSOLETE") Q ""
 | 
|---|
| 77 |  S X=$$ROOT^DMSQU(F)
 | 
|---|
| 78 |  I X="^" D ERR^DMSQU(F,"","FILE: NO GLOBAL ROOT") Q ""
 | 
|---|
| 79 |  S FIL("GLOBAL NAME")=X
 | 
|---|
| 80 |  S NM=$$FNB^DMSQU(F,TI) I NM="" D ERR^DMSQU(F,"","FILE: CAN'T BUILD SQL NAME") Q ""
 | 
|---|
| 81 |  S TF=1.5215,IEN=$S(TI:TI,1:"+1")_","
 | 
|---|
| 82 |  K FDA
 | 
|---|
| 83 |  S FDA(TF,IEN,.01)=NM ;LABEL
 | 
|---|
| 84 |  S FDA(TF,IEN,1)=1 ;SCHEMA SQLI
 | 
|---|
| 85 |  S FDA(TF,IEN,2)=DS ;DESCRIPTION
 | 
|---|
| 86 |  S FDA(TF,IEN,4)=1 ;VERSION NUMBER
 | 
|---|
| 87 |  S FDA(TF,IEN,6)=F ;SOURCE FILE
 | 
|---|
| 88 |  S FDA(TF,IEN,7)=DT ;UPDATE DATE
 | 
|---|
| 89 |  S FDA(TF,IEN,8)=FIL("GLOBAL NAME") ;FULL GLOBAL REFERENCE
 | 
|---|
| 90 |  S TI=$$PUT^DMSQU(IEN,"FDA","ERR")
 | 
|---|
| 91 |  I $D(ERR) D ERR^DMSQU(F,"","FILE: INSERT OF TABLE FAILED")
 | 
|---|
| 92 |  I TI S X=$$PK^DMSQF1(TI)
 | 
|---|
| 93 |  Q TI
 | 
|---|
| 94 | GETEXEC ;S {V}=$$GET1^DIQ({F},{IENS},{FI})
 | 
|---|
| 95 | C(F,FI) ;GENERATE NON-KEY ELEMENT/COLUMNS FOR FILE F, FIELD FI
 | 
|---|
| 96 |  I '$G(DIFM) D ENV^DMSQU
 | 
|---|
| 97 |  N RQ,OF,P,WP,FDA,CI,CEI,TI,TN,DM,DEF,CM,CN,TP,W,S,TT,IEN,X,CX,FX,XX
 | 
|---|
| 98 |  N G,PC,E
 | 
|---|
| 99 |  S CI=$O(^DMSQ("C","D",F,FI,"")),CEI=$S(CI:$P(^DMSQ("C",CI,0),U),1:"")
 | 
|---|
| 100 |  I CI,'CEI D ERR^DMSQU(F,FI,"COLUMN: NO CORRESPONDING TABLE ELEMENT") Q ""
 | 
|---|
| 101 |  S TI=$O(^DMSQ("T","C",F,""))
 | 
|---|
| 102 |  I 'TI D ERR^DMSQU(F,FI,"COLUMN: NO ASSOCIATED TABLE") Q ""
 | 
|---|
| 103 |  I $P(^DMSQ("T",TI,0),U,4) Q "" ;SKIP INDEX TABLES
 | 
|---|
| 104 |  S TN=$P(^DMSQ("T",TI,0),U)
 | 
|---|
| 105 |  S DM=$$DOM^DMSQU(F,FI,.DEF)
 | 
|---|
| 106 |  I $D(ERR)!$D(DIERR) D ERR^DMSQU(F,FI,"COLUMN: CAN'T GET FIELD ELEMENTS") Q ""
 | 
|---|
| 107 |  I DM="" D ERR^DMSQU(F,FI,"COLUMN: NULL FIELD TYPE (DOMAIN)") Q ""
 | 
|---|
| 108 |  I DEF("LABEL")?1"*".E Q ""
 | 
|---|
| 109 |  I DEF("LABEL")?.P D ERR^DMSQU(F,FI,"COLUMN: INVALID FIELD LABEL") Q ""
 | 
|---|
| 110 |  S CN=$$CN^DMSQU(TI,CEI,DEF("LABEL")),TP=DEF("TYPE")
 | 
|---|
| 111 |  S WP=TP="WORD-PROCESSING",CM=DEF("DESCRIPTION")
 | 
|---|
| 112 |  F  Q:CM'[U  S CM=$P(CM,U)_"<94>"_$P(CM,U,2,99)
 | 
|---|
| 113 |  I CM="" S CM="Column header for "_TN_"."_CN
 | 
|---|
| 114 |  I DEF("MULTIPLE-VALUED"),'WP Q ""
 | 
|---|
| 115 |  I WP,FI=.01 S $P(DM,U)="CHARACTER"
 | 
|---|
| 116 |  S OF="" I TP="SET" S X=DEF("POINTER"),OF=$$SETOF^DMSQD(.X)
 | 
|---|
| 117 |  S (CX,FX,XX)="" I "COMPUTED,POINTER,VARIABLE-POINTER"[TP D
 | 
|---|
| 118 |  . N IEN S IEN=""""_$$VIEN^DMSQU(TI)_""""
 | 
|---|
| 119 |  . S XX=1,FX="S {V}=$$GET^DMSQU("_F_","_IEN_","_FI_")"
 | 
|---|
| 120 |  . I TP="COMPUTED" S CX=DEF("INPUT TRANSFORM")
 | 
|---|
| 121 |  I TP="POINTER" S OF=$$PTROF^DMSQD(+$P(DEF("SPECIFIER"),"P",2))
 | 
|---|
| 122 |  E  I TP="VARIABLE-POINTER" S OF=$$VPTOF^DMSQD(F,FI)
 | 
|---|
| 123 |  S W=$P(DM,U,2),S=$P(DM,U,3)
 | 
|---|
| 124 |  I S<0 D ERR^DMSQU(F,FI,"COLUMN: DECIMAL DEFAULT IS NEGATIVE") Q ""
 | 
|---|
| 125 |  S RQ=$S(WP:0,FI=.01:1,DEF("SPECIFIER")["R"&$D(^DD(F,0,"ID",FI)):1,1:0)
 | 
|---|
| 126 |  S DM=$P(DM,U),DI=$O(^DMSQ("DM","B",DM,""))
 | 
|---|
| 127 |  I 'DI D ERR^DMSQU(F,FI,"COLUMN: FIELD TYPE NOT KNOWN TO SQLI") Q ""
 | 
|---|
| 128 |  ;DEFINE COLUMN ELEMENT
 | 
|---|
| 129 |  S TT=1.5216,IEN=$S(CEI:CEI,1:"+1")_","
 | 
|---|
| 130 |  S FDA(TT,IEN,.01)=CN ;COLUMN NAME
 | 
|---|
| 131 |  S FDA(TT,IEN,1)=DI ;DOMAIN
 | 
|---|
| 132 |  S FDA(TT,IEN,2)=TI ;COLUMN TABLE
 | 
|---|
| 133 |  S FDA(TT,IEN,3)="C" ;TYPE C = COLUMN
 | 
|---|
| 134 |  S FDA(TT,IEN,4)=CM ;DESCRIPTION
 | 
|---|
| 135 |  S CEI=$$PUT^DMSQU(IEN,"FDA","ERR")
 | 
|---|
| 136 |  I $D(ERR) D ERR^DMSQU(F,FI,"COLUMN: INSERT OF COLUMN ELEMENT FAILED") Q ""
 | 
|---|
| 137 |  ;DEFINE COLUMN
 | 
|---|
| 138 |  S TT=1.5217,IEN=$S(CI:CI,1:"+1")_","
 | 
|---|
| 139 |  S FDA(TT,IEN,.01)=CEI ;COLUMN TABLE ELEMENT
 | 
|---|
| 140 |  S FDA(TT,IEN,1)=F ;FILEMAN FILE NUMBER
 | 
|---|
| 141 |  S FDA(TT,IEN,2)=W ;FIELD LENGTH
 | 
|---|
| 142 |  S FDA(TT,IEN,3)=S ;DECIMAL POINTS
 | 
|---|
| 143 |  S FDA(TT,IEN,4)=FI ;FILEMAN FIELD NUMBER
 | 
|---|
| 144 |  S FDA(TT,IEN,5)=RQ ;REQUIRED FLAG
 | 
|---|
| 145 |  I XX D  G CPUT:TP="COMPUTED"
 | 
|---|
| 146 |  . S FDA(TT,IEN,7)=1
 | 
|---|
| 147 |  . S:CX]"" FDA(TT,IEN,13)=CX ; DIRECT COMPUTATION EXECUTE
 | 
|---|
| 148 |  . S:FX]"" FDA(TT,IEN,14)=FX ; FILEMAN $$GET1^DIQ EXECUTE
 | 
|---|
| 149 |  S FDA(TT,IEN,6)=0 ;SECURITY FLAG - NEED LOGIC TO SET THIS RIGHT
 | 
|---|
| 150 |  S FDA(TT,IEN,7)=0 ;NOT CALCULATED
 | 
|---|
| 151 |  S P=$$PAR^DMSQU(TI,DEF("GLOBAL SUBSCRIPT LOCATION"),.G,.PC,.E)
 | 
|---|
| 152 |  I DEF("TYPE")="MUMPS" S PC=""
 | 
|---|
| 153 |  S FDA(TT,IEN,8)=P ;PARENT COLUMN (LAST PRIMARY KEY)
 | 
|---|
| 154 |  S FDA(TT,IEN,9)=G ;GLOBAL FRAGMENT
 | 
|---|
| 155 |  I PC,'WP S FDA(TT,IEN,10)=PC ;PIECE (WP .01 FIELDS ARE REALLY TYPE K!)
 | 
|---|
| 156 |  E  D:E 
 | 
|---|
| 157 |  . S FDA(TT,IEN,11)=+E,FDA(TT,IEN,12)=$P(E,",",2) ;EXTRACT FROM TO
 | 
|---|
| 158 |  I DEF("POINTER")]"" S FDA(TT,IEN,15)=DEF("POINTER") ; POINTER OR SET
 | 
|---|
| 159 |  I OF S FDA(TT,IEN,16)=OF ; OUTPUT FORMAT IF ANY
 | 
|---|
| 160 | CPUT S CI=$$PUT^DMSQU(IEN,"FDA","ERR")
 | 
|---|
| 161 |  I $D(ERR) D
 | 
|---|
| 162 |  . D ERR^DMSQU(F,FI,"COLUMN: INSERT OF COLUMN RECORD FAILED")
 | 
|---|
| 163 | CQ Q CI
 | 
|---|