 |
» |
|
|
|
The FORTRAN preprocessor can be invoked in either
This section describes how to invoke the preprocessor both
interactively and in the background.
Syntax Checking Mode |  |
You use the following command to only check the syntax of
the SQL commands embedded in the
source code file.
Syntax
:RUN PSQLFOR.PUB.SYS;INFO="(SYNTAX)"
|
The preprocessor does not access a DBEnvironment when it is run
in this mode.
When performing only syntax checking, the preprocessor does not
convert the SQL commands into
FORTRAN constructs. Therefore the modified source code file does not
contain any preprocessor generated calls to ALLBASE/SQL
external procedures.
The include and installable module files are created, but
incomplete.
Authorization
You do not need ALLBASE/SQL authorization when you use the
preprocessor to only check SQL syntax.
Example
:FILE SQLIN = FOREX2
:RUN PSQLFOR.PUB.SYS; INFO= "(SYNTAX)"
MON, JUL 10, 1989, 4:48 PM
HP36216-02A.E1.16 FORTRAN Preprocessor/3000 ALLBASE/SQL
(C) COPYRIGHT HEWLETT-PACKARD CO. 1982,1983,1984,1985,1986,1987,1988,
1989,1990,1991. ALL RIGHTS RESERVED
Syntax checked.
1 ERRORS 0 WARNINGS
END OF PREPROCESSING.
PROGRAM TERMINATED IN AN ERROR STATE. (CIERR 976)
:EDITOR
HP32201A.07.20 EDIT/3000 TUE, JUN 21, 1991, 2:00 PM
(C) HEWLETT-PACKARD CO. 1990
/T SQLMSG; L ALL UNN
FILE UNNUMBERED
.
.
.
SQLIN = FOREX2.SOMEGROUP.SOMEACCT
SELCT PartNumber, PartName, SalesPrice INTO :PartNumber, :PartName,
:SalesPrice :SalesPriceInd FROM PurchDB.Parts WHERE PartNumber =
:PartNumber;
****** ALLBASE/SQL errors. (DBERR 10977)
****** in SQL statement ending in line 290
*** Syntax error. (DBERR 1001)
Syntax checked.
1 ERRORS 0 WARNINGS
END OF PREPROCESSING
The line 290 referenced in SQLMSG is the line in
the source file where the erroneous SQL command ends.
|
Full Preprocessing Mode |  |
You use the following command to both check the embedded SQL
command syntax and create compilable output files that can be
processed by the FORTRAN compiler.
This command also stores a module in the DBEnvironment named and
creates a file containing an installable version of the module.
Syntax
:RUN PSQLFOR.PUB.SYS; INFO="DBEnvironmentName [({ MODULE(ModuleName) OWNER (OwnerName ) { DROP { PRESERVE REVOKE } NODROP }} |...|)]" Parameters
- DBEnvironmentName
identifies the DBEnvironment in which a module is to be stored.
You may use a backreference for a file defined in a file for
this parameter.
- ModuleName
Assigns a name to the stored module. Module names must follow
the rules governing ALLBASE/SQL basic names as described in the
ALLBASE/SQL Reference Manual . If a module name is not specified, the preprocessor uses
the PROGRAM statement name as the module name.
- OwnerName
Associates the stored module with a user's log-on name, a class
name, or a group name. You can specify an owner name for the
module if you have DBA authority in the DBEnvironment where the
module is to be stored. You can also specify a group as owner
if you are a member of the group. If not specified, the owner
name is your log-on name (USER@ACCOUNT). Any object names
in the source file not qualified with an owner name are
qualified with this OwnerName.
- DROP
Deletes any module currently stored in the DBEnvironment by the
ModuleName and OwnerName specified in the command
string. If not specified, any module having these names is not
dropped, and existing RUN authorities for that module are
preserved.
- PRESERVE
Is specified when the program being preprocessed already has a
stored module and you want to preserve existing RUN authorities
for that module. If not specified, PRESERVE is assumed.
PRESERVE cannot be specified unless DROP is also specified.
- REVOKE
Is specified when the program being preprocessed already has a
stored module and you want to revoke existing RUN authorities
for that module. REVOKE cannot be specified unless DROP is also
specified.
- NODROP
Terminates preprocessing if any module currently exists in the
DBEnvironment with the ModuleName and OwnerName
specified in the INFO string. If not specified, NODROP is
assumed.
Description
When the program being preprocessed already has a stored module,
be sure to use the
DROP
option, or else an error will result.
Also, be sure that no one is currently executing the module when
you invoke the preprocessor. To avoid conflicts, do your
preprocessing in single-user mode, during off hours.
The preprocessor starts a DBE session in the DBEnvironment named
in the preprocessor command by issuing a CONNECT TO
'DBEnvironmentName' command. If the autostart flag is OFF,
the DBE session can be initiated only after a START DBE command
has been processed.
If the DBEnvironment to be accessed is operating in single-user
mode, preprocessing can occur only when another DBE session for
the DBEnvironment does not exist.
When the preprocessor's DBE session begins, ALLBASE/SQL
processes a BEGIN WORK command. When preprocessing is
completed, the preprocessor submits a COMMIT WORK command, and
any sections created are committed to the system catalog. If
the preprocessor detects an error in the source file, it
processes a ROLLBACK WORK command before terminating, and no
sections are stored in the DBEnvironment. Preprocessor warnings
do not prevent sections from being stored.
During preprocessing, system catalog pages accessed for embedded
commands are locked. In multiuser mode, other DBE sessions
accessing the same objects must wait, and the potential for a
deadlock exists. Therefore minimize competing transactions when
preprocessing an application program. Refer to the ALLBASE/SQL Database Administration Guide for
information on operations that lock system catalog pages.
For improved runtime performance, use ISQL to submit the UPDATE
STATISTICS command before preprocessing for each table
accessed in a data manipulation command when an index on that
table has been added or dropped and when data in the table is
often changed.
If you specify an OwnerName or ModuleName in a language other
than
NATIVE-3000
(ASCII), be sure that the language you are
using is also the language of the DBEnvironment in which the
module will be stored.
Authorization
To preprocess a program for the first time in this mode, you
need CONNECT or DBA authority in the DBEnvironment the program
accesses. After a stored module exists, you need module OWNER
or DBA authority in the DBEnvironment.
Example
:FILE SQLIN=FOREX2
:RUN PSQLFOR.PUB.SYS;INFO=&
"PartsDBE (MODULE(FOREX2) OWNER(OwnerP@SomeAcct) REVOKE DROP)"
MON, JUL 10, 1991, 4:48 PM
HP36216-02A.E1.16 FORTRAN Preprocessor/3000 ALLBASE/SQL
(C) COPYRIGHT HEWLETT-PACKARD CO. 1982,1983,1984,1985,1986,1987,1988,
1989,1990,1991. ALL RIGHTS RESERVED
0 ERRORS 1 WARNINGS
END OF PREPROCESSING.
END OF PROGRAM
:EDITOR
HP32201A.07.20 EDIT/3000 TUE, JUN 21, 1991, 2:00 PM
(C) HEWLETT-PACKARD CO. 1990
/T SQLMSG; L ALL UNN
FILE UNNUMBERED
MON, JUL 10, 1989, 5:00 PM
.
.
.
SQLIN = FOREX2.SOMEGROUP.SOMEACCT
DBEnvironment = PartsDBE
Module Name = FOREX2
****** SELECT PartNumber, PartName, SalesPrice INTO :PartNumber, :PartName,:SalesPrice WHERE PartNumber = :PartNumber
****** ALLBASE/SQL warnings. (DBERR 10602) |
****** User SomeUser@SomeAcct does not have SELECT authority on PurchDB.Parts.
(DBERR 2301)
1 Sections stored in DBEnvironment.
0 ERRORS 1 WARNINGS
END OF PROCESSING
/
|
Using the Preprocessor UDC's |  |
Two UDC's for invoking the FORTRAN preprocessor are provided
with ALLBASE/SQL in the HPSQLUDC.PUB.SYS file:
PFOR, illustrated in Figure 2-12 “UDC for Preprocessing SQLIN”, invokes the
preprocessor in full preprocessing mode. You specify the source
file name, a DBEnvironment name, and a name for SQLMSG (if you
do not want preprocessor messages to go to $STDLIST).
:PFOR SourceFileName,DBEnvironment
|
The PFOR UDC uses the following preprocessor INFO string
parameters:
ModuleName is the name of the source file.
OwnerName is the log-on User@Account.
PRESERVE and DROP are in effect.
PPFOR, illustrated in Figure 2-13 “UDC for Preprocessing, Compiling, and Preparing SQLIN”, invokes the
preprocessor in full preprocessing mode, then invokes the
FORTRAN compiler if preprocessing is successful and the linker
if compilation is successful.
To use this UDC, you specify the source file name, a
DBEnvironment name, and an executable file name. You can
specify a name for SQLMSG if you do not want preprocessor
messages to go to $STDLIST:
:PPFOR SourceFileName,DBEnvironment,ExecutableFileName
|
This UDC uses the following preprocessor INFO string parameters:
ModuleName is the source file name.
OwnerName is the log-on User@Account.
PRESERVE and DROP are in effect.
If you make your own version of the UDC's, do not modify the
record attributes for any of the preprocessor output files.
Only modify the file limit (disc=FileLimit) if required.
 |  |  |  |  | NOTE:
Because the UDC's purge the preprocessor message file, if
messages are sent to $STDLIST an error message appears when you
use the UDC's, but preprocessing continues.
|  |  |  |  |
Figure 2-12 UDC for Preprocessing SQLIN PFOR srcfile,dbefile,msgfile=$stdlist
continue
setvar _savefence hpmsgfence
setvar hpmsgfence 2
continue
purge !msgfile
purge sqlout
purge sqlmod
purge sqlvar
setvar hpmsgfence _savefence
deletevar _savefence
file sqlin = !srcfile
file sqlmsg = !msgfile; rec=-80,16,f,ascii
file sqlout; disc=10000,32; rec=-80,16,f,ascii
file sqlmod; disc=1023,10,1; rec=250,,f,binary
file sqlvar; disc=2048,32; rec=-80,16,f,ascii
continue
run psqlfor.pub.sys;info="!dbefile (drop)"
reset sqlin
reset sqlmsg
reset sqlout
reset sqlmod
reset sqlvar
|
Figure 2-13 UDC for Preprocessing, Compiling, and Preparing SQLIN PPFOR srcfile,dbefile,pgmfile,msgfile=$stdlist
continue
setvar _savefence hpmsgfence
setvar hpmsgfence 2
continue
purge !msgfile
purge sqlout
purge sqlmod
purge sqlvar
setvar hpmsgfence _savefence
deletevar _savefence
file sqlin = !srcfile
file sqlmsg = !msgfile; rec=-80,16,f,ascii
file sqlout; disc=10000,32; rec=-80,16,f,ascii
file sqlmod; disc=1023,10,1; rec=250,,f,binary
file sqlvar; disc=2048,32; rec=-80,16,f,ascii
continue
run psqlfor.pub.sys;info="!dbefile (drop)"
if jcw <= warn then
continue
ftnxllk sqlout,!pgmfile,$null
endif
reset sqlin
reset sqlmsg
reset sqlout
reset sqlmod
reset sqlvar
|
The example in Figure 2-14 “Sample UDC Invocation” illustrates the use of PPFOR on an
SQLIN that could be successfully preprocessed, compiled, and
linked.
Figure 2-14 Sample UDC Invocation
:PPFOR FOREX2,PARTSDBE,FOREX2R
MON, JUL 10, 1989, 3:43
HP36216-02A.03.01 FORTRAN Preprocessor/3000 ALLBASE/SQL
(C) COPYRIGHT HEWLETT-PACKARD CO., 1982,1983,1984,1985,1986,1987,1988,
1989,1990,1991. ALL RIGHTS RESERVED
SQLIN = FOREX2.SOMEGRP.SOMEACCT
DBEnvironment = partsdbe
Module Name = FOREX2
1 Sections stored in DBEnvironment.
0 ERRORS 0 WARNINGS
END OF PREPROCESSING.
END OF PROGRAM
.
.
.
END OF COMPILE
HP Link Editor/XL (HP30315A.04.04) Copyright Hewlett-Packard Co 1986
LinkEd> LINK FROM=$OLDPASS;TO=FOREX2R
END OF PROGRAM
:
|
If there are compiler errors or warnings, the line number
referenced in the compiler output messages is the FORTRAN
statement number in the compiler output listing. Remember
that PPFOR UDC sends the compiler output listing to $null. Thus
to identify the line in error, you must reinvoke the compiler,
sending the compiler listing to an output file:
:BUILD FORLIST;DISC=10000,32;REC=-80,16,F,ASCII
:FTNXL SQLOUT,$OLDPASS,FORLIST
|
Running the Preprocessor in Job Mode |  |
You can preprocess FORTRAN programs in job mode. Figure 2-15 “Sample Preprocessing Job File”
illustrates a job file that uses the PPFOR UDC to preprocess
several sample programs.
Figure 2-15 Sample Preprocessing Job File
!JOB JOANN,MGR.HPDB,FORTRAN;OUTCLASS=,1
!ppfor forp01,PartsDBE,forp01r
!ppfor forp01a,PartsDBE,forp01ar
!ppfor forp02,PartsDBE,forp02r
.
.
!ppfor for50,PartsDBE,for50r
!TELL JOANN,MGR.HPDB; FORTRAN Preprocessing is complete!
!EOJ
|
|