* Embedded SQL COBOL ("MPB005.PCO") translated from * Embedded COBOL on Thu Nov 7 11:40:29 1991.
* EMBEDDED COBOL (file "MPB005.PCO")
**************************************************************** * * COMMENT SECTION * * DATE Halloween 1991 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. * * MPB005.PCO * WRITTEN BY: J Sullivan * * THIS PROGRAM IS PART A OF A TWO-PART PROGRAM(A & B) THAT * TESTS THE CONCURRENCY OF SQL - Phantom Read * * REFERENCES * AMERICAN NATIONAL STANDARD database language - SQL * X3.135-1989 * * SECTION 4.16 Transactions * Paragraph Two ****************************************************************
MOVE"SULLIVAN1"TO uid CALL"AUTHID"USING uid MOVE"not logged in, not"TO uidx EXECSQLSELECT USER INTO :uidx FROM HU.ECCO END-EXEC MOVESQLCODETO 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, mpb005.
- "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
*transactions are inserted in multiples of the value of tranct MOVE 5 TO tranct *MPB005 will insert 12 rows into MP5_TT for this test suite type MOVE 24 TO mpbins
*concurrency tuning variables follow: *wait pauze units between transactions in a set *wait pauze2 units between sets of transations MOVE 1 TO pauze MOVE 20 TO pauze2
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
******************** BEGIN TEST0457 *******************
DISPLAY" *** This program is part B of a two-part
- " " DISPLAY" *** program (A & B) that tests for the
- " concurrency " DISPLAY" *** of SQL. Program A inserts and deletes
- " multiples " DISPLAY" *** of 5 rows between COMMITs while Program B
- " reads" DISPLAY" *** and counts, ensuring that only multiples of 5
- " " DISPLAY" *** are found." DISPLAY" "
MOVE 0 TO seqno MOVE 0 TO errflg
* -----Concurrent Transaction Loop-----
*Count MP5_AA for phantom (uncommitted) rows
.
P110. MOVE 0 TO code1 EXECSQLSELECTCOUNT(*) INTO :getct FROM MP5_AA END-EXEC MOVESQLCODETO SQL-COD if (SQLCODENOT = 0) then DISPLAY"MPB005: Negative SQLCODE counting MP5_AA
- " (Deadlock?)" EXECSQLROLLBACK WORK END-EXEC MOVESQLCODETO SQL-COD GOTO P110 END-IF
*Has MPA005 started yet? if (getct = 0) then DISPLAY"Please start MPA005" EXECSQLCOMMIT WORK END-EXEC GOTO P110 END-IF
EXECSQLINSERTINTO MP5_TT VALUES ('PC',:getct) END-EXEC MOVESQLCODETO SQL-COD if (SQLCODENOT = 0) then MOVE 1 TO code1 END-IF EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD if (SQLCODENOT = 0 OR code1 NOT = 0) then DISPLAY"MPB005:1: Negative SQLCODE inserting into
- " MP5_AA" EXECSQLROLLBACK WORK END-EXEC MOVESQLCODETO SQL-COD GOTO P110 END-IF DISPLAY getct " rows counted in table MP5_AA" COMPUTE seqno = seqno + 1 *Is getct a multiple of tranct? COMPUTE chekct = getct / tranct COMPUTE chekct = chekct * tranct if (chekct NOT = getct) then MOVE 1 TO errflg END-IF
*pause a little MOVE 0 TO iii
.
P118. EXECSQLSELECT C1 INTO :CC FROM HU.ECCO END-EXEC MOVESQLCODETO SQL-COD EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD COMPUTE iii = iii + 1 if (iii < pauze) then GOTO P118 END-IF *end of pause
*Read MP5_AA for phantom (uncommitted) rows
.
P120. MOVE 0 TO code1 EXECSQL DECLARE MP5_CURSOR1 CURSOR FOR SELECT ANUM FROM MP5_AA END-EXEC EXECSQLOPEN MP5_CURSOR1 END-EXEC MOVESQLCODETO SQL-COD if (SQLCODENOT = 0) then MOVE 1 TO code1 END-IF MOVE 0 TO ii
.
P122. *count rows in table MP5_AA EXECSQL FETCH MP5_CURSOR1 INTO :getct END-EXEC MOVESQLCODETO SQL-COD if (SQLCODE = 0) then COMPUTE ii = ii + 1 GOTO P122 END-IF if (SQLCODE < 0) then MOVE 1 TO code1 END-IF
if (code1 NOT = 0) then DISPLAY"MPB005: Negative SQLCODE reading MP5_AA
- " (Deadlock?)" EXECSQLROLLBACK WORK END-EXEC MOVESQLCODETO SQL-COD GOTO P120 END-IF MOVE ii TO getct EXECSQLINSERTINTO MP5_TT VALUES ('PC',:getct) END-EXEC MOVESQLCODETO SQL-COD if (SQLCODENOT = 0) then MOVE 1 TO code1 END-IF EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD if (SQLCODENOT = 0 OR code1 NOT = 0) then DISPLAY"MPB005:2: Negative SQLCODE inserting into
- " MP5_TT" EXECSQLROLLBACK WORK END-EXEC MOVESQLCODETO SQL-COD GOTO P120 END-IF DISPLAY getct " rows fetched from table MP5_AA" COMPUTE seqno = seqno + 1 *Is getct a multiple of tranct? COMPUTE chekct = getct / tranct COMPUTE chekct = chekct * tranct if (chekct NOT = getct) then MOVE 1 TO errflg END-IF
*pause a little MOVE 0 TO iii
.
P128. EXECSQLSELECT C1 INTO :CC FROM HU.ECCO END-EXEC MOVESQLCODETO SQL-COD EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD COMPUTE iii = iii + 1 if (iii < pauze) then GOTO P128 END-IF *end of pause
*Count MP5_AA_INDEX for phantom (uncommitted) rows
.
P130. MOVE 0 TO code1 EXECSQLSELECTCOUNT(*) INTO :getct FROM MP5_AA_INDEX END-EXEC MOVESQLCODETO SQL-COD if (SQLCODENOT = 0) then DISPLAY"MPB005: Negative SQLCODE counting MP5_AA_INDEX
- " (Deadlock?)" EXECSQLROLLBACK WORK END-EXEC MOVESQLCODETO SQL-COD GOTO P130 END-IF EXECSQLINSERTINTO MP5_TT VALUES ('PC',:getct) END-EXEC MOVESQLCODETO SQL-COD if (SQLCODENOT = 0) then MOVE 1 TO code1 END-IF EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD if (SQLCODENOT = 0 OR code1 NOT = 0) then DISPLAY"MPB005:3: Negative SQLCODE inserting into
- " MP5_TT" EXECSQLROLLBACK WORK END-EXEC MOVESQLCODETO SQL-COD GOTO P130 END-IF DISPLAY getct " rows counted in table MP5_AA_INDEX" COMPUTE seqno = seqno + 1 *Is getct a multiple of tranct? COMPUTE chekct = getct / tranct COMPUTE chekct = chekct * tranct if (chekct NOT = getct) then MOVE 1 TO errflg END-IF
*pause a little MOVE 0 TO iii
.
P138. EXECSQLSELECT C1 INTO :CC FROM HU.ECCO END-EXEC MOVESQLCODETO SQL-COD EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD COMPUTE iii = iii + 1 if (iii < pauze) then GOTO P138 END-IF *end of pause
*Read MP5_AA_INDEX for phantom (uncommitted) rows
.
P140. MOVE 0 TO code1 EXECSQL DECLARE MP5_CURSOR2 CURSOR FOR SELECT ANUM FROM MP5_AA_INDEX END-EXEC EXECSQLOPEN MP5_CURSOR2 END-EXEC MOVESQLCODETO SQL-COD if (SQLCODENOT = 0) then MOVE 1 TO code1 END-IF MOVE 0 TO ii
.
P142. *count rows in table MP5_AA_INDEX EXECSQL FETCH MP5_CURSOR2 INTO :getct END-EXEC MOVESQLCODETO SQL-COD if (SQLCODE = 0) then COMPUTE ii = ii + 1 GOTO P142 END-IF if (SQLCODE < 0) then MOVE 1 TO code1 END-IF
if (code1 NOT = 0) then DISPLAY"MPB005: Negative SQLCODE reading MP5_AA_INDEX
- " (Deadlock?)" EXECSQLROLLBACK WORK END-EXEC MOVESQLCODETO SQL-COD GOTO P140 END-IF MOVE ii TO getct EXECSQLINSERTINTO MP5_TT VALUES ('PC',:getct) END-EXEC MOVESQLCODETO SQL-COD if (SQLCODENOT = 0) then MOVE 1 TO code1 END-IF EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD if (SQLCODENOT = 0 OR code1 NOT = 0) then DISPLAY"MPB005:4: Negative SQLCODE inserting into
- " MP5_TT" EXECSQLROLLBACK WORK END-EXEC MOVESQLCODETO SQL-COD GOTO P140 END-IF DISPLAY getct " rows fetched from table MP5_AA_INDEX" COMPUTE seqno = seqno + 1 *Is getct a multiple of tranct? COMPUTE chekct = getct / tranct COMPUTE chekct = chekct * tranct if (chekct NOT = getct) then MOVE 1 TO errflg END-IF
*pause a little extra MOVE 0 TO iii
.
P148. EXECSQLSELECT C1 INTO :CC FROM HU.ECCO END-EXEC MOVESQLCODETO SQL-COD EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD COMPUTE iii = iii + 1 if (iii < pauze2) then GOTO P148 END-IF *end of pause
if (seqno < mpbins) then GOTO P110 END-IF
* -----Evaluation-----
DISPLAY" " DISPLAY"The number of rows in MP5_AA or MP5_AA_INDEX" DISPLAY" must always be a multiple of ", tranct "."
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 und die Messung sind noch experimentell.