Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BMXPRS

BMXPRS.m

Go to the documentation of this file.
  1. BMXPRS ; IHS/OIT/HMW - BMX WINDOWS UTILS ;
  1. ;;4.0;BMX;;JUN 28, 2010
  1. ;
  1. ;
  1. PARSE(X) ;EP-Parse SQL Statement into array
  1. ;Input SQL statement as X
  1. ;Returns BMXTK() array
  1. ;Errors returned in BMXERR
  1. ;
  1. D PRE
  1. Q:$D(BMXERR)
  1. D POST
  1. Q
  1. ;
  1. POST2 ;EP - Remove commas from BMXTK
  1. N J,K
  1. S J=0 F S J=$O(BMXTK(J)) Q:'+J D
  1. . S K=$O(BMXTK(J))
  1. . I +K,","=$G(BMXTK(K)) D
  1. . . K BMXTK(K)
  1. . . D PACK(J)
  1. . . Q
  1. . Q
  1. Q
  1. ;
  1. POST ;
  1. ;Combine multi-character operators
  1. N J
  1. S J=0 F S J=$O(BMXTK(J)) Q:'+J D
  1. . I ">"=BMXTK(J) D Q
  1. . . I "="[$G(BMXTK(J+1)) D Q
  1. . . . S BMXTK(J)=BMXTK(J)_"="
  1. . . . K BMXTK(J+1)
  1. . . . D PACK(J)
  1. . . I "<"[$G(BMXTK(J+1)) D Q
  1. . . . S BMXTK(J)="<"_BMXTK(J)
  1. . . . K BMXTK(J+1)
  1. . . . D PACK(J)
  1. . I "<"=BMXTK(J) D Q
  1. . . I "=>"[$G(BMXTK(J+1)) D
  1. . . . S BMXTK(J)=BMXTK(J)_BMXTK(J+1)
  1. . . . K BMXTK(J+1)
  1. . . . D PACK(J)
  1. . I "="=BMXTK(J) D Q
  1. . . I "<>"[$G(BMXTK(J+1)) D
  1. . . . S BMXTK(J)=BMXTK(J+1)_BMXTK(J)
  1. . . . K BMXTK(J+1)
  1. . . . D PACK(J)
  1. Q
  1. ;
  1. PACK(J) ;
  1. F S J=$O(BMXTK(J)) Q:'+J D
  1. . S BMXTK(J-1)=BMXTK(J)
  1. . K BMXTK(J)
  1. Q
  1. ;
  1. PRE N P,T,Q,Q1,A,B S (P,T,Q)=0,BMXTK="",A=0
  1. START S A=A+1
  1. S B=$E(X,A)
  1. I B="" G B5
  1. I 'Q G QUOTE
  1. I B=$C(39) G QUOTE
  1. S BMXTK=BMXTK_B G START
  1. QUOTE I B'=$C(39) G SPACE
  1. I Q G QUOTE2
  1. ;S Q=1,BMXTK=B G START
  1. S Q=1,BMXTK=BMXTK_B G START
  1. QUOTE2 S Q1=B,A=A+1,B=$E(X,A)
  1. I B']"" G QUOTE3
  1. I B'=$C(39) G QUOTE3
  1. S BMXTK=BMXTK_Q1_B G START
  1. QUOTE3 S A=A-1,B=Q1,BMXTK=BMXTK_B,Q=0 G START
  1. SPACE I B'=" " G OP
  1. I BMXTK]"" S T=T+1,BMXTK(T)=BMXTK,BMXTK=""
  1. G START
  1. OP I "=><"'[B G OPAREN
  1. I BMXTK]"" S T=T+1,BMXTK(T)=BMXTK,BMXTK=""
  1. S T=T+1,BMXTK(T)=B,BMXTK=""
  1. G START
  1. OPAREN I B'="(" G CPAREN
  1. S P=P+1
  1. I BMXTK]"" S T=T+1,BMXTK(T)=BMXTK,BMXTK=""
  1. S T=T+1,BMXTK(T)=B G START
  1. CPAREN I B'=")" G B2
  1. I P G B1
  1. G B0
  1. ;
  1. B0 S BMXERR="SQL SYNTAX ERROR" D ERROR G B5
  1. B1 S P=P-1
  1. I BMXTK]"" S T=T+1,BMXTK(T)=BMXTK,BMXTK=""
  1. S T=T+1,BMXTK(T)=B G START
  1. B2 I B'="," G B3
  1. S T=T+1,BMXTK(T)=BMXTK,T=T+1,BMXTK(T)=",",BMXTK="" G START
  1. B3 S BMXTK=BMXTK_B
  1. B4 G START
  1. B5 I BMXTK]"" S T=T+1,BMXTK(T)=BMXTK
  1. I $D(BMXERR) G B6
  1. I P S BMXERR="SQL SYNTAX ERROR: MATCHING PARENTHESIS NOT FOUND" D ERROR
  1. E I Q S BMXERR="SQL SYNTAX ERROR: MATCHING QUOTE NOT FOUND" D ERROR
  1. I P>0 G START
  1. B6 Q
  1. ;
  1. ERROR ;W !,"ERROR=",BMXERR,! Q
  1. Q