WHERE ( MOD(A,1000)#0 OR THERMO(A) )>>>>>>>
>>>>clear >>>>SET NULLDISPLAY TO "I'm null" >>>>CREATE CURSOR myTest (A I NULL) >>>>INSERT INTO myTest VALUES (5) >>>>INSERT INTO myTest VALUES (0) >>>>INSERT INTO myTest VALUES (0) >>>>INSERT INTO myTest VALUES (null) >>>>INSERT INTO myTest VALUES (2) && VFP don't visit THERMO here >>>>INSERT INTO myTest VALUES (1) && VFP don't visit THERMO here >>>>INSERT INTO myTest VALUES (7) && VFP don't visit THERMO here >>>>INSERT INTO myTest VALUES (0) >>>> >>>>SELECT 0 >>>> >>>>SELECT * FROM myTest; >>>> WHERE (MOD(A,1000)#0 OR THERMO(A)); >>>> INTO CURSOR rrr >>>> >>>>PROCEDURE THERMO(vValue) >>>> ? "recno()=",RECNO(),"A=",vValue >>>>>>>
CLEAR CREATE CURSOR SQLUDF ( nField1 N(10,0) ) INSERT INTO SQLUDF VALUES ( 1 ) FOR k=0 TO 5 nRunningTot = 0 && initialize running total to 0 eSum = "Add_Em(nField1)" + REPLICATE(" + 0",K) ? "EXPRESSION: ",eSum SELECT &eSum as nRunTotal FROM SQLUDF INTO CURSOR temp ? "RESULT",TEMP.nRunTotal NEXT CREATE CURSOR SQLUDF ( nField1 N(10,0) ) ? ? "eval left to right " FOR k=0 TO 5 nRunningCount = 0 && initialize running total to 0 eWhere = "udfWhere(nField1)" + REPLICATE(" OR .T.",K) ? "EXPRESSION: ",eWhere SELECT 1 FROM SQLUDF WHERE &eWhere INTO CURSOR temp ? "RESULT",m.nRunningCount NEXT ? ? "eval right to left " FOR k=1 TO 5 nRunningCount = 0 && initialize running total to 0 eWhere = "udfWhere(nField1) OR (.T. " + REPLICATE("OR .T.",K)+")" ? "EXPRESSION: ",eWhere SELECT 1 FROM SQLUDF WHERE &eWhere INTO CURSOR temp ? "RESULT",m.nRunningCount NEXT PROCEDURE Add_Em LPARAMETERS tnFld1 nRunningTot=nRunningTot + tnFld1 && Calculate running total RETURN nRunningTot END PROCEDURE PROCEDURE udfWhere LPARAMETERS tnFld1 nRunningCount =nRunningCount + 1 && count calls RETURN .t. END PROCEDUREThe parser use a bad stateless Valuer;
* EXP=M1+M2+M3+... +Mn * ((((M1)+M2)+M3)+....+Mn)when you force the stack order with the parentheses