<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.webhuis.nl:443/index.php?action=history&amp;feed=atom&amp;title=IO_behaviour</id>
	<title>IO behaviour - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.webhuis.nl:443/index.php?action=history&amp;feed=atom&amp;title=IO_behaviour"/>
	<link rel="alternate" type="text/html" href="https://wiki.webhuis.nl:443/index.php?title=IO_behaviour&amp;action=history"/>
	<updated>2026-09-11T09:26:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.webhuis.nl:443/index.php?title=IO_behaviour&amp;diff=4772&amp;oldid=prev</id>
		<title>Martin: Created page with &quot;&lt;span id=&quot;io-behaviour&quot;&gt;&lt;/span&gt; = I/O Behaviour =  &#039;&#039;&#039;Project:&#039;&#039;&#039; pgcobol — Prime Numbers Application&lt;br /&gt; &#039;&#039;&#039;Version:&#039;&#039;&#039; 1.0 (reverse-engineered)&lt;br /&gt; &#039;&#039;&#039;Date:&#039;&#039;&#039; 2026-03-17   -----  &lt;span id=&quot;file-io-primes.prt&quot;&gt;&lt;/span&gt; == 1. File I/O — primes.prt ==  &lt;span id=&quot;file-definition-primesui.cbl&quot;&gt;&lt;/span&gt; === 1.1 File Definition (primesui.cbl) ===  &lt;syntaxhighlight lang=&quot;cobol&quot;&gt;SELECT fprinter ASSIGN TO &quot;primes.prt&quot;        ORGANIZATION IS SEQUENTIAL        FILE STATUS I...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.webhuis.nl:443/index.php?title=IO_behaviour&amp;diff=4772&amp;oldid=prev"/>
		<updated>2026-03-25T16:49:49Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;span id=&amp;quot;io-behaviour&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; = I/O Behaviour =  &amp;#039;&amp;#039;&amp;#039;Project:&amp;#039;&amp;#039;&amp;#039; pgcobol — Prime Numbers Application&amp;lt;br /&amp;gt; &amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 1.0 (reverse-engineered)&amp;lt;br /&amp;gt; &amp;#039;&amp;#039;&amp;#039;Date:&amp;#039;&amp;#039;&amp;#039; 2026-03-17   -----  &amp;lt;span id=&amp;quot;file-io-primes.prt&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; == 1. File I/O — primes.prt ==  &amp;lt;span id=&amp;quot;file-definition-primesui.cbl&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; === 1.1 File Definition (primesui.cbl) ===  &amp;lt;syntaxhighlight lang=&amp;quot;cobol&amp;quot;&amp;gt;SELECT fprinter ASSIGN TO &amp;quot;primes.prt&amp;quot;        ORGANIZATION IS SEQUENTIAL        FILE STATUS I...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;span id=&amp;quot;io-behaviour&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= I/O Behaviour =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Project:&amp;#039;&amp;#039;&amp;#039; pgcobol — Prime Numbers Application&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 1.0 (reverse-engineered)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Date:&amp;#039;&amp;#039;&amp;#039; 2026-03-17&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;file-io-primes.prt&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 1. File I/O — primes.prt ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;file-definition-primesui.cbl&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 1.1 File Definition (primesui.cbl) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cobol&amp;quot;&amp;gt;SELECT fprinter ASSIGN TO &amp;quot;primes.prt&amp;quot;&lt;br /&gt;
       ORGANIZATION IS SEQUENTIAL&lt;br /&gt;
       FILE STATUS IS primes-prt-status.&lt;br /&gt;
&lt;br /&gt;
FD fprinter&lt;br /&gt;
   LABEL RECORDS OMITTED&lt;br /&gt;
   LINAGE 56,&lt;br /&gt;
   FOOTING 2,&lt;br /&gt;
   BOTTOM  2.&lt;br /&gt;
