4. Embedded SQL for Fortran : Dynamic Programming for Fortran : SQLDA Structure Usage
 
Share this page                  
SQLDA Structure Usage
You use the SQLDA (SQL Descriptor Area) to pass type and size information about an SQL statement, an Ingres form, or an Ingres table field, between Ingres and your program.
To use the SQLDA, issue the include sqlda statement in each subprogram of your source file that references the SQLDA. The include sqlda statement generates a Fortran include directive to a file that defines the SQLDA structure type. The file does not declare an SQLDA variable; your program must declare a variable of the specified type. You can also code this structure variable directly instead of using the include sqlda statement. You can choose any name for the structure.
The definition of the SQLDA (as specified in the include file) is:
UNIX:
C
C Single element of SQLDA variable
C
          structure /IISQLVAR/
                    integer*2     sqltype
                    integer*2     sqllen
                    integer*4     sqldata
                    integer*4     sqlind
                    structure /IISQLNAME/ sqlname
                        integer*2             sqlname1
                        character*34          sqlnamec
                    end structure
          end structure
C
C Maximum number of columns returned from Ingres
C
          parameter (IISQ_MAX_COLS = 1024)


C IISQLDA - SQLDA with maximum number of entries 
C for variables.
C
          structure /IISQLDA/
                    character*8 sqldaid
                    integer*4   sqldabc
                    integer*2   sqln
                    integer*2   sqld
                    record /IISQLVAR/ sqlvar(IISQ_MAX_COLS)
          end structure
    structure /IISQLHDLR/
C     Optional argument to pass through
            integer*4   sqlarg
C     user-defined datahandler function
            integer*4   sqlhdlr
    end structure


C Allocation sizes
C
          parameter (IISQDA_HEAD_SIZE = 16,
   1                   IISQDA_VAR_SIZE = 48)
C
C Type and length codes
C
C
          parameter (IISQ_DTE_TYPE = 3, 
   1      IISQ_MNY_TYPE  = 5,
   2      IISQ_DEC_TYPE  = 10,  
   3      IISQ_CHA_TYPE  = 20, 
   4      IISQ_VCH_TYPE  = 21, 
   5      IISQ_LVCH_TYPE = 22,
   6      IISQ_INT_TYPE  = 30, 
   7      IISQ_FLT_TYPE  = 31, 
   8      IISQ_OBJ_TYPE  = 45,
   9      IISQ_HDLR_TYPE = 46,
   1      IISQ_TBL_TYPE  = 52, 
   2      IISQ_DTE_LEN   = 25)
    parameter (IISQ_LVCH_TYPE = 22,
   1          IISQ_HDLR_TYPE = 46) 
VMS:
    structure /IISQLVAR/ ! Single SQLDA variable
                integer*2 sqltype
                integer*2 sqllen
                integer*4 sqldata ! Address of any type
                integer*4 sqlind  ! Address of 2-byte integer
                structure /IISQLNAME/ sqlname
                      integer*2 sqlname1
                      character*34 sqlnamec
                end structure
    end structure
    parameter IISQ_MAX_COLS = 1024 ! Maximum number of
C                                    columns
    structure /IISQLDA/
                character*8 sqldaid
                integer*4 sqldabc
                integer*2 sqln
                integer*2 sqld
                record /IISQLVAR/ sqlvar(IISQ_MAX_COLS)
    end structure
    structure /IISQLHDR/
                integer*4   sqlarg  ! Optional argument to pass
                integer*4   sqlhdlr ! User-defined datahandler fn
    end structure
! Type codes
    parameter IISQ_DTE_TYPE = 3, ! Date - Output
   1    IISQ_MNY_TYPE = 5,  ! Money - Output
   2    IISQ_DEC_TYPE = 10, ! Decimal - Output
   3    IISQ_CHA_TYPE = 20, ! Char - Input, Output
   4    IISQ_VCH_TYPE = 21, ! Varchar - Input, Output
   5    IISQ_LVCH_TYPE= 22, ! Long Varchar - Input,Output
   6    IISQ_INT_TYPE = 30, ! Integer - Input, Output
   7    IISQ_FLT_TYPE = 31, ! Float - Input, Output
   8    IISQ_OBJ_TYPE = 45, ! 4GL Object: Output
   9    IISQ_HDLR_TYPE= 46, ! IISQLHDLR: Datahandler
   1    IISQ_TBL_TYPE = 52, ! Table Field - Output
   2    IISQ_DTE_LEN = 25,  ! Date length
