**************************************************************** * * COMMENT SECTION * * DATE 1995/09/08 EMBEDDED COBOL LANGUAGE * 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. * * DML154.PCO * WRITTEN BY: David W. Flater * TRANSLATED AUTOMATICALLY FROM EMBEDDED C BY CHRIS SCHANZLE * * This routine tests Transitional SQL features. * * REFERENCES * FIPS PUB 127-2 14.1 Transitional SQL * ANSI SQL-1992 * ****************************************************************
MOVE"FLATER "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 EXECSQL ROLLBACK WORK 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
DISPLAY "SQL Test Suite, V6.0, Embedded COBOL, dml154.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 TEST0849 ******************* MOVE 1 TO flag
DISPLAY"CREATE TABLE LOTSA_DATETIMES (" DISPLAY" C1 DATE, C2 TIME, C3 TIMESTAMP," DISPLAY" C4 INTERVAL YEAR, C5 INTERVAL MONTH, C6 INTERVAL
- " DAY," DISPLAY" C7 INTERVAL HOUR, C8 INTERVAL MINUTE, C9
- " INTERVAL SECOND," DISPLAY" C10 INTERVAL YEAR TO MONTH," DISPLAY" C11 INTERVAL DAY TO HOUR," DISPLAY" C12 INTERVAL DAY TO MINUTE," DISPLAY" C13 INTERVAL DAY TO SECOND," DISPLAY" C14 INTERVAL HOUR TO MINUTE," DISPLAY" C15 INTERVAL HOUR TO SECOND," DISPLAY" C16 INTERVAL MINUTE TO SECOND);" EXECSQL CREATE TABLE LOTSA_DATETIMES (
C1 DATE, C2 TIME, C3 TIMESTAMP,
C4 INTERVAL YEAR, C5 INTERVAL MONTH, C6 INTERVAL DAY,
C7 INTERVAL HOUR, C8 INTERVAL MINUTE, C9 INTERVAL SECOND,
C10 INTERVAL YEAR TO MONTH,
C11 INTERVAL DAYTO HOUR,
C12 INTERVAL DAYTO MINUTE,
C13 INTERVAL DAYTO SECOND,
C14 INTERVAL HOUR TO MINUTE,
C15 INTERVAL HOUR TO SECOND,
C16 INTERVAL MINUTE TO SECOND) END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"COMMIT WORK;" EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"ALLOCATE DESCRIPTOR 'D15411' WITH MAX 16;" EXECSQL ALLOCATE DESCRIPTOR 'D15411'WITH MAX 16 END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK if (SQLSTATE = "07009") then DISPLAY"Received SQLSTATE 07009!" DISPLAY"This test must be rewritten by NIST (in the
- " event of" DISPLAY"a validation) to accomodate
- " implementation-defined" DISPLAY"limit on ." END-IF DISPLAY" "
DISPLAY"dstmt=""SELECT * FROM LOTSA_DATETIMES""" MOVE"SELECT * FROM LOTSA_DATETIMES " TO dstmt
DISPLAY"PREPARE S15411 FROM :dstmt;" EXECSQL PREPARE S15411 FROM :dstmt END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
*Lengths of temporal data types *as defined in 4.5 and clarified *by 6.1 SR.27:
*DATE = 10 *TIME = 8 *TIMESTAMP = 26 *INTERVAL YEAR >= 2 *INTERVAL MONTH >= 2 *INTERVAL DAY >= 2 *INTERVAL HOUR >= 2 *INTERVAL MINUTE >= 2 *INTERVAL SECOND >= 9 *INTERVAL YEAR TO MONTH >= 5 *INTERVAL DAY TO HOUR >= 5 *INTERVAL DAY TO MINUTE >= 8 *INTERVAL DAY TO SECOND >= 18 *INTERVAL HOUR TO MINUTE >= 5 *INTERVAL HOUR TO SECOND >= 15 *INTERVAL MINUTE TO SECOND >= 12
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 1 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 1 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 10; its value is ", int1 if (int1 NOT = 10) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 2 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 2 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 8; its value is ", int1 if (int1 NOT = 8) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 3 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 3 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 26; its value is ", int1 if (int1 NOT = 26) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 4 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 4 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 2; its value is ", int1 if (int1 < 2) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 5 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 5 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 2; its value is ", int1 if (int1 < 2) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 6 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 6 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 2; its value is ", int1 if (int1 < 2) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 7 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 7 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 2; its value is ", int1 if (int1 < 2) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 8 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 8 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 2; its value is ", int1 if (int1 < 2) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 9 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 9 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 9; its value is ", int1 if (int1 < 9) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 10 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 10 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 5; its value is ", int1 if (int1 < 5) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 11 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 11 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 5; its value is ", int1 if (int1 < 5) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 12 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 12 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 8; its value is ", int1 if (int1 < 8) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 13 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 13 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 18; its value is ", int1 if (int1 < 18) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 14 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 14 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 5; its value is ", int1 if (int1 < 5) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 15 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 15 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 15; its value is ", int1 if (int1 < 15) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"GET DESCRIPTOR 'D15411' VALUE 16 :int1 = LENGTH;" EXECSQL GET DESCRIPTOR 'D15411'VALUE 16 :int1 = LENGTH END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be >= 12; its value is ", int1 if (int1 < 12) then MOVE 0 TO flag END-IF
DISPLAY"ROLLBACK WORK;" EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"DROP TABLE LOTSA_DATETIMES CASCADE;" EXECSQL DROP TABLE LOTSA_DATETIMES CASCADE END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"COMMIT WORK;" EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
if ( flag = 1 ) then DISPLAY" *** pass *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0849','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml154.pco *** fail *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0849','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 TEST0849 ******************** ******************** BEGIN TEST0852 ******************* MOVE 1 TO flag
*We were GRANT SELECT ON HU.STAFF TO FLATER by SULLIVAN1 *We also are GRANT ALL PRIVILEGES ON STAFF TO PUBLIC MOVE 0 TO int1 DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM INFO_SCHEM.TABLE_PRIVILEGES" DISPLAY" WHERE TABLE_SCHEM = 'HU' AND TABLE_NAME =
- " 'STAFF'" DISPLAY" AND GRANTOR = 'SULLIVAN1' AND GRANTEE =
- " 'FLATER'" DISPLAY" AND IS_GRANTABLE = 'NO';" EXECSQLSELECTCOUNT(*) INTO :int1 FROM INFO_SCHEM.TABLE_PRIVILEGES
WHERE TABLE_SCHEM = 'HU'AND TABLE_NAME = 'STAFF' AND GRANTOR = 'SULLIVAN1'AND GRANTEE = 'FLATER' AND IS_GRANTABLE = 'NO'END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 1; its value is ", int1 if (int1 NOT = 1) then MOVE 0 TO flag END-IF
MOVE 0 TO int1 DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM INFO_SCHEM.COLUMN_PRIVILEGES" DISPLAY" WHERE TABLE_SCHEM = 'HU' AND TABLE_NAME =
- " 'STAFF'" DISPLAY" AND GRANTOR = 'SULLIVAN1' AND GRANTEE =
- " 'FLATER'" DISPLAY" AND IS_GRANTABLE = 'NO';" EXECSQLSELECTCOUNT(*) INTO :int1 FROM INFO_SCHEM.COLUMN_PRIVILEGES
WHERE TABLE_SCHEM = 'HU'AND TABLE_NAME = 'STAFF' AND GRANTOR = 'SULLIVAN1'AND GRANTEE = 'FLATER' AND IS_GRANTABLE = 'NO'END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 4; its value is ", int1 if (int1 NOT = 4) then MOVE 0 TO flag END-IF
DISPLAY"COMMIT WORK;" EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
if ( flag = 1 ) then DISPLAY" *** pass *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0852','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml154.pco *** fail *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0852','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 TEST0852 ******************** ******************** BEGIN TEST0854 ******************* MOVE 1 TO flag
DISPLAY"It is implementation-defined whether an SQL-data
- " statement may" DISPLAY"occur within the same transaction as an SQL-schema
- " statement." DISPLAY"If it is not supported, a 25000 SQLSTATE is
- " supposed to be" DISPLAY"issued. However, even if it is supported, there
- " can be other" DISPLAY"implementation-defined restrictions, requirements,
- " and" DISPLAY"conditions. An example is only allowing one
- " SQL-schema statement" DISPLAY"per transaction. If such a restriction is
- " violated, the returned" DISPLAY"SQLSTATE is implementation-defined."
DISPLAY"INSERT INTO TRANSIENT VALUES (1);" EXECSQLINSERTINTO TRANSIENT VALUES (1) END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"CREATE VIEW CTRANS (WIN_COUNT) AS" DISPLAY" SELECT COUNT(*) FROM TRANSIENT;" EXECSQL CREATE VIEW CTRANS (WIN_COUNT) AS SELECTCOUNT(*) FROM TRANSIENT END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO TRANSIENT VALUES (2);" EXECSQLINSERTINTO TRANSIENT VALUES (2) END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
MOVE 0 TO int1 DISPLAY"SELECT * INTO :int1 FROM CTRANS;" EXECSQLSELECT * INTO :int1 FROM CTRANS END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"int1 should be 2; its value is ", int1 if (int1 NOT = 2) then MOVE 0 TO flag END-IF PERFORM CHCKOK DISPLAY" "
DISPLAY"DROP TABLE TRANSIENT CASCADE;" EXECSQL DROP TABLE TRANSIENT CASCADE END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"ROLLBACK WORK;" EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" "
if ( flag = 1 ) then DISPLAY" *** pass *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0854','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml154.pco *** fail *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0854','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 TEST0854 ******************** **** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
*Test SQLCODE and SQLSTATE for normal completion.
CHCKOK. DISPLAY"SQLCODE should be 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be 00000; its value is ", SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT = 0 OR NORMSQ NOT = "00000") then MOVE 0 TO flag END-IF if (NORMSQ = "00000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF
.
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 NORMSQ
MOVE 3 TO norm1 *subclass begins in position 3 of char array NORMSQ *valid subclass begins with 5-9, I-Z, end of ALPNUM table PERFORMVARYING norm2 FROM 14 BY 1 UNTIL norm2 > 36 if (NORMSQX(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQX(norm1) END-IF END-PERFORM
*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) if (NORMSQ = SQLSTATE) then GOTO EXIT-NOSUBCLASS END-IF
MOVE 4 TO norm1 *examining position 4 of char array NORMSQ *valid characters are 0-9, A-Z PERFORMVARYING norm2 FROM 1 BY 1 UNTIL norm2 > 36 if (NORMSQX(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQX(norm1) END-IF END-PERFORM
MOVE 5 TO norm1 *valid characters are 0-9, A-Z *examining position 5 of char array NORMSQ PERFORMVARYING norm2 FROM 1 BY 1 UNTIL norm2 > 36 if (NORMSQX(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQX(norm1) END-IF END-PERFORM
*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 (NORMSQX(1) = "0"AND NORMSQX(2) = "1") then MOVE"0"TO NORMSQX(2) END-IF
.
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.