&lt;br /&gt;
01 file-buffer PIC X(132).&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! Property&lt;br /&gt;
! Value&lt;br /&gt;
|-&lt;br /&gt;
| Logical name&lt;br /&gt;
| &amp;lt;code&amp;gt;fprinter&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Physical name&lt;br /&gt;
| &amp;lt;code&amp;gt;primes.prt&amp;lt;/code&amp;gt; (relative to working directory)&lt;br /&gt;
|-&lt;br /&gt;
| Organisation&lt;br /&gt;
| Line-sequential&lt;br /&gt;
|-&lt;br /&gt;
| Record length&lt;br /&gt;
| 132 characters&lt;br /&gt;
|-&lt;br /&gt;
| Linage&lt;br /&gt;
| 56 lines per page&lt;br /&gt;
|-&lt;br /&gt;
| Footing area&lt;br /&gt;
| last 2 lines of linage&lt;br /&gt;
|-&lt;br /&gt;
| Bottom margin&lt;br /&gt;
| 2 lines&lt;br /&gt;
|-&lt;br /&gt;
| Top margin&lt;br /&gt;
| not specified (default 0)&lt;br /&gt;
|-&lt;br /&gt;
| Open mode&lt;br /&gt;
| OUTPUT only&lt;br /&gt;
|-&lt;br /&gt;
| Status field&lt;br /&gt;
| &amp;lt;code&amp;gt;primes-prt-status&amp;lt;/code&amp;gt; PIC X(2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;open&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 1.2 Open ===&lt;br /&gt;
&lt;br /&gt;
Called by &amp;lt;code&amp;gt;r90-start-primesui&amp;lt;/code&amp;gt; when &amp;lt;code&amp;gt;ui-methods = &amp;amp;quot;start&amp;amp;quot;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;OPEN OUTPUT fprinter&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Success: &amp;lt;code&amp;gt;primes-prt-status = &amp;amp;quot;00&amp;amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ui-method-result = 0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;primes-idx = 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Failure: &amp;lt;code&amp;gt;primes-prt-status ≠ &amp;amp;quot;00&amp;amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ui-method-result = 1&amp;lt;/code&amp;gt;, status displayed on console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;write-data-lines&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 1.3 Write — Data Lines ===&lt;br /&gt;
&lt;br /&gt;
Called by &amp;lt;code&amp;gt;r92-write-primesui&amp;lt;/code&amp;gt; when &amp;lt;code&amp;gt;primes-idx&amp;lt;/code&amp;gt; reaches 7 (after loading 6 entries):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MOVE primes-table TO print-buffer&lt;br /&gt;
WRITE file-buffer FROM print-buffer&amp;lt;/pre&amp;gt;&lt;br /&gt;
One 132-character record is written per six prime entries. The record layout is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[Z(9)][XX][Z(9)][XX][Z(9)][XX][Z(9)][XX][Z(9)][XX][Z(9)][XX]&lt;br /&gt;
 seq1   sp  prime1 sp  seq2  sp  prime2 sp  seq3  sp  prime3 sp ... × 6&amp;lt;/pre&amp;gt;&lt;br /&gt;
Each cell = 9 + 2 + 9 + 2 = 22 characters; 6 cells = 132 characters exactly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;write-page-heading-r93-new-page&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 1.4 Write — Page Heading (&amp;lt;code&amp;gt;r93-new-page&amp;lt;/code&amp;gt;) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;WRITE file-buffer FROM primes-heading    → &amp;amp;quot;primes overview&amp;amp;quot; (PIC X(118))&lt;br /&gt;
WRITE file-buffer FROM table-header      → &amp;amp;quot;Sequence  Prime &amp;amp;quot; × 6&amp;lt;/pre&amp;gt;&lt;br /&gt;
Triggered by &amp;lt;code&amp;gt;new-page&amp;lt;/code&amp;gt; flag = 1. Flag cleared after write.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;write-page-footing-r94-eop&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 1.5 Write — Page Footing (&amp;lt;code&amp;gt;r94-eop&amp;lt;/code&amp;gt;) ===&lt;br /&gt;
&lt;br /&gt;
Triggered when &amp;lt;code&amp;gt;linage-counter = 53&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;WRITE file-buffer FROM &amp;#039; &amp;#039;              → blank separator&lt;br /&gt;
WRITE file-buffer FROM primes-footing   → spaces(118) + &amp;amp;quot;page: &amp;amp;quot; + Z(3)9&lt;br /&gt;
ADD 1 TO page-number&lt;br /&gt;
SET print-new-page = 1                  → next write triggers new heading&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;close&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 1.6 Close ===&lt;br /&gt;
&lt;br /&gt;
Called by &amp;lt;code&amp;gt;r99-stop-primesui&amp;lt;/code&amp;gt; when &amp;lt;code&amp;gt;ui-methods = &amp;amp;quot;stop&amp;amp;quot;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;CLOSE fprinter&amp;lt;/pre&amp;gt;&lt;br /&gt;
Before close, a flush loop pads remaining cells with zeros until &amp;lt;code&amp;gt;new-page&amp;lt;/code&amp;gt; fires, guaranteeing the last partial data line is written.&lt;br /&gt;
&lt;br /&gt;
Success / failure reflected in &amp;lt;code&amp;gt;ui-method-result&amp;lt;/code&amp;gt; ← &amp;lt;code&amp;gt;primes-prt-status&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;console-output-scherm&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 2. Console Output — scherm ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;definition&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 2.1 Definition ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cobol&amp;quot;&amp;gt;SPECIAL-NAMES. CONSOLE IS scherm.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
All four programs declare &amp;lt;code&amp;gt;scherm&amp;lt;/code&amp;gt; as the console special-name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;structured-log-messages-via-primesui&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 2.2 Structured Log Messages (via primesui) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;r98-message-ui&amp;lt;/code&amp;gt; in primesui:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;DISPLAY process-message UPON scherm&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;process-message&amp;lt;/code&amp;gt; is a 132-character group:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;program-name      PIC X(20)   e.g. &amp;amp;quot;primesmain          &amp;amp;quot;&lt;br /&gt;
program-paragraph PIC X(20)   e.g. &amp;amp;quot;r90-start-session   &amp;amp;quot;&lt;br /&gt;
program-message   PIC X(92)   e.g. &amp;amp;quot;UI initialisation succeeded.         ...&amp;amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Every caller populates &amp;lt;code&amp;gt;program-name&amp;lt;/code&amp;gt;, optionally &amp;lt;code&amp;gt;program-paragraph&amp;lt;/code&amp;gt;, and always &amp;lt;code&amp;gt;program-message&amp;lt;/code&amp;gt; before calling &amp;lt;code&amp;gt;primesui &amp;amp;quot;log-message&amp;amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;direct-display-statements-diagnostic-error&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 2.3 Direct DISPLAY Statements (diagnostic / error) ===&lt;br /&gt;
&lt;br /&gt;
Several paragraphs bypass primesui and write directly to &amp;lt;code&amp;gt;scherm&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Location&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Statement&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Purpose&lt;br /&gt;
|-&lt;br /&gt;
| primesmain r90&lt;br /&gt;
| &amp;lt;code&amp;gt;DISPLAY &amp;amp;quot;Emergency console message…&amp;amp;quot; UPON scherm&amp;lt;/code&amp;gt;&lt;br /&gt;
| Hard abort if UI fails&lt;br /&gt;
|-&lt;br /&gt;
| primes r81&lt;br /&gt;
| &amp;lt;code&amp;gt;DISPLAY SQLCODE UPON scherm&amp;lt;/code&amp;gt;&lt;br /&gt;
| SQL error on next-divider&lt;br /&gt;
|-&lt;br /&gt;
| primes r81&lt;br /&gt;
| &amp;lt;code&amp;gt;DISPLAY &amp;amp;quot;select new-divider nok&amp;amp;quot; UPON scherm&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| primes r83&lt;br /&gt;
| &amp;lt;code&amp;gt;DISPLAY SQLCODE UPON scherm&amp;lt;/code&amp;gt;&lt;br /&gt;
| SQL error on insert&lt;br /&gt;
|-&lt;br /&gt;
| primes r83&lt;br /&gt;
| &amp;lt;code&amp;gt;DISPLAY &amp;amp;quot;primes.cbl insert next prime nok…&amp;amp;quot; UPON scherm&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| primes s00&lt;br /&gt;
| &amp;lt;code&amp;gt;DISPLAY &amp;amp;quot;connect to database&amp;amp;quot; UPON scherm&amp;lt;/code&amp;gt;&lt;br /&gt;
| Always shown on connect&lt;br /&gt;
|-&lt;br /&gt;
| primes s00&lt;br /&gt;
| &amp;lt;code&amp;gt;DISPLAY SQLCODE UPON scherm&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| primes s99&lt;br /&gt;
| &amp;lt;code&amp;gt;DISPLAY &amp;amp;quot;s99 disconnect from database&amp;amp;quot; UPON scherm&amp;lt;/code&amp;gt;&lt;br /&gt;
| Always shown on disconnect&lt;br /&gt;
|-&lt;br /&gt;
| primes s99&lt;br /&gt;
| &amp;lt;code&amp;gt;DISPLAY SQLCODE UPON scherm&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| primesui r90&lt;br /&gt;
| &amp;lt;code&amp;gt;DISPLAY primes-prt-status UPON scherm&amp;lt;/code&amp;gt;&lt;br /&gt;
| File open failure&lt;br /&gt;
|-&lt;br /&gt;
| primesui r99&lt;br /&gt;
| &amp;lt;code&amp;gt;DISPLAY primes-prt-status UPON scherm&amp;lt;/code&amp;gt;&lt;br /&gt;
| File close failure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;database-io-primes.cbl-via-gixsql&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 3. Database I/O (primes.cbl via GixSQL) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;connection-management&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 3.1 Connection Management ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Operation&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| SQL&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Paragraph&lt;br /&gt;
|-&lt;br /&gt;
| Connect&lt;br /&gt;
| &amp;lt;code&amp;gt;CONNECT TO :DATASRC AS primes USER :DBUSR USING :DBPWD&amp;lt;/code&amp;gt;&lt;br /&gt;
| s00-connect&lt;br /&gt;
|-&lt;br /&gt;
| Disconnect&lt;br /&gt;
| &amp;lt;code&amp;gt;CONNECT RESET primes&amp;lt;/code&amp;gt;&lt;br /&gt;
| s99-disconnect&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Connection string: &amp;lt;code&amp;gt;pgsql://localhost:5432/primes&amp;amp;amp;default_schema=primes&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Connection alias: &amp;lt;code&amp;gt;primes&amp;lt;/code&amp;gt; (used in all &amp;lt;code&amp;gt;EXEC SQL AT primes&amp;lt;/code&amp;gt; statements)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;cursor-lifecycle-report-path-only&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 3.2 Cursor Lifecycle (report path only) ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Operation&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| SQL&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Paragraph&lt;br /&gt;
|-&lt;br /&gt;
| Declare&lt;br /&gt;
| &amp;lt;code&amp;gt;DECLARE primescursor CURSOR FOR SELECT * FROM primes&amp;lt;/code&amp;gt;&lt;br /&gt;
| compile-time&lt;br /&gt;
|-&lt;br /&gt;
| Begin transaction&lt;br /&gt;
| &amp;lt;code&amp;gt;START TRANSACTION&amp;lt;/code&amp;gt;&lt;br /&gt;
| s01-cursor&lt;br /&gt;
|-&lt;br /&gt;
| Open&lt;br /&gt;
| &amp;lt;code&amp;gt;OPEN primescursor&amp;lt;/code&amp;gt;&lt;br /&gt;
| s01-cursor&lt;br /&gt;
|-&lt;br /&gt;
| Fetch one row&lt;br /&gt;
| &amp;lt;code&amp;gt;FETCH primescursor INTO :primes-row&amp;lt;/code&amp;gt;&lt;br /&gt;
| s02-fetch&lt;br /&gt;
|-&lt;br /&gt;
| (Close)&lt;br /&gt;
| not explicitly closed — connection reset closes it&lt;br /&gt;
| —&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;code&amp;gt;FETCH&amp;lt;/code&amp;gt; populates &amp;lt;code&amp;gt;primes-row&amp;lt;/code&amp;gt; (r-ident, r-prime), which is then copied to &amp;lt;code&amp;gt;primes-sequence&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;prime-number&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;primes-dal&amp;lt;/code&amp;gt; for the caller.&lt;br /&gt;
&lt;br /&gt;
End-of-cursor is signalled by &amp;lt;code&amp;gt;SQLCODE ≠ 0&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;dal-result&amp;lt;/code&amp;gt; is set to 1, which primesgen maps to &amp;lt;code&amp;gt;session-method-eof&amp;lt;/code&amp;gt; implicitly (by checking &amp;lt;code&amp;gt;session-method-eof&amp;lt;/code&amp;gt; condition, value 9 — note: there is a mapping gap; dal-result=1 does not equal session-result=9; the report loop relies on &amp;lt;code&amp;gt;session-method-eof&amp;lt;/code&amp;gt; which is never explicitly set in the current code — see defect D-RPT-01 below).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;dml-generate-path&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 3.3 DML (generate path) ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Operation&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| SQL&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Paragraph&lt;br /&gt;
|-&lt;br /&gt;
| Insert prime&lt;br /&gt;
| &amp;lt;code&amp;gt;INSERT INTO primes (prime) VALUES (:prime)&amp;lt;/code&amp;gt;&lt;br /&gt;
| r83-write-prime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Host variable &amp;lt;code&amp;gt;:prime&amp;lt;/code&amp;gt; maps to &amp;lt;code&amp;gt;prime-number&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;primes-dal.primes-data&amp;lt;/code&amp;gt;.&lt;br /&gt;
* No explicit COMMIT in the current code (statement is commented out).&lt;br /&gt;
* PostgreSQL default auto-commit applies per statement unless inside the transaction opened by &amp;lt;code&amp;gt;s01-cursor&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;queries-generate-path-divider-lookup&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 3.4 Queries (generate path — divider lookup) ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Operation&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| SQL&lt;br /&gt;
!width=&amp;quot;33%&amp;quot;| Paragraph&lt;br /&gt;
|-&lt;br /&gt;
| Get next divider&lt;br /&gt;
| &amp;lt;code&amp;gt;SELECT prime INTO :test-divider FROM primes WHERE ident = :new-ident&amp;lt;/code&amp;gt;&lt;br /&gt;
| r81-get-next-divider&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;:new-ident&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;old-ident + 1&amp;lt;/code&amp;gt; (computed inline before the SELECT).&lt;br /&gt;
* &amp;lt;code&amp;gt;:test-divider&amp;lt;/code&amp;gt; is in the local &amp;lt;code&amp;gt;primes&amp;lt;/code&amp;gt; working-storage group in primesgen, not in &amp;lt;code&amp;gt;primes-dal&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;error-handling-pattern&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== 3.5 Error Handling Pattern ===&lt;br /&gt;
&lt;br /&gt;
Every SQL statement uses the same pattern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;EXEC SQL ... END-EXEC&lt;br /&gt;
IF SQLCODE = 0 THEN&lt;br /&gt;
  [success actions]&lt;br /&gt;
ELSE&lt;br /&gt;
  [log error / set result code]&amp;lt;/pre&amp;gt;&lt;br /&gt;
No &amp;lt;code&amp;gt;WHENEVER&amp;lt;/code&amp;gt; directives are used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;command-line-input&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 4. Command-Line Input ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Program&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Statement&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Variable&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Length&lt;br /&gt;
|-&lt;br /&gt;
| primesmain&lt;br /&gt;
| &amp;lt;code&amp;gt;ACCEPT commandline-args FROM COMMAND-LINE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;commandline-args&amp;lt;/code&amp;gt; PIC X(32)&lt;br /&gt;
| 32 chars&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Only the first 32 characters of the command-line argument are stored. The value is copied to &amp;lt;code&amp;gt;methods&amp;lt;/code&amp;gt; in the session control block and also logged to the console via primesui after session start.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;known-io-defects&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== 5. Known I/O Defects ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;50%&amp;quot;| ID&lt;br /&gt;
!width=&amp;quot;50%&amp;quot;| Description&lt;br /&gt;
|-&lt;br /&gt;
| D-RPT-01&lt;br /&gt;
| The report loop condition &amp;lt;code&amp;gt;session-method-eof&amp;lt;/code&amp;gt; (value 9) is never set in the code path; when a fetch fails, &amp;lt;code&amp;gt;session-result&amp;lt;/code&amp;gt; is set to 1 (nok), not 9, causing the loop to terminate on error rather than on true EOF.&lt;br /&gt;
|-&lt;br /&gt;
| D-IO-01&lt;br /&gt;
| &amp;lt;code&amp;gt;primesgen&amp;lt;/code&amp;gt; declares a &amp;lt;code&amp;gt;SELECT fprinter&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;FD fprinter&amp;lt;/code&amp;gt; but never opens or uses the file; print output is delegated entirely to primesui.&lt;br /&gt;
|-&lt;br /&gt;
| D-IO-02&lt;br /&gt;
| Connection reset in &amp;lt;code&amp;gt;s99-disconnect&amp;lt;/code&amp;gt; targets alias &amp;lt;code&amp;gt;primes&amp;lt;/code&amp;gt;; the pre-compiler listing (&amp;lt;code&amp;gt;primes_cbsql.out&amp;lt;/code&amp;gt;) shows &amp;lt;code&amp;gt;primesdb&amp;lt;/code&amp;gt; used in earlier iterations, which would cause a runtime alias-not-found error.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
Terug naar: [[Primes_programs_specifications]] | [[Cobol and PostgreSQL]]&lt;/div&gt;</summary>
		<author><name>Martin</name></author>
	</entry>
</feed>