PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ gserialized_spgist_leaf_consistent_3d()

PGDLLEXPORT Datum gserialized_spgist_leaf_consistent_3d ( PG_FUNCTION_ARGS  )

Definition at line 671 of file gserialized_spgist_3d.c.

672 {
673  spgLeafConsistentIn *in = (spgLeafConsistentIn *)PG_GETARG_POINTER(0);
674  spgLeafConsistentOut *out = (spgLeafConsistentOut *)PG_GETARG_POINTER(1);
675  BOX3D *leaf = DatumGetBox3DP(in->leafDatum);
676  bool flag = true;
677  int i;
678 
679  /* All tests are exact. */
680  out->recheck = false;
681 
682  /* leafDatum is what it is... */
683  out->leafValue = in->leafDatum;
684 
685  /* Perform the required comparison(s) */
686  for (i = 0; i < in->nkeys; i++)
687  {
688  StrategyNumber strategy = in->scankeys[i].sk_strategy;
689  Datum query = in->scankeys[i].sk_argument;
690  BOX3D *box = DatumGetBox3DP(DirectFunctionCall1(LWGEOM_to_BOX3D, query));
691 
692  switch (strategy)
693  {
695  flag = BOX3D_overlaps_internal(leaf, box);
696  break;
697 
699  flag = BOX3D_contains_internal(leaf, box);
700  break;
701 
703  flag = BOX3D_contained_internal(leaf, box);
704  break;
705 
707  flag = BOX3D_same_internal(leaf, box);
708  break;
709 
711  flag = BOX3D_left_internal(leaf, box);
712  break;
713 
715  flag = BOX3D_overleft_internal(leaf, box);
716  break;
717 
719  flag = BOX3D_right_internal(leaf, box);
720  break;
721 
723  flag = BOX3D_overright_internal(leaf, box);
724  break;
725 
727  flag = BOX3D_above_internal(leaf, box);
728  break;
729 
731  flag = BOX3D_overabove_internal(leaf, box);
732  break;
733 
735  flag = BOX3D_below_internal(leaf, box);
736  break;
737 
739  flag = BOX3D_overbelow_internal(leaf, box);
740  break;
741 
743  flag = BOX3D_back_internal(leaf, box);
744  break;
745 
747  flag = BOX3D_overback_internal(leaf, box);
748  break;
749 
751  flag = BOX3D_front_internal(leaf, box);
752  break;
753 
755  flag = BOX3D_overfront_internal(leaf, box);
756  break;
757 
758  default:
759  elog(ERROR, "unrecognized strategy: %d", strategy);
760  }
761 
762  /* If any check is failed, we have found our answer. */
763  if (!flag)
764  break;
765  }
766 
767  PG_RETURN_BOOL(flag);
768 }
#define SPGOverlapStrategyNumber
#define SPGOverLeftStrategyNumber
#define SPGLeftStrategyNumber
#define SPGAboveStrategyNumber
#define SPGSameStrategyNumber
#define SPGOverBackStrategyNumber
#define SPGContainedByStrategyNumber
#define SPGOverRightStrategyNumber
#define SPGFrontStrategyNumber
#define SPGBelowStrategyNumber
#define SPGRightStrategyNumber
#define SPGOverFrontStrategyNumber
#define SPGContainsStrategyNumber
#define SPGOverBelowStrategyNumber
#define SPGBackStrategyNumber
#define SPGOverAboveStrategyNumber
bool BOX3D_above_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:782
bool BOX3D_back_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:850
bool BOX3D_overlaps_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:642
bool BOX3D_contains_internal(BOX3D *box1, BOX3D *box2)
needed for sp-gist support PostgreSQL 11+
Definition: lwgeom_box3d.c:606
bool BOX3D_overabove_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:799
bool BOX3D_right_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:714
bool BOX3D_overback_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:867
bool BOX3D_overleft_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:697
bool BOX3D_below_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:748
bool BOX3D_left_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:680
bool BOX3D_overright_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:731
bool BOX3D_same_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:661
bool BOX3D_contained_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:625
Datum LWGEOM_to_BOX3D(PG_FUNCTION_ARGS)
Definition: lwgeom_box3d.c:398
bool BOX3D_front_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:816
bool BOX3D_overfront_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:833
bool BOX3D_overbelow_internal(BOX3D *box1, BOX3D *box2)
Definition: lwgeom_box3d.c:765

References BOX3D_above_internal(), BOX3D_back_internal(), BOX3D_below_internal(), BOX3D_contained_internal(), BOX3D_contains_internal(), BOX3D_front_internal(), BOX3D_left_internal(), BOX3D_overabove_internal(), BOX3D_overback_internal(), BOX3D_overbelow_internal(), BOX3D_overfront_internal(), BOX3D_overlaps_internal(), BOX3D_overleft_internal(), BOX3D_overright_internal(), BOX3D_right_internal(), BOX3D_same_internal(), LWGEOM_to_BOX3D(), SPGAboveStrategyNumber, SPGBackStrategyNumber, SPGBelowStrategyNumber, SPGContainedByStrategyNumber, SPGContainsStrategyNumber, SPGFrontStrategyNumber, SPGLeftStrategyNumber, SPGOverAboveStrategyNumber, SPGOverBackStrategyNumber, SPGOverBelowStrategyNumber, SPGOverFrontStrategyNumber, SPGOverlapStrategyNumber, SPGOverLeftStrategyNumber, SPGOverRightStrategyNumber, SPGRightStrategyNumber, and SPGSameStrategyNumber.

Here is the call graph for this function: