**************************************************************** * * COMMENT SECTION * NIST SQL VALIDATION TEST SUITE V6.0 * DISCLAIMER: * This program was written by employees of NIST to test SQL * implementations for conformance to the SQL standards. * NIST assumes no responsibility for any party's use of * this program. * * * WRITTEN BY: J. Sullivan * TRANSLATED AUTOMATICALLY FROM EMBEDDED C BY CHRIS SCHANZLE * * This routine inserts the result value from TESTREPORT into * the T_REQ row and then maps these test/binding/status/result * rows into the report structure R_STRUCTURE. * * A test is run only once, but it is reported in each profile * which requires it. * * This join of T_REQ and R_STRUCTURE is written as an ASCII * file, passfail.dat, for use by the following report program. * A restriction of REPORTFEATURE (only rows needed for the * report) is written as ASCII file heading.dat. * A restriction of TESTCASE (only rows needed for problem * tests) is written as ASCII file testcase.dat. * Interactive SQL reporting is ignored by this program. * * Debugging is turned on by setting debug1 = 1 * ****************************************************************
MOVE"HU "TO uid CALL"AUTHID"USING uid MOVE"not logged in, not"TO uidx EXECSQLSELECT USER INTO :uidx FROM HU.ECCO END-EXEC MOVE SQLCODE TO SQL-COD if (uid NOT = uidx) then DISPLAY"ERROR: User ", uid, " expected. User ", uidx, "
- " connected" STOPRUN END-IF DISPLAY "SQL Test Suite, V6.0, Embedded COBOL, reportb.pco" DISPLAY "59-byte ID" DISPLAY"TEd Version #"
*date_time print ACCEPT TO-DAY FROMDATE ACCEPT THE-TIME FROMTIME DISPLAY" " DISPLAY"Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME
MOVE 0 TO errcnt
*to debug program, set debug1 = 1 MOVE 0 TO debug1 *to suppress print of Profile P998, set indivt = 0 MOVE 1 TO indivt
*set up
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
*We want to verify later, as we write passfail.dat records, * that the binding pattern is cyclic - * as expected by the report program. *For example, every 3rd row is 'PC'. DISPLAY" " DISPLAY"REPORTB step 1: Check BINDING_CLAIMED table."
EXECSQLSELECTCOUNT(*) INTO :bindct FROM BINDING_CLAIMED
WHERE BINDING1 <> 'SQL'END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0 OR SQLCODE = 100) then COMPUTE errcnt = errcnt + 1 DISPLAY"#ERR1 Error counting BINDING_CLAIMED rows," DISPLAY" or BINDING_CLAIMED is empty" DISPLAY" or has only one row with value SQL." DISPLAY"This program does not report on Interactive
- " SQL." DISPLAY"SQLCODE = ", SQL-COD, " " *Suicide note #1 END-IF EXECSQLSELECT MAX(BINDING1) INTO :bindmx FROM BINDING_CLAIMED
WHERE BINDING1 <> 'SQL'END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0 OR SQLCODE = 100) then COMPUTE errcnt = errcnt + 1 DISPLAY"#ERR2 Error selecting MAX(BINDING1) from
- " BINDING_CLAIMED." DISPLAY"SQLCODE = ", SQL-COD *Suicide note #2 END-IF EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
*Insert TESTREPORT pass/fail/nogo result into T_REQ *Assign "miss" value for missing results *Assign " " value for NA tests as well as DL and WD tests
DISPLAY" " DISPLAY"REPORTB step 2: Merge pass/fail/nogo values from
- " TESTREPORT" DISPLAY" into table T_REQ (list of tests
- " required)." DISPLAY"This could take a while...."
EXECSQL UPDATE T_REQ SET RESULT2 = ' 'END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQL DECLARE T_REQ_CURSOR CURSOR FOR SELECT TESTNO, BINDING1, REQOPTNA FROM T_REQ
WHERE BINDING1 <> 'SQL'END-EXEC EXECSQLOPEN T_REQ_CURSOR END-EXEC MOVE SQLCODE TO SQL-COD
.
P100. EXECSQL FETCH T_REQ_CURSOR INTO :testno, :bind1, :reqopt END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0 OR SQLCODE = 100) then GOTO P199 END-IF
if (reqopt = "NA " ) then MOVE" "TO result GOTO P150 END-IF if (reqopt = "DL "OR reqopt = "WD ") then MOVE" "TO result GOTO P150 END-IF EXECSQLSELECT DISTINCT RESULT2 INTO :result FROM TESTREPORT
WHERE TESTNO = :testno AND TESTTYPE = :bind1 END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 100) then MOVE"miss"TO result GOTO P150 END-IF if (SQLCODE < 0) then GOTO P110 END-IF if (result = "pass") then GOTO P150 END-IF if (result = "fail") then GOTO P150 END-IF if (result = "nogo") then GOTO P150 END-IF MOVE"fail"TO result *Suicide note #3a COMPUTE errcnt = errcnt + 1 DISPLAY" " DISPLAY"#ERR3a Illegal value in TESTREPORT (RESULT) = ",
result GOTO P150
.
P110. *No suicide note, just get attention with a FAIL DISPLAY" " DISPLAY"#ERR3b Conflicting results for TESTREPORT rows." DISPLAY"The final result is FAIL:" DISPLAY"SQLCODE = ", SQL-COD, " " EXECSQL DECLARE ERROR1 CURSOR FOR SELECT DISTINCT RESULT2 FROM TESTREPORT
WHERE TESTNO = :testno AND TESTTYPE = :bind1 ORDERBY RESULT2 END-EXEC EXECSQLOPEN ERROR1 END-EXEC MOVE SQLCODE TO SQL-COD
.
P120. EXECSQL FETCH ERROR1 INTO :result END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then DISPLAY"FETCH ERROR1 SQLCODE = ", SQL-COD, " " END-IF if (SQLCODE < 0 OR SQLCODE = 100) then GOTO P121 END-IF DISPLAY"TESTNO = ", testno, ", RESULT = ", result, ",
- " TESTTYPE = ", bind1 GOTO P120
.
P121. EXECSQLCLOSE ERROR1 END-EXEC MOVE SQLCODE TO SQL-COD MOVE"fail"TO result
.
P150. *result value has been obtained for this row if (debug1 = 1) then DISPLAY"Updated T_REQ = ", testno, ", ", bind1, ", ",
reqopt, ", ", result END-IF EXECSQL UPDATE T_REQ SET RESULT2 = :result
WHERE CURRENT OF T_REQ_CURSOR END-EXEC MOVE SQLCODE TO SQL-COD * same as WHERE TESTNO = :testno AND BINDING1 = :bind1; if (SQLCODE < 0 OR SQLCODE = 100) then COMPUTE errcnt = errcnt + 1 DISPLAY"#ERR4 Failed to UPDATE row ", testno, " ",
bind1, " with result ", result *Suicide note #4 END-IF GOTO P100
.
P199. if (SQLCODE < 0) then COMPUTE errcnt = errcnt + 1 DISPLAY"#ERR5 Error reading T_REQ_CURSOR." DISPLAY"SQLCODE = ", SQL-COD, " " *Suicide note #5 END-IF EXECSQLCLOSE T_REQ_CURSOR END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
*Join R_STRUCTURE to T_REQ *and write as ASCII file passfail.dat DISPLAY" " DISPLAY"REPORTB step 3: Write ASCII file passfail.dat."
MOVE 0 TO bindii
EXECSQL DECLARE TESTLIST CURSOR FOR SELECT DISTINCT C1, P1, R_STRUCTURE.TESTNO,
BINDING1, REQOPTNA, RESULT2 FROM R_STRUCTURE, T_REQ
WHERE R_STRUCTURE.TESTNO = T_REQ.TESTNO AND BINDING1 <> 'SQL' ORDERBY 1, 2, 3, 4 END-EXEC EXECSQLOPEN TESTLIST END-EXEC MOVE SQLCODE TO SQL-COD
*open ASCII file passfail.dat OPENOUTPUT PASSFA MOVE 0 TO iii
if (debug1 = 1) then DISPLAY"Derived list of test cases:" END-IF
.
P200. EXECSQL FETCH TESTLIST INTO :feat1, :feat2,
:testno, :bind1, :reqopt, :resul7 END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then COMPUTE errcnt = errcnt + 1 DISPLAY"#ERR6 Error reading TESTLIST cursor." DISPLAY"SQLCODE = ", SQL-COD, " " *Suicide note #6 END-IF if (SQLCODE < 0 OR SQLCODE = 100) then GOTO P202 END-IF
*X/Open profiles do not exist for bindings other than PC and PCO if (feat2 NOT = "P210"AND feat2 NOT = "P230") then GOTO P201 END-IF if (bind1 = "PC "OR bind1 = "PCO") then GOTO P201 END-IF MOVE"NA "TO reqopt MOVE" "TO resul7
.
P201. *Profile P998, by default prints, but can be suppressed. if (feat1 = "P998"AND indivt = 0) then GOTO P200 END-IF
if (resul7 = "miss ") then MOVE"missing"TO resul7 END-IF
*Result value has been obtained from TESTREPORT. *Write passfail.dat record. MOVE feat1 TO C11 MOVE feat2 TO C12 MOVE testno TO C13 MOVE bind1 TO C14 MOVE reqopt TO C15 MOVE resul7 TO C16 MOVE WS-PASSFA TO PASSFA-REC IF iii = 0 WRITE PASSFA-REC MOVE 1 TO iii ELSE WRITE PASSFA-REC AFTERADVANCING 1 LINE END-IF
*Verify every nth bind1 value is the max value COMPUTE bindii = bindii + 1 if (bindii NOT < bindct) then MOVE 0 TO bindii if (bind1 NOT = bindmx) then COMPUTE errcnt = errcnt + 1 DISPLAY"#ERR7 Binding values are not cyclic at
- " PASSFAIL row:" DISPLAY"SQLCODE = ", SQL-COD, " " DISPLAY feat1, " ", feat2, " ", testno, " ", bind1 *Suicide note #7 END-IF END-IF GOTO P200
.
P202. EXECSQLCLOSE TESTLIST END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD *close ASCII file passfail.dat CLOSE PASSFA
*create file heading.dat *pick up names for profile C1 and subprofile P1
DISPLAY" " **** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
P50. DISPLAY" ***************************************" DISPLAY" **** Do not run the REPORT program. ***" DISPLAY" **** Correct ", errcnt, " errors and rerun!
- " ****" DISPLAY" ***************************************" ADD 1 TO iii
.
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.13Bemerkung:
Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.