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

Quellcode-Bibliothek

© Kompilation durch diese Firma

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

Datei: mpb001.cob   Sprache: Cobol

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


      * EMBEDDED COBOL (file "MPB001.PCO")  

      ****************************************************************
      *                                                              
      *                 COMMENT SECTION                              
      *                                                              
      * DATE 1988/12/07 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.
      *                                                              
      * MPB001.PCO                                                    
      * WRITTEN BY: S HURWITZ                                        
      *                                                              
      * THIS PROGRAM IS PART B OF A TWO-PART PROGRAM(A & B) THAT     
      * TESTS THE CONCURRENCY OF SQL                                 
      *                                                              
      * REFERENCES                                                   
      *       AMERICAN NATIONAL STANDARD database language - SQL     
      *                         X3.135-1989                          
      *                                                              
      *          SECTION 4.16 Transactions                           
      *                  Paragraph Two                               
      ****************************************************************




           EXEC SQL BEGIN DECLARE SECTION END-EXEC
       01  i PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  ii PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  knum PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  newmax PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  auth PIC  X(1).
       01  uid PIC  X(18).
       01  uidx PIC  X(18).
             EXEC SQL END DECLARE SECTION END-EXEC
       01  oldkey PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  keydif PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  concur PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       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  pauze PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  keymax PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  code1 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 END-EXEC
             MOVE SQLCODE TO SQL-COD
             if (uid  NOT  =   uidx) then
               DISPLAY "ERROR: User ", uid " expected. User ", uidx "
      -    " connected"
             STOP RUN
             END-IF
             MOVE 0 TO errcnt
             DISPLAY
           "SQL Test Suite, V6.0, Embedded COBOL, mpb001.pco"
             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

      *concurrency tuning variables follow: 
             MOVE 10 TO pauze
             MOVE 50 TO keymax

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
      ******************** BEGIN TEST0230 *******************

             DISPLAY " TEST0230 "
             DISPLAY " Reference X3.135-1989 Section 4.16, Transactions
      -    " "
             DISPLAY " Paragraph Two
      -    " "
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             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 the first value
      -    " into "
             DISPLAY " *** a table and waits for Program B.
      -    " "

      *                      -----Synchronization----- 
           .
        P100.
      *pause a little 
             EXEC SQL DELETE FROM MP1_MM2 END-EXEC
             MOVE SQLCODE TO SQL-COD
             MOVE 0 TO i
           .
        P101.
             EXEC SQL INSERT INTO MP1_MM2 VALUES (:i) END-EXEC
             MOVE SQLCODE TO SQL-COD
             COMPUTE i = i + 1
             if (i  <  pauze) then
               GO TO P101
             END-IF

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
      *end of pause 

             MOVE 0 TO i
             EXEC SQL SELECT COUNT(*)
               INTO    :i
               FROM    MP1_NEXTKEY END-EXEC
             MOVE SQLCODE TO SQL-COD
             MOVE 0 TO knum
             EXEC SQL SELECT KEYNUM, AUTHOR
               INTO    :knum, :auth    
               FROM    MP1_NEXTKEY END-EXEC
             MOVE SQLCODE TO SQL-COD

      *are we in sync? 

             if (auth  NOT  =   "A"  OR  knum  NOT =  1  OR  i  NOT = 
             1) then
               DISPLAY " Waiting for program MPA001 to start... "
               EXEC SQL COMMIT WORK END-EXEC
               MOVE SQLCODE TO SQL-COD
               GO TO P100
             END-IF

             DISPLAY " This is Program B; Program A has inserted the "
             DISPLAY " first value into a table. "
      *YES, we are in sync! 

      *                      -----Initialization----- 
           .
        P102.
             MOVE 0 TO code1
             MOVE 2 TO knum
             DISPLAY " MPB001: keynum = 2 "
             EXEC SQL INSERT
               INTO MP1_NEXTKEY (KEYNUM,AUTHOR)
               VALUES(2,'B'END-EXEC
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  NOT =  0) then
               MOVE 1 TO code1
             END-IF
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  NOT =  0) then
               MOVE 1 TO code1
             END-IF
             if (code1  =  1) then
               GO TO P102
             END-IF

             MOVE 2 TO oldkey
             MOVE 0 TO concur
             MOVE 0 TO keydif

      *           -----Concurrent Transaction Loop----- 
           .
        P110.

      *start table lock 

             EXEC SQL SELECT MAX(KEYNUM)
               INTO :newmax
               FROM MP1_NEXTKEY END-EXEC
             MOVE SQLCODE TO SQL-COD

             if (SQLCODE  NOT =  0) then
               DISPLAY " SQLCODE not zero after SELECT MAX(KEYNUM)
      -    " statement "
               DISPLAY " SQLCODE = ", SQL-COD " "
               EXEC SQL COMMIT WORK END-EXEC
               MOVE SQLCODE TO SQL-COD
               GO TO P110
             END-IF

             if (newmax  NOT <  keymax) then
               GO TO P120
             END-IF

             COMPUTE newmax = newmax + 1

             MOVE 0 TO code1
             EXEC SQL INSERT
               INTO MP1_NEXTKEY (KEYNUM,AUTHOR)
               VALUES (:newmax,'B'END-EXEC
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  NOT =  0) then
               MOVE 1 TO code1
             END-IF
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  NOT =  0) then
               MOVE 1 TO code1
             END-IF
      *end table lock 

             if (code1  =  0) then
               COMPUTE keydif = newmax - oldkey
               MOVE newmax TO oldkey
               DISPLAY " MPB001: keynum = ", newmax " "
             END-IF
             if (code1  =  0  AND  keydif  >  1) then
               COMPUTE concur = concur + 1
               DISPLAY " *** B interleaved #", concur " ***"
             END-IF

             GO TO P110

      *                          -----Evaluation----- 
           .
        P120.
             EXEC SQL COMMIT WORK END-EXEC
             EXEC SQL SELECT COUNT(*)
               INTO :i
               FROM MP1_NEXTKEY END-EXEC
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  NOT =  0) then
               DISPLAY " Cannot select for MP1_NEXTKEY"
               GO TO P120
             END-IF

             EXEC SQL SELECT COUNT(DISTINCT KEYNUM) 
               INTO :ii
               FROM MP1_NEXTKEY END-EXEC
             MOVE SQLCODE TO SQL-COD
             if (SQLCODE  NOT =  0) then
               DISPLAY " Cannot select for MP1_NEXTKEY!"
               GO TO P120
             END-IF

             DISPLAY " The number of rows should be ", keymax " "
             DISPLAY " The number of distinct keynum values should be ",
             keymax " "
             DISPLAY " The number of rows = ", i " "
             DISPLAY " The number of distinct keynum values = ", ii "
      -    " "

             if (concur  <  4  AND  i  =  ii  AND  ii  =  keymax) then
               DISPLAY " Insufficient interleaving to demonstrate
      -    " concurrency!"
               DISPLAY " Using TEd, decrease variable pauze to start"
               DISPLAY " MPB001 sooner or increase value of variable
      -    " keymax"
               DISPLAY " in both MPA001 and MPB001 to lengthen test."
               DISPLAY " Then RERUN!"
               GO TO P130
             END-IF

             if ( i  =  ii  AND  ii  =  keymax) then
               DISPLAY "mpb001.pco: *** pass *** "
               EXEC SQL INSERT INTO HU.TESTREPORT
                 VALUES('0230','pass','PCO'END-EXEC
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY "mpb001.pco: *** fail *** "
               EXEC SQL INSERT INTO HU.TESTREPORT
                 VALUES('0230','fail','PCO'END-EXEC
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

           .
        P130.
             DISPLAY  " "
             DISPLAY
             "===================================================="

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

      ******************** END TEST0230 *******************

      **** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0

           STOP RUN.

      *    ****  Procedures for PERFORM statements

¤ Dauer der Verarbeitung: 0.20 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