Changeset: 41d88b0f5552 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=41d88b0f5552
Modified Files:
        geom/monetdb5/geom.c
        geom/monetdb5/geom.mal
        monetdb5/optimizer/opt_geospatial.c
Branch: geo
Log Message:

contains + filter receive only one BAT


diffs (truncated from 425 to 300 lines):

diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -156,15 +156,17 @@ geom_export str wkbTouches(bit*, wkb**, 
 geom_export str wkbCrosses(bit*, wkb**, wkb**);
 geom_export str wkbWithin(bit*, wkb**, wkb**);
 geom_export str wkbContains(bit*, wkb**, wkb**);
-geom_export str wkbContains_bat(int* outBAT_id, int* aBAT_id, int* bBAT_id);
+//geom_export str wkbContains_bat(int* outBAT_id, int* aBAT_id, int* bBAT_id);
 geom_export str wkbContains_geom_bat(int* outBAT_id, wkb** geomWKB, int* 
inBAT_id);
+geom_export str wkbContains_bat_geom(int* outBAT_id, int* inBAT_id, wkb** 
geomWKB);
 geom_export str wkbOverlaps(bit*, wkb**, wkb**);
 geom_export str wkbRelate(bit*, wkb**, wkb**, str*);
 geom_export str wkbCovers(bit *out, wkb **geomWKB_a, wkb **geomWKB_b);
 geom_export str wkbCoveredBy(bit *out, wkb **geomWKB_a, wkb **geomWKB_b);
 
-geom_export str wkbContainsFilter_bat(int* aBATfiltered_id, int* 
bBATfiltered_id, int* aBAT_id, int* bBAT_id);
-geom_export str wkbContainsFilter_geom_bat(wkb** outWKB, int* bBATfiltered_id, 
wkb** geomWKB, int* BAToriginal_id);
+//geom_export str wkbContainsFilter_bat(int* aBATfiltered_id, int* 
bBATfiltered_id, int* aBAT_id, int* bBAT_id);
+geom_export str wkbContainsFilter_geom_bat(int* BATfiltered_id, wkb** geomWKB, 
int* BAToriginal_id);
+geom_export str wkbContainsFilter_bat_geom(int* BATfiltered_id, int* 
BAToriginal_id, wkb** geomWKB);
 //LocateAlong
 //LocateBetween
 
@@ -2766,148 +2768,8 @@ str wkbContains(bit *out, wkb **geomWKB_
 
        return MAL_SUCCEED;
 }
+
 /*
-geom_export str wkbContains_bat(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
-
-str wkbContains_bat(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) {
-       int aType, bType;
-       
-       (void) cntxt;
-       (void) mb;
-       
-fprintf(stderr, "In wkbContains_bat\n");
-
-       //check the types of the two arguments
-       aType = stk->stk[getArg(pci, 1)].vtype;
-       bType = stk->stk[getArg(pci, 2)].vtype;
-
-       if ((aType == TYPE_bat || isaBatType(aType)) && (bType == TYPE_bat || 
isaBatType(bType))) {
-               bat *aBAT_id = NULL, *bBAT_id=NULL;
-               BAT *aBAT = NULL, *bBAT = NULL;
-               fprintf(stderr, "BAT - BAT\n");
-
-               //get the indices of the BATs in the BBP
-               aBAT_id = (bat*) getArgReference(stk, pci, 1);
-               bBAT_id = (bat*) getArgReference(stk, pci, 2);
-
-               //get the descriptors of the BATS       
-               if((aBAT = BATdescriptor(*aBAT_id)) == NULL) {
-                       throw(MAL, "batgeom.Contains", RUNTIME_OBJECT_MISSING);
-               }
-               if((bBAT = BATdescriptor(*bBAT_id)) == NULL) {
-                       BBPreleaseref(bBAT->batCacheid);
-                       throw(MAL, "batgeom.Contains", RUNTIME_OBJECT_MISSING);
-               }
-
-               fprintf(stderr, "aBAT size = %d - bBAT size = %d\n", (unsigned 
int)BATcount(aBAT), (unsigned int)BATcount(bBAT));
-
-               return wkbContains_bat_bat()
-       } else if(aType == TYPE_bat || isaBatType(aType)) {
-               fprintf(stderr, "BAT - scalar\n");
-       }
-       else if(bType == TYPE_bat || isaBatType(bType)) {
-               fprintf(stderr, "scalar - BAT\n");
-       } else {
-               fprintf(stderr, "unknown\n");
-       }
-
-       return MAL_SUCCEED;
-}*/
-
-/* geometry A is scalar, geometry B is BAT */
-/*str wkbContains_firstScalar_bat(int* outBAT_id, wkb** aWKB, int* bBAT_id) {
-       BAT *outBAT = NULL, *bBAT = NULL;
-       wkb *bWKB = NULL;
-       bit outBIT;
-       BATiter bBAT_iter;
-       BUN p=0, q=0;
-       str err = NULL;
-       mbr *aMBR = NULL;
-fprintf(stderr, "In wkbContains_firstScalar_bat\n");
-       //get the descriptor of the BAT
-       if ((bBAT = BATdescriptor(*bBAT_id)) == NULL) {
-               throw(MAL, "batgeom.Contains", RUNTIME_OBJECT_MISSING);
-       }
-       
-       if (bBAT->htype != TYPE_void) { //header type of bBAT not void
-               BBPreleaseref(bBAT->batCacheid);
-               throw(MAL, "batgeom.Contains", "the arguments must have dense 
and aligned heads");
-       }
-
-       //create a new BAT for the output
-       if ((outBAT = BATnew(TYPE_void, ATOMindex("bit"), BATcount(bBAT), 
TRANSIENT)) == NULL) {
-               BBPreleaseref(bBAT->batCacheid);
-               throw(MAL, "batgeom.Contains", MAL_MALLOC_FAIL);
-       }
-       //set the first idx of the output BAT equal to that of the aBAT
-       BATseqbase(outBAT, bBAT->hseqbase);
-
-       //get the bounding box of geometry A
-       if((err = wkbMBR(&aMBR, aWKB)) != MAL_SUCCEED) {
-               str msg;
-               BBPreleaseref(bBAT->batCacheid);
-               BBPreleaseref(outBAT->batCacheid);
-               msg = createException(MAL, "batgeom.Contains", "%s", err);
-               GDKfree(err);
-               return msg;
-       }
-
-       //iterator over the BAT of geometry B   
-       bBAT_iter = bat_iterator(bBAT);
-       BATloop(bBAT, p, q) { //iterate over all valid elements of geometry B
-               mbr *bMBR = NULL;
-               bWKB = (wkb*) BUNtail(bBAT_iter, p);
-
-               //get the bounding box of geometry B
-               if((err = wkbMBR(&bMBR, &bWKB)) != MAL_SUCCEED) {
-                       str msg;
-                       BBPreleaseref(bBAT->batCacheid);
-                       BBPreleaseref(outBAT->batCacheid);
-                       msg = createException(MAL, "batgeom.Contains", "%s", 
err);
-                       GDKfree(err);
-                       GDKfree(aMBR);
-                       return msg;
-               }
-
-               //check first if the bounding box of geometry a contains the 
bounding box of geometry b
-               if((err = mbrContains(&outBIT, &aMBR, &bMBR)) != MAL_SUCCEED) {
-                       str msg;
-                       BBPreleaseref(bBAT->batCacheid);
-                       BBPreleaseref(outBAT->batCacheid);
-                       msg = createException(MAL, "batgeom.Contains", "%s", 
err);
-                       GDKfree(err);
-                       GDKfree(aMBR);
-                       GDKfree(bMBR);
-                       return msg;
-               }
-
-               if(outBIT) {
-                       if ((err = wkbContains(&outBIT, aWKB, &bWKB)) != 
MAL_SUCCEED) { //check
-                               str msg;
-                               BBPreleaseref(bBAT->batCacheid);
-                               BBPreleaseref(outBAT->batCacheid);
-                               msg = createException(MAL, "batgeom.Contains", 
"%s", err);
-                               GDKfree(err);
-                               GDKfree(aMBR);
-                               GDKfree(bMBR);
-                               return msg;
-                       }
-               }
-               BUNappend(outBAT,&outBIT,TRUE); //add the result to the outBAT
-               GDKfree(bMBR);
-       }
-       GDKfree(aMBR);
-
-       //set some properties of the new BAT
-       BATsetcount(outBAT, BATcount(bBAT));
-       BATsettrivprop(outBAT);
-       BATderiveProps(outBAT,FALSE);
-       BBPreleaseref(bBAT->batCacheid);
-       BBPkeepref(*outBAT_id = outBAT->batCacheid);
-       return MAL_SUCCEED;
-
-}*/
-
 str wkbContains_bat(int* outBAT_id, int* aBAT_id, int* bBAT_id) {
        BAT *outBAT = NULL, *aBAT = NULL, *bBAT = NULL;
        wkb *aWKB = NULL, *bWKB = NULL; //, *aWKB_previous = NULL, 
*bWKB_previous = NULL;
@@ -2973,7 +2835,7 @@ str wkbContains_bat(int* outBAT_id, int*
        
        return MAL_SUCCEED;
 
-}
+}*/
 
 
 str wkbContains_geom_bat(int* outBAT_id, wkb** geomWKB, int* inBAT_id) {
@@ -2982,7 +2844,7 @@ str wkbContains_geom_bat(int* outBAT_id,
        bit outBIT;
        BATiter inBAT_iter;
        BUN i=0;
-fprintf(stderr, "in geom bat\n");
+
        //get the descriptor of the BAT
        if ((inBAT = BATdescriptor(*inBAT_id)) == NULL) {
                throw(MAL, "batgeom.Contains", RUNTIME_OBJECT_MISSING);
@@ -3030,10 +2892,14 @@ fprintf(stderr, "in geom bat\n");
 
 }
 
+str wkbContains_bat_geom(int* outBAT_id, int* inBAT_id, wkb** geomWKB) {
+       return wkbContains_geom_bat(outBAT_id, geomWKB, inBAT_id);
+}
+
 
 /**
  * It filters the geometry in the second BAT with respect to the MBR of the 
geometry in the first BAT.
- **/
+ **//*
 str wkbContainsFilter_bat(int* aBATfiltered_id, int* bBATfiltered_id, int* 
aBAT_id, int* bBAT_id) {
        BAT *aBATfiltered = NULL, *bBATfiltered = NULL, *aBAT = NULL, *bBAT = 
NULL;
        wkb *aWKB = NULL, *bWKB = NULL;
@@ -3120,16 +2986,16 @@ str wkbContainsFilter_bat(int* aBATfilte
        return MAL_SUCCEED;
 
 
-}
+}*/
 
 /**
  * It filters the geometry in the second BAT with respect to the MBR of the 
geometry in the first BAT.
  **/
-str wkbContainsFilter_geom_bat(wkb** outWKB, int* bBATfiltered_id, wkb** 
geomWKB, int* BAToriginal_id) {
-       BAT *bBATfiltered = NULL, *BAToriginal = NULL;
-       wkb *bWKB = NULL;
+str wkbContainsFilter_geom_bat(int* BATfiltered_id, wkb** geomWKB, int* 
BAToriginal_id) {
+       BAT *BATfiltered = NULL, *BAToriginal = NULL;
+       wkb *WKBoriginal = NULL;
        bit outBIT;
-       BATiter BAT_iter;
+       BATiter BAToriginal_iter;
        BUN i=0;
        mbr* geomMBR;
        int remainingElements =0;
@@ -3146,22 +3012,22 @@ str wkbContainsFilter_geom_bat(wkb** out
        }
 
        //create the new BAT
-       if ((bBATfiltered = BATnew(TYPE_void, ATOMindex("wkb"), 
BATcount(BAToriginal), TRANSIENT)) == NULL) {
+       if ((BATfiltered = BATnew(TYPE_void, ATOMindex("wkb"), 
BATcount(BAToriginal), TRANSIENT)) == NULL) {
                BBPreleaseref(BAToriginal->batCacheid);
                throw(MAL, "batgeom.MBRfilter", MAL_MALLOC_FAIL);
        }
 
        //set the first idx of the output BATs equal to that of the aBAT
-       BATseqbase(bBATfiltered, BAToriginal->hseqbase);
+       BATseqbase(BATfiltered, BAToriginal->hseqbase);
 
        //iterator over the BAT
-       BAT_iter = bat_iterator(BAToriginal);
+       BAToriginal_iter = bat_iterator(BAToriginal);
 
        //create the MBR of the geom
        if((err = wkbMBR(&geomMBR, geomWKB)) != MAL_SUCCEED) {
                str msg;
                BBPreleaseref(BAToriginal->batCacheid);
-               BBPreleaseref(bBATfiltered->batCacheid);
+               BBPreleaseref(BATfiltered->batCacheid);
                msg = createException(MAL, "batgeom.wkbFilter", "%s", err);
                GDKfree(err);
                return msg;
@@ -3169,14 +3035,14 @@ str wkbContainsFilter_geom_bat(wkb** out
 
        for (i = BUNfirst(BAToriginal); i < BATcount(BAToriginal); i++) { 
                str err = NULL;
-               mbr* bMBR;
-               bWKB = (wkb*) BUNtail(BAT_iter, i + BUNfirst(BAToriginal));
+               mbr* MBRoriginal;
+               WKBoriginal = (wkb*) BUNtail(BAToriginal_iter, i + 
BUNfirst(BAToriginal));
 
                //create the MBR for each geometry in the BAT
-               if((err = wkbMBR(&bMBR, &bWKB)) != MAL_SUCCEED) {
+               if((err = wkbMBR(&MBRoriginal, &WKBoriginal)) != MAL_SUCCEED) {
                        str msg;
                        BBPreleaseref(BAToriginal->batCacheid);
-                       BBPreleaseref(bBATfiltered->batCacheid);
+                       BBPreleaseref(BATfiltered->batCacheid);
                        msg = createException(MAL, "batgeom.wkbFilter", "%s", 
err);
                        GDKfree(err);
                        GDKfree(geomMBR);
@@ -3184,40 +3050,44 @@ str wkbContainsFilter_geom_bat(wkb** out
                }
                
                //check the containment of the MBRs
-               if((err = mbrContains(&outBIT, &geomMBR, &bMBR)) != 
MAL_SUCCEED) {
+               if((err = mbrContains(&outBIT, &geomMBR, &MBRoriginal)) != 
MAL_SUCCEED) {
                        str msg;
                        BBPreleaseref(BAToriginal->batCacheid);
-                       BBPreleaseref(bBATfiltered->batCacheid);
+                       BBPreleaseref(BATfiltered->batCacheid);
                        msg = createException(MAL, "batgeom.wkbFilter", "%s", 
err);
                        GDKfree(err);
                        GDKfree(geomMBR);
-                       GDKfree(bMBR);
+                       GDKfree(MBRoriginal);
                        return msg;
                }
                if(outBIT) {
-                       BUNappend(bBATfiltered,bWKB, TRUE); //add the result to 
the bBAT
+                       BUNappend(BATfiltered,WKBoriginal, TRUE); //add the 
result to the bBAT
                        remainingElements++;
                }
                
-               GDKfree(bMBR);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to