Something I have noticed since the installation of IBM i 7.3 TR2 and 7.2 TR6 on the partitions I use, is a change to the compile listings of SQLRPGLE programs.
The process to create an object from a SQLRPGLE source member is a multi-step process:
- The syntax of the SQL within the source member is checked to ensure it is valid.
- A copy of the source member being compiled is moved to a source file QSQLPRE in QTEMP.
- The SQL statements in the source member are converted to calls and the new source member is placed in the source file QSQLTEMP1 in QTEMP, as a RPGLE source type.
- It is this source member that is compiled.
Work with Objects Using PDM Library . . . . . QTEMP Opt Object Type Attribute Text QSQLPRE *FILE PF-SRC QSQLTEMP1 *FILE PF-SRC
I can compile the source member in QSQLTEMP1 just with a CRTBNDRPG command.
Prior to these TR the source code generated for step three was still fixed format RPG for the definitions. I copied this from an old compile listing.
S o u r c e L i s t i n g 1 /SET CCSID(*CHAR:*JOBRUNMIX) 2 D* SQL COMMUNICATION AREA 3 D SQLCA DS 4 D SQLCAID 8A INZ(X'0000000000000000') 5 D SQLAID 8A OVERLAY(SQLCAID) 6 D SQLCABC 10I 0 7 D SQLABC 9B 0 OVERLAY(SQLCABC) 8 D SQLCODE 10I 0 9 D SQLCOD 9B 0 OVERLAY(SQLCODE) 10 D SQLERRML 5I 0
Since these TR the generated source code is now in free format RPG.
S o u r c e L i s t i n g 1 /SET CCSID(*CHAR:*JOBRUNMIX) 2 // SQL COMMUNICATION AREA 3 DCL-DS SQLCA; 4 SQLCAID CHAR(8) INZ(X'0000000000000000'); 5 SQLAID CHAR(8) OVERLAY(SQLCAID); 6 SQLCABC INT(10); 7 SQLABC BINDEC(9) OVERLAY(SQLCABC); 8 SQLCODE INT(10); 9 SQLCOD BINDEC(9) OVERLAY(SQLCODE); 10 SQLERRML INT(5);
I am in two minds about how to react to this:
- Hooray, it is great to see free format RPG being more widely used by IBM in their internal workings.
- About time too!
This should serve as another warning to all of you still using fixed format code it is time to start moving to free format.
This article was written for IBM i 7.3 TR2 and 7.2 TR6.