products/sources/formale sprachen/Cobol/Test-Suite/SQL M image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: mpa005.cob   Sprache: Cobol

       IDENTIFICATION DIVISION.
       PROGRAM-ID.  MPA005.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SOURCE-COMPUTER.  xyz.
       OBJECT-COMPUTER.  xyz.
       DATA DIVISION.
       WORKING-STORAGE SECTION.


      * Standard COBOL (file "MPA005.SCO") calling SQL
      * procedures in file "MPA005.MCO".
      * STANDARD COBOL (file "MPA005.SCO")  

      ****************************************************************
      *                                                              
      *                 COMMENT SECTION                              
      *                                                              
      * DATE Halloween 1991 STANDARD 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.
      *                                                              
      * MPA005.SCO                                                    
      * 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                              
      ****************************************************************




      * EXEC SQL BEGIN DECLARE SECTION END-EXEC
       01  getct PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  seqno PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  uid PIC  X(18).
       01  uidx PIC  X(18).
       01  CC PIC  X(2).
       01  del1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  del2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
      *  EXEC SQL END DECLARE SECTION END-EXEC
       01  SQLCODE PIC S9(9) COMP.
       01  errcnt PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
      *date_time declaration 
       01  TO-DAY PIC 9(6).
       01  THE-TIME PIC 9(8).

       01  mpbtot PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  ii PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  iii PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  maxseq PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  batchk PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  code1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.

       01  pauze PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  pauze2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  pauze3 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  tranct PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  batchz PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  mpbins PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  testyp PIC S9(9) DISPLAY SIGN LEADING SEPARATE.


       01  SQL-COD PIC S9(9) DISPLAY SIGN LEADING SEPARATE.

       PROCEDURE DIVISION.
       P0.


             MOVE "SULLIVAN1" TO uid
             CALL "AUTHID" USING uid
             MOVE "not logged in, not" TO uidx
      *  EXEC SQL SELECT USER INTO :uidx FROM HU.ECCO;
             CALL "SUB1" USING SQLCODE uidx
             MOVE SQLCODE TO SQL-COD
             if (uid  NOT  =   uidx) then
               DISPLAY "ERROR: User ", uid " expected. User ", uidx "
      -    " connected"
             END-IF
             MOVE 0 TO errcnt
             DISPLAY "SQL Test Suite, V6.0, Standard COBOL, mpa005.
      -    "sco"
             DISPLAY 
           "59-byte ID"
           DISPLAY "TEd Version #"
      *date_time print 
           ACCEPT TO-DAY FROM DATE
           ACCEPT THE-TIME FROM TIME
           DISPLAY "Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME

      *how many test suite type MPB005s are being run? 
             MOVE 1 TO testyp
      *transactions are inserted in multiples of the value of tranct 
             MOVE 5 TO tranct
      *how much to pause betwee inserts 
             MOVE 4 TO pauze3
      *this many multiples (> 2) are inserted before deleting multiple
             MOVE 5 TO batchz
      *MPA005 will look for how many inserts from each test suite type
             MOVE 24 TO mpbins

      *therefore, MPA005 will quit when count(*) from MP5_TT = mpbtot 
      *and        MPA005 will restart seqno when it exceeds maxseq 
             COMPUTE mpbtot = testyp * mpbins
             COMPUTE maxseq = tranct * batchz

      *concurrency tuning variables follow: 
      *wait pauze units after inserting a batch 
      *table MP5_TT is checked for completion every pauze2 batches 
             MOVE 1 TO pauze
             MOVE 20 TO pauze2

      *  EXEC SQL COMMIT WORK;
             CALL "SUB2" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
      ******************** BEGIN TEST0457 *******************

             DISPLAY " TEST0457 "
             DISPLAY " Reference X3.135-1989 Section 4.16 Transactions
      -    " "
             DISPLAY " Paragraph Two - Serializability
      -    " "
             DISPLAY " Phantom Read"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             DISPLAY " *** This program is part A 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 " *** MPA005 loops until all MPB005s complete."

      *                      -----Initialization----- 

           .
        P100.
             MOVE 0 TO batchk
             MOVE 1 TO seqno
             MOVE 0 TO code1
      *  EXEC SQL DELETE FROM MP5_AA;
             CALL "SUB3" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  <  0) then
               MOVE 1 TO code1
             END-IF
      *  EXEC SQL DELETE FROM MP5_AA_INDEX;
             CALL "SUB4" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  <  0) then
               MOVE 1 TO code1
             END-IF
      *  EXEC SQL DELETE FROM MP5_TT;
             CALL "SUB5" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  <  0) then
               MOVE 1 TO code1
             END-IF
             DISPLAY "MPA005: STOP if deadlock has occurred."
      *  EXEC SQL COMMIT WORK;
             CALL "SUB6" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  <  0) then
               MOVE 1 TO code1
             END-IF
             if (code1  =  0) then
               GO TO P110
             END-IF
             DISPLAY "MPA005: Problem initializing tables"
      *  EXEC SQL ROLLBACK WORK;
             CALL "SUB7" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             GO TO P100

      *          -----Concurrent Transaction Loop----- 
           .
        P110.
      *          -----Delete a Batch 
      *seqno modulus maxseq 
             if (seqno  >  maxseq) then
               COMPUTE seqno = seqno - maxseq
             END-IF

      *delete a batch, a batch ahead 
             COMPUTE del1 = seqno + tranct
             if (del1  >  maxseq) then
               COMPUTE del1 = del1 - maxseq
             END-IF
             COMPUTE del2 = del1 + tranct - 1.

       P111.
             MOVE 0 TO code1
      *  EXEC SQL DELETE FROM MP5_AA
      *    WHERE ANUM BETWEEN :del1 AND :del2;
             CALL "SUB8" USING SQLCODE del1 del2
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  <  0) then
               MOVE 1 TO code1
             END-IF
      *  EXEC SQL DELETE FROM MP5_AA_INDEX
      *    WHERE ANUM BETWEEN :del1 AND :del2;
             CALL "SUB9" USING SQLCODE del1 del2
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  <  0) then
               MOVE 1 TO code1
             END-IF
      *  EXEC SQL COMMIT WORK;
             if code1 = 0 then
               CALL "SUB10" USING SQLCODE
             END-IF
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  <  0) then
               MOVE 1 TO code1
             END-IF
             if (code1  =  1) then
               DISPLAY "MPA005: Problems deleting from MP5_AA tables"
               CALL "SUB7" USING SQLCODE
               GO TO P111
             END-IF

           .
        P115.
      *          -----Insert a Batch 
             MOVE 0 TO ii
             MOVE 0 TO code1

           .
        P120.
             if (code1  NOT =  0) then
               GO TO P125
             END-IF
      *  EXEC SQL INSERT INTO MP5_AA VALUES (:seqno);
             CALL "SUB11" USING SQLCODE seqno
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  NOT =  0) then
               MOVE 1 TO code1
             END-IF
      *  EXEC SQL INSERT INTO MP5_AA_INDEX VALUES (:seqno);
             CALL "SUB12" USING SQLCODE seqno
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  NOT =  0) then
               MOVE 1 TO code1
             END-IF
             MOVE 0 TO iii

      *pause a little 
           .
        P121.
      *  EXEC SQL SELECT C1 INTO :CC FROM HU.ECCO;
             CALL "SUB13" USING SQLCODE CC
             MOVE SQLCODE TO SQL-COD
             COMPUTE iii = iii + 1
             if (iii  <  pauze3) then
               GO TO P121
             END-IF
      *end of pause 

           .
        P125.
             COMPUTE seqno = seqno + 1
             COMPUTE ii = ii + 1
             if (ii  <  tranct) then
               GO TO P120
             END-IF
             if (code1  NOT =  0) then
      *    EXEC SQL ROLLBACK WORK;
               CALL "SUB14" USING SQLCODE
               MOVE SQLCODE TO SQL-COD
               DISPLAY "MPA005: ROLLBACK due to nonzero SQLCODE
      -    " (Deadlock?)"
               GO TO P115
             END-IF
      *  EXEC SQL COMMIT WORK;
             CALL "SUB15" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  NOT =  0) then
               DISPLAY "MPA005: Cannot commit batch of INSERTs"
      *    EXEC SQL ROLLBACK WORK;
               CALL "SUB16" USING SQLCODE
               MOVE SQLCODE TO SQL-COD
               GO TO P115
             END-IF

      *pause a little 
             MOVE 0 TO ii
           .
        P130.
      *  EXEC SQL SELECT C1 INTO :CC FROM HU.ECCO;
             CALL "SUB17" USING SQLCODE CC
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL COMMIT WORK;
             CALL "SUB18" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             COMPUTE ii = ii + 1
             if (ii  <  pauze) then
               GO TO P130
             END-IF
      *end of pause 

      *                -----Check for Completion----- 

      *check for completion only after pauze2 times 
             COMPUTE batchk = batchk + 1
             if (batchk  <  pauze2) then
               GO TO P110
             END-IF
             MOVE 0 TO batchk

      *check for completion 
             MOVE 0 TO getct
      *  EXEC SQL SELECT COUNT(*) INTO :getct
      *    FROM MP5_TT;
             CALL "SUB19" USING SQLCODE getct
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  NOT =  0) then
               MOVE 0 TO getct
             END-IF
      *  EXEC SQL COMMIT WORK;
             CALL "SUB20" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
             if (getct  <  mpbtot) then
               GO TO P110
             END-IF

      *                          -----Evaluation----- 
      *  EXEC SQL SELECT COUNT(DISTINCT TESTTYPE) 
      *    INTO :getct FROM MP5_TT;
             CALL "SUB21" USING SQLCODE getct
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  =  0  AND  getct  <  testyp) then
               DISPLAY "MPA005: Test suite types are missing from
      -    " MP5_TT"
               COMPUTE errcnt = errcnt + 1
             else
               DISPLAY "MPA005: ", getct " test suite types found in
      -    " MP5_TT"
               DISPLAY "MPA005 normal completion"
             END-IF

      *  EXEC SQL DELETE FROM MP5_AA;
             CALL "SUB22" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL DELETE FROM MP5_AA_INDEX;
             CALL "SUB23" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL COMMIT WORK;
             CALL "SUB24" USING SQLCODE
             MOVE SQLCODE TO SQL-COD
      *NOTE that for debugging, MP5_TT still contains rows 

      ******************** END TEST0457 *******************



      **** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
           STOP RUN.

      *    ****  Procedures for PERFORM statements

¤ Dauer der Verarbeitung: 0.27 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

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.


Bot Zugriff