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

Commit1c16053

Browse files
committed
Merge branch 'master' into vodka
2 parents3ea91d7 +4012393 commit1c16053

File tree

2 files changed

+66
-14
lines changed

2 files changed

+66
-14
lines changed

‎jsonb_gin_ops.c

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -656,13 +656,20 @@ gin_extract_jsonb_query_bloom_value(PG_FUNCTION_ARGS)
656656
caseJsQueryMatchStrategyNumber:
657657
jq=PG_GETARG_JSQUERY(0);
658658
root=extractJsQuery(jq,make_bloom_entry_handler, (Pointer)&e);
659-
660-
*nentries=e.count;
661-
entries=e.entries;
662-
*pmatch=e.partial_match;
663-
*extra_data=e.extra_data;
664-
for (i=0;i<e.count;i++)
665-
((KeyExtra*)e.extra_data[i])->root=root;
659+
if (root)
660+
{
661+
*nentries=e.count;
662+
entries=e.entries;
663+
*pmatch=e.partial_match;
664+
*extra_data=e.extra_data;
665+
for (i=0;i<e.count;i++)
666+
((KeyExtra*)e.extra_data[i])->root=root;
667+
}
668+
else
669+
{
670+
entries=NULL;
671+
*nentries=0;
672+
}
666673
break;
667674

668675
default:
@@ -1070,13 +1077,20 @@ gin_extract_jsonb_query_hash_value(PG_FUNCTION_ARGS)
10701077
caseJsQueryMatchStrategyNumber:
10711078
jq=PG_GETARG_JSQUERY(0);
10721079
root=extractJsQuery(jq,make_hash_entry_handler, (Pointer)&e);
1073-
1074-
*nentries=e.count;
1075-
entries=e.entries;
1076-
*pmatch=e.partial_match;
1077-
*extra_data=e.extra_data;
1078-
for (i=0;i<e.count;i++)
1079-
((KeyExtra*)e.extra_data[i])->root=root;
1080+
if (root)
1081+
{
1082+
*nentries=e.count;
1083+
entries=e.entries;
1084+
*pmatch=e.partial_match;
1085+
*extra_data=e.extra_data;
1086+
for (i=0;i<e.count;i++)
1087+
((KeyExtra*)e.extra_data[i])->root=root;
1088+
}
1089+
else
1090+
{
1091+
entries=NULL;
1092+
*nentries=0;
1093+
}
10801094
break;
10811095

10821096
default:

‎jsquery_extract.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,42 @@ makeEntries(ExtractedNode *node, MakeEntryHandler handler, Pointer extra)
568568
}
569569
}
570570

571+
staticbool
572+
queryHasPositive(ExtractedNode*node)
573+
{
574+
inti;
575+
boolresult;
576+
switch(node->type)
577+
{
578+
caseeAnd:
579+
result= false;
580+
for (i=0;i<node->args.count;i++)
581+
{
582+
if (queryHasPositive(node->args.items[i]))
583+
{
584+
result= true;
585+
break;
586+
}
587+
}
588+
returnresult;
589+
caseeOr:
590+
result= true;
591+
for (i=0;i<node->args.count;i++)
592+
{
593+
if (!queryHasPositive(node->args.items[i]))
594+
{
595+
result= false;
596+
break;
597+
}
598+
}
599+
returnresult;
600+
caseeNot:
601+
return !queryHasPositive(node->args.items[0]);
602+
caseeScalar:
603+
return true;
604+
}
605+
}
606+
571607
ExtractedNode*
572608
extractJsQuery(JsQuery*jq,MakeEntryHandlerhandler,Pointerextra)
573609
{
@@ -580,6 +616,8 @@ extractJsQuery(JsQuery *jq, MakeEntryHandler handler, Pointer extra)
580616
simplifyRecursive(root);
581617
root=makeEntries(root,handler,extra);
582618
}
619+
if (root&& !queryHasPositive(root))
620+
root=NULL;
583621
returnroot;
584622
}
585623

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp