7.4 Quick Reference
7.4.1 Data Types
ARRAY[m,n,...] OF type
BYTE
CHAR(n)
CHARACTER(n)
DATE
DATETIME(f TO l)
DEC
DEC(precision)
DEC(precision,scale)
DECIMAL
DECIMAL(precision)
DECIMAL(precision,scale)
DOUBLE PRECISION
DOUBLE PRECISION(precision)
INT
INTEGER
INTERVAL(f TO l)
LIKE table.column
MONEY
MONEY(precision)
MONEY(precision,scale)
NUMERIC
NUMERIC(m)
NUMERIC(m,n)
REAL
RECORD LIKE table.*
RECORD name type ,... END RECORD
SERIAL
SERIAL(n)
SMALLFLOAT
SMALLINT
TEXT
VARCHAR
VARCHAR(max)
VARCHAR(max,min)
Precision = No of significant digits (default 16)
Scale=No or digits after the decimal pt (default 2), can be -ve.
max = number of chars (upper limit 254 for Informix IDS)
min = minimum number of chars.
Current Engines also support large integers: int8 and serial8.
TRUE=1
FALSE=0
NOTFOUND=100
7.4.3 Global Variables
Flags: INT_FLAG QUIT_FLAG
Vars: STATUS SQLCA.SQLCODE
SQLCA Record:
SQLCA RECORD
SQLCODE INTEGER,
SQLERRM CHAR(71),
SQLERRP CHAR(8),
SQLERRD ARRAY[6] OF INTEGER,
SQLAWARN CHAR(8)
END RECORD
SQLCA.SQLERRD Array:
SQLERRD[1]:estimated row count
SQLERRD[2]:serial value returned
SQLERRD[3]:no of rows processed
SQLERRD[4]:estimated CPU cost
SQLERRD[5]:error offset
SQLERRD[6]:last rowid processed
Warning: Not all of the above work for all backends. For PostgreSQL they may need a patched version of the engine.
7.4.4 Syntax Conventions
The remainder of this chapter uses the following conventions to indicate the syntax of 4GL language constructs
-
KEYWORDS are in UPPERCASE. You enter them literally but in upper or lower case
-
Lower case indicates terms for which you must enter your own identifiers or expressions
-
"string" indicates a quoted string. Informix allows either single or double quotes but non-Informix engines may enforce one or the other.
-
string (without quotes) indicates an unquoted string used for example, in naming cursors, prepared statements, forms, windows, etc.
-
m and n are used to denote a numeric value
-
"c" denotes any quoted character
-
[] and {} delimit options. {} indicates a mandatory option. [] a non-mandatory toption. Within the [] or {} elements are separated by the pipe symbol |. e.g. {a|b|c} means you must choose a or b or c.
-
Expressions in red are Aubit 4GL extensions and will not compile on Informix, 4J, or other 4GL compilers.\enda4gl
-
Expressions in green work with Informix SE only.
-
Expressions in blue work with Informix IDS only.
-
relop means a relational operator (see below)
-
expr means an expression
-
charexpr means a character expression (e.g. filename || ".4gl")
Numeric: + - * / ** mod
String: , [m,n] || USING "string" CLIPPED
Relational: = <> != >= < <=
Boolean: expr relop expr
charexp LIKE charexpr
charexpr LIKE charexpr ESCAPE "c"
charexp NOT LIKE charexp
charexp NOT LIKE charexp ESCAPE "c"
charexpr MATCHES charexpr
charexpr NOT MATCHES charexpr ESCAPE "c"
charexpr MATCHES charexpr
charexpr NOT MATCHES charexpr ESCAPE "c"
expr IS NULL
expr IS NOT NULL
boolexpr AND boolexpr]
boolexpr OR boolexpr
NOT boolexpr
7.4.6 Aubit4GL Operators
[NOT] IN ( {expr [ ,...]
|selectstatement})
[NOT] EXISTS ( selectstatement )
\enda4gl
7.4.7 Attribute Constants
An attlist is a set of the following elements:
BLACK, WHITE, RED, GREEN, BLUE,
MAGENTA, CYAN, YELLOW,
REVERSE,DIM, BOLD, BLINK, INVISIBLE,
BORDER, UNDERLINE
7.4.8 Key Constants
A keylist is a set of the following elements:
F1 to F64
CONTROL-c (but c not in (A,D,H,I,
K,L,M,R,X)
ACCEPT, DELETE, DOWN, ESC, ESCAPE,
HELP, INSERT, INTERRUPT, LEFT,
RIGHT, NEXT, NEXTPAGE, PREVIOUS,
PREVPAGE, RETURN, TAB, UP
7.4.9 Table Privileges
ALTER, INDEX, DELETE, INSERT,
SELECT[(colname ,...)]
UPDATE[(colname ,...)
Characters on a line after the following are ignored by 4GL compilers:
--
|
ANSI SQL Standard for commenting out rest of line
|
#
|
Unix convention for commenting out rest of line
|
Curly braces are used to comment out lines of code (not nestable):
{ ... }
|
Compiler ignores everything between the braces
|
{! ... !}
|
Aubit 4GL compiles the enclosed code. Informix 4GL ignores it.
|
7.4.11 4GL Statement Syntax
ALLOCATE ARRAY name, size
ALTER INDEX indexname TO [NOT] CLUSTER
ALTER TABLE tablename
{ADD (newcolname newcoltype
[BEFORE old-colname][,...])
|DROP (oldcolname[,...])
|MODIFY (oldcolname newcoltype [NOT NULL]
[,...])
}[,...]
AT TERMINATION CALL function([args])\enda4gl
BEGIN WORK
statement ...
{COMMIT WORK | ROLLBACK WORK}
CALL [packet{::|.}]function([COPYOF][arg][,...])
[RETURNING arglist]
CASE [(expr)]
WHEN {expr | booleanexpr}
statement
...
[EXIT CASE]
...
[OTHERWISE]
...
[EXIT CASE]
...
END CASE
CLEAR {SCREEN |WINDOW windowname
|WINDOW SCREEN
|FORM [TO DEFAULTS]\enda4gl
|fieldlist}
CLOSE cursor
CLOSE DATABASE
CLOSE FORM
CLOSE SESSION name
CLOSE STATUSBOX name\enda4gl
CLOSE WINDOW name
CODE
Cstatement;
...
ENDCODE\enda4gl
COMMIT WORK
CONNECT TO name\enda4gl
CONSTRUCT {BY NAME charvar ON collist
|charvar on collist FROM { fields
| screenrecord[[n]].*} [,...]}
[[ {BEFORE|AFTER} CONSTRUCT statements]
[,...]
[ {BEFORE|AFTER} FIELD field statements]
[,...]
VIA viafunc
\enda4gl
{ON KEY (keylist)
statement
...
[{EXIT|CONTINUE} CONSTRUCT]
...]
END CONSTRUCT]
CONTINUE CONSTRUCT
CONTINUE DISPLAY
CONTINUE FOR
CONTINUE FOREACH
CONTINUE INPUT
CONTINUE MENU
CONTINUE PROMPT
CONTINUE WHILE
CONVERT REPORT convrepname TO
{"filename"|PIPE program|PRINTER|[E]MAIL}
AS {"SAVE"|"PDF"|"CSV"|"TXT"}\enda4gl
CREATEAUDITFORtabnamein"pathname"
CREATE [UNIQUE|DISTINCT][CLUSTER] INDEX
indname ON tabname( colname [ASC|DESC]
[,...])
CREATE DATABASE {name| charvar}
[WITH LOG [IN path]]
CREATE SCHEMA AUTHORIZATION
CREATE PRIVATE SYNONYM
CREATE PUBLIC SYNONYM
CREATE SYNONYM name FOR tabname
CREATE TABLE
CREATE [TEMP] TABLE name
(colname coltype [NOT NULL][,...])
CREATE DISTINCT CLUSTER INDEX
CREATE VIEW
CURRENT WINDOW IS name
CURRENT WINDOW SCREEN
CURRENT WINDOW IS SCREEN
DATABASE name [EXCLUSIVE]
DEALLOCATE ARRAY name
DECLARE name [SCROLL] CURSOR FOR
{select_statement
[FOR UPDATE OF collist
|insert_statement
|statementid}
DEFER INTERRUPT
DEFER QUIT
DEFINE varlist datatype [,...]
DEFINE CONSTANT id {"string"|number}
DEFINE linkid LINKED TO tabname PRIMARY KEY (colname)
DEFINE name ASSOCIATE [CHAR](n)
with ARRAY[m] OF datatype
DEFINE NEW TYPE id datatype\enda4gl
DELETE FROM tabname
[WHERE {condition|CURRENT OF cursor}]
DELETE USING linkid
DISABLE FORM name
DISPLAY {BY NAME varlist
| varlist TO {fieldlist|screenrec[[n]].*}
[,...]
| AT screenrow,screencol]}
[ ON KEY (keylist)
statement
...
[EXIT DISPLAY]
...
END DISPLAY]
DISPLAY ARRAY id
[SLICE(field1{THROUGH|THRU}field2)]
TO screenarray.*
[ ATTRIBUTE[S]( attlist |
[INSERT|DELETE ROW =[=] {TRUE|FALSE}]
[UNBUFFERED]
[CURRENT ROW =[=] expr
[[MAX]COUNT =[=] n]
[REVERSE|colour
)]
{[ON CHANGE field]|
[ON {IDLE|INTERVAL} n {HOURS|MINUTES|SECONDS}]|
[ON ACTION id]|
[ON ANY KEY]|\enda4gl
[ON KEY (keylist)]
statement
...
[EXIT DISPLAY]
...
[END DISPLAY]}
DISPLAY FORM name [ATTRIBUTE( attlist)]
DROPAUDITFORtabname
DROP DATABASE {name | charvar}
DROP INDEX name
DROP SYNONYM name
DROP TABLE name
DROP TRIGGER name
DROP VIEW name
ENABLE FORM form
ERROR displaylist [ATTRIBUTE (attlist)]
EXECUTE [IMMEDIATE] statementid
EXIT CASE
EXIT CONSTRUCT
EXIT DISPLAY
EXIT FOR
EXIT FOREACH
EXIT INPUT
EXIT MENU
EXIT PROGRAM [expr]
EXIT PROMPT
EXIT REPORT
EXIT WHILE
FETCH [NEXT
|PREVIOUS|PRIOR|FIRST|LAST
|CURRENT|RELATIVE n
|ABSOLUTE n]
cursorname [INTO varlist]
FINISH REPORT name
FINISH REPORT name
CONVERTING TO {{"filename"|EMAIL|}
[AS {"SAVE"|"PDF"|"CSV"|"TXT"|MANY}
[USING "filename" AS LAYOUT]}\enda4gl
FLUSH cursor
FONT SIZE n\enda4gl
FOR var = expr TO expr [STEP expr]
{statement|CONTINUE FOR|EXIT FOR}...
END FOR
FOREACH cursor [INTO varlist]
[statement|CONTINUE FOREACH|EXIT FOREACH]...
END FOREACH
FREE {statementid|cursor|blobvar}
FREE REPORT name\enda4gl
FUNCTION function([[COPYOF] arg] [,...]})
[ definestatement ]...
statement ...
END FUNCTION
GO TO label
GOTO label
GRANT {tabpriv ON tabname
| CONNECT|RESOURCE|DBA }
TO {PUBLIC|userlist}
HIDE OPTION name
HIDE WINDOW name
IF boolexpr THEN
statement
...
[ELSE
statement
...]
END IF]
IF boolexpr THEN
statement
...
[ELIF|ELSIF
statement
...]
...
[ELSE
statement
...]
END IF]
IGNORE ERRORS (n [, ...]) FOR 4glstatement
IMPORT PACKAGE name\enda4gl
INITIALIZE varlist
{LIKE collist| TO NULL}
INPUT ARRAY array
SLICE(field1THROUGH|THRUfield2)
[WITHOUT DEFAULTS]
FROM screenarray.* [HELP n]
[ATTRIBUTE[S](
[INSERT|DELETE ROW =[=] {TRUE|FALSE}]
[UNBUFFERED]
[CURRENT ROW =[=] expr
[[MAX]COUNT =[=] n]
[REVERSE|colour
] [, ...])\enda4gl
[{BEFORE {ROW|INSERT|DELETE|FIELD list}
[,...]
|AFTER {ROW|INSERT|DELETE|FIELD list|
INPUT}[,...]
|ON KEY (keylist)}
[ON CHANGE field
[ON {IDLE|INTERVAL} n {HOURS|MINUTES|SECONDS}]|
[ON ACTION id]|
[ON ANY KEY]\enda4gl
statement
...
[NEXT FIELD field]
...
[EXIT INPUT]
...
...
END INPUT
INSERT INTO tabname[(collist)]
{VALUES(vallist)| selectstatemet}
INSERT USING linkid\enda4gl
LABEL name:
MESSAGE displaylist [ATTRIBUTE (attlist)]
LABEL label-name :
LET id = expr
LET hasharray<<"code">> = "string"\enda4gl
LOAD FROM filename INSERT in tabname [(collist)]
LOAD FROM filename
[USING FILTER filtfunc]
INSERT in tabname [(collist)]\enda4gl
LOCATE varlist in {MEMORY|FILE [filename]}
LOCK TABLE name IN {SHARE|EXCLUSIVE} MODE
MENU "name"
COMMAND {KEY (keylist)
| [KEY (keylist)] "option"
[HELP n]}
statement
...
[CONTINUE MENU]
...
[EXIT MENU]
...
[NEXT OPTION "option"]
...
...
[ON KEY (keylist)
statement
...
CONTINUE MENU]
...
[EXIT MENU]
...
[NEXT OPTION "option"]
...]
END MENU
MENU name
{OPTION opt [IMAGE="path/name.xpm"] "Label"
|SUBMENU subname "[_]Label"
{USE menu
|{statement,...
END SUBMENU}}
| statement
,...}
END MENU
MESSAGEBOX message\enda4gl
MOVE WINDOW
NEXT FIELD "fieldname"
NEXT FORM NEXT OPTION "optname"
OPEN cursor [USING varlist]
OPEN FORM name FROM "filename"
OPEN SESSION id TO DATABASE db
[USING user [PASSWORD pwd]]
OPEN STATUSBOX name
OPEN WINDOW name AT row, col
WITH {r ROWS, c COLUMNS
| FORM "file"}
[ATTRIBUTE(attlist)]
OPTIONS {MESSAGE LINE line
|PROMPT LINE line
|COMMENT LINE line
|ERROR LINE line
|FORM LINE line
|INPUT {[NO] WRAP}
|INSERT KEY key
|DELETE KEY key
|NEXT KEY key
|PREVIOUS KEY key
|ACCEPT KEY key
|HELP FILE "file"
|HELP KEY key
|INPUT ATTRIBUTE(attlist)
|DISPLAY ATTRIBUTE (attlist)}
[,...]
OUTPUT TO REPORT name(exprlist)
PREPARE id from "charexpr"
PROMPT displaylist FOR [CHAR] var
[HELP n]
[ON KEY (keylist)
statement
...
...
END PROMPT]
PUT cursor FROM varlist
RECOVER TABLE name
RENAME DATABASE name TO newname
RENAME COLUMN table.oldcol TO newcol
RENAME TABLE oldname TO newname
RESIZE ARRAY name, size
RETURN exprlist
REVOKE { tabpriv ON tabname
| CONNECT | RESOURCE | DBA}
FROM {PUBLIC | userlist
ROLLBACK WORK
ROLLFORWARD DATABASE name
RUN command [RETURNING n
|WITHOUT WAITING]
RUN program WAITING FOR expr
[WITH {MESSAGE|ERROR}] expr
RUN program {WAIT|EXIT}
RUN CLIENT progname
SCHEMA dbname
\enda4gl
SCROLL {fieldlist| screenrec.*}[,...]
{UP|DOWN}[BY n]
SELECT sellist [INTO varlist] FROM collist
[joinclause] [fromclause]
[groupclause [havingclause]]
[orderclause]
SELECT USING linkid\enda4gl
SET BUFFERED LOG
SET CONSTRAINTS ALL IMMEDIATE
SET CURSOR
SET EXPLAIN OFF
SET EXPLAIN ON
SET ISOLATION TO COMMITTED READ
SET ISOLATION TO CURSOR STABILITY
SET ISOLATION TO DIRTY READ
SET ISOLATION TO REPEATABLE READ
SET LOCK MODE TO NOT WAIT
SET LOCK MODE TO WAIT
SET LOG
SET PAUSE MODE OFF
SET PAUSE MODE ON
SET SESSION TO name
SET SQL DIALECT TO "{INFORMIX|ORACLE|...}"\enda4gl
SHOW OPTION "optname"
SHOW WINDOW name
SLEEP n
SORT array USING sortfunc [limit n]\enda4gl
SQL [WITH[OUT]CONVERSIONS]
sqlstatement [,...] END SQL
START EXTERNAL FUNCTION\enda4gl
START REPORT name
[TO {"filename"|PIPE program|PRINTER}]
[WITH[TOP|BOTTOM|LEFT|RIGHTMARGINn...|PAGELENGTHn]
STOP ALL EXTERNAL\enda4gl
START DATABASE identifier WITH LOG IN "..."
[MODE ANSI]
START REPORT name
[TO {file|PIPE program|PRINTER
|CONVERTIBLE\enda4gl}]
|
[[WITHTOP|BOTTOM|LEFT|RIGHTMARGIN]...|PAGELENGTHn]
TERMINATE REPORT
\enda4gl
UNLOAD TO filename selectstatement
UNLOCK TABLE name
UPDATE tabname SET
{colname = expr [,...]
|{(collist}|table.*|*}=
{(exprlist)| record.*}}
[WHERE {condition|CURRENT of cursor}
UPDATE STATISTICS
UPDATE STATISTICS FOR TABLE name
UPDATE USING linkid
USE packagename
USE SESSION name\enda4gl
VALIDATE var LIKE collist
WHILE boolean
[statement| EXIT WHILE | CONTINUE WHILE]...
END WHILE
7.4.12 Report Syntax
REPORT repname( arglist)
definestatement ...
[OUTPUT
[REPORT TO
{file|PIPE program|PRINTER}]
[LEFT MARGIN n]
[RIGHT MARGIN n]
[TOP MARGIN n]
[BOTTOM MARGIN n]
[PAGE LENGTH n]
[ORDER [EXTERNAL] BY sortlist]
FORMAT
{ EVERY ROW
| {[FIRST] PAGE HEADER
|PAGE TRAILER
|ON EVERY ROW
|ON LAST ROW
|{BEFORE|AFTER} GROUP OF argvar}
statement
...
[...]}
END REPORT
7.4.13 Report Statement Syntax
NEED n LINES
PAUSE "string"
PRINT [[exprlist][;]| FILE "filename"]
SKIP {expr LINE[S]| TO TOP OF PAGE}
7.4.14 Report Expressions
COLUMN expr
[GROUP]{COUNT(*)|PERCENT(*)
|{SUM|AVG|MIN|MAX}(expr)}
[WHERE expr]}
DATE
LINENO
PAGENO
TIME
WORDWRAP
7.4.15 PDF Report Syntax
PDF reports are an Aubit 4GL extension.
-
r, g, b are values between 0.0 and 1.0 for red, green, blue
-
TOP variants of LINE TO etc, put origin for x.y at top left. (PDF usually has origin at bottom left.)
nval means an numeric expr followed by 1 of the following units:
POINTS, INCHES, MM, or nothing (which means char spaces). Example: 2.54 mm
PDFREPORT name(arglist)
definestatement ...
[OUTPUT
[REPORT TO
{file|PIPE program|PRINTER}]
[LEFT MARGIN nval}
[RIGHT MARGIN nval]
[TOP MARGIN nval]
[BOTTOM MARGIN nval]
[PAGE LENGTH nval]
[ORDER [EXTERNAL] BY sortlist]
FORMAT
{ EVERY ROW
| {[FIRST] PAGE HEADER
|PAGE TRAILER
|ON EVERY ROW
|ON LAST ROW
|{BEFORE|AFTER} GROUP OF argvar}
statement| pdfstatement
...
[...]}
END PDFREPORT
\enda4gl
7.4.15.1 PDF Report Expressions
COLUMN nval
reportexpression
\enda4gl
PRINT IMAGE blobvar AS
"{GIF|PNG|TIFF|JPEG}"
[SCALED by x.n, y.n}
PRINT IMAGE "filename"
SKIP {BY|TO} nval
BOOKMARK expr [,expr] [ RETURNING index]
PRINT BARCODE [NO TEXT] [AT x, y] [WIDTH w HEIGHT h]
SET BARCODE TYPE expr
SET BARCODE TYPE {"2"|"5"|"8"|"13"|"25"|"39"|"QR"}
FILL
FILL STROKE
LINE TO [TOP] y, x
MOVE TO [TOP] y, x
SET COLOR r, g, b #all 0-1
SET FILL COLOR r, g, b
SET FONT NAME name
SET FONT SIZE n
SET PARAMETER name, value
SET STROKE COLOR r, g, b
STROKE
CALL PDF_FUNCTION(arglist)
\enda4gl
7.4.15.3 PDF_FUNCTION arglists
There are many libpdf functions. For a full list look at the PDFlib documentation. Here is an example:
"set_parameter", "{underline|...}", "{true|false|...}"
\enda4gl
Note: Font names are case sensitive.