mirror of
https://github.com/postgres/postgres.git
synced 2025-11-25 12:03:53 +03:00
Back out all ODBC formatting changes, and back out removal of <6.4
protocol. I have left in Tom's SOCK_get_next_byte() fix, and the new win32.mak file addition. I have also left in the 'X' connection close fix.
This commit is contained in:
@@ -1,13 +1,14 @@
|
||||
/* Module: columninfo.c
|
||||
|
||||
/* Module: columninfo.c
|
||||
*
|
||||
* Description: This module contains routines related to
|
||||
* reading and storing the field information from a query.
|
||||
* Description: This module contains routines related to
|
||||
* reading and storing the field information from a query.
|
||||
*
|
||||
* Classes: ColumnInfoClass (Functions prefix: "CI_")
|
||||
* Classes: ColumnInfoClass (Functions prefix: "CI_")
|
||||
*
|
||||
* API functions: none
|
||||
* API functions: none
|
||||
*
|
||||
* Comments: See "notice.txt" for copyright and license information.
|
||||
* Comments: See "notice.txt" for copyright and license information.
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -20,12 +21,11 @@
|
||||
ColumnInfoClass *
|
||||
CI_Constructor()
|
||||
{
|
||||
ColumnInfoClass *rv;
|
||||
ColumnInfoClass *rv;
|
||||
|
||||
rv = (ColumnInfoClass *) malloc(sizeof(ColumnInfoClass));
|
||||
|
||||
if (rv)
|
||||
{
|
||||
if (rv) {
|
||||
rv->num_fields = 0;
|
||||
rv->name = NULL;
|
||||
rv->adtid = NULL;
|
||||
@@ -45,21 +45,21 @@ CI_Destructor(ColumnInfoClass *self)
|
||||
free(self);
|
||||
}
|
||||
|
||||
/* Read in field descriptions.
|
||||
If self is not null, then also store the information.
|
||||
/* Read in field descriptions.
|
||||
If self is not null, then also store the information.
|
||||
If self is null, then just read, don't store.
|
||||
*/
|
||||
char
|
||||
CI_read_fields(ColumnInfoClass *self, ConnectionClass *conn)
|
||||
{
|
||||
Int2 lf;
|
||||
int new_num_fields;
|
||||
Oid new_adtid;
|
||||
Int2 new_adtsize;
|
||||
Int4 new_atttypmod = -1;
|
||||
char new_field_name[MAX_MESSAGE_LEN + 1];
|
||||
SocketClass *sock;
|
||||
ConnInfo *ci;
|
||||
Int2 lf;
|
||||
int new_num_fields;
|
||||
Oid new_adtid;
|
||||
Int2 new_adtsize;
|
||||
Int4 new_atttypmod = -1;
|
||||
char new_field_name[MAX_MESSAGE_LEN+1];
|
||||
SocketClass *sock;
|
||||
ConnInfo *ci;
|
||||
|
||||
sock = CC_get_socket(conn);
|
||||
ci = &conn->connInfo;
|
||||
@@ -69,28 +69,28 @@ CI_read_fields(ColumnInfoClass *self, ConnectionClass *conn)
|
||||
|
||||
mylog("num_fields = %d\n", new_num_fields);
|
||||
|
||||
if (self)
|
||||
{ /* according to that allocate memory */
|
||||
if (self) { /* according to that allocate memory */
|
||||
CI_set_num_fields(self, new_num_fields);
|
||||
}
|
||||
|
||||
/* now read in the descriptions */
|
||||
for (lf = 0; lf < new_num_fields; lf++)
|
||||
{
|
||||
for(lf = 0; lf < new_num_fields; lf++) {
|
||||
|
||||
SOCK_get_string(sock, new_field_name, MAX_MESSAGE_LEN);
|
||||
new_adtid = (Oid) SOCK_get_int(sock, 4);
|
||||
new_adtsize = (Int2) SOCK_get_int(sock, 2);
|
||||
|
||||
/* If 6.4 protocol, then read the atttypmod field */
|
||||
if (PG_VERSION_GE(conn, 6.4))
|
||||
{
|
||||
/* If 6.4 protocol, then read the atttypmod field */
|
||||
if (PG_VERSION_GE(conn, 6.4)) {
|
||||
|
||||
mylog("READING ATTTYPMOD\n");
|
||||
new_atttypmod = (Int4) SOCK_get_int(sock, 4);
|
||||
|
||||
/* Subtract the header length */
|
||||
/* Subtract the header length */
|
||||
new_atttypmod -= 4;
|
||||
if (new_atttypmod < 0)
|
||||
new_atttypmod = -1;
|
||||
|
||||
}
|
||||
|
||||
mylog("CI_read_fields: fieldname='%s', adtid=%d, adtsize=%d, atttypmod=%d\n", new_field_name, new_adtid, new_adtsize, new_atttypmod);
|
||||
@@ -107,16 +107,15 @@ CI_read_fields(ColumnInfoClass *self, ConnectionClass *conn)
|
||||
void
|
||||
CI_free_memory(ColumnInfoClass *self)
|
||||
{
|
||||
register Int2 lf;
|
||||
int num_fields = self->num_fields;
|
||||
register Int2 lf;
|
||||
int num_fields = self->num_fields;
|
||||
|
||||
for (lf = 0; lf < num_fields; lf++)
|
||||
{
|
||||
if (self->name[lf])
|
||||
free(self->name[lf]);
|
||||
for (lf = 0; lf < num_fields; lf++) {
|
||||
if( self->name[lf])
|
||||
free (self->name[lf]);
|
||||
}
|
||||
|
||||
/* Safe to call even if null */
|
||||
/* Safe to call even if null */
|
||||
free(self->name);
|
||||
free(self->adtid);
|
||||
free(self->adtsize);
|
||||
@@ -128,30 +127,33 @@ CI_free_memory(ColumnInfoClass *self)
|
||||
void
|
||||
CI_set_num_fields(ColumnInfoClass *self, int new_num_fields)
|
||||
{
|
||||
CI_free_memory(self); /* always safe to call */
|
||||
CI_free_memory(self); /* always safe to call */
|
||||
|
||||
self->num_fields = new_num_fields;
|
||||
|
||||
self->name = (char **) malloc(sizeof(char *) * self->num_fields);
|
||||
self->adtid = (Oid *) malloc(sizeof(Oid) * self->num_fields);
|
||||
self->adtsize = (Int2 *) malloc(sizeof(Int2) * self->num_fields);
|
||||
self->name = (char **) malloc (sizeof(char *) * self->num_fields);
|
||||
self->adtid = (Oid *) malloc (sizeof(Oid) * self->num_fields);
|
||||
self->adtsize = (Int2 *) malloc (sizeof(Int2) * self->num_fields);
|
||||
self->display_size = (Int2 *) malloc(sizeof(Int2) * self->num_fields);
|
||||
self->atttypmod = (Int4 *) malloc(sizeof(Int4) * self->num_fields);
|
||||
}
|
||||
|
||||
void
|
||||
CI_set_field_info(ColumnInfoClass *self, int field_num, char *new_name,
|
||||
Oid new_adtid, Int2 new_adtsize, Int4 new_atttypmod)
|
||||
CI_set_field_info(ColumnInfoClass *self, int field_num, char *new_name,
|
||||
Oid new_adtid, Int2 new_adtsize, Int4 new_atttypmod)
|
||||
{
|
||||
|
||||
/* check bounds */
|
||||
if ((field_num < 0) || (field_num >= self->num_fields))
|
||||
if((field_num < 0) || (field_num >= self->num_fields)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* store the info */
|
||||
self->name[field_num] = strdup(new_name);
|
||||
self->name[field_num] = strdup(new_name);
|
||||
self->adtid[field_num] = new_adtid;
|
||||
self->adtsize[field_num] = new_adtsize;
|
||||
self->atttypmod[field_num] = new_atttypmod;
|
||||
|
||||
self->display_size[field_num] = 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user