]> granicus.if.org Git - postgresql/commitdiff
Hello,
authorBruce Momjian <bruce@momjian.us>
Mon, 27 Sep 1999 19:16:29 +0000 (19:16 +0000)
committerBruce Momjian <bruce@momjian.us>
Mon, 27 Sep 1999 19:16:29 +0000 (19:16 +0000)
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

src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/include/ecpgerrno.h
src/interfaces/ecpg/lib/ecpglib.c

index 2738caf6a98e8e53c09dd03e063b2f757efc0b69..961cd416109ca6a985d727331bef047d009078a4 100644 (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.
index a3bc132497d6bacf39f89a76ad8961d7a4a0e144..db2618f31d03c7c47d1c77a2e3725a5473dcde7b 100644 (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
index de093895e0c1ef1c753f2ceb663a4687ce2e05c1..2b0067449f1c3e8f1f1a2d0144557e5dfa25e7a6 100644 (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.",