From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | exclusion(at)gmail(dot)com |
Cc: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
Subject: | Re: BUG #18722: Processing arrays with plpgsql raises errors |
Date: | 2024-11-24 22:49:12 |
Message-ID: | 1211277.1732488552@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
I wrote:
> What EEOP_NULLIF needs to do is pass a read-only pointer to the
> equality function, so that the object is not modified and remains
> available to return if we want to do so.
> Attached is a quick WIP patch to handle that. It is missing a test
> case, but the real omission is that llvm_compile_expr()'s EEOP_NULLIF
> handling also needs to be fixed, and I'm pretty unsure how to do that.
Here's a fleshed-out patch with a test case and JIT support. This
is about the first time I've messed with LLVM, so I wouldn't mind
some review of what I did in llvmjit_expr.c. In particular, do I
correctly understand that "l_funcvalue(b, v_fcinfo, 0)" produces
a reference to a copy of the initial value of args[0].value?
It seems to work in testing --- the original R/W pointer is returned
out of the expression --- but if we returned the R/O pointer instead
it'd be mighty difficult to detect the resulting inefficiency.
> I'm wondering now if any of our other conditional expressions have
> similar bugs ...
I was amused to discover that case.sql already had infrastructure
suitable for testing this, thanks to bug #14472.
regards, tom lane
Attachment | Content-Type | Size |
---|---|---|
bug-18722-fix-v1.patch | text/x-diff | 5.9 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Munro | 2024-11-24 22:50:53 | Re: Detection of hadware feature => please do not use signal |
Previous Message | Tom Lane | 2024-11-24 20:16:46 | Re: Detection of hadware feature => please do not use signal |