- DMSQS ;SFISC/JHM-BUILD STANDARD SCHEMA ;7/31/97 13:55
- ;;22.2;VA FileMan;;Jan 05, 2016;Build 42
- ;;Per VA Directive 6402, this routine should not be modified.
- ;;Submitted to OSEHRA 5 January 2015 by the VISTA Expertise Network.
- ;;Based on Medsphere Systems Corporation's MSC FileMan 1051.
- ;;Licensed under the terms of the Apache License, Version 2.0.
- ;
- Q
- SCHEMA ;BUILD OR REPLACE SQLI SCHEMA
- N SI,TT,IEN,FDA
- S SI=$O(^DMSQ("S","B","SQLI",""))
- S TT=1.521,IEN=$S(SI:SI,1:"+1")_","
- S FDA(TT,IEN,.01)="SQLI" ; SCHEMA NAME
- S FDA(TT,IEN,2)="FileMan SQL/ODBC interface tables" ; COMMENT
- S SI=$$PUT^DMSQU(IEN,"FDA","ERR")
- I $D(ERR)!'SI D ERR^DMSQU(1.521,"","SCHEMA: RECORD INSERT FAILED")
- Q
- ALLS Q:$G(DUZ(0))'["@" N TI,@$$NEW^DMSQU D ENV^DMSQU S TI=0
- F S TI=$O(^DMSQ("T",TI)) Q:'TI D STEXE
- Q
- STATS(TI) ;DO NODE STATISTICS FOR TABLE TI
- Q:$G(DUZ(0))'["@" ;NOT FOR NON-PROGRAMMERS
- Q:'$D(^DMSQ("T",TI,0)) ;NO GLOBAL STRUCTURE ON FILE
- N @$$NEW^DMSQU D ENV^DMSQU
- STEXE N T,MT,G,G0,CND,K,O,INI,C,MC,I,CT,TT,IEN,FDA,ERR,PI,PEI,F
- S T=^DMSQ("T",TI,0),MT=$P(T,U,4),(G0,G)=$G(^(1)) Q:G=""
- S CND=$S(MT:"K(OI)]""""",1:"K(OI)"),INI=$S(MT:"",1:0),MC=5000
- S (CT,O)=0,F="{K}" F Q:G'[F D
- . S O=O+1,K="K("_O_")"
- . S G(O)=$P(G,F)_K_")",C(O)=0,G=$P(G,F)_K_$P(G,F,2,9)
- S K(1)=INI D CNT(1)
- I CT=MC S OI=1 D
- . F I=2:1:O S C(I)=C(I)/C(1)
- . F S K(1)=$O(@G(1)),@("K="_CND) Q:'K S C(1)=C(1)+1
- . F I=2:1:O S C(I)=C(I)*C(1) I C(I)["." D
- . . S C(I)=$S(C(I)<10:+$J(C(I),"",2),C(I)<100:+$J(C(I),"",1),1:C(I)\1)
- K ^STATS(TI) M ^STATS(TI)=C ;REMOVE AFTER DEBUG
- ;STORE T_ROW_COUNT IN SQLI_TABLE
- S TT=1.5215,IEN=TI_"," K FDA
- S FDA(TT,IEN,5)=C(O) ;NUMBER OF ROWS IN TABLE
- S C=$$PUT^DMSQU(IEN,"FDA","ERR")
- I $D(ERR)!'C D ERR^DMSQU(TT,"","STATS: RECORD INSERT FAILED")
- ;STORE P_ROW_COUNT IN SQLI_PRIMARY_KEY
- S TT=1.5218,PEI=$O(^DMSQ("E","D",TI,"")),PI=0
- F I=1:1 S PI=$O(^DMSQ("P","B",PEI,PI)) Q:'PI D
- . S IEN=PI_"," K FDA
- . S FDA(TT,IEN,5)=C(I) ;ESTIMATED ROW COUNT FOR THIS LEVEL
- . S C=$$PUT^DMSQU(IEN,"FDA","ERR")
- . I $D(ERR)!'C D ERR^DMSQU(TT,5,"STATS: KEY COUNT INSERT FAILED")
- Q
- CNT(OI) ;ACCUMULATE NODE COUNT
- F S K(OI)=$O(@G(OI)) D Q:'OI
- . I @CND D
- . . S CT=CT+1,C(OI)=C(OI)+1 I CT=MC S OI=0
- . . E I OI<O S OI=OI+1,K(OI)=INI
- . E S OI=OI-1
- Q
- EP ;EDIT PROTECT ALL SQLI FILES
- Q:$G(DUZ(0))'="@" N DMF,DMFI W !,"EDIT-PROTECTING SQLI FILES..."
- S DMF=1.520
- F S DMF=$O(^DD(DMF)) Q:DMF>1.52192 S DMFI=0 W DMF D
- . F S DMFI=$O(^DD(DMF,DMFI)) Q:'DMFI D
- . . W ?10,DMFI,?20,$G(^DD(DMF,DMFI,9))
- . . S ^(9)="^" W "->^",!
- W "Done" Q
- EU ;EDIT UNPPROTECT ALL SQLI FILES
- Q:$G(DUZ(0))'="@" N DMF,DMFI W !,"EDIT-UNPROTECTING SQLI FILES..."
- S DMF=1.520
- F S DMF=$O(^DD(DMF)) Q:DMF>1.52192 S DMFI=0 W DMF D
- . F S DMFI=$O(^DD(DMF,DMFI)) Q:'DMFI D
- . . W ?10,DMFI,?20,$G(^DD(DMF,DMFI,9))
- . . S ^(9)="@" W "->@",!
- W "Done" Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HDMSQS 2914 printed Feb 19, 2025@00:21:30 Page 2
- DMSQS ;SFISC/JHM-BUILD STANDARD SCHEMA ;7/31/97 13:55
- +1 ;;22.2;VA FileMan;;Jan 05, 2016;Build 42
- +2 ;;Per VA Directive 6402, this routine should not be modified.
- +3 ;;Submitted to OSEHRA 5 January 2015 by the VISTA Expertise Network.
- +4 ;;Based on Medsphere Systems Corporation's MSC FileMan 1051.
- +5 ;;Licensed under the terms of the Apache License, Version 2.0.
- +6 ;
- +7 QUIT
- SCHEMA ;BUILD OR REPLACE SQLI SCHEMA
- +1 NEW SI,TT,IEN,FDA
- +2 SET SI=$ORDER(^DMSQ("S","B","SQLI",""))
- +3 SET TT=1.521
- SET IEN=$SELECT(SI:SI,1:"+1")_","
- +4 ; SCHEMA NAME
- SET FDA(TT,IEN,.01)="SQLI"
- +5 ; COMMENT
- SET FDA(TT,IEN,2)="FileMan SQL/ODBC interface tables"
- +6 SET SI=$$PUT^DMSQU(IEN,"FDA","ERR")
- +7 IF $DATA(ERR)!'SI
- DO ERR^DMSQU(1.521,"","SCHEMA: RECORD INSERT FAILED")
- +8 QUIT
- ALLS if $GET(DUZ(0))'["@"
- QUIT
- NEW TI,@$$NEW^DMSQU
- DO ENV^DMSQU
- SET TI=0
- +1 FOR
- SET TI=$ORDER(^DMSQ("T",TI))
- if 'TI
- QUIT
- DO STEXE
- +2 QUIT
- STATS(TI) ;DO NODE STATISTICS FOR TABLE TI
- +1 ;NOT FOR NON-PROGRAMMERS
- if $GET(DUZ(0))'["@"
- QUIT
- +2 ;NO GLOBAL STRUCTURE ON FILE
- if '$DATA(^DMSQ("T",TI,0))
- QUIT
- +3 NEW @$$NEW^DMSQU
- DO ENV^DMSQU
- STEXE NEW T,MT,G,G0,CND,K,O,INI,C,MC,I,CT,TT,IEN,FDA,ERR,PI,PEI,F
- +1 SET T=^DMSQ("T",TI,0)
- SET MT=$PIECE(T,U,4)
- SET (G0,G)=$GET(^(1))
- if G=""
- QUIT
- +2 SET CND=$SELECT(MT:"K(OI)]""""",1:"K(OI)")
- SET INI=$SELECT(MT:"",1:0)
- SET MC=5000
- +3 SET (CT,O)=0
- SET F="{K}"
- FOR
- if G'[F
- QUIT
- Begin DoDot:1
- +4 SET O=O+1
- SET K="K("_O_")"
- +5 SET G(O)=$PIECE(G,F)_K_")"
- SET C(O)=0
- SET G=$PIECE(G,F)_K_$PIECE(G,F,2,9)
- End DoDot:1
- +6 SET K(1)=INI
- DO CNT(1)
- +7 IF CT=MC
- SET OI=1
- Begin DoDot:1
- +8 FOR I=2:1:O
- SET C(I)=C(I)/C(1)
- +9 FOR
- SET K(1)=$ORDER(@G(1))
- SET @("K="_CND)
- if 'K
- QUIT
- SET C(1)=C(1)+1
- +10 FOR I=2:1:O
- SET C(I)=C(I)*C(1)
- IF C(I)["."
- Begin DoDot:2
- +11 SET C(I)=$SELECT(C(I)<10:+$JUSTIFY(C(I),"",2),C(I)<100:+$JUSTIFY(C(I),"",1),1:C(I)\1)
- End DoDot:2
- End DoDot:1
- +12 ;REMOVE AFTER DEBUG
- KILL ^STATS(TI)
- MERGE ^STATS(TI)=C
- +13 ;STORE T_ROW_COUNT IN SQLI_TABLE
- +14 SET TT=1.5215
- SET IEN=TI_","
- KILL FDA
- +15 ;NUMBER OF ROWS IN TABLE
- SET FDA(TT,IEN,5)=C(O)
- +16 SET C=$$PUT^DMSQU(IEN,"FDA","ERR")
- +17 IF $DATA(ERR)!'C
- DO ERR^DMSQU(TT,"","STATS: RECORD INSERT FAILED")
- +18 ;STORE P_ROW_COUNT IN SQLI_PRIMARY_KEY
- +19 SET TT=1.5218
- SET PEI=$ORDER(^DMSQ("E","D",TI,""))
- SET PI=0
- +20 FOR I=1:1
- SET PI=$ORDER(^DMSQ("P","B",PEI,PI))
- if 'PI
- QUIT
- Begin DoDot:1
- +21 SET IEN=PI_","
- KILL FDA
- +22 ;ESTIMATED ROW COUNT FOR THIS LEVEL
- SET FDA(TT,IEN,5)=C(I)
- +23 SET C=$$PUT^DMSQU(IEN,"FDA","ERR")
- +24 IF $DATA(ERR)!'C
- DO ERR^DMSQU(TT,5,"STATS: KEY COUNT INSERT FAILED")
- End DoDot:1
- +25 QUIT
- CNT(OI) ;ACCUMULATE NODE COUNT
- +1 FOR
- SET K(OI)=$ORDER(@G(OI))
- Begin DoDot:1
- +2 IF @CND
- Begin DoDot:2
- +3 SET CT=CT+1
- SET C(OI)=C(OI)+1
- IF CT=MC
- SET OI=0
- +4 IF '$TEST
- IF OI<O
- SET OI=OI+1
- SET K(OI)=INI
- End DoDot:2
- +5 IF '$TEST
- SET OI=OI-1
- End DoDot:1
- if 'OI
- QUIT
- +6 QUIT
- EP ;EDIT PROTECT ALL SQLI FILES
- +1 if $GET(DUZ(0))'="@"
- QUIT
- NEW DMF,DMFI
- WRITE !,"EDIT-PROTECTING SQLI FILES..."
- +2 SET DMF=1.520
- +3 FOR
- SET DMF=$ORDER(^DD(DMF))
- if DMF>1.52192
- QUIT
- SET DMFI=0
- WRITE DMF
- Begin DoDot:1
- +4 FOR
- SET DMFI=$ORDER(^DD(DMF,DMFI))
- if 'DMFI
- QUIT
- Begin DoDot:2
- +5 WRITE ?10,DMFI,?20,$GET(^DD(DMF,DMFI,9))
- +6 SET ^(9)="^"
- WRITE "->^",!
- End DoDot:2
- End DoDot:1
- +7 WRITE "Done"
- QUIT
- EU ;EDIT UNPPROTECT ALL SQLI FILES
- +1 if $GET(DUZ(0))'="@"
- QUIT
- NEW DMF,DMFI
- WRITE !,"EDIT-UNPROTECTING SQLI FILES..."
- +2 SET DMF=1.520
- +3 FOR
- SET DMF=$ORDER(^DD(DMF))
- if DMF>1.52192
- QUIT
- SET DMFI=0
- WRITE DMF
- Begin DoDot:1
- +4 FOR
- SET DMFI=$ORDER(^DD(DMF,DMFI))
- if 'DMFI
- QUIT
- Begin DoDot:2
- +5 WRITE ?10,DMFI,?20,$GET(^DD(DMF,DMFI,9))
- +6 SET ^(9)="@"
- WRITE "->@",!
- End DoDot:2
- End DoDot:1
- +7 WRITE "Done"
- QUIT