**************************************************************** * * 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 populates the tables R_STRUCTURE and T_REQ * and lists programs to be executed for each BINDING_CLAIMED. * This list is not needed for testing a common profile such * as Entry FIPS 127-2, Transitional FIPS 127-2, FIPS Sizing, * X/Open with IEF, or X/Open without IEF, because a canned * list is provided for each common profile. * * * BACKGROUND: * The test numbers to be run are derived from the * FEATURE_CLAIMED table. * The derivation is recursive, based on links in table * IMPLICATION. Profiles contain subprofiles (recursively) * which contain features (eventually). * The derived features are joined with table TESTFEATRUE (which * links tests to features) to populate table R_STRUCTURE * (report structure), a list of tests for each FEATURE_CLAIMED. * T_REQ contains the product of R_STRUCTURE and BINDING_CLAIMED * Each row represents a test required for a binding claimed. * The status column REQOPTNA of T_REQ is updated through * program logic (SQL "rules") to values REQ, OPT, or NA * * A TEd file is generated to specify delete of extraneous * tests (from the list of programs to be executed). * This list is not needed for testing common profiles. * * 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, reporta.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
*Profile P998 will set indivt = 1 MOVE 0 TO indivt
EXECSQL DECLARE SHOW_CLAIM CURSOR FOR SELECT REPORTFEATURE.FEATURE1, FEATURENAME, BINDING1 FROM FEATURE_CLAIMED, REPORTFEATURE, BINDING_CLAIMED
WHERE REPORTFEATURE.FEATURE1
= FEATURE_CLAIMED.FEATURE1 ORDERBY 1, 2, 3 END-EXEC EXECSQLOPEN SHOW_CLAIM END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" " DISPLAY"These are the profiles and bindings to be tested:" MOVE 0 TO SQLCODE MOVE 0 TO iii
.
P250. EXECSQL FETCH SHOW_CLAIM INTO :feat1, :featur, :bind1 END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0 OR SQLCODE = 100) then GOTO P252 END-IF *X/Open profiles do not exist for bindings other than PC and PCO if (bind1 = "PC "OR bind1 = "PCO" ) then GOTO P251 END-IF if (feat1 = "P210" ) then GOTO P250 END-IF if (feat1 = "P230" ) then GOTO P250 END-IF
.
P251. if (bind1 = "P998") then MOVE 1 TO indivt END-IF COMPUTE iii = iii + 1 DISPLAY feat1, " ", bind1, " ", featur GOTO P250
.
P252. EXECSQLCLOSE SHOW_CLAIM END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY iii, " claim(s) selected" if (iii = 0) then DISPLAY"Either BINDING_CLAIMED or FEATURE_CLAIMED is
- " empty!" DISPLAY"You must INSERT at least one row into each
- " table." DISPLAY"See instructions in file other/report_l.doc" GOTO P411 END-IF
DISPLAY" " DISPLAY"REPORTA step 1: Check to make sure that each test
- " number" DISPLAY" is linked to the reporting
- " structure;" DISPLAY" i.e., that each TESTCASE row has
- " at" DISPLAY" least one TESTFEATURE row." EXECSQL DECLARE ERROR1 CURSOR FOR SELECT TESTNO FROM TESTCASE
WHERE TESTNO NOTIN
(SELECT TESTNO FROM TESTFEATURE) ORDERBY TESTNO END-EXEC EXECSQLOPEN ERROR1 END-EXEC MOVE SQLCODE TO SQL-COD MOVE 0 TO iii
.
P120. EXECSQL FETCH ERROR1 INTO :testno 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 COMPUTE iii = iii + 1 DISPLAY"TESTCASE without TESTFEATURE row: ", testno GOTO P120
.
P121. EXECSQLCLOSE ERROR1 END-EXEC MOVE SQLCODE TO SQL-COD if (iii > 0) then COMPUTE errcnt = errcnt + 1 DISPLAY"#ERR1 reference-coding error. TESTFEATURE rows
- " missing!" PERFORM PFTEMP THRU P220 *Suicide note #1 END-IF
*========================================================= *Recursive derivation of features to be tested *========================================================= *The goal is for table F_REQ to contain a row for each *feature implied by a row in table FEATURE_CLAIMED. *In general, each FEATURE_CLAIMED is a profile *(begins with the letter P) as opposed to an individual *feature (begins with a digit).
*Each profile in FEATURE_CLAIMED will generate 3 reports.
*This reporting structure allows individual features to *be claimed; although, it is not expected that this *form of reporting will be commonly used in validations. *All the individual features in FEATURE_CLAIMED will *be grouped together in a pseudo profile, P998, under the *heading "Individual Features," for ease in reporting.
*After the recursive process below, each individual *feature required for testing will be represented in *F_REQ column F1. The C1 column ("claim") will contain *the value from the table FEATURE_CLAIMED (except for *individual features claimed, which will have C1 value *'P998'). The P1 column is the immediate profile of *the F1 column. For example, if FEATURE_CLAIMED has *a row with value 'P135' for Transitional SQL, then *many features will be derived, among them '0IEF', and *there will be a F_REQ row with (C1, P1, F1) values: * C1 = 'P135' "claimed" Transitional SQL * P1 = 'P120' "immediate profile" Entry SQL * F1 = '0IEF' "feature" IEF *In the rare case that '0IEF' is claimed as an individual *feature to be tested, by inserting value '0IEF' in table *FEATURE_CLAIMED, then F_REQ would have a row with *(C1, P1, F1) values ('P998','0IEF','0IEF').
DISPLAY" " DISPLAY"REPORTA step 2: Derive all features to be
- " tested."
*setup EXECSQLDELETEFROM F_REQ END-EXEC MOVE SQLCODE TO SQL-COD EXECSQLDELETEFROM F_TEMP END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
*#step 1# *Begin work on the features claimed. *FEATURE1 is either an individual feature or (most likely) a pro *Individual features claimed will be inserted into table F_REQ, *and they need no more processing. *P998 is the report category "Individual Features".
*Everything else (profiles) needs more processing (recursion), *and they will be inserted into table F_TEMP. MOVE 0 TO iii
EXECSQLINSERTINTO F_REQ SELECT'P998',FEATURE1,FEATURE1,0 FROM FEATURE_CLAIMED
WHERE FEATURE1 NOT LIKE 'P%'END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0) then DISPLAY"Problem #1 INSERT INTO F_REQ, SQLCODE = ",
SQL-COD END-IF if (SQLCODE = 100) then COMPUTE iii = iii + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
if (debug1 = 1) then DISPLAY"Table F_REQ with individual features claimed:" PERFORM PFREQ THRU P210 END-IF
*#step 2# *set up initial C1, P1 values for profiles.
*If F_REQ.F1 is a profile (begins with "P"), *move the FEATURE_CLAIMED value to all columns *and prepare to recurse.
EXECSQLINSERTINTO F_TEMP SELECT FEATURE1,FEATURE1,FEATURE1,1 FROM FEATURE_CLAIMED
WHERE FEATURE1 LIKE 'P%' AND FEATURE1 <> 'P998'END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0) then DISPLAY"Problem #2 INSERT INTO F_TEMP, SQLCODE = ",
SQL-COD END-IF if (SQLCODE = 100) then COMPUTE iii = iii + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
*We now have individual features table in F_REQ and *profiles in table F_TEMP.
if (debug1 = 1) then DISPLAY"Table F_TEMP with profiles claimed:" PERFORM PFTEMP THRU P220 END-IF
if (iii = 2) then DISPLAY"Table FEATURE_CLAIMED is empty!" DISPLAY"User MUST specify profiles to test by" DISPLAY" inserting value(s) into table FEATURE_CLAIMED." END-IF
MOVE 0 TO loopct
.
P100.
COMPUTE loopct = loopct + 1
*#step 3# *recurse here, until done.
*#step 3a# *Generate the next level in the hierarchy, *keeping the first two columns and replacing the link. *Rows are optimistically sent back to F_REQ, assuming that *the recursion is complete. If it isn't, we'll move the *rows with profiles out again to recurse another level.
EXECSQLINSERTINTO F_REQ SELECT C1,P1,CHILD_F,LVL FROM F_TEMP, IMPLICATION
WHERE F1 = PARENT_F END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0) then DISPLAY"Problem #4 INSERT INTO F_REQ, SQLCODE = ",
SQL-COD END-IF
EXECSQLDELETEFROM F_TEMP WHERE F1 IN
(SELECT PARENT_F FROM IMPLICATION) END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0) then DISPLAY"Problem #5 DELETE FROM F_TEMP, SQLCODE = ",
SQL-COD END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
*We have now moved every F_TEMP row back into F_REQ, *after replacing the F1 profile value with its "child." *The "child" is either a profile or a feature.
if (debug1 = 1) then DISPLAY"Table F_REQ after ", loopct, " recursion(s)" PERFORM PFREQ THRU P210 DISPLAY"Table F_TEMP after ", loopct, " recursion(s)" DISPLAY"Table F_TEMP should be empty" PERFORM PFTEMP THRU P220 END-IF
MOVE 1 TO iii EXECSQLSELECTCOUNT(*) INTO :iii FROM F_TEMP END-EXEC MOVE SQLCODE TO SQL-COD if (iii > 0 OR SQLCODE < 0 OR SQLCODE = 100) then COMPUTE errcnt = errcnt + 1 DISPLAY"#ERR2 reference-coding error. F_TEMP not empty!" PERFORM PFTEMP THRU P220 *Suicide note #2 END-IF EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
*It's a reference-coding error if F_TEMP has any rows at all. *F_TEMP contains only profiles without features. *so, F_TEMP should be empty.
*#step 3b# *If F_REQ.F1 is a profile (begins with "P"), *move the profile values from F_REQ to F_TEMP *and prepare to recurse. *The child feature from the next level of recursion will belong *to both the grandparent feature and the parent feature. *Column LVL is the level of recursion for column F1.
EXECSQLINSERTINTO F_TEMP SELECT C1,F1,F1,LVL+1 FROM F_REQ
WHERE F1 LIKE 'P%'END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0) then DISPLAY"Problem #7a INSERT INTO F_TEMP, SQLCODE = ",
SQL-COD END-IF
EXECSQLINSERTINTO F_TEMP SELECT C1,P1,F1,LVL FROM F_REQ
WHERE F1 LIKE 'P%'END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0) then DISPLAY"Problem #7b INSERT INTO F_TEMP, SQLCODE = ",
SQL-COD END-IF
EXECSQLDELETEFROM F_REQ
WHERE F1 LIKE 'P%'END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0) then DISPLAY"Problem #8 DELETE FROM F_REQ, SQLCODE = ",
SQL-COD END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
*We now have individual features in F_REQ and *profiles in table F_TEMP.
if (debug1 = 1) then DISPLAY"Table F_REQ with features derived at this
- " point:" PERFORM PFREQ THRU P210 DISPLAY"Table F_TEMP with profiles for next recursion:" PERFORM PFTEMP THRU P220 END-IF
MOVE 0 TO iii EXECSQLSELECTCOUNT(*) INTO :iii FROM F_TEMP END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
*It's time to quit if F_TEMP is empty; *otherwise, continue the recursion.
if (iii > 0) then GOTO P100 END-IF if (loopct = 1) then DISPLAY"Recursion exhausted after 1 pass." else DISPLAY"Recursion exhausted after ", loopct, " passes." END-IF
*========================================================= *Determine which tests are required for the derived features *=========================================================
DISPLAY" " DISPLAY"REPORTA step 3: Determine which tests are
- " required."
*set up EXECSQLDELETEFROM R_STRUCTURE END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
*Find all related tests *Replace feature with TESTNO: EXECSQLINSERTINTO R_STRUCTURE SELECT DISTINCT C1, P1, TESTNO, LVL FROM F_REQ, TESTFEATURE
WHERE FEATURE1 = F1 END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then DISPLAY"Problem #9 INSERT INTO R_STRUCTURE, SQLCODE = ",
SQL-COD END-IF EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
if (debug1 = 1) then DISPLAY"Table R_STRUCTURE with all related tests:" PERFORM PRSTR THRU P230 END-IF
*Drop related tests not fully supported by combined claims: EXECSQLDELETEFROM R_STRUCTURE
WHERE TESTNO IN
(SELECT TESTNO FROM TESTFEATURE
WHERE FEATURE1 NOTIN
(SELECT F1 FROM F_REQ)) END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0) then DISPLAY"Problem #10 DELETE FROM R_STRUCTURE, SQLCODE =
- " ", SQL-COD END-IF if (SQLCODE NOT < 0 AND SQLCODE NOT = 100) then DISPLAY"Partially supported tests WERE DELETED." END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
if (debug1 = 1) then DISPLAY"Table R_STRUCTURE with all fully supported
- " tests:" PERFORM PRSTR THRU P230 END-IF
*One big happy profile when indivt = 1. *Every test will print under every profile * for which it has at least one feature, * provided the entire test is supported by the entire profile. if (indivt = 1) then GOTO P150 END-IF
*Drop tests not fully supported in each subprofile. *This will give stable counts to each subprofile (except P998).
EXECSQLDELETEFROM R_STRUCTURE
WHERE C1 <> 'P998' AND TESTNO IN
(SELECT TESTNO FROM TESTFEATURE
WHERE FEATURE1 NOTIN
(SELECT F1 FROM F_REQ
WHERE F_REQ.C1 = R_STRUCTURE.C1 AND F_REQ.P1 = R_STRUCTURE.P1)) END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0) then DISPLAY"Problem #11a UPDATE R_STRUCTURE, SQLCODE = ",
SQL-COD END-IF if (SQLCODE NOT < 0 AND SQLCODE NOT = 100) then DISPLAY"Some tests were not fully contained in a
- " subprofile." END-IF
*Identify each tests's highest level within its profile. *F_TEMP column P1 is holding TESTNO values.
EXECSQLINSERTINTO F_TEMP (C1, P1, LVL) SELECT C1, TESTNO, MAX (LVL) FROM R_STRUCTURE
GROUP BY C1, TESTNO END-EXEC MOVE SQLCODE TO SQL-COD
*For duplicate testno within a profile, drop lowest subprofile. *F_TEMP column P1 is holding TESTNO values.
EXECSQLDELETEFROM R_STRUCTURE
WHERE C1 <> 'P998' ANDNOT EXISTS (SELECT * FROM F_TEMP
WHERE F_TEMP.C1 = R_STRUCTURE.C1 AND F_TEMP.P1 = R_STRUCTURE.TESTNO AND F_TEMP.LVL = R_STRUCTURE.LVL) END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0) then DISPLAY"Problem #11b DELETE FROM R_STRUCTURE, SQLCODE =
- " ", SQL-COD END-IF
.
P150.
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
if (debug1 = 1) then DISPLAY"Table R_STRUCTURE with P998 resolved:" PERFORM PRSTR THRU P230 END-IF
*Note that R_STRUCTURE now has the full reporting structure. *Some tests will be reported in more than one profile.
*========================================================= *Multiply tests required by bindings claimed. *And pick up TESTNO's program name. *=========================================================
DISPLAY" " DISPLAY"REPORTA step 4: Multiply tests required by
- " bindings claimed." *set up EXECSQLDELETEFROM T_REQ END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLINSERTINTO T_REQ SELECT DISTINCT TESTCASE.TESTNO, TESTCASE.PROG,
BINDING1, 'REQ', ' ' FROM TESTCASE, R_STRUCTURE, BINDING_CLAIMED
WHERE TESTCASE.TESTNO = R_STRUCTURE.TESTNO END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0) then DISPLAY"Problem #12 INSERT INTO T_REQ, SQLCODE = ",
SQL-COD END-IF if (SQLCODE = 100) then DISPLAY"Table FEATURE_CLAIMED or BINDING_CLAIMED is
- " empty!" DISPLAY"User MUST specify bindings to test by" DISPLAY" inserting value(s) into table BINDING_CLAIMED." END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
if (debug1 = 1) then DISPLAY"Before setting value of column REQOPTNA" PERFORM PTREQ THRU P240 END-IF
*========================================================= *Mark 'NA' each test not required for certain bindings *Mark 'DL','UR','WD' tests deleted, under review, withdrawn *=========================================================
DISPLAY" " DISPLAY"REPORTA step 5: Mark 'NA' tests which do not
- " exist for a particular" DISPLAY" language."
*For Version 5.1, which does not yet contain translations for * Transitional SQL tests in the interfaces for * Module FORTRAN, Embedded Pascal, and Module Pascal: EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 IN ('PPA','MFO','MPA') AND TESTNO > '0555' AND TESTNO <> '0564' AND PROG NOT BETWEEN 'flg010'AND'flg013'END-EXEC MOVE SQLCODE TO SQL-COD
* For X/Open Testing, which has only PC and PCO bindings: EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 <> 'PC'AND BINDING1 <> 'PCO' AND PROG LIKE 'xop%'END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 = 'PC' AND TESTNO IN ('0712','0724','0725') END-EXEC MOVE SQLCODE TO SQL-COD
* For the language-specific programs: EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE PROG LIKE 'cob%'AND BINDING1 <> 'PCO' AND BINDING1 <> 'MCO' OR PROG LIKE 'for%'AND BINDING1 <> 'PFO' AND BINDING1 <> 'MFO' OR PROG LIKE 'ccc%'AND BINDING1 <> 'PC' AND BINDING1 <> 'MC' OR PROG LIKE 'pas%'AND BINDING1 <> 'PPA' AND BINDING1 <> 'MPA' OR PROG LIKE 'ada%'AND BINDING1 <> 'PAD' AND BINDING1 <> 'MAD' OR PROG LIKE 'sql%'AND BINDING1 <> 'SQL'END-EXEC MOVE SQLCODE TO SQL-COD
*If we have MUMPS or PLI tests, we will add the following: *OR PROG LIKE 'pli%' AND BINDING1 <> 'PPL' AND BINDING1 <> 'MPL' *OR PROG LIKE 'mum%' AND BINDING1 <> 'PMU' AND BINDING1 <> 'MMU'
* For the NON-module language interfaces: EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 NOT LIKE 'M%' AND PROG IN ('dml074','dml088','yts814') END-EXEC MOVE SQLCODE TO SQL-COD
* For the NON-embedded interfaces: EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 NOT LIKE 'P%' AND PROG IN ('dml017','dml063','dml067', 'dml071','flg010','flg013') END-EXEC MOVE SQLCODE TO SQL-COD
* For the NON-interactive SQL interfaces: EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 <> 'SQL'AND PROG = 'mpquic'END-EXEC MOVE SQLCODE TO SQL-COD
* For Interactive SQL: EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 = 'SQL'AND 0 =
(SELECT ISQL_CT FROM TESTCASE
WHERE TESTCASE.TESTNO = T_REQ.TESTNO) END-EXEC MOVE SQLCODE TO SQL-COD
* For C, MUMPS, PLI - varchar host language declaration: EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 <> 'PC'AND BINDING1 <> 'MC' AND PROG IN
('dml092','dml093','dml129','dml146','dml155', 'isi008','ist008') END-EXEC MOVE SQLCODE TO SQL-COD
* For C only: EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 = 'MC' AND TESTNO IN ('0183','0192','0193','0398','0399') END-EXEC MOVE SQLCODE TO SQL-COD
* For COBOL only: EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 = 'PCO'AND TESTNO = '0288'END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 = 'MCO' AND TESTNO IN ('0185','0206','0207') END-EXEC MOVE SQLCODE TO SQL-COD * For COBOL only - OPTIONAL due to floating point data type: EXECSQL UPDATE T_REQ SET REQOPTNA = 'OPT'
WHERE (BINDING1 = 'MCO'OR BINDING1 = 'PCO') AND TESTNO = '0157'END-EXEC MOVE SQLCODE TO SQL-COD
* For FORTRAN only: EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 = 'MFO' AND TESTNO IN ('0217','0223','0392') END-EXEC MOVE SQLCODE TO SQL-COD
* For PASCAL only: MOVE SQLCODE TO SQL-COD EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 = 'MPA' AND TESTNO IN ('0238','0239') END-EXEC MOVE SQLCODE TO SQL-COD
* For Ada only: EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 = 'PAD' AND TESTNO IN ('0445','0456') END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 = 'MAD' AND TESTNO IN ('0424','0445') END-EXEC MOVE SQLCODE TO SQL-COD
* Placeholder for deleted tests (permanently removed): * TEd maintenance changes will provide any appropriate test numb EXECSQL UPDATE T_REQ SET REQOPTNA = 'DL' WHERE REQOPTNA <> 'NA' AND TESTNO IN ('DL#1','DL#2') END-EXEC MOVE SQLCODE TO SQL-COD
* Placeholder for tests under review (to be run, but not judged * TEd maintenance changes will provide any appropriate test numb EXECSQL UPDATE T_REQ SET REQOPTNA = 'UR' WHERE REQOPTNA <> 'NA' AND TESTNO IN ('UR#1','UR#2') END-EXEC MOVE SQLCODE TO SQL-COD
* Placeholder for withdrawn tests (removed until Version 6.0): * TEd maintenance changes will provide any appropriate test numb EXECSQL UPDATE T_REQ SET REQOPTNA = 'WD' WHERE REQOPTNA <> 'NA' AND TESTNO IN ('WD#1','WD#2') END-EXEC MOVE SQLCODE TO SQL-COD
* For the few MUMPS programs: * EXEC SQL UPDATE T_REQ SET REQOPTNA = 'NA' * WHERE (BINDING1 = 'PMU' OR BINDING1 = 'MMU') * AND PROG NOT LIKE 'mum%' * AND PROG NOT IN ('XXXXXX','YYYYYY');
* For the few PL/I programs: * EXEC SQL UPDATE T_REQ SET REQOPTNA = 'NA' * WHERE (BINDING1 = 'PPL' OR BINDING1 = 'MPL') * AND PROG NOT LIKE 'pli%' * AND PROG NOT IN ('AAAAAA','BBBBBB');
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
if (debug1 = 1) then DISPLAY"After setting value of column REQOPTNA" PERFORM PTREQ THRU P240 END-IF
*========================================================= *Print programs to be EXECuted for each binding. *This is equivalent to RUNPC.BAS, RUNSQL.BAS, etc. *=========================================================
DISPLAY" " DISPLAY"REPORTA step 6: List programs for each binding."
EXECSQL DECLARE RUNALL_BAS CURSOR FOR SELECT DISTINCT BINDING1, AUTHID, TESTPROG.PROG, P_NOTE FROM T_REQ, TESTPROG
WHERE T_REQ.PROG = TESTPROG.PROG AND REQOPTNA IN ('OPT','REQ','UR') ORDERBY 1, 2, 3 END-EXEC
EXECSQLOPEN RUNALL_BAS END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then DISPLAY"Problem #13 OPEN RUNALL_BAS, SQLCODE = ",
SQL-COD END-IF MOVE 0 TO SQLCODE MOVE" "TO bind0 DISPLAY" " DISPLAY"Run the following programs to test the interfaces
- " specified:"
.
P310. if (SQLCODE = 100) then GOTO P311 END-IF EXECSQL FETCH RUNALL_BAS INTO :bind1, :uidx, :prog,
:tpnote :indic1 END-EXEC MOVE SQLCODE TO SQL-COD if (indic1 < 0) then MOVE" "TO tpnote END-IF if (bind0 NOT = bind1) then MOVE bind1 TO bind0 DISPLAY" " DISPLAY"PROGRAMS TO EXECUTE FOR INTERFACE ", bind1 END-IF
*language-independent lower casing for value of bind1 if (bind1 = "PC ") then MOVE"pc "TO bindlc END-IF if (bind1 = "PCO") then MOVE"pco"TO bindlc END-IF if (bind1 = "PFO") then MOVE"pfo"TO bindlc END-IF if (bind1 = "PPA") then MOVE"ppa"TO bindlc END-IF if (bind1 = "PAD") then MOVE"pad"TO bindlc END-IF if (bind1 = "MC ") then MOVE"mc "TO bindlc END-IF if (bind1 = "MCO") then MOVE"mco"TO bindlc END-IF if (bind1 = "MFO") then MOVE"mfo"TO bindlc END-IF if (bind1 = "MPA") then MOVE"mpa"TO bindlc END-IF if (bind1 = "MAD") then MOVE"mad"TO bindlc END-IF if (bind1 = "SQL") then MOVE"sql"TO bindlc END-IF
if (SQLCODE NOT < 0 AND SQLCODE NOT = 100) then DISPLAY"RUN", bind1, " ", prog, ".", bindlc, " AS
- " ", uidx, " ", tpnote END-IF GOTO P310
.
P311. DISPLAY" " EXECSQLCLOSE RUNALL_BAS END-EXEC MOVE SQLCODE TO SQL-COD *=========================================================
*========================================================= *Print tests to delete from required programs. *Testing individual features (outside of profiles) is * tricky, because the programs were not structured for this. *TEd format may be input to TEd after cut and paste. *=========================================================
EXECSQL DECLARE DELETE_TESTNO CURSOR FOR SELECT DISTINCT TESTCASE.TESTNO, TESTCASE.PROG FROM TESTCASE, TESTPROG
WHERE TESTCASE.PROG = TESTPROG.PROG AND TESTCASE.PROG IN
(SELECT PROG FROM T_REQ) AND TESTCASE.TESTNO NOTIN
(SELECT TESTNO FROM T_REQ) ORDERBY TESTNO END-EXEC EXECSQLOPEN DELETE_TESTNO END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then DISPLAY"Problem #14 OPEN DELETE_TESTNO, SQLCODE = ",
SQL-COD END-IF MOVE 0 TO iii
.
P410. EXECSQL FETCH DELETE_TESTNO INTO :testno, :prog END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 100) then GOTO P411 END-IF
if (iii = 0) then DISPLAY"DELETE the following tests from these programs:" END-IF COMPUTE iii = iii + 1 DISPLAY"del ", prog, ".* /BEGIN TEST", testno, "/END TEST", testno, "/" GOTO P410
.
P411.
EXECSQLCLOSE DELETE_TESTNO END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD *=========================================================
*Did we get any suicide notes? if (errcnt > 0) then MOVE 0 TO iii PERFORM P50 UNTIL iii > 9 END-IF
DISPLAY" "
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
*The following routines list entire table contents for debugging
PFREQ. EXECSQL DECLARE F_REQ_CURSOR CURSOR FOR SELECT * FROM F_REQ ORDERBY C1, P1, F1 END-EXEC EXECSQLOPEN F_REQ_CURSOR END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" " DISPLAY"F_REQ Listing" MOVE 0 TO SQLCODE MOVE 0 TO iii
.
P210. EXECSQL FETCH F_REQ_CURSOR INTO :feat1, :feat2, :feat3,
:lvl END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE NOT < 0 AND SQLCODE NOT = 100) then COMPUTE iii = iii + 1 DISPLAY"C1=", feat1, ", P1=", feat2, ", F1=", feat3, ",
- " LVL=", lvl GOTO P210 END-IF EXECSQLCLOSE F_REQ_CURSOR END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY iii, " rows selected" DISPLAY" ".
PFTEMP. EXECSQL DECLARE F_TEMP_CURSOR CURSOR FOR SELECT * FROM F_TEMP ORDERBY C1, P1, F1 END-EXEC EXECSQLOPEN F_TEMP_CURSOR END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" " DISPLAY"F_TEMP Listing" MOVE 0 TO SQLCODE MOVE 0 TO iii
.
P220. EXECSQL FETCH F_TEMP_CURSOR INTO :feat1, :feat2, :feat3,
:lvl END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE NOT < 0 AND SQLCODE NOT = 100) then COMPUTE iii = iii + 1 DISPLAY"C1=", feat1, ", P1=", feat2, ", F1=", feat3, ",
- " LVL=", lvl GOTO P220 END-IF EXECSQLCLOSE F_TEMP_CURSOR END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY iii, " rows selected" DISPLAY" ".
PRSTR. EXECSQL DECLARE R_STRUCTURE_CURSOR CURSOR FOR SELECT * FROM R_STRUCTURE ORDERBY C1, P1, TESTNO END-EXEC EXECSQLOPEN R_STRUCTURE_CURSOR END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" " DISPLAY"R_STRUCTURE Listing" MOVE 0 TO SQLCODE MOVE 0 TO iii
.
P230. EXECSQL FETCH R_STRUCTURE_CURSOR INTO :feat1, :feat2,
:feat3, :lvl END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE NOT < 0 AND SQLCODE NOT = 100) then COMPUTE iii = iii + 1 DISPLAY"C1=", feat1, ", P1=", feat2, ", TESTNO=", feat3, ", LVL=", lvl GOTO P230 END-IF EXECSQLCLOSE R_STRUCTURE_CURSOR END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY iii, " rows selected" DISPLAY" ".
PTREQ. EXECSQL DECLARE T_REQ_CURSOR CURSOR FOR SELECT * FROM T_REQ ORDERBY BINDING1, PROG, TESTNO END-EXEC EXECSQLOPEN T_REQ_CURSOR END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" " DISPLAY"T_REQ Listing" MOVE 0 TO SQLCODE MOVE 0 TO iii
.
P240. EXECSQL FETCH T_REQ_CURSOR INTO :testno, :prog, :bind1,
:reqopt, :result END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE NOT < 0 AND SQLCODE NOT = 100) then COMPUTE iii = iii + 1 DISPLAY"TESTNO=", testno, ",PROG=", prog, " ", bind1, " " ", reqopt, " ", result GOTO P240 END-IF EXECSQLCLOSE T_REQ_CURSOR END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY iii, " rows selected" DISPLAY" ".
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.14Bemerkung:
(vorverarbeitet)
¤
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.