From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-hackers(at)postgreSQL(dot)org |
Subject: | Schizophrenic coding in gin_extract_jsonb(_hash) |
Date: | 2014-05-07 03:08:12 |
Message-ID: | 11791.1399432092@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Would someone care to defend this code?
int total = 2 * JB_ROOT_COUNT(jb);
...
if (total == 0)
{
*nentries = 0;
PG_RETURN_POINTER(NULL);
}
...
while ((r = JsonbIteratorNext(&it, &v, false)) != WJB_DONE)
{
if (i >= total)
{
total *= 2;
entries = (Datum *) repalloc(entries, sizeof(Datum) * total);
}
The early-exit code path supposes that JB_ROOT_COUNT is absolutely
reliable as an indicator that there's nothing in the jsonb value.
On the other hand, the realloc logic inside the iteration loop implies
that JB_ROOT_COUNT is just an untrustworthy estimate. Which theory is
correct? And why is there not a comment to be seen anywhere? If the code
is correct then this logic is certainly worthy of a comment or three.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2014-05-07 03:22:09 | Re: need xmllint on borka |
Previous Message | Fabrízio de Royes Mello | 2014-05-07 02:55:04 | Re: New pg_lsn type doesn't have hash/btree opclasses |