From: | Dmitry Dolgov <9erthalion6(at)gmail(dot)com> |
---|---|
To: | Andres Freund <andres(at)anarazel(dot)de> |
Cc: | Andrew Gierth <andrew(at)tao11(dot)riddles(dot)org(dot)uk>, Rushabh Lathia <rushabh(dot)lathia(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: wrong query result with jit_above_cost= 0 |
Date: | 2018-06-27 15:49:39 |
Message-ID: | CA+q6zcWecMUTa5oTNR0RDtQeVpu_oiebFCZh2jd-aDu=NziPJQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
> On 26 June 2018 at 22:56, Andres Freund <andres(at)anarazel(dot)de> wrote:
> On 2018-06-26 21:55:07 +0100, Andrew Gierth wrote:
>> >>>>> "Dmitry" == Dmitry Dolgov <9erthalion6(at)gmail(dot)com> writes:
>>
>> Dmitry> Yep, my bad, forgot to turn it on. Now I see what's the
>> Dmitry> problem, one of the null fields is screwed up, will try to
>> Dmitry> figure out why is that.
>>
>> The handling of nulls in grouping set results is a bit icky, see
>> prepare_projection_slot in nodeAgg.c. The comment there lists a number
>> of assumptions which may or may not hold true under JIT which might give
>> a starting point to look for problems. (Unfortunately I'm not currently
>> in a position to test on a JIT build)
>
> I probably just screwed up a bit of code generation. I can't see any of
> the more fundamental assumptions being changed by the way JITing is
> done.
So far I found out that in agg_retrieve_hash_table, when there is a scan for
TupleHashEntryData, that contains AggStatePerGroup structure in the field
"additional", it's possible to get some garbage data (or at least transValue is
lost). It happens when we do:
ReScanExprContext(aggstate->aggcontexts[i]);
in agg_retrieve_direct before that. Apparently, the reason is that in the jit
code there is a store operation for curaggcontext into aggcontext:
v_aggcontext = l_ptr_const(op->d.agg_trans.aggcontext,
l_ptr(StructExprContext));
/* set aggstate globals */
LLVMBuildStore(b, v_aggcontext, v_curaggcontext);
I haven't found anything similar in the original code or in the other branches
for aggregation logic. I can't say that I fully understand the idea behind it,
but at least it was suspicious for me. When I removed this operation, the
problem has disappeared.
From | Date | Subject | |
---|---|---|---|
Next Message | Yugo Nagata | 2018-06-27 16:02:26 | CREATE TABLE .. LIKE .. EXCLUDING documentation |
Previous Message | Andres Freund | 2018-06-27 15:44:18 | Re: assert in nested SQL procedure call in current HEAD |