From: | Rémi Aubel <remi(dot)aubel(at)gmail(dot)com> |
---|---|
To: | Dave Cramer <davecramer(at)gmail(dot)com> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Postgres Bug <pgsql-bugs(at)postgresql(dot)org> |
Subject: | Re: BUG: Unable to bind a null value typed as a UUID in a PreparedStatement |
Date: | 2018-03-28 15:08:16 |
Message-ID: | CAG2M1ffsCfk3osHirUqozOMWVqiiiW5LWr_4FS3sc5R6wNthfA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
@Dave,
I have just tested it. It works fine with setNull(_, 1111, "uuid").
Thanks again :-)
Rémi
Le mer. 28 mars 2018 à 16:38, Dave Cramer <davecramer(at)gmail(dot)com> a écrit :
> On 28 March 2018 at 10:30, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>
>> =?utf-8?Q?R=C3=A9mi_Aubel?= <remi(dot)aubel(at)gmail(dot)com> writes:
>> > I need to bind a UUID parameter which may be null in a statement like
>> > "select * from test table where ? is null or ? = c_uuid".
>> > Whatever approach I use, the driver rejects my request with "ERROR:
>> could
>> > not determine data type of parameter $1".
>>
>> Some experimentation suggests that it'd probably work if you wrote the
>> clauses in the other order:
>>
>> regression=# create table test_table (c_uuid uuid);
>> CREATE TABLE
>> regression=# prepare foo as select * from test_table where $1 is null or
>> $1 = c_uuid;
>> ERROR: could not determine data type of parameter $1
>> LINE 1: prepare foo as select * from test_table where $1 is null or ...
>> ^
>> regression=# prepare foo as select * from test_table where $1 = c_uuid or
>> $1 is null;
>> PREPARE
>>
>> In an ideal world, perhaps the order of the parameter references would not
>> matter, but AFAICS making that work would be mighty hard. For now, PG's
>> parser wants to resolve the type of an otherwise-unlabeled parameter
>> symbol the first time it sees it --- and the context "IS NULL" offers
>> no clue what type it should be.
>>
>> Alternatively, you could force the issue with an explicit cast in the
>> text of the query:
>>
>> regression=# prepare foo2 as select * from test_table where $1::uuid is
>> null or $1 = c_uuid;
>> PREPARE
>>
>
> Tom,
>
> This is just a simple example of a bigger problem. One for which there is
> a solution in the driver which was not implemented.
>
> I have implemented it now.
>
> Thanks,
>
> Dave
>
--
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2018-03-28 15:12:30 | Re: BUG #15133: make check fails |
Previous Message | Dave Cramer | 2018-03-28 14:38:30 | Re: BUG: Unable to bind a null value typed as a UUID in a PreparedStatement |