|
Getting Started | VisualPQL |
VisualPQL is the major application development tool within SIR/XS and is extremely powerful. VisualPQL can be used for numerous tasks from simply analysing some data to building a complex, menu driven application.
Hello World
In some languages, this is a big hurdle. However with SIR/XS, it is easy and straightforward. The VisualPQL program to display "Hello World" is:
PROGRAM WRITE 'Hello World' END PROGRAMAll you have to do is to create this text and keep it and you can do this either as a:
Assuming that you have the COMPANY
database attached, you might put your test programs in a new family of procedures called, say, TEST
You use an editor to create the text. The system allows you to use any editor of your choice and also has a very basic internal editor. Use whatever program you would normally use to edit text and that you are comfortable using.
To check which editor is being used, go to the Settings - Preferences
dialog. This has a check box for external editor and the name of your selected external editor. If the box is not checked, the name is greyed out and the system uses the internal editor. If you do not have access to an external text editor, use the SIR GUI editor. If you select an external editor, the system saves this from session to session. When using the external editor option ensure that the path and the name are correct otherwise trying to edit a program will not work.
SIR/XS
. Attach the COMPANY
database.
Program
menu.
Members
.
PROG1
.
Start program compilation Start program execution Hello World End program execution
Congratulations. You have created and run that vital first program!
N.B. If you do not want to type this program in, it is supplied as member EXAMPLE.HELLO
.
RETRIEVAL PROCESS CASES PROCESS REC EMPLOYEE WRITE ID NAME BIRTHDAY SALARY END REC END CASE END RETRIEVAL
RETRIEVAL . PROCESS CASES . PROCESS REC EMPLOYEE . WRITE ID NAME BIRTHDAY SALARY . END REC . END CASE END RETRIEVAL
PROCESS REC
is a synonym for PROCESS RECORD
.
There is also a COMMENT
command (synonym C or CC). This specifies that the whole line is a comment.
PROGRAM
and ends with a matching END
command. The commands to begin a routine are:PROGRAM
- any main routine
RETRIEVAL
- a main routine that accesses a database
FORM
- a main routine that creates screens to do record at a time browsing
SUBROUTINE
- an independent routine that is executed from other routines
The following program uses a formula to calculate Fahrenheit and Centigrade temperature equivalents. The program in its simplest form is:
PROGRAM FOR FAHR = 0,300,20 COMPUTE CELSIUS = 5/9 * (FAHR - 32) WRITE FAHR CELSIUS END FOR END PROGRAMVisualPQL is a block structured language and the block used here is a
FOR
block. This assigns an initial value to a variable and then performs the commands in the block a number of times, incrementing the initial variable each time until the final value is reached. In this case, these values are expressed as constants with a start of 0, an end of 300 and an increment of 20. The end of the block is indicated by the END FOR
command.
Because neither the FAHR
nor CELSIUS
variables were explicitly declared, they are implicitly declared. In the context they were used they had to be numeric.
Try running the temperature program (supplied as EXAMPLES.TEMP1
) and look at the results. There is a default output format for all variables which may not be precisely what was wanted, but allows a very quick result to be produced. There are no comments in the program, nor any indentation to indicate which commands are in the loop and which are not. A slightly improved version of the program (EXAMPLES.TEMP2
) might be:
PROGRAM C** This program computes Fahrenheit and Celsius equivalents C** between 0 and 300 fahrenheit WRITE 'FAHRENHEIT CELSIUS' FOR FAHR = 0,300,20 . COMPUTE CELSIUS = 5/9 * (FAHR - 32) . WRITE FAHR(f6.2) 12T CELSIUS(f6.2) END FOR END PROGRAMNote the use of lines starting with a period for indentation. All commands start in column one and periods are used to indent for readability. Indentation and the use of one command per line is recommended. The C in column one indicates a comment. C** is often used conventionally.
The WRITE
can specify output formats (enclosed in parentheses after the variable) to align the output. The (f6.2) format indicates a floating point format 6 characters long with 2 decimal places. The 12T specification specifies that the next field starts in position 12. Two WRITE
statements have been used, one to do a brief heading and one to output each line of results. A WRITE
automatically writes a new line.
The following version (EXAMPLES.TEMP3
) of the temperature conversion program uses variables to control the FOR
loop and uses the SET
command to initialise these. It uses the SIMPLE REPORT
procedure and writes to a file rather than to the screen.
PROGRAM C** This program computes fahrenheit and celsius equivalents C** between a lower limit, and an upper limit in intervals INTEGER*2 lower upper interval SET lower,upper,interval(0,300,20) FOR FAHR = lower,upper,interval . CELSIUS = 5/9 * (FAHR - 32) . PERFORM PROCS END FOR REPORT FILENAME = 'TEMP.LIS' PRINT = FAHR CELSIUS NOTOTALS END PROGRAM
AND, OR
, etc.
Because conditional tests are frequently required for very simple computations or actions, there is an IF
command which is not block structured; it simply determines whether or not the command is executed. The action to be taken is expressed as a continuation of the IF
command itself. For example:
RETRIEVAL PROCESS CASES . PROCESS RECORD EMPLOYEE . IF (GENDER EQ 1 ) WRITE NAME . END PROCESS RECORD END PROCESS CASES
RETRIEVAL
command which opens the default database (if more than one database is connected, this is the last database connected or it can be set explicitly).
If the retrieval needs to create, modify or delete data on database records, specify the UPDATE
option on the RETRIEVAL
command. This opens the database for write access. Retrievals without the UPDATE
option can get data from the database but cannot add, delete or modify data.
A very simple program which accesses the database might be as follows. This program lists the name of all employees:
RETRIEVAL PROCESS CASES . PROCESS RECORD EMPLOYEE . WRITE NAME . END PROCESS RECORD END PROCESS CASES END RETRIEVALThings to note about this program:
RETRIEVAL
(as opposed to PROGRAM
) indicating that it uses the database.
PROCESS RECORD / END PROCESS RECORD
is a block structure and the block of commands within the PROCESS REC
block is executed for each EMPLOYEE
record that is retrieved.
NAME
is a string variable on the EMPLOYEE
record.
PROCESS CASE / END PROCESS CASE
block processes every case. If you leave this block out, the program will still work but will give you a warning message.
PROCESS CASE
| PROCESS RECORD
CASE IS
| RECORD IS
NEW CASE IS | NEW RECORD IS
Is a variant which creates a new case or record if one does not already exist.
OLD CASE IS | OLD RECORD IS
Is a variant which retrieves an existing single case or record.
These blocks are terminated with the END CASE/RECORD
command. On case structured databases, record blocks are nested within a case block.
The PROCESS
commands are a looping structure and retrieve all matching occurrences of data. The "IS
" commands access a single occurrence.
The record processing commands specify a record type and may specify a particular record or subset of records to retrieve. This is done by specifying values which are matched to the record keys or keys in a secondary index.
For example, the OCCUP
record has a key of POSITION.
To get the OCCUP
record which corresponds to the current position value:
RETRIEVAL PROCESS CASES ALL OLD RECORD IS EMPLOYEE . GET VARS currpos . OLD REC IS OCCUP (currpos) . GET VARS ALL . WRITE ID NAME CURRPOS STARTSAL ... . END RECORD IS END RECORD IS END RETRIEVALIf there are no matching records, then the block of commands is skipped completely. In the previous example, the
WRITE
is not executed if there is no matching OCCUP
record for an employee and thus that employee does not appear in the output. Selection criteria may be specified as constants or variables.
On a PROCESS CASE
command there are options to select counts, samples or lists of cases. On a PROCESS RECORD
command, there are a number of ways of specifying records to be selected. These include selecting records with keys from a specified value, to a specified value and in a given range. Records can have multiple key fields and the selection may be applied to a subset of keys. In a case structured database, the case id is implicitly used as the first key on record keys (not on secondary indexes). For example to select a sample of employees and find an average of their starting salaries in position grades 4 through 10:
RETRIEVAL PROCESS CASES SAMPLE = .25 . PROCESS RECORD OCCUP FROM (4) THRU (10) . COMPUTE AVGSAL = MEANR (STARTSAL); STDD = STDEVR (STARTSAL) . END PROCESS RECORD END PROCESS CASE WRITE 'Average Salary = ' AVGSAL ' Std. Dev = ' STDD END RETRIEVAL
To retrieve all employees by name assuming a secondary index called NAME_INDEX
has been defined on name:
RETRIEVAL PROCESS RECORD EMPLOYEE INDEXED BY NAME_INDEX WRITE NAME 25T ID END PROCESS REC END RETRIEVAL