diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 3959c07903..b81ae8535b 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.14 1996/08/10 00:22:48 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.15 1996/08/13 01:34:27 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -156,11 +156,9 @@ getTuple(PGconn *conn, PGresult* result, int binary) for (i=0;inumAttributes - 1, tup_num, res->ntups); } - - return res->tuples[tup_num][field_num].len; + + if (res->tuples[tup_num][field_num].len != NULL_LEN) + return res->tuples[tup_num][field_num].len; + else + return 0; } + +/* PQgetisnull: + returns the null status of a field value. +*/ +int +PQgetisnull(PGresult *res, int tup_num, int field_num) +{ + if (!res) { + fprintf(stderr, "PQgetisnull() -- pointer to PQresult is null"); + return (int)NULL; + } + + if (tup_num > (res->ntups - 1 )|| + field_num > (res->numAttributes - 1)) { + fprintf(stderr, + "PQgetisnull: ERROR! field %d(of %d) of tuple %d(of %d) is not available", + field_num, res->numAttributes - 1, tup_num, res->ntups); + } + + if (res->tuples[tup_num][field_num].len == NULL_LEN) + return 1; + else + return 0; + } + + diff --git a/src/interfaces/libpq/libpq-fe.h b/src/interfaces/libpq/libpq-fe.h index 84de505337..78bd330414 100644 --- a/src/interfaces/libpq/libpq-fe.h +++ b/src/interfaces/libpq/libpq-fe.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: libpq-fe.h,v 1.6 1996/08/06 16:16:50 scrappy Exp $ + * $Id: libpq-fe.h,v 1.7 1996/08/13 01:34:29 scrappy Exp $ * *------------------------------------------------------------------------- */ @@ -83,6 +83,9 @@ typedef struct pgresAttDesc { For binary tuples, the first four bytes of the value is the size, and the bytes afterwards are the value. The binary value is not guaranteed to be null-terminated. In fact, it can have embedded nulls*/ + +#define NULL_LEN (-1) /* pg_result len for NULL value */ + typedef struct pgresAttValue { int len; /* length in bytes of the value */ char *value; /* actual value */ @@ -178,6 +181,7 @@ extern char* PQcmdStatus(PGresult *res); extern const char* PQoidStatus(PGresult *res); extern char* PQgetvalue(PGresult *res, int tup_num, int field_num); extern int PQgetlength(PGresult *res, int tup_num, int field_num); +extern int PQgetisnull(PGresult *res, int tup_num, int field_num); extern void PQclear(PGresult* res); /* PQdisplayTuples() is a better version of PQprintTuples() */ extern void PQdisplayTuples(PGresult *res,