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
540 out->recheck = false;
541
542
543 out->leafValue = in->leafDatum;
544
545
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
552 if (DatumGetPointer(query) == NULL)
553 {
554 POSTGIS_DEBUG(4, "[SPGIST] null query pointer (!?!)");
555 flag = false;
556 }
557
558
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 {
569 break;
570
573 break;
574
577 break;
578
581 break;
582
583 default:
584 elog(ERROR, "unrecognized strategy: %d", strategy);
585 }
586
587
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