Re: Small fix for _equalValue() - Mailing list pgsql-patches
| From | Fernando Nasser |
|---|---|
| Subject | Re: Small fix for _equalValue() |
| Date | |
| Msg-id | 3C8788D1.48FB3876@redhat.com Whole thread Raw |
| In response to | Small fix for _equalValue() (Fernando Nasser <fnasser@redhat.com>) |
| Responses |
Re: Small fix for _equalValue()
|
| List | pgsql-patches |
Tom Lane wrote:
>
> Fernando Nasser <fnasser@redhat.com> writes:
> > *************** _equalValue(Value *a, Value *b)
> > *** 1771,1777 ****
> > case T_Float:
> > case T_String:
> > case T_BitString:
> > ! return strcmp(a->val.str, b->val.str) == 0;
> > default:
> > break;
> > }
> > --- 1771,1780 ----
> > case T_Float:
> > case T_String:
> > case T_BitString:
> > ! if ((a->val.str != NULL) && (b->val.str != NULL))
> > ! return strcmp(a->val.str, b->val.str) == 0;
> > ! else
> > ! return a->val.ival == b->val.ival; /* true if both are NULL */
> > default:
> > break;
> > }
>
> Several comments here:
>
> This is not the idiomatic way to do it; there is an equalstr() macro
> in equalfuncs.c that does this pushup for you. So "return
> equalstr(a->val.str, b->val.str)" would be the appropriate fix.
>
I see. Thanks, I will fix the patch and resubmit it (see below).
> Possibly a more interesting question, though, is *why* equalValue is
> seeing Values with null pointer parts. I cannot think of any good
> reason to consider that a legal data structure. Do you know where this
> construct is coming from? I'd be inclined to consider the source at
> fault, not equalValue.
>
Someone is using NULL strings in gram.y, like in:
VariableSetStmt: SET ColId TO var_value
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->name = $2;
n->args = makeList1(makeStringConst($4, NULL));
$$ = (Node *) n;
}
there are several instances of it, all related to variable set.
Well, NULL is a valid value for a (char *) so this seems legal
enough to me.
I still think we should handle NULL pointer values in equalValue.
(we can through an ERROR if we decide to disallow NULL pointers in
Value -- we must go after who added it to VariableSet or revert that
change though).
> On the other fixes: as a rule, a field-typing bug in copyfuncs suggests
> an equivalent bug over in equalfuncs, and vice versa; as well as
> possible errors in readfuncs/outfuncs. Did you look?
>
Yes, but I will double check all the same.
Thanks for the comments.
--
Fernando Nasser
Red Hat Canada Ltd. E-Mail: fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario M4P 2C9
pgsql-patches by date: