Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit04a08d5

Browse files
committed
ANY KEY now returns text instead of jsonb
1 parent89441c9 commit04a08d5

File tree

5 files changed

+38
-15
lines changed

5 files changed

+38
-15
lines changed

‎src/backend/utils/adt/jsonfuncs.c

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3907,6 +3907,29 @@ nextUnnest(UnnestState *state)
39073907
return (r==state->type) ?JsonbValueToJsonb(&v) :NULL;
39083908
}
39093909

3910+
statictext*
3911+
nextUnnestKey(UnnestState*state)
3912+
{
3913+
MemoryContextoldcontext;
3914+
JsonbValuev;
3915+
intr;
3916+
3917+
/*
3918+
* Iterator should work in long-lived memory context
3919+
*/
3920+
oldcontext=MemoryContextSwitchTo(state->ctx);
3921+
3922+
while((r=JsonbIteratorNext(&state->it,&v,state->skipNested))!=WJB_DONE)
3923+
{
3924+
if (r==state->type)
3925+
break;
3926+
}
3927+
3928+
MemoryContextSwitchTo(oldcontext);
3929+
3930+
return (r==state->type) ?cstring_to_text_with_len(v.val.string.val,v.val.string.len) :NULL;
3931+
}
3932+
39103933
staticvoid
39113934
finiUnnest(UnnestState*state)
39123935
{
@@ -3977,12 +4000,12 @@ jsonb_unnest_key(PG_FUNCTION_ARGS)
39774000
funcctx=SRF_PERCALL_SETUP();
39784001
state=funcctx->user_fctx;
39794002

3980-
if (state==NULL|| (r=nextUnnest(state))==NULL)
4003+
if (state==NULL|| (r=nextUnnestKey(state))==NULL)
39814004
{
39824005
finiUnnest(state);
39834006
SRF_RETURN_DONE(funcctx);
39844007
}
39854008

3986-
SRF_RETURN_NEXT(funcctx,JsonbGetDatum(r));
4009+
SRF_RETURN_NEXT(funcctx,PointerGetDatum(r));
39874010
}
39884011

‎src/include/catalog/pg_proc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4878,7 +4878,7 @@ DATA(insert OID = 7645 ( unnest_element PGNSP PGUID 12 1 100 0 0 f f f f t
48784878
DESCR("expand elements from jsonb");
48794879
DATA(insert OID = 7646 ( unnest_value PGNSP PGUID 12 1 100 0 0 f f f f t t i 2 0 3802 "3802 16" _null_ _null_ _null_ _null_ _null_ jsonb_unnest_value _null_ _null_ _null_ ));
48804880
DESCR("expand values from jsonb");
4881-
DATA(insert OID = 7647 ( unnest_key PGNSP PGUID 12 1 100 0 0 f f f f t t i 2 03802 "3802 16" _null_ _null_ _null_ _null_ _null_ jsonb_unnest_key _null_ _null_ _null_ ));
4881+
DATA(insert OID = 7647 ( unnest_key PGNSP PGUID 12 1 100 0 0 f f f f t t i 2 025 "3802 16" _null_ _null_ _null_ _null_ _null_ jsonb_unnest_key _null_ _null_ _null_ ));
48824882
DESCR("expand keys from jsonb");
48834883
/* txid */
48844884
DATA(insert OID = 2939 ( txid_snapshot_inPGNSP PGUID 12 1 0 0 0 f f f f t f i 1 0 2970 "2275" _null_ _null_ _null_ _null_ _null_ txid_snapshot_in _null_ _null_ _null_ ));

‎src/test/regress/expected/jsonb.out

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2118,19 +2118,19 @@ SELECT count(*) FROM testjsonb WHERE j ?& ARRAY['public','disabled'];
21182118
42
21192119
(1 row)
21202120

2121-
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES ( k = '"pos"'::jsonb );
2121+
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES ( k = 'pos' );
21222122
count
21232123
-------
21242124
203
21252125
(1 row)
21262126

2127-
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES ( k = '"age"'::jsonb );
2127+
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES ( k = 'age' );
21282128
count
21292129
-------
21302130
2
21312131
(1 row)
21322132

2133-
SELECT count(*) FROM testjsonb WHERE EACH KEY OF j AS k SATISFIES ( k = '"age"'::jsonb );
2133+
SELECT count(*) FROM testjsonb WHERE EACH KEY OF j AS k SATISFIES ( k = 'age' );
21342134
count
21352135
-------
21362136
120
@@ -2167,7 +2167,7 @@ SELECT count(*) FROM testjsonb WHERE ANY ELEMENT OF j->'array' AS e SATISFIES (
21672167
(1 row)
21682168

21692169
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES (
2170-
k->>0 = 'array' AND ANY ELEMENT OF j->(k->>0) AS e SATISFIES ( e = '"baz"'::jsonb )
2170+
k = 'array' AND ANY ELEMENT OF j->k AS e SATISFIES ( e = '"baz"'::jsonb )
21712171
);
21722172
count
21732173
-------

‎src/test/regress/expected/jsonb_1.out

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2118,19 +2118,19 @@ SELECT count(*) FROM testjsonb WHERE j ?& ARRAY['public','disabled'];
21182118
42
21192119
(1 row)
21202120

2121-
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES ( k = '"pos"'::jsonb );
2121+
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES ( k = 'pos' );
21222122
count
21232123
-------
21242124
203
21252125
(1 row)
21262126

2127-
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES ( k = '"age"'::jsonb );
2127+
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES ( k = 'age' );
21282128
count
21292129
-------
21302130
2
21312131
(1 row)
21322132

2133-
SELECT count(*) FROM testjsonb WHERE EACH KEY OF j AS k SATISFIES ( k = '"age"'::jsonb );
2133+
SELECT count(*) FROM testjsonb WHERE EACH KEY OF j AS k SATISFIES ( k = 'age' );
21342134
count
21352135
-------
21362136
120
@@ -2167,7 +2167,7 @@ SELECT count(*) FROM testjsonb WHERE ANY ELEMENT OF j->'array' AS e SATISFIES (
21672167
(1 row)
21682168

21692169
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES (
2170-
k->>0 = 'array' AND ANY ELEMENT OF j->(k->>0) AS e SATISFIES ( e = '"baz"'::jsonb )
2170+
k = 'array' AND ANY ELEMENT OF j->k AS e SATISFIES ( e = '"baz"'::jsonb )
21712171
);
21722172
count
21732173
-------

‎src/test/regress/sql/jsonb.sql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -519,16 +519,16 @@ SELECT count(*) FROM testjsonb WHERE j ? 'bar';
519519
SELECTcount(*)FROM testjsonbWHERE j ?| ARRAY['public','disabled'];
520520
SELECTcount(*)FROM testjsonbWHERE j ?& ARRAY['public','disabled'];
521521

522-
SELECTcount(*)FROM testjsonbWHERE ANY KEY OF jAS k SATISFIES ( k='"pos"'::jsonb );
523-
SELECTcount(*)FROM testjsonbWHERE ANY KEY OF jAS k SATISFIES ( k='"age"'::jsonb );
524-
SELECTcount(*)FROM testjsonbWHERE EACH KEY OF jAS k SATISFIES ( k='"age"'::jsonb );
522+
SELECTcount(*)FROM testjsonbWHERE ANY KEY OF jAS k SATISFIES ( k='pos' );
523+
SELECTcount(*)FROM testjsonbWHERE ANY KEY OF jAS k SATISFIES ( k='age' );
524+
SELECTcount(*)FROM testjsonbWHERE EACH KEY OF jAS k SATISFIES ( k='age' );
525525
SELECTcount(*)FROM testjsonbWHERE ANY VALUE OF jAS v SATISFIES ( v='"CAB"'::jsonb );
526526
SELECTcount(*)FROM testjsonbWHERE ANY VALUE OF jAS v SATISFIES ( v='"baz"'::jsonb );
527527
SELECTcount(*)FROM testjsonbWHERE ANY VALUE ANYWHERE OF jAS v SATISFIES ( v='"baz"'::jsonb );
528528
SELECTcount(*)FROM testjsonbWHERE ANY ELEMENT ANYWHERE OF jAS v SATISFIES ( v='"baz"'::jsonb );
529529
SELECTcount(*)FROM testjsonbWHERE ANY ELEMENT OF j->'array'AS e SATISFIES ( e='"baz"'::jsonb );
530530
SELECTcount(*)FROM testjsonbWHERE ANY KEY OF jAS k SATISFIES (
531-
k->>0='array'AND ANY ELEMENT OF j->(k->>0)AS e SATISFIES ( e='"baz"'::jsonb )
531+
k='array'AND ANY ELEMENT OF j->kAS e SATISFIES ( e='"baz"'::jsonb )
532532
);
533533

534534
CREATEINDEXjidxON testjsonb USING gin (j);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp