PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ 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:96

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

Here is the call graph for this function: