Commit 3f5a1643 authored by Bruce Momjian's avatar Bruce Momjian

Hello,

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
parent ebb618bc
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 Wed Feb 11 10:58:13 CET 1998
- Added '-d' option to turn on debugging. - Added '-d' option to turn on debugging.
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#define ECPG_FLOAT_FORMAT -206 #define ECPG_FLOAT_FORMAT -206
#define ECPG_CONVERT_BOOL -207 #define ECPG_CONVERT_BOOL -207
#define ECPG_EMPTY -208 #define ECPG_EMPTY -208
#define ECPG_MISSING_INDICATOR -209
#define ECPG_NO_CONN -220 #define ECPG_NO_CONN -220
#define ECPG_NOT_CONN -221 #define ECPG_NOT_CONN -221
......
...@@ -766,7 +766,16 @@ ECPGexecute(struct statement * stmt) ...@@ -766,7 +766,16 @@ ECPGexecute(struct statement * stmt)
case ECPGt_unsigned_long: case ECPGt_unsigned_long:
((long *) var->ind_value)[act_tuple] = -PQgetisnull(results, act_tuple, act_field); ((long *) var->ind_value)[act_tuple] = -PQgetisnull(results, act_tuple, act_field);
break; 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: default:
register_error(ECPG_UNSUPPORTED, "Unsupported indicator type %s on line %d.", ECPGtype_name(var->ind_type), stmt->lineno);
status = false;
break; break;
} }
...@@ -891,6 +900,11 @@ ECPGexecute(struct statement * stmt) ...@@ -891,6 +900,11 @@ ECPGexecute(struct statement * stmt)
((char *) var->value)[act_tuple] = true; ((char *) var->value)[act_tuple] = true;
break; 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.", register_error(ECPG_CONVERT_BOOL, "Unable to convert %s to bool on line %d.",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment