On Sun, Jan 20, 2019 at 2:45 AM Alexander Korotkov
<a.korotkov@postgrespro.ru> wrote:
> 3) How do we calculate the "id" property returned by keyvalue()
> function? It's not documented. Even presence of "id" columns isn't
> documented. Standard stands that it's implementation-depended
> indetifier of object holding key-value pair. The way of its
> calculation is also not clear from the code. Why do we need constant
> of 10000000000?
>
> id = jb->type != jbvBinary ? 0 :
> (int64)((char *) jb->val.binary.data -
> (char *) cxt->baseObject.jbc);
> id += (int64) cxt->baseObject.id * INT64CONST(10000000000);
I've revising patchset bringing it to commitable shape. The
intermediate result is attached.
0001-Preliminary-datetime-infrastructure-v24.patch
* Commit message & minor cleanup
0002-Jsonpath-engine-and-docs-v24.patch
* Support of json is removed. Current implementation is tricky and
cumbersome. We need to design a suitable abstraction layer for that.
It should be done by separate patch applying not only to jsonpath, but
also to other jsonb functions lacking of json analogues.
* jsonpath_exists(jsonb, jsonpath[, jsonb]), jsonpath_predicate(jsonb,
jsonpath[, jsonb]), jsonpath_query(jsonb, jsonpath[, jsonb]),
jsonpath_wrapped(jsonb, jsonpath[, jsonb]) are documented.
* @* and @# operators are removed, @~ operator is renamed to @@.
* Commit message & minor cleanup.
I'll continue revising this patchset. Nikita, could you please write
tests for 3-argument versions of functions? Also, please answer the
question regarding "id" property.
------
Alexander Korotkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company