IDENTIFICATION DIVISION.
PROGRAM-ID. REPORTA.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. xyz.
OBJECT-COMPUTER. xyz.
DATA DIVISION.
WORKING-STORAGE SECTION.
* EMBEDDED COBOL ("file REPORTA.PCO")
****************************************************************
*
* 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
*
****************************************************************
EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 prog PIC X(6).
01 tpnote PIC X(10).
01 testno PIC X(4).
01 feat1 PIC X(4).
01 feat2 PIC X(4).
01 feat3 PIC X(4).
01 featur PIC X(32).
01 bind1 PIC X(3).
01 reqopt PIC X(3).
01 result PIC X(4).
01 iii PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 lvl PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 indic1 PIC S9(4) DISPLAY SIGN LEADING SEPARATE.
01 uid PIC X(18).
01 uidx PIC X(18).
01 SQLSTATE PIC X(5).
01 SQLCODE PIC S9(9) COMP.
EXEC SQL END DECLARE SECTION END-EXEC
01 indivt PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 bindlc PIC X(3).
01 bind0 PIC X(3).
01 errcnt PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 loopct PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 debug1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
*date_time declaration
01 TO-DAY PIC 9(6).
01 THE-TIME PIC 9(8).
01 SQL-COD PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
PROCEDURE DIVISION.
P0.
MOVE "HU " TO uid
CALL "AUTHID" USING uid
MOVE "not logged in, not" TO uidx
EXEC SQL SELECT 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"
STOP RUN
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 FROM DATE
ACCEPT THE-TIME FROM TIME
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
****************************************************************
EXEC SQL DECLARE SHOW_CLAIM CURSOR FOR
SELECT REPORTFEATURE.FEATURE1, FEATURENAME, BINDING1
FROM FEATURE_CLAIMED, REPORTFEATURE, BINDING_CLAIMED
WHERE REPORTFEATURE.FEATURE1
= FEATURE_CLAIMED.FEATURE1
ORDER BY 1, 2, 3 END-EXEC
EXEC SQL OPEN 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.
EXEC SQL FETCH SHOW_CLAIM INTO :feat1, :featur, :bind1
END-EXEC
MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0 OR SQLCODE = 100) then
GO TO P252
END-IF
*X/Open profiles do not exist for bindings other than PC and PCO
if (bind1 = "PC " OR bind1 = "PCO" ) then
GO TO P251
END-IF
if (feat1 = "P210" ) then
GO TO P250
END-IF
if (feat1 = "P230" ) then
GO TO P250
END-IF
.
P251.
if (bind1 = "P998") then
MOVE 1 TO indivt
END-IF
COMPUTE iii = iii + 1
DISPLAY feat1, " ", bind1, " ", featur
GO TO P250
.
P252.
EXEC SQL CLOSE SHOW_CLAIM END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL 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"
GO TO 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."
EXEC SQL DECLARE ERROR1 CURSOR FOR
SELECT TESTNO
FROM TESTCASE
WHERE TESTNO NOT IN
(SELECT TESTNO FROM TESTFEATURE)
ORDER BY TESTNO END-EXEC
EXEC SQL OPEN ERROR1 END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE 0 TO iii
.
P120.
EXEC SQL 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
GO TO P121
END-IF
COMPUTE iii = iii + 1
DISPLAY "TESTCASE without TESTFEATURE row: ", testno
GO TO P120
.
P121.
EXEC SQL CLOSE 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
EXEC SQL DELETE FROM F_REQ END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL DELETE FROM F_TEMP END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL 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
EXEC SQL INSERT INTO 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
EXEC SQL 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.
EXEC SQL INSERT INTO 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
EXEC SQL 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.
EXEC SQL INSERT INTO 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
EXEC SQL DELETE FROM 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
EXEC SQL 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
EXEC SQL SELECT COUNT(*) 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
EXEC SQL 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.
EXEC SQL INSERT INTO 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
EXEC SQL INSERT INTO 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
EXEC SQL DELETE FROM 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
EXEC SQL 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
EXEC SQL SELECT COUNT(*) INTO :iii FROM F_TEMP END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL 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
GO TO 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
EXEC SQL DELETE FROM R_STRUCTURE END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
*Find all related tests
*Replace feature with TESTNO:
EXEC SQL INSERT INTO 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
EXEC SQL 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:
EXEC SQL DELETE FROM R_STRUCTURE
WHERE TESTNO IN
(SELECT TESTNO FROM TESTFEATURE
WHERE FEATURE1 NOT IN
(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
EXEC SQL 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
GO TO P150
END-IF
*Drop tests not fully supported in each subprofile.
*This will give stable counts to each subprofile (except P998).
EXEC SQL DELETE FROM R_STRUCTURE
WHERE C1 <> 'P998'
AND TESTNO IN
(SELECT TESTNO FROM TESTFEATURE
WHERE FEATURE1 NOT IN
(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.
EXEC SQL INSERT INTO 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.
EXEC SQL DELETE FROM R_STRUCTURE
WHERE C1 <> 'P998'
AND NOT 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.
EXEC SQL 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
EXEC SQL DELETE FROM T_REQ END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL INSERT INTO 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
EXEC SQL 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:
EXEC SQL 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:
EXEC SQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 <> 'PC' AND BINDING1 <> 'PCO'
AND PROG LIKE 'xop%' END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL 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:
EXEC SQL 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:
EXEC SQL 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:
EXEC SQL 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:
EXEC SQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 <> 'SQL' AND PROG = 'mpquic' END-EXEC
MOVE SQLCODE TO SQL-COD
* For Interactive SQL:
EXEC SQL 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:
EXEC SQL 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:
EXEC SQL 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:
EXEC SQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 = 'PCO' AND TESTNO = '0288' END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL 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:
EXEC SQL 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:
EXEC SQL 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
EXEC SQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 = 'MPA'
AND TESTNO IN ('0238','0239') END-EXEC
MOVE SQLCODE TO SQL-COD
* For Ada only:
EXEC SQL UPDATE T_REQ SET REQOPTNA = 'NA'
WHERE BINDING1 = 'PAD'
AND TESTNO IN ('0445','0456') END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL 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
EXEC SQL 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
EXEC SQL 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
EXEC SQL 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');
EXEC SQL 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."
EXEC SQL 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')
ORDER BY 1, 2, 3 END-EXEC
EXEC SQL OPEN 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
GO TO P311
END-IF
EXEC SQL 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
GO TO P310
.
P311.
DISPLAY " "
EXEC SQL CLOSE 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.
*=========================================================
EXEC SQL 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 NOT IN
(SELECT TESTNO FROM T_REQ)
ORDER BY TESTNO END-EXEC
EXEC SQL OPEN 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.
EXEC SQL FETCH DELETE_TESTNO INTO :testno, :prog END-EXEC
MOVE SQLCODE TO SQL-COD
if (SQLCODE = 100) then
GO TO 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, "/"
GO TO P410
.
P411.
EXEC SQL CLOSE DELETE_TESTNO END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL 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
STOP RUN.
* **** Procedures for PERFORM statements
*The following routines list entire table contents for debugging
PFREQ.
EXEC SQL DECLARE F_REQ_CURSOR CURSOR FOR
SELECT * FROM F_REQ ORDER BY C1, P1, F1 END-EXEC
EXEC SQL OPEN F_REQ_CURSOR END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " "
DISPLAY "F_REQ Listing"
MOVE 0 TO SQLCODE
MOVE 0 TO iii
.
P210.
EXEC SQL 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
GO TO P210
END-IF
EXEC SQL CLOSE F_REQ_CURSOR END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY iii, " rows selected"
DISPLAY " ".
PFTEMP.
EXEC SQL DECLARE F_TEMP_CURSOR CURSOR FOR
SELECT * FROM F_TEMP ORDER BY C1, P1, F1 END-EXEC
EXEC SQL OPEN F_TEMP_CURSOR END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " "
DISPLAY "F_TEMP Listing"
MOVE 0 TO SQLCODE
MOVE 0 TO iii
.
P220.
EXEC SQL 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
GO TO P220
END-IF
EXEC SQL CLOSE F_TEMP_CURSOR END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY iii, " rows selected"
DISPLAY " ".
PRSTR.
EXEC SQL DECLARE R_STRUCTURE_CURSOR CURSOR FOR
SELECT * FROM R_STRUCTURE ORDER BY C1, P1, TESTNO
END-EXEC
EXEC SQL OPEN R_STRUCTURE_CURSOR END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " "
DISPLAY "R_STRUCTURE Listing"
MOVE 0 TO SQLCODE
MOVE 0 TO iii
.
P230.
EXEC SQL 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
GO TO P230
END-IF
EXEC SQL CLOSE R_STRUCTURE_CURSOR END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY iii, " rows selected"
DISPLAY " ".
PTREQ.
EXEC SQL DECLARE T_REQ_CURSOR CURSOR FOR
SELECT * FROM T_REQ ORDER BY BINDING1, PROG, TESTNO
END-EXEC
EXEC SQL OPEN T_REQ_CURSOR END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " "
DISPLAY "T_REQ Listing"
MOVE 0 TO SQLCODE
MOVE 0 TO iii
.
P240.
EXEC SQL 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
GO TO P240
END-IF
EXEC SQL CLOSE T_REQ_CURSOR END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL 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
.
¤ Dauer der Verarbeitung: 0.47 Sekunden
(vorverarbeitet)
¤
|
Haftungshinweis
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.
|