1 | DMSQF1 ;SFISC/JHM-INITIALIZE SQLI_FILE (CONT) ;5/7/98 14:53
|
---|
2 | ;;22.0;VA FileMan;;Mar 30, 1999
|
---|
3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | Q
|
---|
5 | PK(TI) ;GENERATE PRIMARY KEY ELEMENTS AND COLUMNS FOR TABLE IDENTIFIER TI
|
---|
6 | I '$G(DIFM) D ENV^DMSQU
|
---|
7 | N X,N,G,PAR,PEI,TIEN,T,DIERR S T=1.5215,TIEN=TI_","
|
---|
8 | K DIERR D GETS^DIQ(T,TIEN,".01;6;8","I","X")
|
---|
9 | I $D(DIERR) D ERR^DMSQU(999999999,"","PRIMARY KEY: CAN'T GET TABLE DATA") Q ""
|
---|
10 | S N=X(T,TIEN,.01,"I"),G=X(T,TIEN,8,"I"),F=X(T,TIEN,6,"I")
|
---|
11 | K FDA S TT=1.5212,DI=$O(^DMSQ("DM","C",TI,"")) ;BUILD DOMAIN
|
---|
12 | S IEN=$S(DI:DI,1:"+1")_"," ;TABLE DOMAIN
|
---|
13 | S FDA(TT,IEN,.01)=N_"_ID" ;DOMAIN NAME
|
---|
14 | S FDA(TT,IEN,1)=1 ;DATA TYPE = PRIMARY KEY
|
---|
15 | S FDA(TT,IEN,2)="Domain of table "_N ;COMMENT
|
---|
16 | S FDA(TT,IEN,3)=TI ;TABLE ID
|
---|
17 | S DI=$$PUT^DMSQU(IEN,"FDA","ERR")
|
---|
18 | I 'DI D ERR^DMSQU(F,"","PRIMARY KEY: DOMAIN INSERT FAILED") Q ""
|
---|
19 | ; BUILD PRIMARY KEY TABLE ELEMENT
|
---|
20 | S PEI=$O(^DMSQ("E","F",TI,"P","")),IEN=$S(PEI:PEI,1:"+1")_",",TT=1.5216
|
---|
21 | S FDA(TT,IEN,.01)=N_"_PK" ;TABLE ELEMENT NAME
|
---|
22 | S FDA(TT,IEN,1)=DI ;TE DOMAIN SAME AS TABLE
|
---|
23 | S FDA(TT,IEN,2)=TI ;TABLE ID
|
---|
24 | S FDA(TT,IEN,3)="P" ;TYPE = PRIMARY KEY
|
---|
25 | S FDA(TT,IEN,4)="Primary key header for table "_N ;COMMENT
|
---|
26 | S PEI=$$PUT^DMSQU(IEN,"FDA","ERR")
|
---|
27 | I 'PEI D ERR^DMSQU(F,"","PRIMARY KEY: TABLE ELEMENT INSERT FAILED") Q ""
|
---|
28 | ;BUILD TABLE PRIMARY KEYS
|
---|
29 | S F=$$GET^DMSQU(1.5215,TI_",",6,"I","","ERR"),KL=$$KL^DMSQU(F),PAR=""
|
---|
30 | I $D(ERR)!'F D ERR^DMSQU(F,"","PRIMARY KEY: CAN'T GET TABLE'S FILE #") Q ""
|
---|
31 | F I=1:1:$L(G,"{K}")-1 D PKI(PEI,I,$P(KL,",",I),$P(G,"{K}",I),.PAR)
|
---|
32 | Q CEI
|
---|
33 | PKI(PEI,SEQ,F,GF,PAR) ;BUILD COLUMN ELEMENT, COLUMN AND PRIMARY KEY DEFS
|
---|
34 | N TN,KI,KN,PI,CI,DM,W,S,TT,I,DI,ERR
|
---|
35 | S TN=$$GET^DMSQU(1.5216,PEI_",",2,"","","ERR")
|
---|
36 | I TN="" D ERR^DMSQU(F,SEQ,"INDEX PRIMARY KEY: CAN'T GET DATA FOR MASTER TABLE") Q ""
|
---|
37 | S KI=$O(^DMSQ("T","C",F,""))
|
---|
38 | I 'KI D ERR^DMSQU(F,SEQ,"INDEX PRIMARY KEY: MISSING TABLE RECORD") Q ""
|
---|
39 | S KN=$$GET^DMSQU(1.5215,KI_",",.01),(CI,CEI)=""
|
---|
40 | S PI=$O(^DMSQ("P","C",PEI,SEQ,""))
|
---|
41 | I PI K ERR,DIERR D Q:'CI!'CEI
|
---|
42 | . S CI=$$GET^DMSQU(1.5218,PI_",",1,"I","","ERR")
|
---|
43 | . I $D(ERR) D ERR^DMSQU(F,SEQ,"INDEX PRIMARY KEY: TABLE MISSING COLUMN POINTER") Q
|
---|
44 | . I CI S CEI=$$GET^DMSQU(1.5217,CI_",",.01,"I","","ERR")
|
---|
45 | . I $D(ERR) D ERR^DMSQU(F,SEQ,"INDEX PRIMARY KEY: CAN'T GET COLUMN'S TABLE ELEMENT") Q
|
---|
46 | . I 'CI!('CEI) D ERR^DMSQU(F,SEQ,"INDEX PRIMARY KEY: MISSING COLUMN POINTER") Q
|
---|
47 | ;DEFINE COLUMN ELEMENT
|
---|
48 | S IEN=$S(CEI:CEI,1:"+1")_",",TT=1.5216
|
---|
49 | S DM=$$DOM^DMSQU(F,.001),W=$P(DM,U,2),S=$P(DM,U,3),DM=$P(DM,U)
|
---|
50 | I DM=""!("FM_DATE_TIME;FM_MOMENT;FM_DATE;INTEGER;NUMERIC"'[DM) S DM="INTEGER",W=10
|
---|
51 | S DI=$O(^DMSQ("DM","B",DM,""))
|
---|
52 | S FDA(TT,IEN,.01)=$$KWC^DMSQU(KN_"_ID") ;COLUMN NAME = TABLE_NAME_ID
|
---|
53 | S FDA(TT,IEN,1)=DI ;DOMAIN
|
---|
54 | S FDA(TT,IEN,2)=TI ;TABLE ID
|
---|
55 | S FDA(TT,IEN,3)="C" ; TYPE = COLUMN
|
---|
56 | S FDA(TT,IEN,4)="Primary key #"_SEQ_" of table "_TN ; COMMENT
|
---|
57 | S CEI=$$PUT^DMSQU(IEN,"FDA","ERR")
|
---|
58 | I $D(ERR) D ERR^DMSQU(F,SEQ,"INDEX PRIMARY KEY: COLUMN ELEMENT INSERT FAILED") Q
|
---|
59 | ;DEFINE COLUMN
|
---|
60 | S TT=1.5217,CI=$O(^DMSQ("C","B",CEI,"")),IEN=$S(CI:CI,1:"+1")_","
|
---|
61 | S FDA(TT,IEN,.01)=CEI ;COL ELEMENT ID
|
---|
62 | S FDA(TT,IEN,2)=W ;WIDTH
|
---|
63 | S:S FDA(TT,IEN,3)=S ;SCALE
|
---|
64 | S FDA(TT,IEN,5)=1 ;REQUIRED
|
---|
65 | S FDA(TT,IEN,7)=0 ;BASE COLUMN
|
---|
66 | S FDA(TT,IEN,9)=GF ;GLOBAL FRAGMENT
|
---|
67 | S FDA(TT,IEN,8)=PAR ;PARENT
|
---|
68 | S CI=$$PUT^DMSQU(IEN,"FDA","ERR")
|
---|
69 | I $D(ERR) D ERR^DMSQU(F,SEQ,"INDEX PRIMARY KEY: COLUMN INSERT FAILED") Q
|
---|
70 | S PAR=CI
|
---|
71 | ;DEFINE PRIMARY KEY
|
---|
72 | S TT=1.5218,PI=$O(^DMSQ("P","C",PEI,SEQ,"")),IEN=$S(PI:PI,1:"+1")_","
|
---|
73 | S FDA(TT,IEN,.01)=PEI ; TABLE ELEMENT
|
---|
74 | S FDA(TT,IEN,1)=CI ; COLUMN
|
---|
75 | S FDA(TT,IEN,2)=SEQ ; SEQUENCE NUMBER
|
---|
76 | S FDA(TT,IEN,3)=0 ; ALWAYS START AT 0
|
---|
77 | S FDA(TT,IEN,4)="'{K}" ; STOP AT EXPRESSION
|
---|
78 | S CI=$$PUT^DMSQU(IEN,"FDA","ERR")
|
---|
79 | I $D(ERR) D ERR^DMSQU(F,SEQ,"INDEX PRIMARY KEY: TABLE ELEMENT INSERT FAILED")
|
---|
80 | Q
|
---|
81 | FK(CI) ;DEFINE FOREIGN KEY FOR POINTER COLUMN CI
|
---|
82 | N C,CEI,CE,CN,F,FI,TI,SP,FF,FIEN,FTI,FTN,FPEI,FPE,FPI,FNM,TT,IEN,FDA
|
---|
83 | S C=^DMSQ("C",CI,0)
|
---|
84 | S CEI=$P(C,U),CE=^DMSQ("E",CEI,0),CN=$P(CE,U) Q:$P(CE,U,2)'=13 ""
|
---|
85 | S F=$P(C,U,5),FI=$P(C,U,6) I 'F!'FI Q ""
|
---|
86 | S TI=$P(CE,U,3),SP=$P(^DD(F,FI,0),U,2)
|
---|
87 | S FF=+$P(SP,"P",2)
|
---|
88 | I 'FF D ERR^DMSQU(F,FI,"FOREIGN KEY: NO POINTED-TO FILE IN SPECIFIER") Q ""
|
---|
89 | S FTI=$O(^DMSQ("T","C",FF,""))
|
---|
90 | I 'FTI D ERR^DMSQU(F,FI,"FOREIGN KEY: NO TABLE FOR POINTED-TO FILE") Q ""
|
---|
91 | S FTN=$P(^DMSQ("T",FTI,0),U)
|
---|
92 | S FPEI=$O(^DMSQ("E","F",FTI,"P",""))
|
---|
93 | I 'FPEI D ERR^DMSQU(F,FI,"FOREIGN KEY: NO PRIMARY KEY TABLE ELEMENT") Q ""
|
---|
94 | S FPE=^DMSQ("E",FPEI,0),FDI=$P(FPE,U,2)
|
---|
95 | S FPI=$O(^DMSQ("P","B",FPEI,""))
|
---|
96 | I 'FPI D ERR^DMSQU(F,FI,"FOREIGN KEY: NO ASSOCIATED PRIMARY KEY") Q ""
|
---|
97 | S FCI=$P(^DMSQ("P",FPI,0),U,2)
|
---|
98 | S FNM=CN_"_FK",IEN=$O(^DMSQ("E","G",TI,FNM,""))
|
---|
99 | ;BUILD FOREIGN KEY TABLE ELEMENT
|
---|
100 | S TT=1.5216,IEN=$S(IEN:IEN,1:"+1")_","
|
---|
101 | S FDA(TT,IEN,.01)=FNM ;FOREIGN KEY NAME
|
---|
102 | S FDA(TT,IEN,1)=FDI ;DOMAIN = FOREIGN KEY TABLE DOMAIN
|
---|
103 | S FDA(TT,IEN,2)=TI ;TABLE ID
|
---|
104 | S FDA(TT,IEN,3)="F" ;TYPE F = FOREIGN KEY
|
---|
105 | S FDA(TT,IEN,4)="Foreign key to "_FTN ;COMMENT
|
---|
106 | S FIEN=$$PUT^DMSQU(IEN,"FDA","ERR")
|
---|
107 | I $D(ERR) D ERR^DMSQU(F,FI,"FOREIGN KEY: TABLE ELEMENT INSERT FAILED") Q ""
|
---|
108 | ;BUILD FOREIGN KEY COLUMN ELEMENT
|
---|
109 | S TT=1.5219,IEN=$O(^DMSQ("F","B",FIEN,"")),IEN=$S(IEN:IEN,1:"+1")_","
|
---|
110 | S FDA(TT,IEN,.01)=FIEN ;FK TABLE ELEMENT ID
|
---|
111 | S FDA(TT,IEN,1)=FPI ;FOREIGN TABLE PRIMARY KEY ELEMENT ID
|
---|
112 | S FDA(TT,IEN,2)=CI ;COLUMN ID IN LOCAL TABLE
|
---|
113 | S FIEN=$$PUT^DMSQU(IEN,"FDA","ERR")
|
---|
114 | I $D(ERR) D ERR^DMSQU(F,FI,"FOREIGN KEY: COLUMN ELEMENT INSERT FAILED")
|
---|
115 | Q FIEN
|
---|