Changeset: 2db68096ac73 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2db68096ac73
Modified Files:
geom/monetdb5/geom.c
sql/backends/monet5/vaults/shp/shp.c
Branch: geo-update
Log Message:
Fixed a merge
diffs (246 lines):
diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -4184,6 +4184,7 @@ str wkbMakeLineAggr(wkb **outWKB, bat *i
aWKB = (wkb *)BUNtvar(inBAT_iter, 0);
if (BATcount(inBAT) == 1)
{
+ bat_iterator_end(&inBAT_iter);
err = wkbFromWKB(outWKB, &aWKB);
BBPunfix(inBAT->batCacheid);
if (err)
@@ -4208,6 +4209,7 @@ str wkbMakeLineAggr(wkb **outWKB, bat *i
GDKfree(aWKB);
}
+ bat_iterator_end(&inBAT_iter);
BBPunfix(inBAT->batCacheid);
return err;
@@ -5206,10 +5208,10 @@ str wkbUnionAggr(wkb **outWKB, const bat
//iterator over the BATs
inBAT_iter = bat_iterator(inBAT);
-
aWKB = (wkb *)BUNtvar(inBAT_iter, 0);
if (BATcount(inBAT) == 1)
{
+ bat_iterator_end(&inBAT_iter);
err = wkbFromWKB(outWKB, &aWKB);
BBPunfix(inBAT->batCacheid);
if (err)
@@ -5232,11 +5234,13 @@ str wkbUnionAggr(wkb **outWKB, const bat
GDKfree(aWKB);
}
+ bat_iterator_end(&inBAT_iter);
BBPunfix(inBAT->batCacheid);
return err;
}
+//TODO This is very slow. Is it because of the constant wkbToGEOS and
GEOSToWkb transformations?
static str wkbUnionAggrSubGroupedCand(bat *outid, const bat *bid, const bat
*gid, const bat *eid, const bat *sid, const bit *skip_nils)
{
BAT *b = NULL, *g = NULL, *e = NULL, *s = NULL, *out = NULL;
@@ -5261,15 +5265,15 @@ static str wkbUnionAggrSubGroupedCand(ba
msg = createException(MAL, "geom.Union",
RUNTIME_OBJECT_MISSING);
return msg;
}
- bi = bat_iterator(b);
//Fill in the values of the group aggregate operation
if ((err = BATgroupaggrinit(b, g, e, s, &min, &max, &ngrp, &ci,
&ncand)) != NULL)
{
msg = createException(MAL, "geom.Union", "%s", err);
- BBPunfix(b->batCacheid);
- return msg;
- }
+ goto free;
+ }
+
+ //TODO Add check if the ngrp/ncand is 0, or the GDKzalloc below will
crash mserver
//Create a new BAT column of wkb type, with lenght equal to the number
of groups
if ((out = COLnew(min, ATOMindex("wkb"), ngrp, TRANSIENT)) == NULL)
@@ -5278,6 +5282,7 @@ static str wkbUnionAggrSubGroupedCand(ba
goto free;
}
+ bi = bat_iterator(b);
//Allocate space for the intermediate unions of wkb's
if ((unions = GDKzalloc(sizeof(wkb *) * ngrp)) == NULL)
{
@@ -5299,11 +5304,18 @@ static str wkbUnionAggrSubGroupedCand(ba
oid grp = gids ? gids[p] : g ? min + (oid)p : 0;
#ifndef NDEBUG
- char *geomSTR;
+ /*char *geomSTR;
wkbAsText(&geomSTR, &inWKB, NULL);
printf("Row %zu: %s\n", i, geomSTR);
fflush(stdout);
- GDKfree(geomSTR);
+ GDKfree(geomSTR);*/
+ if (i % 100 == 0) {
+ printf("Processed %zu records, on group %zu\n", i,grp);
+ time_t t = time(NULL);
+ struct tm tm = *localtime(&t);
+ printf("%d-%02d-%02d %02d:%02d:%02d\n\n", tm.tm_year +
1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
+ fflush(stdout);
+ }
#endif
if (unions[grp] == NULL)
@@ -5355,7 +5367,8 @@ free:
BBPunfix(e->batCacheid);
if (s)
BBPunfix(s->batCacheid);
- if (unions) {
+ if (unions)
+ {
for (BUN i = 0; i < ngrp; i++)
GDKfree(unions[i]);
GDKfree(unions);
@@ -6349,7 +6362,7 @@ wkbPUT(BAT *b, var_t *bun, const void *V
*bun = HEAP_malloc(b, wkb_size(val->len));
base = b->tvheap->base;
- if (*bun)
+ if (*bun != (var_t) -1)
{
memcpy(&base[*bun], val, wkb_size(val->len));
b->tvheap->dirty = true;
@@ -6843,7 +6856,7 @@ wkbaPUT(BAT *b, var_t *bun, const void *
*bun = HEAP_malloc(b, wkba_size(val->itemsNum));
base = b->tvheap->base;
- if (*bun)
+ if (*bun != (var_t) -1)
{
memcpy(&base[*bun], val, wkba_size(val->itemsNum));
b->tvheap->dirty = true;
@@ -6919,8 +6932,10 @@ pnpoly(int *out, int nvert, dbl *vx, dbl
}
/*Iterate over the Point BATs and determine if they are in Polygon
represented by vertex BATs */
- px = (dbl *)Tloc(bpx, 0);
- py = (dbl *)Tloc(bpy, 0);
+ BATiter bpxi = bat_iterator(bpx);
+ BATiter bpyi = bat_iterator(bpy);
+ px = (dbl *) bpxi.base;
+ py = (dbl *) bpyi.base;
nv = nvert - 1;
cnt = BATcount(bpx);
@@ -6946,6 +6961,8 @@ pnpoly(int *out, int nvert, dbl *vx, dbl
*cs++ = wn & 1;
}
+ bat_iterator_end(&bpxi);
+ bat_iterator_end(&bpyi);
bo->tsorted = bo->trevsorted = false;
bo->tkey = false;
BATsetcount(bo, cnt);
@@ -6992,8 +7009,10 @@ pnpolyWithHoles(bat *out, int nvert, dbl
}
/*Iterate over the Point BATs and determine if they are in Polygon
represented by vertex BATs */
- px = (dbl *)Tloc(bpx, 0);
- py = (dbl *)Tloc(bpy, 0);
+ BATiter bpxi = bat_iterator(bpx);
+ BATiter bpyi = bat_iterator(bpy);
+ px = (dbl *) bpxi.base;
+ py = (dbl *) bpyi.base;
cnt = BATcount(bpx);
cs = (bit *)Tloc(bo, 0);
for (i = 0; i < cnt; i++)
@@ -7049,6 +7068,8 @@ pnpolyWithHoles(bat *out, int nvert, dbl
}
*cs++ = wn & 1;
}
+ bat_iterator_end(&bpxi);
+ bat_iterator_end(&bpyi);
bo->tsorted = bo->trevsorted = false;
bo->tkey = false;
BATsetcount(bo, cnt);
@@ -7798,9 +7819,8 @@ static mel_func geom_init_funcs[] = {
command("calc", "wkb", wkbFromWKB, false, "It is called when adding a
new geometry column to an existing table", args(1, 2, arg("", wkb), arg("v",
wkb))),
command("calc", "wkb", geom_2_geom, false, "Called when inserting
values to a table in order to check if the inserted geometries are of the same
type and srid required by the column definition", args(1, 4, arg("", wkb),
arg("geo", wkb), arg("columnType", int), arg("columnSRID", int))),
command("batcalc", "wkb", geom_2_geom_bat, false, "Called when
inserting values to a table in order to check if the inserted geometries are of
the same type and srid required by the column definition", args(1, 5,
batarg("", wkb), batarg("geo", wkb), batarg("s", oid), arg("columnType", int),
arg("columnSRID", int))),
- command("batcalc", "wkb", wkbFromText_bat_cand, false, "", args(1,5,
batarg("",wkb),batarg("wkt",str),batarg("s",oid),arg("srid",int),arg("type",int))),
- {.imp = NULL}
-};
+ command("batcalc", "wkb", wkbFromText_bat_cand, false, "", args(1, 5,
batarg("", wkb), batarg("wkt", str), batarg("s", oid), arg("srid", int),
arg("type", int))),
+ {.imp = NULL}};
#include "mal_import.h"
#ifdef _MSC_VER
#undef read
diff --git a/sql/backends/monet5/vaults/shp/shp.c
b/sql/backends/monet5/vaults/shp/shp.c
--- a/sql/backends/monet5/vaults/shp/shp.c
+++ b/sql/backends/monet5/vaults/shp/shp.c
@@ -209,12 +209,12 @@ str createSHPtable(Client cntxt, str sch
//Concat the schema name with the table name
size_t schemaTableSize = strlen(schemaname) + strlen(tablename) + 3;
- char* schemaTable = GDKmalloc(schemaTableSize);
- snprintf(schemaTable,schemaTableSize-1,"%s.%s",schemaname,tablename);
-
+ char *schemaTable = GDKmalloc(schemaTableSize);
+ snprintf(schemaTable, schemaTableSize - 1, "%s.%s", schemaname,
tablename);
+
//Build the CREATE TABLE command
snprintf(buf, size, CRTTBL, schemaTable, temp_buf);
-
+
msg = SQLstatementIntern(cntxt, buf, "shp.load", TRUE, FALSE, NULL);
GDKfree(buf);
@@ -235,6 +235,8 @@ str loadSHPtable(mvc *m, sql_schema *sch
char *nameToLowerCase = NULL;
int i;
+ BUN offset;
+ BAT *pos = NULL;
sqlstore *store;
/* SHP-level descriptor */
@@ -403,13 +405,12 @@ str loadSHPtable(mvc *m, sql_schema *sch
}
/* finalise the BATs */
store = m->session->tr->store;
- BUN offset;
- BAT *pos = NULL;
- if (store->storage_api.claim_tab(m->session->tr, data_table,
BATcount(colsBAT[0]), &offset, &pos) != LOG_OK) {
+ if (store->storage_api.claim_tab(m->session->tr, data_table,
BATcount(colsBAT[0]), &offset, &pos) != LOG_OK)
+ {
msg = createException(MAL, "shp.load", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
goto unfree;
}
-
+
for (i = 0; i < colsNum; i++)
{
if (store->storage_api.append_col(m->session->tr, cols[i],
offset, pos, colsBAT[i], BATcount(colsBAT[i]), TYPE_bat) != LOG_OK)
@@ -459,9 +460,10 @@ str SHPload(Client cntxt, MalBlkPtr mb,
GDALWSimpleFieldDef *field_definitions;
GDALWSpatialInfo spatial_info;
- if (!(sch = mvc_bind_schema(m, schemaname))) {
+ if (!(sch = mvc_bind_schema(m, schemaname)))
+ {
/* Can't find schema */
- return createException(MAL, "shp.load", SQLSTATE(38000) "Schema
%s missing\n",schemaname);
+ return createException(MAL, "shp.load", SQLSTATE(38000) "Schema
%s missing\n", schemaname);
}
if ((tablename != NULL) && (tablename[0] == '\0'))
@@ -469,7 +471,7 @@ str SHPload(Client cntxt, MalBlkPtr mb,
/* Output table name is NULL */
return createException(MAL, "shp.load", SQLSTATE(38000)
"Missing output table name %s\n", tablename);
}
-
+
if ((shp_conn_ptr = GDALWConnect((char *)filename)) == NULL)
{
/* Can't find shapefile */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list