Primes.cbsql
This is the compplete source code of the primes Cobol program, which contains the preprocessed high level SQL statements.
identification division.
program-id. primes.
environment division.
configuration section.
source-computer. linux-laptop.
object-computer. linux-laptop.
special-names.
console is scherm.
data division.
working-storage section.
01 filler pic x(32) value "Start WS primes".
01 DATASRC PIC X(64) value
"pgsql://localhost:5432/primes&default_schema=primes".
01 DBUSR PIC X(64) value "primes_user".
01 DBPWD PIC X(64) value "pr1mes_user".
01 CUR-STEP PIC X(16).
01 primes-row.
03 r-ident pic 9(9) comp-3.
03 r-prime pic 9(9) comp-3.
01 prime-count pic 9(9).
01 prime_seq pic 9(9).
01 divider pic 9(9).
01 primes.
03 primes-result pic 9(2) value zero.
88 init-primes-ok value 1.
88 first-divider-ok value 2.
88 next-divider-ok value 3.
03 test-number pic 9(9).
03 test-number-sqr pic 9(9)v9(9).
03 test-divider pic 9(9).
03 test-rest pic 9(9)v9(9).
03 old-test-number pic 9(9).
03 old-ident pic 9(9).
03 new-ident pic 9(9).
GIXSQL*EXEC SQL
GIXSQL* INCLUDE primes-table
GIXSQL*END-EXEC.
COPY primes-table.
GIXSQL*EXEC SQL
GIXSQL* INCLUDE SQLCA
GIXSQL*END-EXEC.
COPY SQLCA.
GIXSQL*EXEC SQL AT primes
GIXSQL* DECLARE primescursor CURSOR FOR
GIXSQL* SELECT * FROM primes
GIXSQL*END-EXEC.
copy primes-ui.
GIXSQL 01 SQ0001.
GIXSQL 02 FILLER PIC X(0020) VALUE "SELECT * FROM primes".
GIXSQL 02 FILLER PIC X(1) VALUE X"00".
GIXSQL 01 SQ0002.
GIXSQL 02 FILLER PIC X(0041) VALUE "SELECT prime FROM primes WHER"
GIXSQL & "E ident = $1".
GIXSQL 02 FILLER PIC X(1) VALUE X"00".
GIXSQL 01 SQ0003.
GIXSQL 02 FILLER PIC X(0042) VALUE "INSERT INTO primes ( prime ) "
GIXSQL & "VALUES ( $1 )".
GIXSQL 02 FILLER PIC X(1) VALUE X"00".
GIXSQL 01 SQ0004.
GIXSQL 02 FILLER PIC X(0041) VALUE "insert into primes ( prime ) "
GIXSQL & "values ( 2 )".
GIXSQL 02 FILLER PIC X(1) VALUE X"00".
GIXSQL 01 SQ0005.
GIXSQL 02 FILLER PIC X(0017) VALUE "START TRANSACTION".
GIXSQL 02 FILLER PIC X(1) VALUE X"00".
GIXSQL* ESQL CURSOR INIT FLAGS (START)
GIXSQL 01 GIXSQL-CI-F-primes-primescursor PIC X.
GIXSQL* ESQL CURSOR INIT FLAGS (END)
linkage section.
copy primes-dal.
procedure division using primes-dal.
evaluate true
when next-prime
perform r80-get-next-prime
when next-divider
perform r81-get-next-divider
when write-prime
perform r83-write-prime
when db-connect
perform s00-connect
when db-cursor
perform s01-cursor
when db-disconnect
perform s99-disconnect
when other
move 1 to dal-result
end-evaluate.
exit program.
r80-get-next-prime.
perform s02-fetch.
r81-get-next-divider.
add 1 to old-ident giving new-ident.
* display "gen-methods: " gen-methods.
* display "primes.cbl ident: " old-ident " " new-ident.
GIXSQL* EXEC SQL at primes
GIXSQL* SELECT prime INTO :test-divider FROM primes
GIXSQL* WHERE ident = :new-ident
GIXSQL* END-EXEC.
GIXSQL CALL STATIC "GIXSQLStartSQL"
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 1
GIXSQL BY VALUE 9
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE test-divider
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetSQLParams" USING
GIXSQL BY VALUE 1
GIXSQL BY VALUE 9
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE new-ident
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLExecSelectIntoOne" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "primes" & x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE SQ0002
GIXSQL BY VALUE 1
GIXSQL BY VALUE 1
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLEndSQL"
GIXSQL END-CALL.
if SQLCODE = 0 then
next sentence
* display "select new-divider ok: " test-divider upon scherm
else
display SQLCODE upon scherm
display "select new-divider nok" upon scherm.
* display "primes.cbl test-divider: " test-divider.
move new-ident to old-ident.
r83-write-prime.
GIXSQL* EXEC SQL at primes
GIXSQL* INSERT INTO primes ( prime ) VALUES ( :prime )
GIXSQL* END-EXEC.
GIXSQL CALL STATIC "GIXSQLStartSQL"
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetSQLParams" USING
GIXSQL BY VALUE 1
GIXSQL BY VALUE 9
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE prime
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLExecParams" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "primes" & x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE SQ0003
GIXSQL BY VALUE 1
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLEndSQL"
GIXSQL END-CALL.
if SQLCODE = 0 then
next sentence
* display SQLCODE upon scherm
* display "primes.cbl insert next prime and new-ident ok: "
* prime-number upon scherm
else
display SQLCODE upon scherm
display "primes.cbl insert next prime nok: "
prime-number upon scherm.
* EXEC SQL at primes
* COMMIT
* END-EXEC.
if SQLCODE = 0 then
next sentence
* display SQLCODE upon scherm
* display "commit ok: " upon scherm
else
display SQLCODE upon scherm
display "commit nok: " upon scherm.
r90-generate-primes.
perform s00-connect.
if dal-method-ok then
move 'log-message' to process-message
GIXSQL* EXEC SQL at primes
GIXSQL* insert into primes ( prime ) values ( 2 )
GIXSQL* END-EXEC.
GIXSQL CALL STATIC "GIXSQLExec" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "primes" & x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE SQ0004
GIXSQL END-CALL.
if SQLCODE = 0 then
move 0 to dal-result
move 1 to primes-sequence
move 2 to prime-number
move 'Initial insert ok.'
to process-message
else
move
'Initial insert failed, terminating program.'
to process-message
move 1 to dal-result.
move 'log-message' to program-message.
call "primesui" using primes-ui.
r99-stop-primes.
perform s99-disconnect.
s00-connect.
MOVE 'CONNECT' TO CUR-STEP.
GIXSQL* EXEC SQL
GIXSQL* connect TO :DATASRC AS primes USER :DBUSR USING :DBPWD
GIXSQL* END-EXEC.
GIXSQL CALL STATIC "GIXSQLConnect" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE DATASRC
GIXSQL BY VALUE 64
GIXSQL BY REFERENCE "primes" & x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE DBUSR
GIXSQL BY VALUE 64
GIXSQL BY REFERENCE DBPWD
GIXSQL BY VALUE 64
GIXSQL END-CALL.
move 'log-message' to process-message.
if SQLCODE = 0 then
move 0 to dal-result
move 'Database initialisation ok.'
to program-message
call "primesui" using primes-ui
else
move
'Database initialisation failed, terminating program.'
to program-message
call "primesui" using primes-ui
move 1 to dal-result.
s01-cursor.
move 'primes' to program-name.
GIXSQL* EXEC SQL at primes START TRANSACTION END-EXEC.
GIXSQL CALL STATIC "GIXSQLStartSQL"
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLExec" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "primes" & x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE SQ0005
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLEndSQL"
GIXSQL END-CALL.
if SQLCODE = 0 then
move 'Start transaction ok.'
to program-message
else
move 'Start transaction nok.'
to program-message
move 1 to dal-result.
move 'log-message' to program-message.
call "primesui" using primes-ui.
* display "start transaction nok" upon scherm.
if dal-method-ok then
GIXSQL* EXEC SQL OPEN primescursor END-EXEC.
GIXSQL IF GIXSQL-CI-F-primes-primescursor = ' ' THEN
GIXSQL PERFORM GIXSQL-CI-P-primes-primescursor
GIXSQL IF SQLCODE = 0
GIXSQL MOVE 'X' TO GIXSQL-CI-F-primes-primescursor
GIXSQL END-IF
GIXSQL END-IF
GIXSQL IF GIXSQL-CI-F-primes-primescursor = 'X' THEN
GIXSQL CALL STATIC "GIXSQLCursorOpen" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "primes_primescursor" & x"00"
GIXSQL END-CALL
GIXSQL END-IF.
if SQLCODE = 0 then
move 'Start primescursur ok.'
to program-message
else
move 'Start primescursor nok.'
to program-message
move 1 to dal-result.
move 'primes' to program-name.
move 'log-message' to program-message.
call "primesui" using primes-ui.
* if dal-method-ok then
* perform s02-fetch.
* if SQLCODE = 0 then
* move 'Fetch first row ok.' to program-message
* move 0 to dal-result
* move r-ident to primes-sequence
* move r-prime to prime-number
* else
* move 'Fetch first row nok.' to program-message
* move 1 to dal-result.
* move 'primes' to program-name.
* move 'log-message' to program-message.
* call "primesui" using primes-ui.
s02-fetch.
GIXSQL* EXEC SQL FETCH primescursor INTO :primes-row END-EXEC.
GIXSQL CALL STATIC "GIXSQLStartSQL"
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 8
GIXSQL BY VALUE 9
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE r-ident
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLSetResultParams" USING
GIXSQL BY VALUE 8
GIXSQL BY VALUE 9
GIXSQL BY VALUE 0
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE r-prime
GIXSQL BY REFERENCE 0
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLCursorFetchOne" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "primes_primescursor" & x"00"
GIXSQL END-CALL
GIXSQL CALL STATIC "GIXSQLEndSQL"
GIXSQL END-CALL.
if SQLCODE = 0 then
move r-ident to primes-sequence
move r-prime to prime-number
move 0 to dal-result
else
move 'Fetch row nok.' to program-message
move 1 to dal-result
move 'primes' to program-name
move 's02-fetch' to program-paragraph
move 'log-message' to ui-methods
call "primesui" using primes-ui.
s99-disconnect.
MOVE 'DISCONNECT' TO CUR-STEP.
GIXSQL* EXEC SQL connect RESET primes END-EXEC.
GIXSQL CALL STATIC "GIXSQLConnectReset" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "primes" & x"00"
GIXSQL BY VALUE 0
GIXSQL END-CALL.
move 'log-message' to process-message.
if SQLCODE = 0 then
move 0 to dal-result
move 'Close database ok.'
to process-message
call "primesui" using primes-ui
else
move 'Database initialisation failed, ending program.'
to process-message
call "primesui" using primes-ui
move 1 to dal-result.
display "s99 disconnect from database" upon scherm.
display SQLCODE upon scherm.
GIXSQL*
GIXSQL* ESQL CURSOR DECLARATIONS (START)
GIXSQL GO TO GIX-SKIP-CRSR-INIT.
GIXSQL GIXSQL-CI-P-primes-primescursor.
GIXSQL CALL STATIC "GIXSQLCursorDeclare" USING
GIXSQL BY REFERENCE SQLCA
GIXSQL BY REFERENCE "primes" & x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE "primes_primescursor" & x"00"
GIXSQL BY VALUE 0
GIXSQL BY REFERENCE SQ0001
GIXSQL BY VALUE 0
GIXSQL END-CALL.
GIXSQL GIX-SKIP-CRSR-INIT.
GIXSQL*
GIXSQL* ESQL CURSOR DECLARATIONS (END)
Terug naar: primes