On Mon, Jan 22, 2024 at 11:46 PM jian he <jian.universal...@gmail.com> wrote: > > On Mon, Jan 22, 2024 at 10:28 PM Amit Langote <amitlangot...@gmail.com> wrote: > > > > > based on v35. > > > Now I only applied from 0001 to 0007. > > > For {DEFAULT expression ON EMPTY} | {DEFAULT expression ON ERROR} > > > restrict DEFAULT expression be either Const node or FuncExpr node. > > > so these 3 SQL/JSON functions can be used in the btree expression index. > > > > I'm not really excited about adding these restrictions into the > > transformJsonFuncExpr() path. Index or any other code that wants to > > put restrictions already have those in place, no need to add them > > here. Moreover, by adding these restrictions, we might end up > > preventing users from doing useful things with this like specify > > column references. If there are semantic issues with allowing that, > > we should discuss them. > > > > after applying v36. > The following index creation and query operation works. I am not 100% > sure about these cases. > just want confirmation, sorry for bothering you.... > > drop table t; > create table t(a jsonb, b int); > insert into t select '{"hello":11}',1; > insert into t select '{"hello":12}',2; > CREATE INDEX t_idx2 ON t (JSON_query(a, '$.hello1' RETURNING int > default b + random() on error)); > CREATE INDEX t_idx3 ON t (JSON_query(a, '$.hello1' RETURNING int > default random()::int on error)); > SELECT JSON_query(a, '$.hello1' RETURNING int default ret_setint() on > error) from t;
I forgot to attach ret_setint defition. create or replace function ret_setint() returns setof integer as $$ begin -- perform pg_sleep(0.1); return query execute 'select 1 union all select 1'; end; $$ language plpgsql IMMUTABLE; ----------------------------------------- In the function transformJsonExprCommon, we have `JsonExpr *jsexpr = makeNode(JsonExpr);` then the following 2 assignments are not necessary. /* Both set in the caller. */ jsexpr->result_coercion = NULL; jsexpr->omit_quotes = false; So I removed it. JSON_VALUE OMIT QUOTES by default, so I set it accordingly. I also changed coerceJsonFuncExprOutput accordingly
v1-0001-minor-refactor-transformJsonFuncExpr.based_on_v36
Description: Binary data