@@ -162,13 +162,22 @@ spgLeafTest(SpGistScanOpaque so, Datum leafDatum,
162162oldCtx = MemoryContextSwitchTo (so -> tempCxt );
163163for (i = 0 ;i < so -> numberOfKeys ;i ++ )
164164{
165- in .strategy = so -> keyData [i ].sk_strategy ;
166- in .query = so -> keyData [i ].sk_argument ;
165+ ScanKey skey = & so -> keyData [i ];
166+
167+ /* Assume SPGiST-indexable operators are strict */
168+ if (skey -> sk_flags & SK_ISNULL )
169+ {
170+ result = false;
171+ break ;
172+ }
173+
174+ in .strategy = skey -> sk_strategy ;
175+ in .query = skey -> sk_argument ;
167176
168177out .recheck = false;
169178
170179result = DatumGetBool (FunctionCall2Coll (& so -> state .leafConsistentFn ,
171- so -> keyData [ i ]. sk_collation ,
180+ skey -> sk_collation ,
172181PointerGetDatum (& in ),
173182PointerGetDatum (& out )));
174183* recheck |=out .recheck ;
@@ -398,13 +407,22 @@ spgWalk(Relation index, SpGistScanOpaque so, bool scanWholeIndex,
398407
399408for (j = 0 ;j < so -> numberOfKeys ;j ++ )
400409{
401- in .strategy = so -> keyData [j ].sk_strategy ;
402- in .query = so -> keyData [j ].sk_argument ;
410+ ScanKey skey = & so -> keyData [j ];
411+
412+ /* Assume SPGiST-indexable operators are strict */
413+ if (skey -> sk_flags & SK_ISNULL )
414+ {
415+ nMatches = 0 ;
416+ break ;
417+ }
418+
419+ in .strategy = skey -> sk_strategy ;
420+ in .query = skey -> sk_argument ;
403421
404422memset (& out ,0 ,sizeof (out ));
405423
406424FunctionCall2Coll (& so -> state .innerConsistentFn ,
407- so -> keyData [ j ]. sk_collation ,
425+ skey -> sk_collation ,
408426PointerGetDatum (& in ),
409427PointerGetDatum (& out ));
410428