In C and C++, INCLUDE SQLDA declarations are equivalent to the following:
Figure 11. INCLUDE SQLDA Declarations for C and C++
#ifndef SQLDASIZE struct sqlda { unsigned char sqldaid[8]; long sqldabc; short sqln; short sqld; struct sqlvar { short sqltype; short sqllen; unsigned char *sqldata; short *sqlind; struct sqlname { short length; unsigned char data[30]; } sqlname; } sqlvar[1]; }; struct sqlvar2 { struct { long sqllonglen; char reserve1[28]; } len; char *sqldatalen; struct sqldistinct_type { short length; unsigned char data[30]; } sqldatatype_name; }; #define SQLDASIZE(n) (sizeof(struct sqlda)+(n-1) * sizeof(struct sqlvar)) #endif /*********************************************************************/ /* Macros for using the sqlvar2 fields. */ /*********************************************************************/ /*********************************************************************/ /* '2' in the 7th byte of sqldaid indicates a doubled number of */ /* sqlvar entries. */ /* '3' in the 7th byte of sqldaid indicates a tripled number of */ /* sqlvar entries. */ /*********************************************************************/ #define SQLDOUBLED '2' #define SQLSINGLED ' ' /*********************************************************************/ /* GETSQLDOUBLED(daptr) returns 1 if the SQLDA pointed to by */ /* daptr has been doubled, or 0 if it has not been doubled. */ /*********************************************************************/ #define GETSQLDOUBLED(daptr) (((daptr)->sqldaid[6]== \ (char) SQLDOUBLED) ? \ (1) : \ (0) ) /*********************************************************************/ /* SETSQLDOUBLED(daptr, SQLDOUBLED) sets the 7th byte of sqldaid */ /* to '2'. */ /* SETSQLDOUBLED(daptr, SQLSINGLED) sets the 7th byte of sqldaid */ /* to be a ' '. */ /*********************************************************************/ #define SETSQLDOUBLED(daptr, newvalue) \ (((daptr)->sqldaid[6] =(newvalue))) /*********************************************************************/ /* GETSQLDALONGLEN(daptr,n) returns the data length of the nth */ /* entry in the sqlda pointed to by daptr. Use this only if the */ /* sqlda was doubled or tripled and the nth SQLVAR entry has a */ /* LOB datatype. */ /*********************************************************************/ #define GETSQLDALONGLEN(daptr,n) ((long) (((struct sqlvar2 *) \ &((daptr)->sqlvar[(n) +((daptr)->sqld)])) ->len.sqllonglen)) /*********************************************************************/ /* SETSQLDALONGLEN(daptr,n,len) sets the sqllonglen field of the */ /* sqlda pointed to by daptr to len for the nth entry. Use this only */ /* if the sqlda was doubled or tripled and the nth SQLVAR entry has */ /* a LOB datatype. */ /*********************************************************************/ #define SETSQLDALONGLEN(daptr,n,length) { \ struct sqlvar2 *var2ptr; \ var2ptr = (struct sqlvar2 *) &((daptr)->sqlvar[(n)+ \ ((daptr)->sqld)]); \ var2ptr->len.sqllonglen = (long) (length); \ } /*********************************************************************/ /* SETSQLDALENPTR(daptr,n,ptr) sets a pointer to the data length for */ /* the nth entry in the sqlda pointed to by daptr. */ /* Use this only if the sqlda has been doubled or tripled. */ /*********************************************************************/ #define SETSQLDALENPTR(daptr,n,ptr) { \ struct sqlvar2 *var2ptr; \ var2ptr = (struct sqlvar2 *) &((daptr)->sqlvar[(n)+ \ ((daptr)->sqld)]); \ var2ptr->sqldatalen = (char *) ptr; \ } /*********************************************************************/ /* GETSQLDALENPTR(daptr,n) returns a pointer to the data length for */ /* the nth entry in the sqlda pointed to by daptr. Unlike the inline */ /* value (union sql8bytelen len), which is 8 bytes, the sqldatalen */ /* pointer field returns a pointer to a long (4 byte) integer. */ /* If the SQLDATALEN pointer is zero, a NULL pointer is be returned. */ /* */ /* NOTE: Use this only if the sqlda has been doubled or tripled. */ /*********************************************************************/ #define GETSQLDALENPTR(daptr,n) ( \ (((struct sqlvar2 *) &(daptr)->sqlvar[(n) + \ (daptr)->sqld])->sqldatalen == NULL) ? \ ((long *) NULL ) : ((long *) ((struct sqlvar2 *) \ &(daptr)->sqlvar[(n) + (daptr) ->sqld])->sqldatalen)) |
(C) Copyright IBM Corporation 1992, 2005. All Rights Reserved.