IDENTIFICATION DIVISION.
PROGRAM-ID. DML125.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. xyz.
OBJECT-COMPUTER. xyz.
DATA DIVISION.
WORKING-STORAGE SECTION.
* Standard COBOL (file "DML125.SCO") calling SQL
* procedures in file "DML125.MCO".
****************************************************************
*
* COMMENT SECTION
*
* DATE 1994/6/28 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.
*
* DML125.SCO
* WRITTEN BY: David W. Flater
* TRANSLATED AUTOMATICALLY FROM EMBEDDED COBOL BY CHRIS SCHANZLE
* Bug fixes & stronger pass criteria by Joan Sullivan 2/27/95
*
* This routine tests SQL descriptors, which is a feature of
* Dynamic SQL.
*
* REFERENCES
* FIPS PUB 127-2 14.1 Transitional SQL
* ANSI SQL-1992
*
****************************************************************
* EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 SQLCODE PIC S9(9) COMP.
01 SQLSTATE PIC X(5).
01 uid PIC X(18).
01 uidx PIC X(18).
01 smint1 PIC S9(4) DISPLAY SIGN LEADING SEPARATE.
01 smint2 PIC S9(4) DISPLAY SIGN LEADING SEPARATE.
01 smint3 PIC S9(4) DISPLAY SIGN LEADING SEPARATE.
* OK to change the precision of bin9 to match INTEGER
01 bin9 PIC S9(9) BINARY.
01 int1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 int2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 int3 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 int4 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 ch1 PIC X(1).
01 ch7 PIC X(7).
01 ch13 PIC X(13).
01 ch17 PIC X(17).
01 ch32 PIC X(32).
01 dstmt PIC X(50).
01 longst PIC X(240).
01 word1 PIC X(11).
01 ch11 PIC X(11).
01 word2 PIC X(30).
01 word3 PIC X(3).
01 csc PIC X(50).
01 css PIC X(50).
01 csn PIC X(50).
01 clc PIC X(50).
01 cls PIC X(50).
01 cln PIC X(50).
* EXEC SQL END DECLARE SECTION END-EXEC
01 norm1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 norm2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 ALPNUM-TABLE VALUE IS
"01234ABCDEFGH56789IJKLMNOPQRSTUVWXYZ".
05 ALPNUM PIC X OCCURS 36 TIMES.
01 NORMSQ.
05 NORMSQX PIC X OCCURS 5 TIMES.
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 flag PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 SQL-COD PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
PROCEDURE DIVISION.
P0.
MOVE "FLATER " 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 SQLSTATE uidx
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB2" USING SQLCODE SQLSTATE
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, Module COBOL, dml125.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
******************** BEGIN TEST0657 *******************
MOVE 1 TO flag
DISPLAY " TEST0657 "
DISPLAY " Descriptors: VARCHAR"
DISPLAY "References:"
DISPLAY " F# 1 -- Dynamic SQL"
DISPLAY " 6.1 -- CHARACTER VARYING"
DISPLAY " 17.1 -- Description of SQL item descriptor
- " areas"
DISPLAY " 17.9 -- "
DISPLAY " 17.10 -- "
DISPLAY " 17.14 -- "
DISPLAY " 17.2 GR.3 -- limit on descriptor areas is"
DISPLAY " implementation-defined"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
*I am going to try to write this test in such a way that it will
*work in every language, using only fixed-length host variables.
DISPLAY "CREATE TABLE ADJECTIVES (WURD VARCHAR (30));"
* EXEC SQL CREATE TABLE ADJECTIVES (WURD VARCHAR (30))
* ;
CALL "SUB3" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB4" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "ALLOCATE DESCRIPTOR 'D12511' WITH MAX 1;"
* EXEC SQL ALLOCATE DESCRIPTOR 'D12511' WITH MAX 1;
CALL "SUB5" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
if (SQLSTATE = "07009") then
DISPLAY "Received SQLSTATE 07009 WITH MAX 1!"
DISPLAY "This is definitely a FAIL."
END-IF
DISPLAY " "
DISPLAY "dstmt=""SELECT WURD FROM ADJECTIVES"""
MOVE "SELECT WURD FROM ADJECTIVES "
TO dstmt
DISPLAY "PREPARE S12511 FROM :dstmt;"
* EXEC SQL PREPARE S12511 FROM :dstmt;
CALL "SUB6" USING SQLCODE SQLSTATE dstmt
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DESCRIBE S12511 USING SQL DESCRIPTOR 'D12511';"
* EXEC SQL DESCRIBE S12511 USING SQL DESCRIPTOR 'D12511'
* ;
CALL "SUB7" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE smint1 = -1
DISPLAY "GET DESCRIPTOR 'D12511' :smint1 = COUNT;"
* EXEC SQL GET DESCRIPTOR 'D12511' :smint1 = COUNT;
CALL "SUB8" USING SQLCODE SQLSTATE smint1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "smint1 should be 1; its value is ", smint1
if (smint1 NOT = 1) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
DISPLAY "GET DESCRIPTOR 'D12511' VALUE 1"
DISPLAY " :int1 = TYPE, :int2 = LENGTH, :int3 =
- " OCTET_LENGTH;"
* EXEC SQL GET DESCRIPTOR 'D12511' VALUE 1
* :int1 = TYPE, :int2 = LENGTH, :int3 = OCTET_LENGTH
* ;
CALL "SUB9" USING SQLCODE SQLSTATE int1 int2 int3
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 12; its value is ", int1
DISPLAY "int2 should be 30; its value is ", int2
DISPLAY "int3 should be > 22; its value is ", int3
if (int1 NOT = 12 OR int2 NOT = 30 OR int3 NOT >
22) then
MOVE 0 TO flag
END-IF
MOVE 1 TO smint1
MOVE 0 TO smint2
MOVE 11 TO smint3
DISPLAY "smint1 = 1"
DISPLAY "smint2 = 0"
DISPLAY "smint3 = 11"
MOVE "Circumspect" TO ch11
DISPLAY "SET DESCRIPTOR 'D12511' VALUE :smint1"
DISPLAY " INDICATOR = :smint2, LENGTH = :smint3,"
DISPLAY " TYPE = 1, DATA = :ch11;"
* EXEC SQL SET DESCRIPTOR 'D12511' VALUE :smint1
* INDICATOR = :smint2, LENGTH = :smint3,
* TYPE = 1, DATA = :ch11;
CALL "SUB10" USING SQLCODE SQLSTATE smint1 smint2
smint3 ch11
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "dstmt=""INSERT INTO ADJECTIVES VALUES (?)"""
MOVE "INSERT INTO ADJECTIVES VALUES (?) "
TO dstmt
DISPLAY "PREPARE S12512 FROM :dstmt;"
* EXEC SQL PREPARE S12512 FROM :dstmt;
CALL "SUB11" USING SQLCODE SQLSTATE dstmt
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "EXECUTE S12512 USING SQL DESCRIPTOR 'D12511';"
* EXEC SQL EXECUTE S12512 USING SQL DESCRIPTOR 'D12511'
* ;
CALL "SUB12" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(*) INTO :int1"
DISPLAY " FROM ADJECTIVES WHERE WURD = 'Circumspect';"
* EXEC SQL SELECT COUNT(*) INTO :int1
* FROM ADJECTIVES WHERE WURD = 'Circumspect';
CALL "SUB13" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1; its value is ", int1
if (int1 NOT = 1) then
MOVE 0 TO flag
END-IF
DISPLAY "DESCRIBE OUTPUT S12511 USING SQL DESCRIPTOR
- " 'D12511';"
* EXEC SQL DESCRIBE OUTPUT S12511 USING SQL DESCRIPTOR
* 'D12511';
CALL "SUB14" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*parameter is CHAR, not VARCHAR
DISPLAY "SET DESCRIPTOR 'D12511' VALUE 1"
DISPLAY " TYPE = 1, LENGTH = 30"
* EXEC SQL SET DESCRIPTOR 'D12511' VALUE 1
* TYPE = 1, LENGTH = 30;
CALL "SUB15" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DECLARE C12511 CURSOR FOR S12511;"
* EXEC SQL DECLARE C12511 CURSOR FOR S12511 END-EXEC
DISPLAY " "
DISPLAY "OPEN C12511;"
* EXEC SQL OPEN C12511;
CALL "SUB16" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "FETCH C12511 INTO SQL DESCRIPTOR 'D12511';"
* EXEC SQL FETCH C12511 INTO SQL DESCRIPTOR 'D12511';
CALL "SUB17" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CLOSE C12511;"
* EXEC SQL CLOSE C12511;
CALL "SUB18" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
COMPUTE int3 = -1
MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" TO word2
DISPLAY "GET DESCRIPTOR 'D12511' VALUE 1"
DISPLAY " :int1 = LENGTH,"
DISPLAY " :int3 = INDICATOR, :word2 = DATA;"
* EXEC SQL GET DESCRIPTOR 'D12511' VALUE 1
* :int1 = LENGTH,
* :int3 = INDICATOR, :word2 = DATA;
CALL "SUB19" USING SQLCODE SQLSTATE int1 int3 word2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 30; its value is ", int1
DISPLAY "int3 should be 0; its value is ", int3
DISPLAY "word2 should be 'Circumspect'; its value is '",
word2 "'"
if (int1 NOT = 30 OR int3 NOT = 0) then
MOVE 0 TO flag
END-IF
if (word2 NOT = "Circumspect " ) then
MOVE 0 TO flag
END-IF
MOVE "Circumspect " TO ch13
DISPLAY "SET DESCRIPTOR 'D12511' VALUE 1"
DISPLAY " TYPE = 1, LENGTH = 13, DATA = :ch13;"
* EXEC SQL SET DESCRIPTOR 'D12511' VALUE 1
* TYPE = 1, LENGTH = 13, DATA = :ch13;
CALL "SUB20" USING SQLCODE SQLSTATE ch13
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "dstmt=""SELECT COUNT(*) FROM ADJECTIVES WHERE WURD
- " = ?"""
MOVE "SELECT COUNT(*) FROM ADJECTIVES WHERE WURD
- " = ? " TO dstmt
DISPLAY "PREPARE S12513 FROM :dstmt;"
* EXEC SQL PREPARE S12513 FROM :dstmt;
CALL "SUB21" USING SQLCODE SQLSTATE dstmt
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DECLARE C12513 CURSOR FOR S12513;"
* EXEC SQL DECLARE C12513 CURSOR FOR S12513 END-EXEC
DISPLAY " "
DISPLAY "OPEN C12513 USING SQL DESCRIPTOR 'D12511';"
* EXEC SQL OPEN C12513 USING SQL DESCRIPTOR 'D12511';
CALL "SUB22" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
DISPLAY "FETCH C12513 INTO :int1;"
* EXEC SQL FETCH C12513 INTO :int1;
CALL "SUB23" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1; its value is ", int1
if (int1 NOT = 1) then
MOVE 0 TO flag
END-IF
DISPLAY "CLOSE C12513;"
* EXEC SQL CLOSE C12513;
CALL "SUB24" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*SQLSTATEs for truncation (quick test)
MOVE "semi-psychorepresentationalistic" TO ch32
DISPLAY "SET DESCRIPTOR 'D12511' VALUE 1"
DISPLAY " INDICATOR = 0, LENGTH = 32,"
DISPLAY " DATA = :ch32;"
* EXEC SQL SET DESCRIPTOR 'D12511' VALUE 1
* INDICATOR = 0, LENGTH = 32,
* DATA = :ch32;
CALL "SUB25" USING SQLCODE SQLSTATE ch32
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "EXECUTE S12512 USING SQL DESCRIPTOR 'D12511';"
* EXEC SQL EXECUTE S12512 USING SQL DESCRIPTOR 'D12511'
* ;
CALL "SUB26" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
if (SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
DISPLAY "SQLSTATE should be 22001; its value is ", SQLSTATE
if (SQLSTATE NOT = "22001") then
MOVE 0 TO flag
END-IF
DISPLAY "DESCRIBE OUTPUT S12511 USING SQL DESCRIPTOR
- " 'D12511';"
* EXEC SQL DESCRIBE OUTPUT S12511 USING SQL DESCRIPTOR
* 'D12511';
CALL "SUB27" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "SET DESCRIPTOR 'D12511' VALUE 1"
DISPLAY " TYPE = 1, LENGTH = 3;"
* EXEC SQL SET DESCRIPTOR 'D12511' VALUE 1
* TYPE = 1, LENGTH = 3;
CALL "SUB28" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "OPEN C12511;"
* EXEC SQL OPEN C12511;
CALL "SUB16" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "FETCH C12511 INTO SQL DESCRIPTOR 'D12511';"
* EXEC SQL FETCH C12511 INTO SQL DESCRIPTOR 'D12511';
CALL "SUB30" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be >= 0; its value is ", SQL-COD
if (SQLCODE < 0) then
MOVE 0 TO flag
END-IF
DISPLAY "SQLSTATE should be 01004; its value is ", SQLSTATE
if (SQLSTATE NOT = "01004") then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int3 = -1
MOVE "xxx" TO word3
DISPLAY "GET DESCRIPTOR 'D12511' VALUE 1"
DISPLAY " :int1 = LENGTH,"
DISPLAY " :int3 = INDICATOR, :word3 = DATA;"
* EXEC SQL GET DESCRIPTOR 'D12511' VALUE 1
* :int1 = LENGTH,
* :int3 = INDICATOR, :word3 = DATA;
CALL "SUB31" USING SQLCODE SQLSTATE int1 int3 word3
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 3; its value is ", int1
DISPLAY "int3 should be 0; its value is ", int3
DISPLAY "word3 should be 'Cir'; its value is '", word3 "'"
if (int1 NOT = 3 OR int3 NOT = 0 OR word3 NOT =
"Cir" ) then
MOVE 0 TO flag
END-IF
DISPLAY "CLOSE C12511;"
* EXEC SQL CLOSE C12511;
CALL "SUB32" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DEALLOCATE DESCRIPTOR 'D12511';"
* EXEC SQL DEALLOCATE DESCRIPTOR 'D12511';
CALL "SUB33" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
.
P199.
DISPLAY "ROLLBACK WORK;"
* EXEC SQL ROLLBACK WORK;
CALL "SUB34" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP TABLE ADJECTIVES CASCADE;"
* EXEC SQL DROP TABLE ADJECTIVES CASCADE;
CALL "SUB35" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB36" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
if ( flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0657','pass','MCO');
CALL "SUB37" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml125.sco *** fail *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0657','fail','MCO');
CALL "SUB38" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB39" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
******************** END TEST0657 ********************
******************** BEGIN TEST0658 *******************
MOVE 1 TO flag
DISPLAY " TEST0658 "
DISPLAY " Descriptors: SQLSTATE codes"
DISPLAY "References:"
DISPLAY " F# 1 -- Dynamic SQL"
DISPLAY " 22.1 -- SQLSTATE"
DISPLAY " 17.2 GR.3"
DISPLAY " 17.4 GR.3 GR.5"
DISPLAY " 17.5 GR.2 GR.5"
DISPLAY " 17.9 GR.2 GR.3.d GR.5.b GR.5.e GR.6.b"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
DISPLAY "ALLOCATE DESCRIPTOR 'D12521' WITH MAX 0;"
* EXEC SQL ALLOCATE DESCRIPTOR 'D12521' WITH MAX 0;
CALL "SUB40" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 07009; its value is ", SQLSTATE
if (SQLSTATE NOT = "07009" OR SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
DISPLAY "ALLOCATE DESCRIPTOR 'D12521' WITH MAX 1;"
* EXEC SQL ALLOCATE DESCRIPTOR 'D12521' WITH MAX 1;
CALL "SUB41" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
if (SQLSTATE = "07009") then
DISPLAY "Received SQLSTATE 07009 WITH MAX 1!"
DISPLAY "This is definitely a FAIL."
END-IF
DISPLAY " "
DISPLAY "dstmt=""SELECT ZZ FROM CONCATBUF"""
MOVE "SELECT ZZ FROM CONCATBUF "
TO dstmt
DISPLAY "PREPARE S12521 FROM :dstmt;"
* EXEC SQL PREPARE S12521 FROM :dstmt;
CALL "SUB42" USING SQLCODE SQLSTATE dstmt
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DESCRIBE S12521 USING SQL DESCRIPTOR 'D12521';"
* EXEC SQL DESCRIBE S12521 USING SQL DESCRIPTOR 'D12521'
* ;
CALL "SUB43" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*07009 on get descriptor value 0 17.4 GR.3
DISPLAY "GET DESCRIPTOR 'D12521' VALUE 0"
DISPLAY " :int1 = INDICATOR;"
* EXEC SQL GET DESCRIPTOR 'D12521' VALUE 0
* :int1 = INDICATOR;
CALL "SUB44" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 07009; its value is ", SQLSTATE
if (SQLSTATE NOT = "07009" OR SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
*07009 on set descriptor value 0 17.5 GR.2
MOVE 0 TO int1
DISPLAY "int1 = 0"
DISPLAY "SET DESCRIPTOR 'D12521' VALUE :int1"
DISPLAY " INDICATOR = 0;"
* EXEC SQL SET DESCRIPTOR 'D12521' VALUE :int1
* INDICATOR = 0;
CALL "SUB45" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 07009; its value is ", SQLSTATE
if (SQLSTATE NOT = "07009" OR SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
*33000 on using nonexistent descriptor 17.9 GR.2
DISPLAY "dstmt=""INSERT INTO CONCATBUF VALUES (?)"""
MOVE "INSERT INTO CONCATBUF VALUES (?) "
TO dstmt
DISPLAY "PREPARE S12522 FROM :dstmt;"
* EXEC SQL PREPARE S12522 FROM :dstmt;
CALL "SUB46" USING SQLCODE SQLSTATE dstmt
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "EXECUTE S12522 USING SQL DESCRIPTOR 'BOB';"
* EXEC SQL EXECUTE S12522 USING SQL DESCRIPTOR 'BOB';
CALL "SUB47" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 33000; its value is ", SQLSTATE
if (SQLSTATE NOT = "33000" OR SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
*01005 on describe table with too many columns 17.9 GR.3.d
DISPLAY "dstmt=""SELECT * FROM HU.WORKS"""
MOVE "SELECT * FROM HU.WORKS
- " " TO dstmt
DISPLAY "PREPARE S12523 FROM :dstmt;"
* EXEC SQL PREPARE S12523 FROM :dstmt;
CALL "SUB48" USING SQLCODE SQLSTATE dstmt
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DESCRIBE S12523 USING SQL DESCRIPTOR 'D12521';"
* EXEC SQL DESCRIBE S12523 USING SQL DESCRIPTOR 'D12521'
* ;
CALL "SUB49" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be >= 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 01005; its value is ", SQLSTATE
if (SQLSTATE NOT = "01005" OR SQLCODE < 0) then
MOVE 0 TO flag
END-IF
*COUNT should have been set.
COMPUTE int1 = -1
DISPLAY "GET DESCRIPTOR 'D12521' :int1 = COUNT;"
* EXEC SQL GET DESCRIPTOR 'D12521' :int1 = COUNT;
CALL "SUB50" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 3; its value is ", int1
if (int1 NOT = 3) then
MOVE 0 TO flag
END-IF
*07008 on using descriptor with COUNT too big 17.9 GR.5.b.ii
DISPLAY "EXECUTE S12522 USING SQL DESCRIPTOR 'D12521';"
* EXEC SQL EXECUTE S12522 USING SQL DESCRIPTOR 'D12521'
* ;
CALL "SUB51" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 07008; its value is ", SQLSTATE
if (SQLSTATE NOT = "07008" OR SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
*07001 on using descriptor with invalid values 17.9 GR.5.b.iii
DISPLAY "DESCRIBE S12521 USING SQL DESCRIPTOR 'D12521';"
* EXEC SQL DESCRIBE S12521 USING SQL DESCRIPTOR 'D12521'
* ;
CALL "SUB52" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*17.5 GR.7: We're up against implementor-defined restrictions h
*6.1 SR.3: Length of 0 is invalid for any data type
DISPLAY "SET DESCRIPTOR 'D12521' VALUE 1"
DISPLAY " LENGTH = 0;"
* EXEC SQL SET DESCRIPTOR 'D12521' VALUE 1
* LENGTH = 0;
CALL "SUB53" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
if (SQLCODE < 0) then
DISPLAY "Violated an implementor-defined restriction --
- " this"
DISPLAY "subtest will be skipped"
GO TO P100
END-IF
DISPLAY "SQLCODE should be 0; its value is ", SQL-COD
if (SQLCODE = 100) then
MOVE 0 TO flag
END-IF
DISPLAY "EXECUTE S12522 USING SQL DESCRIPTOR 'D12521';"
* EXEC SQL EXECUTE S12522 USING SQL DESCRIPTOR 'D12521'
* ;
CALL "SUB54" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 07001; its value is ", SQLSTATE
if (SQLSTATE NOT = "07001" OR SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
.
P100.
*Generate an exception via 17.9 GR.5.f
DISPLAY "dstmt=""INSERT INTO BASE_WCOV VALUES (?)"""
MOVE "INSERT INTO BASE_WCOV VALUES (?) "
TO dstmt
DISPLAY "PREPARE S12524 FROM :dstmt;"
* EXEC SQL PREPARE S12524 FROM :dstmt;
CALL "SUB55" USING SQLCODE SQLSTATE dstmt
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "SET DESCRIPTOR 'D12521' COUNT = 1;"
* EXEC SQL SET DESCRIPTOR 'D12521' COUNT = 1;
CALL "SUB56" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*Length defaults to 1: 17.5 GR.5.a
MOVE "Z" TO ch1
DISPLAY "SET DESCRIPTOR 'D12521' VALUE 1"
DISPLAY " TYPE = 1, DATA = :ch1;"
* EXEC SQL SET DESCRIPTOR 'D12521' VALUE 1
* TYPE = 1, DATA = :ch1;
CALL "SUB57" USING SQLCODE SQLSTATE ch1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "EXECUTE S12524 USING SQL DESCRIPTOR 'D12521';"
* EXEC SQL EXECUTE S12524 USING SQL DESCRIPTOR 'D12521'
* ;
CALL "SUB58" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 22018; its value is ", SQLSTATE
if (SQLSTATE NOT = "22018" OR SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
*07006 on trying to do an invalid implicit cast 17.9 GR.5.e
MOVE "DATE '1995-03-02'" TO ch17
DISPLAY "SET DESCRIPTOR 'D12521' VALUE 1"
DISPLAY " TYPE = 1, LENGTH = 17,"
DISPLAY " DATA = :ch17;"
* EXEC SQL SET DESCRIPTOR 'D12521' VALUE 1
* TYPE = 1, LENGTH = 17,
* DATA = :ch17;
CALL "SUB59" USING SQLCODE SQLSTATE ch17
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "EXECUTE S12524 USING SQL DESCRIPTOR 'D12521';"
* EXEC SQL EXECUTE S12524 USING SQL DESCRIPTOR 'D12521'
* ;
CALL "SUB60" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 07006; its value is ", SQLSTATE
if (SQLSTATE NOT = "07006" OR SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
*07002 on fetching into descriptor wrong count / invalid 17.9 GR
DISPLAY "DECLARE C12523 CURSOR FOR S12523;"
* EXEC SQL DECLARE C12523 CURSOR FOR S12523 END-EXEC
DISPLAY " "
DISPLAY "OPEN C12523;"
* EXEC SQL OPEN C12523;
CALL "SUB61" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "FETCH C12523 INTO SQL DESCRIPTOR 'D12521';"
* EXEC SQL FETCH C12523 INTO SQL DESCRIPTOR 'D12521';
CALL "SUB62" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 07002; its value is ", SQLSTATE
if (SQLSTATE NOT = "07002" OR SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
*22002 on get data but not indicator when indicator is negative
DISPLAY "SET DESCRIPTOR 'D12521' VALUE 1"
DISPLAY " TYPE = 4, INDICATOR = -1;"
* EXEC SQL SET DESCRIPTOR 'D12521' VALUE 1
* TYPE = 4, INDICATOR = -1;
CALL "SUB63" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "GET DESCRIPTOR 'D12521' VALUE 1"
DISPLAY " :bin9 = DATA;"
* EXEC SQL GET DESCRIPTOR 'D12521' VALUE 1
* :bin9 = DATA;
CALL "SUB64" USING SQLCODE SQLSTATE bin9
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 22002; its value is ", SQLSTATE
if (SQLSTATE NOT = "22002" OR SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
*22005 on conflicting TYPE and DATA 17.5 GR.5
MOVE "WAA HOO" TO ch7
DISPLAY "SET DESCRIPTOR 'D12521' VALUE 1"
DISPLAY " TYPE = 5, DATA = :ch7;"
* EXEC SQL SET DESCRIPTOR 'D12521' VALUE 1
* TYPE = 5, DATA = :ch7;
CALL "SUB65" USING SQLCODE SQLSTATE ch7
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 22005; its value is ", SQLSTATE
if (SQLSTATE NOT = "22005" OR SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
.
P198.
DISPLAY "ROLLBACK WORK;"
* EXEC SQL ROLLBACK WORK;
CALL "SUB66" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
if ( flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0658','pass','MCO');
CALL "SUB67" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml125.sco *** fail *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0658','fail','MCO');
CALL "SUB68" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB69" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
******************** END TEST0658 ********************
******************** BEGIN TEST0659 *******************
MOVE 1 TO flag
DISPLAY " TEST0659 "
DISPLAY " Descriptors: TSQL orphaned features"
DISPLAY "References:"
DISPLAY " F# 1 -- Dynamic SQL"
DISPLAY " 17.1 -- Description of SQL item descriptor
- " areas"
DISPLAY " 17.5 GR.5.a"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
DISPLAY "ALLOCATE DESCRIPTOR 'D12531' WITH MAX 1;"
* EXEC SQL ALLOCATE DESCRIPTOR 'D12531' WITH MAX 1;
CALL "SUB70" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
if (SQLSTATE = "07009") then
DISPLAY "Received SQLSTATE 07009 WITH MAX 1!"
DISPLAY "This is definitely a FAIL."
END-IF
DISPLAY " "
*17.5 GR.5.a TYPE=1 in SET DESCRIPTOR sets CHARACTER_* and LENG
DISPLAY "SET DESCRIPTOR 'D12531' VALUE 1"
DISPLAY " TYPE = 1;"
* EXEC SQL SET DESCRIPTOR 'D12531' VALUE 1
* TYPE = 1;
CALL "SUB71" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE 0 TO int1
MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TO csc
MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TO css
MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TO csn
DISPLAY "GET DESCRIPTOR 'D12531' VALUE 1"
DISPLAY " :csc = CHARACTER_SET_CATALOG,"
DISPLAY " :css = CHARACTER_SET_SCHEMA,"
DISPLAY " :csn = CHARACTER_SET_NAME,"
DISPLAY " :int1 = LENGTH;"
* EXEC SQL GET DESCRIPTOR 'D12531' VALUE 1
* :csc = CHARACTER_SET_CATALOG,
* :css = CHARACTER_SET_SCHEMA,
* :csn = CHARACTER_SET_NAME,
* :int1 = LENGTH;
CALL "SUB72" USING SQLCODE SQLSTATE csc css csn int1
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be >= 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 00xxx or 01004; its value is ",
SQLSTATE
DISPLAY "int1 should be 1; its value is ", int1
if (int1 NOT = 1) then
MOVE 0 TO flag
END-IF
PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
if (SQLCODE < 0) then
MOVE 0 TO flag
END-IF
if (SQLSTATE NOT = "01004" AND NORMSQ NOT =
"00000") then
MOVE 0 TO flag
END-IF
DISPLAY "csc is ", csc
DISPLAY "css is ", css
DISPLAY "csn is ", csn
*17.5 GR.4.e.iv.1 TYPE = 1 in DESCRIBE sets COLLATION_* fields
DISPLAY "dstmt=""SELECT * FROM HU.ECCO"""
MOVE "SELECT * FROM HU.ECCO
- " " TO dstmt
DISPLAY "PREPARE S12531 FROM :dstmt;"
* EXEC SQL PREPARE S12531 FROM :dstmt;
CALL "SUB73" USING SQLCODE SQLSTATE dstmt
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DESCRIBE S12531 USING SQL DESCRIPTOR 'D12531';"
* EXEC SQL DESCRIBE S12531 USING SQL DESCRIPTOR 'D12531'
* ;
CALL "SUB74" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TO csc
MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TO css
MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TO csn
MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TO clc
MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TO cls
MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TO cln
DISPLAY "GET DESCRIPTOR 'D12531' VALUE 1"
DISPLAY " :csc = CHARACTER_SET_CATALOG,"
DISPLAY " :css = CHARACTER_SET_SCHEMA,"
DISPLAY " :csn = CHARACTER_SET_NAME,"
DISPLAY " :clc = COLLATION_CATALOG,"
DISPLAY " :cls = COLLATION_SCHEMA,"
DISPLAY " :cln = COLLATION_NAME;"
* EXEC SQL GET DESCRIPTOR 'D12531' VALUE 1
* :csc = CHARACTER_SET_CATALOG,
* :css = CHARACTER_SET_SCHEMA,
* :csn = CHARACTER_SET_NAME,
* :clc = COLLATION_CATALOG,
* :cls = COLLATION_SCHEMA,
* :cln = COLLATION_NAME;
CALL "SUB75" USING SQLCODE SQLSTATE
csc css csn clc cls cln
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be >= 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 00xxx or 01004; its value is ",
SQLSTATE
PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
if (SQLCODE < 0) then
MOVE 0 TO flag
END-IF
if (SQLSTATE NOT = "01004" AND NORMSQ NOT =
"00000") then
MOVE 0 TO flag
END-IF
DISPLAY "csc is ", csc
DISPLAY "css is ", css
DISPLAY "csn is ", csn
DISPLAY "clc is ", clc
DISPLAY "cls is ", cls
DISPLAY "cln is ", cln
.
P197.
DISPLAY "ROLLBACK WORK;"
* EXEC SQL ROLLBACK WORK;
CALL "SUB76" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
if ( flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0659','pass','MCO');
CALL "SUB77" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml125.sco *** fail *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0659','fail','MCO');
CALL "SUB78" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB79" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
******************** END TEST0659 ********************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOP RUN.
* **** Procedures for PERFORM statements
*Test SQLCODE and SQLSTATE for normal completion.
CHCKOK.
DISPLAY "SQLCODE should be 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 00000; its value is ", SQLSTATE
PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
if (SQLCODE NOT = 0 OR NORMSQ NOT = "00000") then
MOVE 0 TO flag
END-IF
if (NORMSQ = "00000" AND NORMSQ NOT = SQLSTATE)
then
DISPLAY "Valid implementation-defined SQLSTATE accepted."
END-IF
.
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 NORMSQ
MOVE 3 TO norm1
*subclass begins in position 3 of char array NORMSQ
*valid subclass begins with 5-9, I-Z, end of ALPNUM table
PERFORM VARYING norm2 FROM 14 BY 1 UNTIL norm2 > 36
if (NORMSQX(norm1) = ALPNUM(norm2)) then
MOVE "0" TO NORMSQX(norm1)
END-IF
END-PERFORM
*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)
if (NORMSQ = SQLSTATE) then
GO TO EXIT-NOSUBCLASS
END-IF
MOVE 4 TO norm1
*examining position 4 of char array NORMSQ
*valid characters are 0-9, A-Z
PERFORM VARYING norm2 FROM 1 BY 1 UNTIL norm2 > 36
if (NORMSQX(norm1) = ALPNUM(norm2)) then
MOVE "0" TO NORMSQX(norm1)
END-IF
END-PERFORM
MOVE 5 TO norm1
*valid characters are 0-9, A-Z
*examining position 5 of char array NORMSQ
PERFORM VARYING norm2 FROM 1 BY 1 UNTIL norm2 > 36
if (NORMSQX(norm1) = ALPNUM(norm2)) then
MOVE "0" TO NORMSQX(norm1)
END-IF
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 (NORMSQX(1) = "0" AND NORMSQX(2) = "1") then
MOVE "0" TO NORMSQX(2)
END-IF
.
EXIT-NOSUBCLASS.
EXIT.
¤ Dauer der Verarbeitung: 0.46 Sekunden
(vorverarbeitet)
¤
|
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.
|