**************************************************************** * * COMMENT SECTION * * DATE 1992/07/14 EMBEDDED COBOL LANGUAGE * 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. * * DML084.PCO * WRITTEN BY: DAVID W. FLATER * * THIS ROUTINE TESTS THE SQLSTATE STATUS CODE. * * REFERENCES * ANSI SQL-1992 * 22.1 SQLSTATE * ****************************************************************
MOVE"SCHANZLE"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 MOVE 0 TO errcnt MOVE 1 TO flag
DISPLAY "SQL Test Suite, V6.0, Embedded COBOL, dml084.pco" DISPLAY "59-byte ID" DISPLAY"TEd Version #" *date_time print ACCEPT TO-DAY FROMDATE ACCEPT THE-TIME FROMTIME DISPLAY"Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME
******************** BEGIN TEST0503 ******************* MOVE 1 TO flag
DISPLAY" TEST0503 " DISPLAY"SQLSTATE = 42000: syntax error or access rule vio.
- " 1" DISPLAY"Note: VALID implementation-defined subclass will
- " be" DISPLAY" accepted instead of no-subclass value of 000
- " " DISPLAY"Reference ANSI SQL-1992," DISPLAY" section 6.3
DISPLAY"Test numbers 0503 and 0504 check for SQLSTATE" DISPLAY"42000 on syntax errors and access violations." DISPLAY"SQL-92 permits, but does not require, an" DISPLAY"implementation to achieve a high level of security" DISPLAY"by returning the same error for an access" DISPLAY"violation as for a reference to a non-existent" DISPLAY"table. This test exercises several different" DISPLAY"types of syntax errors and access violations. If" DISPLAY"you are trying for a high security level, please" DISPLAY"insure that the compilation AND the run time" DISPLAY"behavior of all these errors are" DISPLAY"indistinguishable." DISPLAY" " DISPLAY"For minimal SQL-92 conformance, each run time" DISPLAY"error must produce SQLSTATE 42000 or 42 with some" DISPLAY"implementor-defined subclass. The subclass can" DISPLAY"be different for each error. Compile time errors" DISPLAY"are also permissible." DISPLAY" " DISPLAY" " DISPLAY" " DISPLAY" "
*HU.UPUNIQ has a row (1,'A'), but SCHANZLE has no privileges MOVE 0 TO SQLCODE MOVE"x"TO ct1 MOVE"x"TO SQLSTATE DISPLAY"SELECT COL2 INTO :ct1 FROM HU.UPUNIQ WHERE NUMKEY
- " = 1;" EXECSQLSELECT COL2 INTO :ct1 FROM HU.UPUNIQ WHERE NUMKEY
= 1 END-EXEC MOVE SQLCODE TO SQL-COD MOVE SQLSTATE TO SQLST1 MOVE SQLCODE TO SQLCD1 DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE DISPLAY"ct1 should NOT be 'A '; its value is ", ct1 if (SQLCODE NOT < 0 OR ct1 = "A ") then MOVE 0 TO flag END-IF PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF
*SCHANZLE has no privileges on table HU.UPUNIQ - attempt UPDATE DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"UPDATE HU.UPUNIQ SET COL2 = 'xx';" EXECSQL UPDATE HU.UPUNIQ SET COL2 = 'xx'END-EXEC MOVE SQLCODE TO SQL-COD MOVE SQLSTATE TO SQLST2 MOVE SQLCODE TO SQLCD2 DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF
*SCHANZLE has no privileges on table HU.UPUNIQ - attempt DELETE DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"DELETE FROM HU.UPUNIQ;" EXECSQLDELETEFROM HU.UPUNIQ END-EXEC MOVE SQLCODE TO SQL-COD MOVE SQLSTATE TO SQLST3 MOVE SQLCODE TO SQLCD3 DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF
*SCHANZLE has no privileges on table HU.UPUNIQ - attempt insert DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"INSERT INTO HU.UPUNIQ VALUES (9,'M');" EXECSQLINSERTINTO HU.UPUNIQ VALUES (9,'M') END-EXEC MOVE SQLCODE TO SQL-COD MOVE SQLSTATE TO SQLST4 MOVE SQLCODE TO SQLCD4 DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF
*Subtest 0503e begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*Privilege violation in 'inessential part' - middle subquery COMPUTE tmpcnt = -1 DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"SELECT COUNT(*) INTO :tmpcnt FROM HU.STAFF" DISPLAY"WHERE GRADE <" DISPLAY" (SELECT MAX(HOURS) FROM HU.WORKS)" DISPLAY"OR GRADE >" DISPLAY" (SELECT MAX(NUMKEY) FROM HU.UPUNIQ)" DISPLAY"OR GRADE + 100 >" DISPLAY" (SELECT MIN(HOURS) FROM HU.WORKS);" EXECSQLSELECTCOUNT(*) INTO :tmpcnt FROM HU.STAFF
WHERE GRADE <
(SELECT MAX(HOURS) FROM HU.WORKS) OR GRADE >
(SELECT MAX(NUMKEY) FROM HU.UPUNIQ) OR GRADE + 100 >
(SELECT MIN(HOURS) FROM HU.WORKS) END-EXEC MOVE SQLCODE TO SQL-COD MOVE SQLSTATE TO SQLST5 MOVE SQLCODE TO SQLCD5 DISPLAY"tmpcnt should not be 5; its value is ", tmpcnt DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (tmpcnt = 5 OR SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF *Subtest 0503e ends
*Subtest 0503f begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*Privilege violation AND syntax error (column 2 is CHAR(2)) DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"INSERT INTO HU.UPUNIQ VALUES (13,44);" EXECSQLINSERTINTO HU.UPUNIQ VALUES (13,44) END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD4 OR SQLSTATE NOT = SQLST4) then DISPLAY"Optional security note:" DISPLAY"Different message for access violation and " DISPLAY" access violation with syntax error (CHAR
- " column) " END-IF *Subtest 0503f ends
*Subtest 0503g begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*Privilege violation AND syntax error (2 columns in row) DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"INSERT INTO HU.UPUNIQ VALUES (555666777);" EXECSQLINSERTINTO HU.UPUNIQ VALUES
(555666777) END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD4 OR SQLSTATE NOT = SQLST4) then DISPLAY"Optional security note:" DISPLAY"Different message for access violation and " DISPLAY" access violation with syntax error (wrong #
- " columns) " END-IF *Subtest 0503g ends
EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD
if ( flag = 1 ) then DISPLAY" *** pass *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0503','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml084.pco *** fail *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0503','fail','PCO') END-EXEC MOVE SQLCODE TO SQL-COD COMPUTE errcnt = errcnt + 1 END-IF
DISPLAY"Test numbers 0503 and 0504 check for SQLSTATE" DISPLAY"42000 on syntax errors and access violations." DISPLAY"SQL-92 permits, but does not require, an" DISPLAY"implementation to achieve a high level of security" DISPLAY"by returning the same error for an access" DISPLAY"violation as for a reference to a non-existent" DISPLAY"table. This test exercises several different" DISPLAY"types of syntax errors and access violations. If" DISPLAY"you are trying for a high security level, please" DISPLAY"insure that the compilation AND the run time" DISPLAY"behavior of all these errors are" DISPLAY"indistinguishable." DISPLAY" " DISPLAY"For minimal SQL-92 conformance, each run time" DISPLAY"error must produce SQLSTATE 42000 or 42 with some" DISPLAY"implementor-defined subclass. The subclass can" DISPLAY"be different for each error. Compile time errors" DISPLAY"are also permissible." DISPLAY" " DISPLAY" " DISPLAY" "
*HU.UPUPUP DOES NOT EXIST - attempt SELECT MOVE 0 TO SQLCODE MOVE"x"TO ct1 MOVE"x"TO SQLSTATE DISPLAY"SELECT COL2 INTO :ct1 FROM HU.UPUPUP WHERE NUMKEY
- " = 1;" EXECSQLSELECT COL2 INTO :ct1 FROM HU.UPUPUP WHERE NUMKEY
= 1 END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD1 OR SQLSTATE NOT = SQLST1) then DISPLAY"Optional security note:" DISPLAY"Different message for SELECT access violation " DISPLAY"and SELECT on table which does not exist." END-IF
*HU.UPUPUP does not exist - attempt UPDATE DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"UPDATE HU.UPUPUP SET COL2 = 'xx';" EXECSQL UPDATE HU.UPUPUP SET COL2 = 'xx'END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD2 OR SQLSTATE NOT = SQLST2) then DISPLAY"Optional security note:" DISPLAY"Different message for UPDATE access violation " DISPLAY"and UPDATE of table which does not exist." END-IF
*HU.UPUPUP does not exist - attempt DELETE DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"DELETE FROM HU.UPUPUP;" EXECSQLDELETEFROM HU.UPUPUP END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD3 OR SQLSTATE NOT = SQLST3) then DISPLAY"Optional security note:" DISPLAY"Different message for DELETE access violation " DISPLAY"and DELETE for table which does not exist." END-IF
*HU.UPUPUP does not exist - attempt insert DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"INSERT INTO HU.UPUPUP VALUES (9,'M');" EXECSQLINSERTINTO HU.UPUPUP VALUES (9,'M') END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD4 OR SQLSTATE NOT = SQLST4) then DISPLAY"Optional security note:" DISPLAY"Different message for INSERT access violation " DISPLAY"and INSERT for table which does not exist." END-IF
*HU.UPUPUP DOES NOT EXIST - inessential part of middle subquery COMPUTE tmpcnt = -1 DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"SELECT COUNT(*) INTO :tmpcnt FROM HU.STAFF" DISPLAY"WHERE GRADE <" DISPLAY" (SELECT MAX(HOURS) FROM HU.WORKS)" DISPLAY"OR GRADE >" DISPLAY" (SELECT MAX(NUMKEY) FROM HU.UPUPUP)" DISPLAY"OR GRADE + 100 >" DISPLAY" (SELECT MIN(HOURS) FROM HU.WORKS);" EXECSQLSELECTCOUNT(*) INTO :tmpcnt FROM HU.STAFF
WHERE GRADE <
(SELECT MAX(HOURS) FROM HU.WORKS) OR GRADE >
(SELECT MAX(NUMKEY) FROM HU.UPUPUP) OR GRADE + 100 >
(SELECT MIN(HOURS) FROM HU.WORKS) END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"tmpcnt should not be 5; its value is ", tmpcnt DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (tmpcnt = 5 OR SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD5 OR SQLSTATE NOT = SQLST5) then DISPLAY"Optional security note:" DISPLAY"Different message for access violation and " DISPLAY" access violation with syntax error (wrong #
- " columns) " END-IF
EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD
if ( flag = 1 ) then DISPLAY" *** pass *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0504','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml084.pco *** fail *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0504','fail','PCO') END-EXEC MOVE SQLCODE TO SQL-COD COMPUTE errcnt = errcnt + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD ******************** END TEST0504 ********************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
NOSUBCLASS.
*This routine replaces valid implementation-defined *subclasses with 000. This replacement equates valid *implementation-defined subclasses with the 000 value *expected by the test case; otherwise the test will fail. *After calling NOSUBCLASS, NORMSQ will be tested * SQLSTATE will be printed.
MOVE SQLSTATE TO NR-TAB
MOVE 3 TO norm1 *subclass begins in position 3 of char array NORMSQ MOVE 14 TO norm2 PERFORM P90 UNTIL norm2 > 36
if (NR-TAB = SQLSTATE) then GOTO EXIT-NOSUBCLASS END-IF *Quit if NORMSQ is unchanged. Subclass is not impl.-def. *Changed NORMSQ means implementation-defined subclass, *so proceed to zero it out, if valid (0-9,A-Z)
MOVE 4 TO norm1 *examining position 4 of char array NORMSQ MOVE 1 TO norm2 PERFORM P89 UNTIL norm2 > 36
MOVE 5 TO norm1 *examining position 5 of char array NORMSQ MOVE 1 TO norm2 PERFORM P88 UNTIL norm2 > 36
*implementation-defined subclasses are allowed for warnings *(class = 01). These equate to successful completion *SQLSTATE values of 00000. *Reference SQL-92 4.28 SQL-transactions, paragraph 2
if (NORMSQ(1) = "0"AND NORMSQ(2) = "1") then MOVE"0"TO NORMSQ(2) END-IF GOTO EXIT-NOSUBCLASS
.
P90. *valid subclass begins with 5-9, I-Z, end of ALPNUM table if (NORMSQ(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD 1 TO norm2
.
P89. *valid characters are 0-9, A-Z if (NORMSQ(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD 1 TO norm2
.
P88. *valid characters are 0-9, A-Z if (NORMSQ(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD 1 TO norm2
.
EXIT-NOSUBCLASS. EXIT.
¤ Dauer der Verarbeitung: 0.19 Sekunden
(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.