PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ gserialized_spgist_leaf_consistent_nd()

PGDLLEXPORT Datum gserialized_spgist_leaf_consistent_nd ( PG_FUNCTION_ARGS  )

Definition at line 528 of file gserialized_spgist_nd.c.

529 {
530  spgLeafConsistentIn *in = (spgLeafConsistentIn *)PG_GETARG_POINTER(0);
531  spgLeafConsistentOut *out = (spgLeafConsistentOut *)PG_GETARG_POINTER(1);
532  bool flag = true;
533  int i;
534  char gidxmem[GIDX_MAX_SIZE];
535  GIDX *leaf = (GIDX *)DatumGetPointer(in->leafDatum), *query_gbox_index = (GIDX *)gidxmem;
536 
537  POSTGIS_DEBUG(4, "[SPGIST] 'leaf consistent' function called");
538 
539  /* All tests are exact. */
540  out->recheck = false;
541 
542  /* leafDatum is what it is... */
543  out->leafValue = in->leafDatum;
544 
545  /* Perform the required comparison(s) */
546  for (i = 0; i < in->nkeys; i++)
547  {
548  StrategyNumber strategy = in->scankeys[i].sk_strategy;
549  Datum query = in->scankeys[i].sk_argument;
550 
551  /* Quick sanity check on query argument. */
552  if (DatumGetPointer(query) == NULL)
553  {
554  POSTGIS_DEBUG(4, "[SPGIST] null query pointer (!?!)");
555  flag = false;
556  }
557 
558  /* Null box should never make this far. */
559  if (gserialized_datum_get_gidx_p(query, query_gbox_index) == LW_FAILURE)
560  {
561  POSTGIS_DEBUG(4, "[SPGIST] null query_gbox_index!");
562  flag = false;
563  }
564 
565  switch (strategy)
566  {
568  flag = gidx_overlaps(leaf, query_gbox_index);
569  break;
570 
572  flag = gidx_contains(leaf, query_gbox_index);
573  break;
574 
576  flag = gidx_contains(query_gbox_index, leaf);
577  break;
578 
580  flag = gidx_equals(leaf, query_gbox_index);
581  break;
582 
583  default:
584  elog(ERROR, "unrecognized strategy: %d", strategy);
585  }
586 
587  /* If any check is failed, we have found our answer. */
588  if (!flag)
589  break;
590  }
591 
592  PG_RETURN_BOOL(flag);
593 }
bool gidx_contains(GIDX *a, GIDX *b)
bool gidx_equals(GIDX *a, GIDX *b)
bool gidx_overlaps(GIDX *a, GIDX *b)
#define SPGOverlapStrategyNumber
#define SPGSameStrategyNumber
#define SPGContainedByStrategyNumber
#define SPGContainsStrategyNumber
#define LW_FAILURE
Definition: liblwgeom.h:110

References gidx_contains(), gidx_equals(), gidx_overlaps(), LW_FAILURE, SPGContainedByStrategyNumber, SPGContainsStrategyNumber, SPGOverlapStrategyNumber, and SPGSameStrategyNumber.

Here is the call graph for this function: