Changeset: 9b61532a3b63 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9b61532a3b63
Modified Files:
geom/monetdb5/geom_upgrade.c
monetdb5/modules/mal/txtsim.c
monetdb5/optimizer/opt_pipes.c
monetdb5/optimizer/opt_wrapper.c
sql/backends/monet5/LSST/lsst.c
sql/backends/monet5/UDF/cudf/udf.c
sql/backends/monet5/UDF/pyapi/conversion.c
sql/backends/monet5/UDF/pyapi/convert_loops.h
sql/backends/monet5/UDF/pyapi/emit.c
Branch: default
Log Message:
More error checking, and some simplification.
diffs (truncated from 641 to 300 lines):
diff --git a/geom/monetdb5/geom_upgrade.c b/geom/monetdb5/geom_upgrade.c
--- a/geom/monetdb5/geom_upgrade.c
+++ b/geom/monetdb5/geom_upgrade.c
@@ -13,83 +13,8 @@
#include <geom.h>
-typedef struct list_element {
- BAT *ob;
- BAT *nb;
- char *n;
-} list_element;
-
-typedef struct ulist {
- size_t capacity;
- size_t count;
- list_element *elements;
-} ulist;
-
-static ulist*
-list_init(size_t capacity)
-{
- ulist *l;
- if ((l = GDKmalloc(sizeof(ulist))) == NULL)
- return NULL;
- l->capacity = capacity;
- l->count = 0;
- if ((l->elements = GDKzalloc(capacity*sizeof(list_element))) == NULL) {
- GDKfree(l);
- return NULL;
- }
- return l;
-}
-
-static int
-list_delete(ulist* ul)
-{
- size_t i;
- for (i = 0; i < ul->count; i++) {
- GDKfree(ul->elements[i].n);
- if (ul->elements[i].ob)
- BBPunfix(ul->elements[i].ob->batCacheid);
- if (ul->elements[i].nb)
- BBPunfix(ul->elements[i].nb->batCacheid);
- }
- GDKfree(ul->elements);
- GDKfree(ul);
- return 1;
-}
-
-static int
-list_extend(ulist **ul)
-{
- ulist* nl;
- if ((nl = list_init((*ul)->capacity*2)) == NULL )
- return 0;
- memcpy(nl->elements, (*ul)->elements,
sizeof(list_element)*(*ul)->count);
- nl->count = (*ul)->count;
- GDKfree((*ul)->elements);
- GDKfree(*ul);
- *ul = nl;
- return 1;
-}
-
-static int
-list_add(ulist **ul, BAT *ob, BAT *nb, const char *n)
-{
- char *nn;
- if ((nn = GDKstrdup(n)) == NULL)
- return 0;
- if ((*ul)->count == (*ul)->capacity)
- if (!list_extend(ul)) {
- GDKfree(nn);
- return 0;
- }
- (*ul)->elements[(*ul)->count].ob = ob;
- (*ul)->elements[(*ul)->count].nb = nb;
- (*ul)->elements[(*ul)->count].n = nn;
- (*ul)->count++;
- return 1;
-}
-
static char *
-N( char *buf, const char *pre, const char *schema, const char *post)
+N(char *buf, const char *pre, const char *schema, const char *post)
{
if (pre)
snprintf(buf, 64, "%s_%s_%s", pre, schema, post);
@@ -107,38 +32,107 @@ geom_catalog_upgrade(void *lg, int olddb
const char *s = "sys";
char n[64];
BUN p,q;
- size_t ii;
- ulist *ul;
- if (olddb) {
- /* Update the catalog to use the new geometry types */
- if ((ul = list_init(32)) == NULL)
- return 0;
+ if (!olddb)
+ return 1;
- ct = BATdescriptor((bat) logger_find_bat(lg, N(n, NULL, s,
"_columns_type")));
- cti = bat_iterator(ct);
- cd = BATdescriptor((bat) logger_find_bat(lg, N(n, NULL, s,
"_columns_type_digits")));
- cdi = bat_iterator(cd);
- cs = BATdescriptor((bat) logger_find_bat(lg, N(n, NULL, s,
"_columns_type_scale")));
- csi = bat_iterator(cs);
+ ct = BATdescriptor((bat) logger_find_bat(lg, N(n, NULL, s,
"_columns_type")));
+ cti = bat_iterator(ct);
+ cd = BATdescriptor((bat) logger_find_bat(lg, N(n, NULL, s,
"_columns_type_digits")));
+ cdi = bat_iterator(cd);
+ cs = BATdescriptor((bat) logger_find_bat(lg, N(n, NULL, s,
"_columns_type_scale")));
+ csi = bat_iterator(cs);
- if (!ct || !cd || !cs) {
- list_delete(ul);
- if (ct)
- BBPunfix(ct->batCacheid);
- if (cd)
- BBPunfix(cd->batCacheid);
- if (cs)
- BBPunfix(cs->batCacheid);
- return 0;
+ if (!ct || !cd || !cs) {
+ if (ct)
+ BBPunfix(ct->batCacheid);
+ if (cd)
+ BBPunfix(cd->batCacheid);
+ if (cs)
+ BBPunfix(cs->batCacheid);
+ return 0;
+ }
+
+ cnt = COLnew(ct->hseqbase, TYPE_str, BATcount(ct), PERSISTENT);
+ cnd = COLnew(cd->hseqbase, TYPE_int, BATcount(cd), PERSISTENT);
+ cns = COLnew(cs->hseqbase, TYPE_int, BATcount(cs), PERSISTENT);
+
+ if (!cnt || !cnd || !cns) {
+ BBPreclaim(cnt);
+ BBPreclaim(cnd);
+ BBPreclaim(cns);
+ BBPunfix(ct->batCacheid);
+ BBPunfix(cd->batCacheid);
+ BBPunfix(cs->batCacheid);
+ return 0;
+ }
+
+ for(p=0, q=BUNlast(ct); p<q; p++) {
+ const char *type = BUNtail(cti, p);
+ int digits = *(int*)BUNtail(cdi, p);
+ int scale = *(int*)BUNtail(csi, p);
+
+ if (strcasecmp(type, "point") == 0) {
+ type = "geometry";
+ digits = wkbPoint_mdb << 2;
+ scale = 0; // in the past we did not save the srid
+ } else if (strcasecmp(type, "linestring") == 0) {
+ type = "geometry";
+ digits = wkbLineString_mdb << 2;
+ scale = 0;
+ } else if (strcasecmp(type, "curve") == 0) {
+ type = "geometry";
+ digits = wkbLineString_mdb << 2;
+ scale = 0;
+ } else if (strcasecmp(type, "linearring") == 0) {
+ type = "geometry";
+ digits = wkbLinearRing_mdb << 2;
+ scale = 0;
+ } else if (strcasecmp(type, "polygon") == 0) {
+ type = "geometry";
+ digits = wkbPolygon_mdb << 2;
+ scale = 0;
+ } else if (strcasecmp(type, "surface") == 0) {
+ type = "geometry";
+ digits = wkbPolygon_mdb << 2;
+ scale = 0;
+ } else if (strcasecmp(type, "multipoint") == 0) {
+ type = "geometry";
+ digits = wkbMultiPoint_mdb << 2;
+ scale = 0;
+ } else if (strcasecmp(type, "multilinestring") == 0) {
+ type = "geometry";
+ digits = wkbMultiLineString_mdb << 2;
+ scale = 0;
+ } else if (strcasecmp(type, "multicurve") == 0) {
+ type = "geometry";
+ digits = wkbMultiLineString_mdb << 2;
+ scale = 0;
+ } else if (strcasecmp(type, "multipolygon") == 0) {
+ type = "geometry";
+ digits = wkbMultiPolygon_mdb << 2;
+ scale = 0;
+ } else if (strcasecmp(type, "multisurface") == 0) {
+ type = "geometry";
+ digits = wkbMultiPolygon_mdb << 2;
+ scale = 0;
+ } else if (strcasecmp(type, "geomcollection") == 0) {
+ type = "geometry";
+ digits = wkbGeometryCollection_mdb << 2;
+ scale = 0;
+ } else if (strcasecmp(type, "geometrycollection") == 0) {
+ type = "geometry";
+ digits = wkbGeometryCollection_mdb << 2;
+ scale = 0;
+ } else if (strcasecmp(type, "geometry") == 0) {
+ type = "geometry";
+ digits = 0;
+ scale = 0;
}
- cnt = COLnew(ct->hseqbase, TYPE_str, BATcount(ct), PERSISTENT);
- cnd = COLnew(cd->hseqbase, TYPE_int, BATcount(cd), PERSISTENT);
- cns = COLnew(cs->hseqbase, TYPE_int, BATcount(cs), PERSISTENT);
-
- if (!cnt || !cnd || !cns) {
- list_delete(ul);
+ if (BUNappend(cnt, type, TRUE) != GDK_SUCCEED ||
+ BUNappend(cnd, &digits, TRUE) != GDK_SUCCEED ||
+ BUNappend(cns, &scale, TRUE) != GDK_SUCCEED) {
BBPreclaim(cnt);
BBPreclaim(cnd);
BBPreclaim(cns);
@@ -147,89 +141,28 @@ geom_catalog_upgrade(void *lg, int olddb
BBPunfix(cs->batCacheid);
return 0;
}
+ }
- for(p=0, q=BUNlast(ct); p<q; p++) {
- const char *type = BUNtail(cti, p);
- int digits = *(int*)BUNtail(cdi, p);
- int scale = *(int*)BUNtail(csi, p);
-
- if (strcasecmp(type, "point") == 0) {
- type = "geometry";
- digits = wkbPoint_mdb << 2;
- scale = 0; // in the past we did not save the
srid
- } else if (strcasecmp(type, "linestring") == 0) {
- type = "geometry";
- digits = wkbLineString_mdb << 2;
- scale = 0;
- } else if (strcasecmp(type, "curve") == 0) {
- type = "geometry";
- digits = wkbLineString_mdb << 2;
- scale = 0;
- } else if (strcasecmp(type, "linearring") == 0) {
- type = "geometry";
- digits = wkbLinearRing_mdb << 2;
- scale = 0;
- } else if (strcasecmp(type, "polygon") == 0) {
- type = "geometry";
- digits = wkbPolygon_mdb << 2;
- scale = 0;
- } else if (strcasecmp(type, "surface") == 0) {
- type = "geometry";
- digits = wkbPolygon_mdb << 2;
- scale = 0;
- } else if (strcasecmp(type, "multipoint") == 0) {
- type = "geometry";
- digits = wkbMultiPoint_mdb << 2;
- scale = 0;
- } else if (strcasecmp(type, "multilinestring") == 0) {
- type = "geometry";
- digits = wkbMultiLineString_mdb << 2;
- scale = 0;
- } else if (strcasecmp(type, "multicurve") == 0) {
- type = "geometry";
- digits = wkbMultiLineString_mdb << 2;
- scale = 0;
- } else if (strcasecmp(type, "multipolygon") == 0) {
- type = "geometry";
- digits = wkbMultiPolygon_mdb << 2;
- scale = 0;
- } else if (strcasecmp(type, "multisurface") == 0) {
- type = "geometry";
- digits = wkbMultiPolygon_mdb << 2;
- scale = 0;
- } else if (strcasecmp(type, "geomcollection") == 0) {
- type = "geometry";
- digits = wkbGeometryCollection_mdb << 2;
- scale = 0;
- } else if (strcasecmp(type, "geometrycollection") == 0)
{
- type = "geometry";
- digits = wkbGeometryCollection_mdb << 2;
- scale = 0;
- } else if (strcasecmp(type, "geometry") == 0) {
- type = "geometry";
- digits = 0;
- scale = 0;
- }
-
- BUNappend(cnt, type, TRUE);
- BUNappend(cnd, &digits, TRUE);
- BUNappend(cns, &scale, TRUE);
- }
-
- if (!list_add(&ul, ct, cnt, N(n, NULL, s, "_columns_type")) ||
- !list_add(&ul, cd, cnd, N(n, NULL, s,
"_columns_type_digits")) ||
- !list_add(&ul, cs, cns, N(n, NULL, s,
"_columns_type_scale")))
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list