The var binary host variables

In the Informix® ESQL/C program, the varying-length C structure, ifx_varlena_t, stores a binary value for a var binary host variable. This data structure allows you to transfer binary data without knowing the exact structure of the internal format for the opaque data type. It provides a data buffer to hold the data for the associated var binary host variable.
Important: The ifx_varlena_t structure is an opaque structure to Informix® ESQL/C programs. That is, you do not access its internal structure directly. The internal structure of ifx_varlena_t might change in future releases. Therefore, to create portable code, always use the Informix® ESQL/C accessor functions for this structure to obtain and store values in the ifx_varlena_t structure. For a list of these Informix® ESQL/C access functions, see The lvarchar pointer and var binary library functions.
This section uses a varying-length opaque data type called image to demonstrate how the Informix® ESQL/C var binary host variable accesses an opaque data type. The image data type encapsulates an image such as a JPEG, GIF, or PPM file. If the image is less than 2 kilobytes, the data structure for the data type stores the image directly. However, if the image is greater than 2 kilobytes, the data structure stores a reference (an LO-pointer structure) to a smart large object that contains the image data. The following figure shows the internal data structure for the image data type in the database.
Figure 1. Internal data structures for the image opaque data type
typedef struct 
   {
   int      img_len; 
   int      img_thresh;
   int      img_flags;
   union
      {
      ifx_lop_t      img_lobhandle;
      char      img_data[4];
      }
      
   } image_t;

typedef struct
   {
   point_t         center;
   double         radius;
   } circle_t;
The following figure shows the CREATE TABLE statement that creates a table called image_tab that has a column of type image and an image identifier.
Figure 2. Creating a column of the image opaque data type
CREATE TABLE image_tab 
(
   image_id         integer not null primary key),
   image_col         image
);
The following figure shows how to use a var binary host variable to insert and select data in the image_col column of the image_tab table (see Creating a column of the image opaque data type).
Figure 3. Accessing the internal format of the image opaque data type with a var binary host variable
#include <image.h>;

EXEC SQL BEGIN DECLARE SECTION;
   var binary 'image' vbin_image;
EXEC SQL END DECLARE SECTION;

struct image_t user_image, *image_ptr;
int imgsz;

/* Load data into members of internal data structure
load_image(&user_image);
imgsz = getsize(&user_image);

/* Allocate memory for var binary data buffer */
ifx_var_flag(&vbin_image, 0);
ifx_var_alloc(&vbin_image, imgsz);

/* Assign data to data buffer of var binary host 
 * variable */
ifx_var_setdata(&vbin_image, &user_image, imgsz); 

/* Insert a new image_tab row with a var binary host
 * variable */
EXEC SQL insert into image_tab values (1, :vbin_image);

/* Deallocate image data buffer */
ifx_var_dealloc(&vbin_image);

/* Select an image_tab row from into a var binary 
 * host variable */
ifx_var_flag(&vbin_image, 1);
EXEC SQL select image_col into :vbin_image
   from image_tab
   where image_id = 1;
image_ptr = (image_t *)ifx_var_getdata(&vbin_image);
unload_image(&user_image);
ifx_var_dealloc(&vbin_image);

For more information about the ifx_var_flag(), ifx_var_alloc(), ifx_var_setdata(), ifx_var_getdata(), and ifx_var_dealloc() functions, see The lvarchar pointer and var binary library functions.