*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
for (i=0;i<nfields;i++) {
if (!(bmap & 0200)) {
/* if the field value is absent, make it '\0' */
- /* XXX this makes it impossible to distinguish NULL
- attributes from "". Is that OK? */
tup[i].value = (char*)malloc(1);
tup[i].value[0] = '\0';
- tup[i].len = 0;
+ tup[i].len = NULL_LEN;
}
else {
/* get the value length (the first four bytes are for length) */
"PQgetlength: ERROR! field %d(of %d) of tuple %d(of %d) is not available",
field_num, res->numAttributes - 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;
+ }
+
+
*
* 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 $
*
*-------------------------------------------------------------------------
*/
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 */
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,