! Allocation sizes
    parameter IISQDA_VAR_SIZE = 16,
   1     IISQDA_VAR = 48 
    parameter IISQ_LVCH_TYPE = 22,
   1         IISQ_HDLR_TYPE = 46 
Windows:
    structure /IISQLVAR/
        integer*2    sqltype
        integer*2     sqllen
        integer*4    sqldata        ! Address of any type
        integer*4    sqlind        ! Address of 2-byte integer
        structure /IISQLNAME/ sqlname
            integer*2       sqlnamel
            character*34  sqlnamec
        end structure
    end structure
C
C IISQ_MAX_COLS - Maximum number of columns returned from INGRES
C
    parameter IISQ_MAX_COLS = 1024

C
C IISQLDA - SQLDA with maximum number of entries for variables.
C
    structure /IISQLDA/
        character*8        sqldaid
        integer*4        sqldabc
        integer*2        sqln
        integer*2        sqld
        record /IISQLVAR/     sqlvar(IISQ_MAX_COLS)
    end structure
C
C IISQLHDLR - Structure type with function pointer and function argument
C          for the DATAHANDLER.
C
    structure /IISQLHDLR/
        integer*4        sqlarg
        integer*4        sqlhdlr
    end structure

C
C Allocation sizes - When allocating an SQLDA for the size use:
C        IISQDA_HEAD_SIZE + (N * IISQDA_VAR_SIZE)
C
    parameter IISQDA_HEAD_SIZE = 16,
    1      IISQDA_VAR_SIZE  = 48

C
C Type and Length Codes
C
    parameter IISQ_DTE_TYPE = 3,    ! Date - Output
    1      IISQ_MNY_TYPE = 5,    ! Money - Output
    2      IISQ_DEC_TYPE = 10,    ! Decimal - Output
    3      IISQ_CHA_TYPE    = 20,    ! Char - Input, Output
    4      IISQ_VCH_TYPE    = 21,    ! Varchar - Input, Output
    5      IISQ_INT_TYPE    = 30,    ! Integer - Input, Output
    6      IISQ_FLT_TYPE = 31,    ! Float - Input, Output
    7      IISQ_TBL_TYPE = 52,    ! Table field - Output
    8      IISQ_DTE_LEN  = 25    ! Date length
    parameter IISQ_LVCH_TYPE = 22    ! Long varchar
    parameter IISQ_LBIT_TYPE = 16    ! Long bit
    parameter IISQ_HDLR_TYPE = 46    ! Datahandler
    parameter IISQ_BYTE_TYPE = 23    ! Byte - Input, Output
    parameter IISQ_VBYTE_TYPE = 24    ! Byte Varying - Input, Output
    parameter IISQ_LBYTE_TYPE = 25    ! Long Byte - Output
    parameter IISQ_OBJ_TYPE = 45        ! Object - Output
Structure Definition and Usage Notes:
The structure type definition of the SQLDA is called IISQLDA. This is done so that an SQLDA variable may be called "SQLDA" without causing a compile-time conflict.
The sqlvar array is an array of IISQ_MAX_COLS (1024) elements. If a variable of type IISQLDA is declared, the program will have a variable of IISQ_MAX_COLS elements.
The sqlvar array begins at subscript 1.
If your program defines its own SQLDA type, you must confirm that the structure layout is identical to that of the IISQLDA structure type, although you can declare a different number of sqlvar elements.
The nested structure sqlname is a varying length character string consisting of a length and data area. The sqlnamec field contains the name of a result field or column after the describe (or prepare into) statement. The length of the name is specified by sqlnamel. The characters in the sqlnamec field are blank padded. The sqlname structure can also be set by a program using Dynamic FRS. The program is not required to pad sqlname with blanks. see How to Set SQLNAME for Dynamic FRS in this chapter.
The list of type codes represents the types that are returned by the describe statement, and the types used by the program when using an SQLDA to retrieve or set data. The type code IISQ_TBL_TYPE indicates a table field and is set by the FRS when describing a form that contains a table field.