Merge commit 'origin/master'
[versaplex.git] / vxodbc / columninfo.cc
blobebfc05d6de46fc50a86e4fdc13c3ea2c13af9ab9
1 /*
2 * Description: This module contains routines related to
3 * reading and storing the field information from a query.
4 */
6 #include "pgtypes.h"
7 #include "columninfo.h"
9 #include "connection.h"
10 #include <stdlib.h>
11 #include <string.h>
12 #include "pgapifunc.h"
14 ColumnInfoClass *CI_Constructor()
16 ColumnInfoClass *rv;
18 rv = (ColumnInfoClass *) malloc(sizeof(ColumnInfoClass));
20 if (rv)
22 rv->num_fields = 0;
23 rv->coli_array = NULL;
26 return rv;
30 void CI_Destructor(ColumnInfoClass * self)
32 CI_free_memory(self);
34 free(self);
38 void CI_free_memory(ColumnInfoClass * self)
40 register Int2 lf;
41 int num_fields = self->num_fields;
43 /* Safe to call even if null */
44 self->num_fields = 0;
45 if (self->coli_array)
47 for (lf = 0; lf < num_fields; lf++)
49 if (self->coli_array[lf].name)
51 free(self->coli_array[lf].name);
52 self->coli_array[lf].name = NULL;
55 free(self->coli_array);
56 self->coli_array = NULL;
61 #ifdef __cplusplus
62 typedef ColumnInfoClass_::srvr_info srvr_info;
63 #endif
65 void
66 CI_set_num_fields(ColumnInfoClass * self, int new_num_fields,
67 BOOL allocrelatt)
69 CI_free_memory(self); /* always safe to call */
71 self->num_fields = new_num_fields;
73 self->coli_array = (srvr_info *)
74 calloc(sizeof(srvr_info), self->num_fields);
78 void
79 CI_set_field_info(ColumnInfoClass * self, int field_num,
80 const char *new_name,
81 OID new_adtid, Int2 new_adtsize, Int4 new_atttypmod,
82 OID new_relid, OID new_attid)
84 /* check bounds */
85 if ((field_num < 0) || (field_num >= self->num_fields))
86 return;
88 /* store the info */
89 self->coli_array[field_num].name = strdup(new_name);
90 self->coli_array[field_num].adtid = new_adtid;
91 self->coli_array[field_num].adtsize = new_adtsize;
92 self->coli_array[field_num].atttypmod = new_atttypmod;
94 self->coli_array[field_num].display_size = 0;
95 self->coli_array[field_num].relid = new_relid;
96 self->coli_array[field_num].attid = new_attid;