* DISCLAIMER: * This program was reviewed by employees of NIST for * conformance to the SQL standards. * NIST assumes no responsibility for any party's use of * this program.
* X/Open and the 'X' symbol are registered trademarks of X/Open Company * Limited in the UK and other countries.
**************************************************************** * * COMMENT SECTION * * DATE 1994/05/05 EMBEDDED C LANGUAGE * X/Open SQL VALIDATION TEST SUITE V6.0 * * XOP720.PCO * WRITTEN BY: E. Pratt * * GRANT ALL with optional PRIVILEGES omitted * * REFERENCES * X/Open CAE SQL * SECTION 5.3.9 * * <embedded SQL Cobol program> * * DATE PROGRAM LAST CHANGED 28/10/94 * ****************************************************************
*Must be run under authorization identifier XOPEN3
DISPLAY"This Program must be run after xop719.pco but" DISPLAY"before xop721.pco, xop722.pco and xop723.pco"
*Log in as user XOPEN3 MOVE"XOPEN3"TO uid CALL"AUTHID"USING uid MOVE"not logged in, not"TO uidx EXECSQLSELECT USER INTO :uidx FROM XOPEN1.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 0 TO errflg DISPLAY"X/OPEN Extensions SQL Test Suite, V6.0, Embedded
- "COBOL, xop720.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
*initialise NOSUBCLASS comparison variable MOVE 1 TO flag
******************** BEGIN TEST0720 *******************
DISPLAY" TEST0720 " DISPLAY"X/O,GRANT ALL with optional PRIVILEGES omitted " DISPLAY" X/Open CAE SQL SEC. 5.3.9" DISPLAY" - - - - - - - - - - - - - - - - - - -" DISPLAY"### SELECT COUNT(*) INTO :countr FROM XOPEN1.AAA;" DISPLAY"### SELECT A1 INTO :ch1 FROM XOPEN1.AAA " DISPLAY"### WHERE A2 = 'AB';" DISPLAY"### UPDATE XOPEN1.AAA SET A1 = 'EP' WHERE A2 =
- " 'AB'; " DISPLAY"### SELECT A1 INTO :ch1 FROM XOPEN1.AAA " DISPLAY"### WHERE A2 = 'AB';" DISPLAY"### INSERT INTO XOPEN1.AAA
- " VALUES('XX','YY','ZZ');" DISPLAY"### SELECT COUNT(*) INTO :countr FROM XOPEN1.AAA;" DISPLAY"### DELETE FROM XOPEN1.BBB WHERE B1 = 'BA';" DISPLAY"### UPDATE XOPEN1.BBB SET B1 ='SP' WHERE B2='BE';" DISPLAY"### INSERT INTO XOPEN1.BBB
- " VALUES('XX','YY','ZZ');" DISPLAY"### INSERT INTO XOPEN1.BBB
- " VALUES('XB','YB','BF');" DISPLAY"### SELECT COUNT(*) INTO :countr FROM XOPEN1.CCC;" DISPLAY"### INSERT INTO XOPEN1.CCC
- " VALUES('XC','YC','BC');" DISPLAY"================================================="
*Check the number of rows in table AAA is correct MOVE 0 TO countr EXECSQLSELECTCOUNT(*) INTO :countr FROM XOPEN1.AAA END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"Number of rows should be 4, it is ", countr
if (countr NOT = 4) then DISPLAY"*** Problem found (TEST STEP NUMBER 1) ! *** " COMPUTE errflg = errflg + 1 END-IF
*Check that a row can be selected from table AAA MOVE"x"TO SQLSTATE EXECSQLSELECT A1 INTO :ch1 FROM XOPEN1.AAA
WHERE A2 = 'AB'END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"ch1 should be AA , it is ", ch1
PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND ch1 NOT = "AA") then DISPLAY"*** Problem found (TEST STEP NUMBER 2) ! *** " COMPUTE errflg = errflg + 1 END-IF
*Check that a value in a row can be updated MOVE" "TO ch1 MOVE"x"TO SQLSTATE EXECSQL UPDATE XOPEN1.AAA SET A1 = 'EP'
WHERE A2 = 'AB'END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) then DISPLAY"*** Problem found (TEST STEP NUMBER 3) ! *** " COMPUTE errflg = errflg + 1 END-IF
*Check that the updated row has the expected value MOVE"x"TO SQLSTATE EXECSQLSELECT A1 INTO :ch1 FROM XOPEN1.AAA
WHERE A2 = 'AB'END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"ch1 should be EP , it is ", ch1
PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND ch1 NOT = "EP") then DISPLAY"*** Problem found (TEST STEP NUMBER 4) ! *** " COMPUTE errflg = errflg + 1 END-IF
*user id XOPEN3 does not have INSERT priviledges on XOPEN1.AAA MOVE"x"TO SQLSTATE EXECSQLINSERTINTO XOPEN1.AAA
VALUES('XX','YY','ZZ') END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLSTATE should be 42000 , it is ", SQLSTATE PERFORM NOSUBCLASS THROUGH P213. if (NORMSQ2 NOT = "42000") then DISPLAY"*** Problem found (TEST STEP NUMBER 5) ! *** " COMPUTE errflg = errflg + 1 END-IF
*Check that the number of rows in AAA remained the same MOVE 0 TO countr EXECSQLSELECTCOUNT(*) INTO :countr FROM XOPEN1.AAA END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"Number of rows should be 4, it is ", countr
if (countr NOT = 4) then DISPLAY"*** Problem found (TEST STEP NUMBER 6) ! *** " COMPUTE errflg = errflg + 1 END-IF
*Check that a row can be deleted, XOPEN2 is able to *grant SELECT, INSERT, DELETE to XOPEN3 (see xop719.pco) MOVE"x"TO SQLSTATE EXECSQLDELETEFROM XOPEN1.BBB WHERE B1 = 'BA'END-EXEC MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) then DISPLAY"*** Problem found (TEST STEP NUMBER 7) ! *** " COMPUTE errflg = errflg + 1 END-IF
EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"================================================="
*Check that a row in table BBB cannot be updated *grant SELECT, INSERT, DELETE (but not UPDATE) to XOPEN3 (see xop719.pco) MOVE"x"TO SQLSTATE EXECSQL UPDATE XOPEN1.BBB SET B1 = 'SP'
WHERE B2 = 'BE'END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLSTATE should be 42000 , it is ", SQLSTATE
PERFORM NOSUBCLASS THROUGH P213. if (NORMSQ2 NOT = "42000") then DISPLAY"*** Problem found (TEST STEP NUMBER 8) ! *** " COMPUTE errflg = errflg + 1 END-IF
*Check that a row, that does not duplicate any values *already in table BBB, can be inserted MOVE"x"TO SQLSTATE EXECSQLINSERTINTO XOPEN1.BBB
VALUES('XX','YY','ZZ') END-EXEC MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) then DISPLAY"*** Problem found (TEST STEP NUMBER 9) ! *** " COMPUTE errflg = errflg + 1 END-IF
*Check that a row, that duplicates a value in the *UNIQUE constrained field, cannot be inserted MOVE"x"TO SQLSTATE EXECSQLINSERTINTO XOPEN1.BBB
VALUES('XB','YB','BF') END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLSTATE should be 23000 , it is ", SQLSTATE
PERFORM NOSUBCLASS THROUGH P213. if (NORMSQ2 NOT = "23000") then DISPLAY"*** Problem found (TEST STEP NUMBER 10) ! *** " COMPUTE errflg = errflg + 1 END-IF
*Check that SELECT on table CCC does not work, XOPEN3 was not *granted this privilege MOVE"x"TO SQLSTATE MOVE 0 TO countr EXECSQLSELECTCOUNT(*) INTO :countr FROM XOPEN1.CCC END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLSTATE should be 42000 , it is ", SQLSTATE
PERFORM NOSUBCLASS THROUGH P213. if (NORMSQ2 NOT = "42000") then DISPLAY"*** Problem found (TEST STEP NUMBER 11) ! *** " COMPUTE errflg = errflg + 1 END-IF
*Check that INSERT on table CCC does not work, XOPEN3 was not *granted this privilege MOVE"x"TO SQLSTATE EXECSQLINSERTINTO XOPEN1.CCC
VALUES('XC','YC','BC') END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLSTATE should be 42000 , it is ", SQLSTATE
PERFORM NOSUBCLASS THROUGH P213. if (NORMSQ2 NOT = "42000") then DISPLAY"*** Problem found (TEST STEP NUMBER 12) ! *** " COMPUTE errflg = errflg + 1 END-IF
*No ROLLBACK - This program is part of a set, run *together, xop719.pco and xop720.pco to xop723.pco
DISPLAY"number of errors detected = ", errflg " " DISPLAY"### maximum number of errors is 12 ###" DISPLAY" " DISPLAY"### Program xop719 MUST be run before ###" DISPLAY"### this program can be re-run ###"
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
******************** END TEST0720 *******************
****** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
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 SQLSTORE *subclass begins in position 3 of char array NORMSQ MOVE 3 TO norm1 MOVE 14 TO norm2 PERFORMUNTIL norm2 > 36 if (NORMSQ(norm1) = ALPNUM3(norm2)) then MOVE'0'TO NORMSQ(norm1) END-IF ADD 1 TO norm2 END-PERFORM MOVE SQLS2 TO NORMSQ2
if (NORMSQ2 = SQLSTATE) then GOTO P213 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 PERFORMUNTIL norm2 > 36 if (NORMSQ(norm1) = ALPNUM3(norm2)) then MOVE'0'TO NORMSQ(norm1) END-IF ADD 1 TO norm2 END-PERFORM MOVE 5 TO norm1 *examining position 5 of char array NORMSQ MOVE 1 TO norm2 PERFORMUNTIL norm2 > 36 if (NORMSQ(norm1) = ALPNUM3(norm2)) then MOVE'0'TO NORMSQ(norm1) END-IF ADD 1 TO norm2 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 (NORMSQ(1) = '0'AND NORMSQ(2) = '1') then MOVE'0'TO NORMSQ(2) END-IF MOVE SQLS2 TO NORMSQ2.
P213.
*Test SQLCODE and SQLSTATE for normal completion
CHCKOK. MOVE 1 TO flag DISPLAY"SQLCODE should be '0'; its value is ", SQL-COD DISPLAY"SQLSTATE should be 00000; its value is ", SQLSTATE
PERFORM NOSUBCLASS THROUGH P213. if (SQLCODE NOT = 0 or NORMSQ2 NOT = "00000") then MOVE 0 TO flag END-IF if (flag = 1 AND NORMSQ2 NOT = SQLSTATE) then DISPLAY"Valid implementation defined SQLSTATE accepted." END-IF
.
¤ Dauer der Verarbeitung: 0.15 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.