* 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/06/07 EMBEDDED C LANGUAGE * X/Open SQL VALIDATION TEST SUITE V6.0 * * XOP723.PCO * WRITTEN BY: E. Pratt * * DROP TABLE with outstanding grants and views * * REFERENCES * X/Open CAE SQL * SECTION 5.3.7 * * <embedded SQL Cobol program> * * DATE PROGRAM LAST CHANGED 1994/11/2 * ****************************************************************
*This program must be run under authorization identifier XOPEN1
*The program requires the existence of tables * XOPEN1.AAA * XOPEN1.BBB * XOPEN1.CCC, and of view * XOPEN2.XOPEN2V
*DROP statements are executed using Dynamic SQL, *in order to make the program compatible with *implementations that check SQL statements against *schemas at a pre-execution time.
DISPLAY"This Test Program must be run after xop719.pco," DISPLAY"xop720.pco, xop721.pco and xop722.pco"
*Log in as user XOPEN1 MOVE"XOPEN1"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, xop723.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 TEST0723 *******************
DISPLAY" TEST0723 " DISPLAY"X/O,DROP TABLE with outstanding grants and views " DISPLAY" X/Open CAE SQL SEC. 5.3.7" DISPLAY" - - - - - - - - - - - - - - - - - - -" DISPLAY"### PREPARE STAT707A FROM :HCV;" DISPLAY"### EXECUTE STAT707A;" DISPLAY"### SELECT COUNT (*) INTO :COUNTER FROM" DISPLAY"### INFORMATION_SCHEMA.TABLES " DISPLAY"### WHERE TABLE_NAME = 'XOPEN2V'" DISPLAY"### AND TABLE_SCHEMA = 'XOPEN2';" DISPLAY"### PREPARE XOP723A FROM :HCV;" DISPLAY"### EXECUTE XOP723A;" DISPLAY"### SELECT COUNT (*) INTO :COUNTER FROM" DISPLAY"### INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME
- " =" DISPLAY"### 'AAA' AND TABLE_SCHEMA = XOPEN1;" DISPLAY"### PREPARE XOP723A FROM :HCV;" DISPLAY"### EXECUTE XOP723A;" DISPLAY"### SELECT COUNT (*) INTO :COUNTER FROM" DISPLAY"### INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME
- " =" DISPLAY"### 'CCC' AND TABLE_SCHEMA = XOPEN1;" DISPLAY"### PREPARE XOP723A FROM :HCV;" DISPLAY"### EXECUTE XOP723A;" DISPLAY"### SELECT COUNT (*) INTO :COUNTER FROM TABLES" DISPLAY"### WHERE TABLE_NAME IN ('AAA', 'BBB', 'CCC', " DISPLAY"### 'XOPEN2V');"
* TEST STEP 1a *Check that DROP TABLE RESTRICT is unsuccessful when the *referenced table still has outstanding grants and views EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
MOVE 1 TO flag MOVE"x"TO SQLSTATE MOVE"DROP TABLE XOPEN1.BBB RESTRICT"TO HCV EXECSQL PREPARE STAT707A FROM :HCV END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL EXECUTE STAT707A 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 in TEST STEP NUMBER 1a *** " COMPUTE errflg = errflg + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
* Test Step 1b *Check the view XOPEN2V still exists MOVE"y"TO SQLSTATE MOVE 0 TO COUNTER EXECSQLSELECTCOUNT (*) INTO :COUNTER FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'XOPEN2V' AND TABLE_SCHEMA = 'XOPEN2'END-EXEC MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) then DISPLAY"*** Problem found in TEST STEP NUMBER 1b *** " COMPUTE errflg = errflg + 1 END-IF if (COUNTER = 0) then DISPLAY"*** View XOPEN2V incorrectly dropped" COMPUTE errflg = errflg + 1 END-IF EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD
* TEST STEP 2a *Check that DROP TABLE with implied CASCADE is successful MOVE"x"TO SQLSTATE MOVE"DROP TABLE XOPEN1.AAA"TO HCV EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL PREPARE XOP723A FROM :HCV END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL EXECUTE XOP723A END-EXEC MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) then DISPLAY"*** Problem found in TEST STEP NUMBER 2a *** " COMPUTE errflg = errflg + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
* Test Step 2b *Check the table AAA no longer exists MOVE"y"TO SQLSTATE MOVE -1 TO COUNTER EXECSQLSELECTCOUNT (*) INTO :COUNTER FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'AAA' AND TABLE_SCHEMA = 'XOPEN1'END-EXEC MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) then DISPLAY"*** Problem found in TEST STEP NUMBER 2b *** " COMPUTE errflg = errflg + 1 END-IF if (COUNTER NOT = 0) then DISPLAY"*** Table AAA not dropped from Information
- " Schema" COMPUTE errflg = errflg + 1 END-IF EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"================================================="
* TEST STEP 3a *Check that DROP TABLE RESTRICT is successful when referenced *table has no outstanding grants or views MOVE"x"TO SQLSTATE MOVE"DROP TABLE XOPEN1.CCC RESTRICT"TO HCV EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL PREPARE XOP723A FROM :HCV END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL EXECUTE XOP723A END-EXEC MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) then DISPLAY"*** Problem found in TEST STEP NUMBER 3a *** " COMPUTE errflg = errflg + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
* Test Step 3b *Check the table CCC no longer exists MOVE"y"TO SQLSTATE MOVE -1 TO COUNTER EXECSQLSELECTCOUNT (*) INTO :COUNTER FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'CCC' AND TABLE_SCHEMA = 'XOPEN1'END-EXEC MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) then DISPLAY"*** Problem found in TEST STEP NUMBER 3b *** " COMPUTE errflg = errflg + 1 END-IF if (COUNTER NOT = 0) then DISPLAY"*** Table CCC not dropped from Information
- " Schema" COMPUTE errflg = errflg + 1 END-IF EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"================================================="
* TEST STEP 4a *Check the DROP TABLE CASCADE is successful even when the *referenced table has outstanding references to it MOVE"x"TO SQLSTATE MOVE"DROP TABLE XOPEN1.BBB CASCADE"TO HCV EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL PREPARE XOP723A FROM :HCV END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL EXECUTE XOP723A END-EXEC MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) then DISPLAY"*** Problem found in TEST STEP NUMBER 4a *** " COMPUTE errflg = errflg + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
* Test Step 4b *Check that the tables are dropped, and that the *corresponding views no longer exist MOVE"y"TO SQLSTATE MOVE -1 TO COUNTER EXECSQLSELECTCOUNT (*) INTO :COUNTER FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME IN ('AAA', 'BBB', 'CCC', 'XOPEN2V') END-EXEC MOVE SQLCODE TO SQL-COD *The value returned should be zero, indicating no rows
PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) then DISPLAY"*** Problem found in TEST STEP NUMBER 4b *** " COMPUTE errflg = errflg + 1 END-IF if (COUNTER NOT = 0) then DISPLAY"*** ", COUNTER " tables or views not dropped" COMPUTE errflg = errflg + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
*Before this program can be rerun tables XOPEN1.AAA *XOPEN1.BBB and XOPEN1.CCC must be re-created as follows: * run xdrop2.sql (if needed) * run xrecre1.nc (modified, as needed) * run xschema2.sql (if needed)
*Display the number of errors DISPLAY"number of erros detected is = ", errflg " " DISPLAY"### maximum number of errors is 12 ###"
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
******************** END TEST0723 *******************
****** 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 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 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
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.