Two patches included:
- the first one enables the use of bool variables in fields which might
become NULL.
  Up to now the lib told you that NULL is not a bool variable, even if
you provide a indicator.

- the second patch checks whether a value is null and issues an error if
no indicator is provided.

Sidenote: IIRC, the variable should be left alone if the value is NULL.
ECPGlib sets it's value to 0 on NULL. Is this a violation of the
standard?

Regards
     Christof
This commit is contained in:
Bruce Momjian 1999-09-27 19:16:29 +00:00
parent ebb618bc5d
commit 3f5a164387
3 changed files with 20 additions and 0 deletions

View File

@ -1,3 +1,8 @@
Tue Aug 24 15:53:28 MEST 1999
- made NULL a valid bool value
- check for indicator variables on NULL
Wed Feb 11 10:58:13 CET 1998
- Added '-d' option to turn on debugging.

View File

@ -22,6 +22,7 @@
#define ECPG_FLOAT_FORMAT -206
#define ECPG_CONVERT_BOOL -207
#define ECPG_EMPTY -208
#define ECPG_MISSING_INDICATOR -209
#define ECPG_NO_CONN -220
#define ECPG_NOT_CONN -221

View File

@ -766,7 +766,16 @@ ECPGexecute(struct statement * stmt)
case ECPGt_unsigned_long:
((long *) var->ind_value)[act_tuple] = -PQgetisnull(results, act_tuple, act_field);
break;
case ECPGt_NO_INDICATOR:
if (PQgetisnull(results, act_tuple, act_field))
{
register_error(ECPG_MISSING_INDICATOR, "NULL value without indicator variable on line %d.", stmt->lineno);
status = false;
}
break;
default:
register_error(ECPG_UNSUPPORTED, "Unsupported indicator type %s on line %d.", ECPGtype_name(var->ind_type), stmt->lineno);
status = false;
break;
}
@ -891,6 +900,11 @@ ECPGexecute(struct statement * stmt)
((char *) var->value)[act_tuple] = true;
break;
}
else if (pval[0] == '\0' && PQgetisnull(results, act_tuple, act_field))
{
// NULL is valid
break;
}
}
register_error(ECPG_CONVERT_BOOL, "Unable to convert %s to bool on line %d.",