1 | BMXSQL3 ; IHS/OIT/HMW - BMX REMOTE PROCEDURE CALLS ;
|
---|
2 | ;;4.1000;BMX;;Apr 17, 2011
|
---|
3 | ;
|
---|
4 | ;
|
---|
5 | PLEVEL(BMXFF,BMXLVL,BMXRET) ;EP
|
---|
6 | ;Analyze WHERE statement according to paren level
|
---|
7 | ;Return a string to guide building of iterator(s)
|
---|
8 | ;
|
---|
9 | ;Basically, count the number of OR clauses on the
|
---|
10 | ;same paren level
|
---|
11 | ;IN: BMXFF()
|
---|
12 | ;OUT: BMXLVL(), BMXRET
|
---|
13 | ;
|
---|
14 | ;BMXRET = 1&/!2&/!...&/!n clauses
|
---|
15 | ;BMXLVL(E,"BEGIN")=Index where element E begins
|
---|
16 | ;BMXLVL(E,"END") =Index where element E ends
|
---|
17 | ;BMXLVL(E,"ELEMENTS")=Number of subelements in element E
|
---|
18 | ;
|
---|
19 | N BMXNOR,BMXNAND,J,C,BMXTMP
|
---|
20 | N E,L,BMXCNT
|
---|
21 | ;Test for no ORs or no ANDs
|
---|
22 | S BMXNOR=1,BMXNAND=1
|
---|
23 | S J=0 F S J=$O(BMXFF(J)) Q:'+J D ;Q:'BMXNOR Q:'BMXNAND
|
---|
24 | . I BMXFF(J)="OR" S BMXNOR=0
|
---|
25 | . I BMXFF(J)="AND" S BMXNAND=0
|
---|
26 | . Q
|
---|
27 | ;If no ORs or no ANDs then take all parens out of BMXFF
|
---|
28 | I ((BMXNOR)!(BMXNAND)) D
|
---|
29 | . S:$D(BMXFF("INDEX")) BMXTMP("INDEX")=BMXFF("INDEX")
|
---|
30 | . S J=0,C=0 F S J=$O(BMXFF(J)) Q:'+J D:"(^)"'[BMXFF(J)
|
---|
31 | . . S C=C+1
|
---|
32 | . . S BMXTMP(C)=BMXFF(J)
|
---|
33 | . . S:$D(BMXFF(J,0)) BMXTMP(C,0)=BMXFF(J,0)
|
---|
34 | . . S:$D(BMXFF(J,"INTERNAL")) BMXTMP(J,"INTERNAL")=BMXFF(J,"INTERNAL")
|
---|
35 | . . S:$D(BMXFF(J,"TYPE")) BMXTMP(C,"TYPE")=BMXFF(J,"TYPE")
|
---|
36 | . . S:$D(BMXFF(J,"IEN")) BMXTMP(C,"IEN")=BMXFF(J,"IEN")
|
---|
37 | . . S:$D(BMXFF(J,"JOIN")) BMXTMP(C,"JOIN")=BMXFF(J,"JOIN")
|
---|
38 | . . S:$D(BMXFF(J,"JOIN","IEN")) BMXTMP(C,"JOIN","IEN")=BMXFF(J,"JOIN","IEN")
|
---|
39 | . . ;I $D(BMXFF(J,"JOIN")) D
|
---|
40 | . . ;. N K S K=0 F S K=$O(BMXFF(J,"JOIN",K)) Q:'+K D
|
---|
41 | . . ;. . N L S L=0 F S L=$O(BMXFF(J,"JOIN",K,L)) Q:'+L D
|
---|
42 | . . ;. . . S BMXTMP(C,"JOIN",K,L)=BMXFF(J,"JOIN",K,L)
|
---|
43 | . . I $D(BMXFF(J,"SET")) D
|
---|
44 | . . . N BMXSS
|
---|
45 | . . . S BMXSS="" F S BMXSS=$O(BMXFF(J,"SET",BMXSS)) Q:BMXSS="" D
|
---|
46 | . . . . S BMXTMP(C,"SET",BMXSS)=BMXFF(J,"SET",BMXSS)
|
---|
47 | . K BMXFF
|
---|
48 | . I $D(BMXTMP("INDEX")) S BMXFF("INDEX")=BMXTMP("INDEX")
|
---|
49 | . S J=0 F S J=$O(BMXTMP(J)) Q:'+J D
|
---|
50 | . . S BMXFF(J)=BMXTMP(J)
|
---|
51 | . . S:$D(BMXTMP(J,0)) BMXFF(J,0)=BMXTMP(J,0)
|
---|
52 | . . S:$D(BMXTMP(J,"TYPE")) BMXFF(J,"TYPE")=BMXTMP(J,"TYPE")
|
---|
53 | . . I $D(BMXTMP(J,"JOIN")) S BMXFF(J,"JOIN")=BMXTMP(J,"JOIN") S:$D(BMXTMP(J,"JOIN","IEN")) BMXFF(J,"JOIN","IEN")=BMXTMP(J,"JOIN","IEN") S BMXFJ("JOIN",+$P($P(BMXFF(J,0),U,2),"P",2))=J
|
---|
54 | . . ;I $D(BMXTMP(J,"JOIN")) D
|
---|
55 | . . ;. N K S K=0 F S K=$O(BMXTMP(J,"JOIN",K)) Q:'+K D
|
---|
56 | . . ;. . N L S L=0 F S L=$O(BMXTMP(J,"JOIN",K,L)) Q:'+L D
|
---|
57 | . . ;. . . S BMXFF(J,"JOIN",K,L)=BMXTMP(J,"JOIN",K,L)
|
---|
58 | . . I $D(BMXTMP(J,"SET")) D
|
---|
59 | . . . N BMXSS
|
---|
60 | . . . S BMXSS="" F S BMXSS=$O(BMXTMP(J,"SET",BMXSS)) Q:BMXSS="" D
|
---|
61 | . . . . S BMXFF(J,"SET",BMXSS)=BMXTMP(J,"SET",BMXSS)
|
---|
62 | . . I $D(BMXTMP(J,"INTERNAL")) S BMXFF(J,"INTERNAL")=BMXTMP(J,"INTERNAL")
|
---|
63 | . . I $D(BMXTMP(J,"IEN")) S BMXFF(J,"IEN")=BMXTMP(J,"IEN")
|
---|
64 | . S BMXFF=C
|
---|
65 | . Q
|
---|
66 | ;
|
---|
67 | ;Remove excess leading and trailing parens
|
---|
68 | ;Find close paren corresponding to BMXFF(1)
|
---|
69 | ;If its the last paren, then remove the first and last parens
|
---|
70 | ;Else, quit
|
---|
71 | N BMXEND
|
---|
72 | S BMXEND=0
|
---|
73 | F Q:'((BMXFF(1)="(")&(BMXFF(BMXFF)=")")) Q:BMXEND D
|
---|
74 | . S L=1,J=1
|
---|
75 | . F S J=$O(BMXFF(J)) Q:'+J D:"(^)"[BMXFF(J) Q:BMXEND
|
---|
76 | . . I BMXFF(J)="(" S L=L+1 Q
|
---|
77 | . . I BMXFF(J)=")" S L=L-1
|
---|
78 | . . I L=0,J<BMXFF S BMXEND=1 Q
|
---|
79 | . . I L=0,J=BMXFF D Q
|
---|
80 | . . . K BMXFF(1),BMXFF(BMXFF)
|
---|
81 | . . . F J=2:1:BMXFF-1 D
|
---|
82 | . . . . S BMXFF(J-1)=BMXFF(J)
|
---|
83 | . . . . S:$D(BMXFF(J,0)) BMXFF(J-1,0)=BMXFF(J,0)
|
---|
84 | . . . . K BMXFF(J)
|
---|
85 | . . . S BMXFF=BMXFF-2
|
---|
86 | ;
|
---|
87 | S BMXRET="",E=1,L=0,BMXCNT=0
|
---|
88 | K BMXLVL
|
---|
89 | S J=0 F S J=$O(BMXFF(J)) Q:'+J D
|
---|
90 | . I BMXFF(J)="(" D Q ;If BMXFF(J) is an open paren
|
---|
91 | . . S L=1
|
---|
92 | . . S BMXLVL(E,"BEGIN")=J ;Start position of this expression
|
---|
93 | . . S BMXCNT=0
|
---|
94 | . . ;Find corresponding close paren
|
---|
95 | . . F S J=$O(BMXFF(J)) Q:'+J D Q:L=0
|
---|
96 | . . . I BMXFF(J)=")" S L=L-1,BMXLVL(E,"END")=J,BMXLVL(E,"ELEMENTS")=BMXCNT Q
|
---|
97 | . . . I BMXFF(J)="(" S L=L+1 Q
|
---|
98 | . . . I "AND^OR"'[BMXFF(J) S BMXCNT=BMXCNT+1
|
---|
99 | . . S BMXRET=BMXRET_E
|
---|
100 | . . S E=E+1
|
---|
101 | . . Q
|
---|
102 | . I "AND^OR"[BMXFF(J) D Q ;If BMXFF(J) is an operator
|
---|
103 | . . S BMXRET=BMXRET_$S(BMXFF(J)="OR":"!",1:"&")
|
---|
104 | . D Q ; BMXFF(J) is an element unenclosed by parens
|
---|
105 | . . S BMXLVL(E,"BEGIN")=J
|
---|
106 | . . S BMXLVL(E,"END")=J
|
---|
107 | . . S BMXLVL(E,"ELEMENTS")=1
|
---|
108 | . . S BMXRET=BMXRET_E
|
---|
109 | . . S E=E+1
|
---|
110 | . Q
|
---|
111 | Q
|
---|
112 | ;
|
---|
113 | XRTST(BMXFF,F,BMXHIT,BMXRNAM,BMXPFP) ;EP
|
---|
114 | ;Returns TRUE (1) in BMXRET if 'normal' index exists
|
---|
115 | ;for field in BMXFF(BMXNDX)
|
---|
116 | ;ELSE returns 0
|
---|
117 | ;
|
---|
118 | ;IN: BMXFF
|
---|
119 | ; F
|
---|
120 | ;OUT:BMXRET - 1 or 0
|
---|
121 | ; BMXRNAM - If BMXRET=1, Index name
|
---|
122 | ;
|
---|
123 | N BMXNOD0,BMXFNUM,BMXGL,BMXFLDNM,BMXREF,Q
|
---|
124 | S BMXRET=0,Q=$C(34)
|
---|
125 | ;
|
---|
126 | Q:"AND^OR^(^)"[BMXFF(F)
|
---|
127 | S BMXNOD=BMXFF(F)
|
---|
128 | S BMXNOD0=BMXFF(F,0)
|
---|
129 | S BMXFNUM=$P(BMXNOD,U,5)
|
---|
130 | Q:'+BMXFNUM
|
---|
131 | S BMXGL=$P(BMXNOD,U,7,8)
|
---|
132 | S BMXFLDNM=$P(BMXNOD,U,6)
|
---|
133 | S BMXHIT=0
|
---|
134 | Q:$D(BMXFF("JOIN"))
|
---|
135 | Q:$D(BMXFF(F,"INTERNAL"))
|
---|
136 | I BMXPFF=0,$P(BMXFF(F),U,4)="" Q ;Cannot create iterator on null
|
---|
137 | I $D(BMXFF(F,"IEN")) S BMXHIT=1 Q
|
---|
138 | I '$D(^DD(BMXFNUM,BMXFLDNM,1)) Q
|
---|
139 | I $P(BMXNOD0,U,2)'["P",$D(BMXFF("INDEX")) D Q ;Explicit index
|
---|
140 | . S BMXRNAM=BMXFF("INDEX")
|
---|
141 | . S BMXHIT=1
|
---|
142 | S BMXREF=0
|
---|
143 | F S BMXREF=$O(^DD(BMXFNUM,BMXFLDNM,1,BMXREF)) Q:'+BMXREF Q:BMXHIT D
|
---|
144 | . Q:'$D(^DD(BMXFNUM,BMXFLDNM,1,BMXREF,0))
|
---|
145 | . S BMXRNOD=^DD(BMXFNUM,BMXFLDNM,1,BMXREF,0)
|
---|
146 | . Q:$P(BMXRNOD,U,3)]""
|
---|
147 | . S BMXRNAM=$P(BMXRNOD,U,2)
|
---|
148 | . S BMXTMP=BMXGL_Q_BMXRNAM_Q_")"
|
---|
149 | . Q:'$D(@BMXTMP)
|
---|
150 | . S BMXTMPV=0,BMXTMPV=$O(@BMXTMP@(BMXTMPV))
|
---|
151 | . Q:BMXTMPV=""
|
---|
152 | . S BMXTMP=BMXGL_Q_BMXRNAM_Q_","_Q_BMXTMPV_Q_")"
|
---|
153 | . S BMXTMPI=0,BMXTMPI=$O(@BMXTMP@(BMXTMPI))
|
---|
154 | . S BMXTMP=$S(BMXGL[",":$P(BMXGL,",")_")",1:$P(BMXGL,"("))
|
---|
155 | . Q:'$D(@BMXTMP@(BMXTMPI))
|
---|
156 | . S BMXTMPL=$P(BMXFF(F,0),U,4)
|
---|
157 | . S BMXTMPP=$P(BMXTMPL,";",2)
|
---|
158 | . S BMXTMPL=$P(BMXTMPL,";")
|
---|
159 | . Q:BMXTMPL=""
|
---|
160 | . S BMXTMP=BMXGL_BMXTMPI_")"
|
---|
161 | . Q:'$D(@BMXTMP@(BMXTMPL))
|
---|
162 | . S BMXTMPN=@BMXTMP@(BMXTMPL)
|
---|
163 | . I BMXTMPP["E" D
|
---|
164 | . . S BMXTMPP=$P(BMXTMPP,"E",2)
|
---|
165 | . . S BMXTMPP=$E(BMXTMPN,$P(BMXTMPP,","),$P(BMXTMPP,",",2))
|
---|
166 | . E D
|
---|
167 | . . S BMXTMPP=$P(BMXTMPN,"^",BMXTMPP)
|
---|
168 | . I $P(BMXNOD0,U,2)["P" D Q
|
---|
169 | . . N BMXPFFN
|
---|
170 | . . S BMXPFF(BMXPFF)=BMXFF(F)
|
---|
171 | . . S BMXPFF(BMXPFF,0)=BMXFF(F,0)
|
---|
172 | . . S BMXPFF(BMXPFF,1)=BMXREF
|
---|
173 | . . S $P(BMXPFF(BMXPFF,1),U,2)=BMXRNAM
|
---|
174 | . . S BMXPFP(BMXPFP,BMXPFF)=BMXFF(F)
|
---|
175 | . . S BMXPFP(BMXPFP,BMXPFF,0)=BMXFF(F,0)
|
---|
176 | . . S BMXPFP(BMXPFP,BMXPFF,1)=BMXREF
|
---|
177 | . . S $P(BMXPFP(BMXPFP,BMXPFF,1),U,2)=BMXRNAM
|
---|
178 | . . S BMXPFF=BMXPFF+1
|
---|
179 | . . S BMXPFFN=$P(BMXNOD0,U,2)
|
---|
180 | . . S BMXPFFN=+$P(BMXPFFN,"P",2)
|
---|
181 | . . S $P(BMXPFF(BMXPFF),U,5)=BMXPFFN
|
---|
182 | . . S $P(BMXPFF(BMXPFF),U,6)=".01"
|
---|
183 | . . S $P(BMXPFF(BMXPFF),U,7)=^DIC(BMXPFFN,0,"GL")
|
---|
184 | . . S BMXPFF(BMXPFF,0)=^DD(BMXPFFN,".01",0)
|
---|
185 | . . S $P(BMXPFP(BMXPFP,BMXPFF),U,5)=BMXPFFN
|
---|
186 | . . S $P(BMXPFP(BMXPFP,BMXPFF),U,6)=".01"
|
---|
187 | . . S $P(BMXPFP(BMXPFP,BMXPFF),U,7)=^DIC(BMXPFFN,0,"GL")
|
---|
188 | . . S BMXPFP(BMXPFP,BMXPFF,0)=^DD(BMXPFFN,".01",0)
|
---|
189 | . . D XRTST(.BMXPFF,BMXPFF,.BMXHIT,BMXRNAM,.BMXPFP)
|
---|
190 | . . Q
|
---|
191 | . I BMXTMPP=BMXTMPV D Q
|
---|
192 | . . S BMXHIT=1,BMXRET=1
|
---|
193 | . . I BMXPFF>0 D Q
|
---|
194 | . . . S BMXPFF(BMXPFF,1)=BMXREF
|
---|
195 | . . . S $P(BMXPFF(BMXPFF,1),U,2)=BMXRNAM
|
---|
196 | . . . S BMXPFP(BMXPFP,BMXPFF,1)=BMXREF
|
---|
197 | . . . S $P(BMXPFP(BMXPFP,BMXPFF,1),U,2)=BMXRNAM
|
---|
198 | . . Q
|
---|
199 | . Q
|
---|
200 | Q
|
---|
201 | ;
|
---|
202 | ;
|
---|
203 | BLDIT(BMXFF,F,BMXRNAM,BMXRET,BMXPFP) ;EP - Build iterator
|
---|
204 | ;
|
---|
205 | K BMXRET
|
---|
206 | N BMXNOD,BMXOP,BMXV,BMXGL,Q
|
---|
207 | S BMXNOD=BMXFF(F)
|
---|
208 | S BMXOP=$P(BMXNOD,U,3)
|
---|
209 | S BMXV=$P(BMXNOD,U,4)
|
---|
210 | S BMXGL=$P(BMXNOD,U,7,8)
|
---|
211 | S Q=$C(34)
|
---|
212 | I $D(BMXPFP(F)) D BLDIT2 Q ;Pointer
|
---|
213 | ;TODO Set BMXV to the pointer or set or FM date that corresponds
|
---|
214 | ; to the user-entered value
|
---|
215 | I $D(BMXFF(F,"IEN")),BMXFF(F,"IEN")="TEMPLATE" D Q
|
---|
216 | . N BMXTNUM
|
---|
217 | . S BMXTNUM=$O(^DIBT("B",$P(BMXFF(F),U,4),0))
|
---|
218 | . S BMXRET="S D0=0 F S D0=$O(^DIBT("_BMXTNUM_",1,D0)) Q:'+D0 Q:BMXM>BMXXMAX "
|
---|
219 | . Q
|
---|
220 | I BMXOP="=" D Q
|
---|
221 | . I $D(BMXFF(F,"IEN")) S BMXRET="S D0="_BMXV_" Q:'+D0 Q:BMXM>BMXXMAX " Q
|
---|
222 | . S BMXRET="S D0="""" F S D0=$O("_BMXGL_Q_BMXRNAM_Q_","_Q_BMXV_Q_",D0)) Q:D0="""" Q:BMXM>BMXXMAX "
|
---|
223 | . Q
|
---|
224 | ;
|
---|
225 | I BMXOP=">=" D Q
|
---|
226 | . I $D(BMXFF(F,"IEN")) S BMXV=BMXV-1,BMXRET="S D0="_BMXV_" F S D0=$O("_BMXGL_"D0)) Q:'+D0 Q:BMXM>BMXXMAX " Q
|
---|
227 | . N BMXTMP
|
---|
228 | . S BMXTMP="BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV),-1)"
|
---|
229 | . S @BMXTMP
|
---|
230 | . S BMXRET="S BMXV="_Q_BMXV_Q_" F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV)) Q:BMXV="""" Q:BMXM>BMXXMAX S D0="""" F S D0=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D0)) Q:D0="""" Q:BMXM>BMXXMAX "
|
---|
231 | ;
|
---|
232 | I BMXOP=">" D Q
|
---|
233 | . I $D(BMXFF(F,"IEN")) S BMXRET="S D0="_BMXV_" F S D0=$O("_BMXGL_"D0)) Q:'+D0 Q:BMXM>BMXXMAX " Q
|
---|
234 | . S BMXRET="S BMXV="_Q_BMXV_Q_" F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV)) Q:BMXV="""" Q:BMXM>BMXXMAX S D0="""" F S D0=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D0)) Q:D0="""" Q:BMXM>BMXXMAX "
|
---|
235 | ;
|
---|
236 | I BMXOP="<>" D Q
|
---|
237 | . I $D(BMXFF(F,"IEN")) S BMXRET="S D0=0 F S D0=$O("_BMXGL_"D0)) Q:'+D0 I D0'="_BMXV_" Q:BMXM>BMXXMAX " Q
|
---|
238 | . S BMXRET="S BMXV=0 F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV)) Q:BMXV="""" Q:BMXM>BMXXMAX I BMXV'="_Q_BMXV_Q_" S D0="""" F S D0=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D0)) Q:D0="""" Q:BMXM>BMXXMAX "
|
---|
239 | ;
|
---|
240 | I BMXOP="<=" D Q
|
---|
241 | . I $D(BMXFF(F,"IEN")) S BMXRET="S D0=0 F S D0=$O("_BMXGL_"D0)) Q:'+D0 Q:D0>"_BMXV_" Q:BMXM>BMXXMAX " Q
|
---|
242 | . N BMXTMP
|
---|
243 | . S BMXTMP="BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV))"
|
---|
244 | . S @BMXTMP
|
---|
245 | . S BMXRET="S BMXV="_Q_BMXV_Q_" F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV),-1) Q:BMXV="""" Q:BMXM>BMXXMAX S D0="""" F S D0=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D0)) Q:D0="""" Q:BMXM>BMXXMAX "
|
---|
246 | ;
|
---|
247 | I BMXOP="<" D Q
|
---|
248 | . I $D(BMXFF(F,"IEN")) S BMXRET="S D0=0 F S D0=$O("_BMXGL_"D0)) Q:'+D0 Q:D0'<"_BMXV_" Q:BMXM>BMXXMAX " Q
|
---|
249 | . S BMXRET="S BMXV="_Q_BMXV_Q_" F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV),-1) Q:BMXV="""" Q:BMXM>BMXXMAX S D0="""" F S D0=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D0)) Q:D0="""" Q:BMXM>BMXXMAX "
|
---|
250 | ;
|
---|
251 | I BMXOP="BETWEEN" D Q ;changed '< to > (inclusive BETWEEN)
|
---|
252 | . I $D(BMXFF(F,"IEN")) D Q
|
---|
253 | . . S BMXRET="S D0="_(+$P(BMXV,"~")-1)_" F S D0=$O("_BMXGL_"D0)) Q:'+D0 Q:D0>"_$P(BMXV,"~",2)_" Q:BMXM>BMXXMAX "
|
---|
254 | . I +$P(BMXV,"~")=$P(BMXV,"~") D ;BMXV is a number
|
---|
255 | . . S BMXRET="S BMXV="_$P(BMXV,"~")_",BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV),-1) F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q
|
---|
256 | . . S BMXRET=BMXRET_",BMXV)) Q:BMXV="""" Q:BMXV>"_$P(BMXV,"~",2)_" Q:BMXM>BMXXMAX S D0="""" F S D0=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D0)) Q:D0="""" Q:BMXM>BMXXMAX "
|
---|
257 | . E D ;BMXV is a string
|
---|
258 | . . S BMXRET="S BMXV="_Q_$P(BMXV,"~")_Q_",BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV),-1) F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q
|
---|
259 | . . S BMXRET=BMXRET_",BMXV)) Q:BMXV="""" Q:BMXV]"_Q_$P(BMXV,"~",2)_Q_" Q:BMXM>BMXXMAX S D0="""" F S D0=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D0)) Q:D0="""" Q:BMXM>BMXXMAX "
|
---|
260 | ;
|
---|
261 | I BMXOP="LIKE" D Q
|
---|
262 | . N BMXTMP,BMXV1
|
---|
263 | . S BMXV1=BMXV
|
---|
264 | . S BMXTMP="BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV),-1)"
|
---|
265 | . S @BMXTMP
|
---|
266 | . S BMXRET="S BMXV="_Q_BMXV_Q_" F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV)) Q:BMXV="""" Q:BMXV'?1"_Q_BMXV1_Q_".E Q:BMXM>BMXXMAX S D0="""" F S D0=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D0)) Q:D0="""" Q:BMXM>BMXXMAX "
|
---|
267 | Q
|
---|
268 | ;
|
---|
269 | BLDIT2 ;Pointer
|
---|
270 | N BMXPS,J
|
---|
271 | S BMXPS=$O(BMXPFP(F,999),-1)
|
---|
272 | S BMXNOD=BMXPFP(F,BMXPS)
|
---|
273 | S BMXGL=$P(BMXNOD,U,7,8)
|
---|
274 | I BMXOP="=" D
|
---|
275 | . S BMXRNAM=$P(BMXPFP(F,BMXPS,1),U,2)
|
---|
276 | . S BMXRET="S D"_BMXPS_"="""" F S D"_BMXPS_"=$O("_BMXGL_Q_BMXRNAM_Q_","_Q_BMXV_Q_",D"_BMXPS_")) Q:'+D"_BMXPS_" Q:BMXM>BMXXMAX "
|
---|
277 | ;
|
---|
278 | I BMXOP=">" D
|
---|
279 | . S BMXRNAM=$P(BMXPFP(F,BMXPS,1),U,2)
|
---|
280 | . S BMXRET="S BMXV="_Q_BMXV_Q_" F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV)) Q:BMXV="""" Q:BMXM>BMXXMAX S D"_BMXPS_"="""" F S D"_BMXPS_"=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D"_BMXPS_")) Q:'+D"_BMXPS_" Q:BMXM>BMXXMAX "
|
---|
281 | ;
|
---|
282 | I BMXOP=">=" D
|
---|
283 | . N BMXTMP
|
---|
284 | . S BMXRNAM=$P(BMXPFP(F,BMXPS,1),U,2)
|
---|
285 | . S BMXTMP="BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV),-1)"
|
---|
286 | . S @BMXTMP
|
---|
287 | . S BMXRET="S BMXV="_Q_BMXV_Q_" F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV)) Q:BMXV="""" Q:BMXM>BMXXMAX S D"_BMXPS_"="""" F S D"_BMXPS_"=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D"_BMXPS_")) Q:'+D"_BMXPS_" Q:BMXM>BMXXMAX "
|
---|
288 | ;
|
---|
289 | I BMXOP="<=" D
|
---|
290 | . N BMXTMP
|
---|
291 | . S BMXRNAM=$P(BMXPFP(F,BMXPS,1),U,2)
|
---|
292 | . S BMXTMP="BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV))"
|
---|
293 | . S @BMXTMP
|
---|
294 | . S BMXRET="S BMXV="_Q_BMXV_Q_" F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV),-1) Q:BMXV="""" Q:BMXM>BMXXMAX S D"_BMXPS_"="""" F S D"_BMXPS_"=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D"_BMXPS_")) Q:'+D"_BMXPS_" Q:BMXM>BMXXMAX "
|
---|
295 | ;
|
---|
296 | I BMXOP="<>" D
|
---|
297 | . S BMXRNAM=$P(BMXPFP(F,BMXPS,1),U,2)
|
---|
298 | . S BMXRET="S BMXV=0 F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV)) Q:BMXV="""" Q:BMXM>BMXXMAX I BMXV'="_Q_BMXV_Q_" S D"_BMXPS_"="""" F S D"_BMXPS_"=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D"_BMXPS_")) Q:'+D"_BMXPS_" Q:BMXM>BMXXMAX "
|
---|
299 | ;
|
---|
300 | I BMXOP="<" D
|
---|
301 | . S BMXRNAM=$P(BMXPFP(F,BMXPS,1),U,2)
|
---|
302 | . S BMXRET="S BMXV="_Q_BMXV_Q_" F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV),-1) Q:BMXV="""" Q:BMXM>BMXXMAX S D"_BMXPS_"="""" F S D"_BMXPS_"=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D"_BMXPS_")) Q:'+D"_BMXPS_" Q:BMXM>BMXXMAX "
|
---|
303 | ;
|
---|
304 | I BMXOP="BETWEEN" D
|
---|
305 | . S BMXRNAM=$P(BMXPFP(F,BMXPS,1),U,2)
|
---|
306 | . I +$P(BMXV,"~")=$P(BMXV,"~") D ;BMXV is a number
|
---|
307 | . . S BMXRET="S BMXV="_$P(BMXV,"~")_",BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV),-1) F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q
|
---|
308 | . . S BMXRET=BMXRET_",BMXV)) Q:BMXV="""" Q:BMXV>"_$P(BMXV,"~",2)_" Q:BMXM>BMXXMAX S D"_BMXPS_"=0 F S D"_BMXPS_"=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D"_BMXPS_")) Q:'+D"_BMXPS_" Q:BMXM>BMXXMAX "
|
---|
309 | . E D ;BMXV is a string
|
---|
310 | . . S BMXRET="S BMXV="_Q_$P(BMXV,"~")_Q_",BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV),-1) F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q
|
---|
311 | . . S BMXRET=BMXRET_",BMXV)) Q:BMXV="""" Q:BMXV]"_Q_$P(BMXV,"~",2)_Q_" Q:BMXM>BMXXMAX S D"_BMXPS_"=0 F S D"_BMXPS_"=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D"_BMXPS_")) Q:'+D"_BMXPS_" Q:BMXM>BMXXMAX "
|
---|
312 | ;
|
---|
313 | I BMXOP="LIKE" D
|
---|
314 | . N BMXTMP,BMXV1
|
---|
315 | . S BMXRNAM=$P(BMXPFP(F,BMXPS,1),U,2)
|
---|
316 | . S BMXV1=BMXV
|
---|
317 | . S BMXTMP="BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV),-1)"
|
---|
318 | . S @BMXTMP
|
---|
319 | . S BMXRET="S BMXV="_Q_BMXV_Q_" F S BMXV=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV)) Q:BMXV="""" Q:BMXV'?1"_Q_BMXV1_Q_".E Q:BMXM>BMXXMAX S D"_BMXPS_"="""" F S D"_BMXPS_"=$O("_BMXGL_Q_BMXRNAM_Q_",BMXV,D"_BMXPS_")) Q:'+D"_BMXPS_" Q:BMXM>BMXXMAX "
|
---|
320 | ;
|
---|
321 | F J=BMXPS-1:-1:0 D
|
---|
322 | . S BMXNOD=BMXPFP(F,J)
|
---|
323 | . S BMXGL=$P(BMXNOD,U,7,8)
|
---|
324 | . S BMXRNAM=$P(BMXPFP(F,J,1),U,2)
|
---|
325 | . S BMXRET=BMXRET_"S D"_J_"=0 F S D"_J_"=$O("_BMXGL_Q_BMXRNAM_Q_",D"_(J+1)_",D"_J_")) Q:'+D"_J_" Q:BMXM>BMXXMAX "
|
---|
326 | Q
|
---|
327 | ;TODO: Computed fields
|
---|
328 | ;TODO: Sets of codes
|
---|
329 | ;TODO: User-specified index
|
---|
330 | Q
|
---|