Changeset: 883e0cab6fd3 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=883e0cab6fd3
Modified Files:
gdk/gdk_join.c
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
Branch: arrays
Log Message:
selection a single dimensional column filtering non-dimensional column
+ handling empty oids and dimensions result in output
diffs (224 lines):
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3544,42 +3544,51 @@ fprintf(stderr, "BATdimensionProject: ne
\
} while(0)
-
- switch (tpe) {
- case TYPE_bte:
- project(bte);
- break;
- case TYPE_sht:
- project(sht);
- break;
- case TYPE_int:
- project(int);
- break;
- case TYPE_flt:
- project(flt);
- break;
- case TYPE_dbl:
- project(dbl);
- break;
- case TYPE_lng:
- project(lng);
- break;
+ if(BATcount(oidsBAT)) {
+ switch (tpe) {
+ case TYPE_bte:
+ project(bte);
+ break;
+ case TYPE_sht:
+ project(sht);
+ break;
+ case TYPE_int:
+ project(int);
+ break;
+ case TYPE_flt:
+ project(flt);
+ break;
+ case TYPE_dbl:
+ project(dbl);
+ break;
+ case TYPE_lng:
+ project(lng);
+ break;
#ifdef HAVE_HGE
- case TYPE_hge:
- project(hge);
- break;
+ case TYPE_hge:
+ project(hge);
+ break;
#endif
- case TYPE_oid:
+ case TYPE_oid:
#if SIZEOF_OID == SIZEOF_INT
- project(int);
+ project(int);
#else
- project(lng);
+ project(lng);
#endif
break;
- default:
- fprintf(stderr, "BATdimensionProject: dimension type not
handled\n");
- return NULL;
- }
+ default:
+ fprintf(stderr, "BATdimensionProject: dimension type
not handled\n");
+ return NULL;
+ }
+ } else {
+ //no oids. Empty BAT
+ if((resBAT = BATnew(TYPE_void, tpe, 0, TRANSIENT)) == NULL)
+ return NULL;
+
+ BATsetcount(resBAT,0);
+ BATseqbase(resBAT,0);
+ BATderiveProps(resBAT,FALSE);
+ }
return resBAT;
}
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -747,11 +747,13 @@ static stmt *
stmt_col( mvc *sql, sql_column *c, stmt *del)
{
stmt *sc = stmt_bat(sql->sa, c, RDONLY);
- //when having arrays there is no need to do
- //the rest of the bats since the size is always fixed
- if(isArray(c->t))
+
+ //when having arrays deltas are handled later inside the code
+ //thus, I do not need to join at this moment
+ if(isArray(c->t)) {
return sc;
-
+ }
+
if (isTable(c->t) && c->t->access != TABLE_READONLY &&
(c->base.flag != TR_NEW || c->t->base.flag != TR_NEW /* alter */) &&
(c->t->persistence == SQL_PERSIST || c->t->persistence ==
SQL_DECLARED_TABLE) && !c->t->commit_action) {
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -2284,44 +2284,51 @@ fprintf(stderr, "materialise elementsNum
\
BATseqbase(resBAT,0); \
BATsetcount(resBAT, repeat1*elementsNum*repeat2); \
-\
+ BATderiveProps(resBAT,FALSE); \
} while(0)
-
- switch (tpe) {
- case TYPE_bte:
- materialise(bte);
- break;
- case TYPE_sht:
- materialise(sht);
- break;
- case TYPE_int:
- materialise(int);
- break;
- case TYPE_flt:
- materialise(flt);
- break;
- case TYPE_dbl:
- materialise(dbl);
- break;
- case TYPE_lng:
- materialise(lng);
- break;
+ if(BATcount(dimensionBAT)) {
+ switch (tpe) {
+ case TYPE_bte:
+ materialise(bte);
+ break;
+ case TYPE_sht:
+ materialise(sht);
+ break;
+ case TYPE_int:
+ materialise(int);
+ break;
+ case TYPE_flt:
+ materialise(flt);
+ break;
+ case TYPE_dbl:
+ materialise(dbl);
+ break;
+ case TYPE_lng:
+ materialise(lng);
+ break;
#ifdef HAVE_HGE
- case TYPE_hge:
- materialise(hge);
- break;
+ case TYPE_hge:
+ materialise(hge);
+ break;
#endif
- case TYPE_oid:
+ case TYPE_oid:
#if SIZEOF_OID == SIZEOF_INT
- materialise(int);
+ materialise(int);
#else
- materialise(lng);
+ materialise(lng);
#endif
- break;
- default:
- fprintf(stderr, "BATdimensionProject: dimension type not handled\n");
- return NULL;
+ break;
+ default:
+ fprintf(stderr, "BATdimensionProject: dimension type not
handled\n");
+ return NULL;
+ }
+ } else {
+ if((resBAT = BATnew(TYPE_void, dimensionBAT->ttype, 0,
TRANSIENT)) == NULL)
+ throw(MAL, "sql.materialise_dimension", "Unable to create
output BAT");
+ BATseqbase(resBAT,0);
+ BATsetcount(resBAT,0);
+ BATderiveProps(resBAT, FALSE);
}
BBPunfix(dimensionBAT->batCacheid);
diff --git a/sql/backends/monet5/sql_statement.c
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -823,7 +823,7 @@ stmt_atom(sql_allocator *sa, atom *op1)
stmt* stmt_dimension(sql_allocator *sa, sql_dimension* dim) {
stmt *s = stmt_create(sa, st_dimension);
s->op4.dval = dim;
- s->nrcols = 1;
+ s->nrcols = 2; //the cardinality is always greated than 1
return s;
}
@@ -1237,6 +1237,7 @@ stmt_alias(sql_allocator *sa, stmt *op1,
stmt* stmt_materialise(sql_allocator *sa, stmt *op1) {
stmt *s = stmt_create(sa, st_materialise);
s->op1 = op1;
+ s->nrcols = op1->nrcols;
return s;
}
diff --git a/sql/backends/monet5/sql_statement.h
b/sql/backends/monet5/sql_statement.h
--- a/sql/backends/monet5/sql_statement.h
+++ b/sql/backends/monet5/sql_statement.h
@@ -116,7 +116,7 @@ typedef struct stmt {
struct stmt *op3;
stmtdata op4; /* only op4 will hold other types */
- char nrcols;
+ char nrcols; /*number of columns OR cardinality of results*/
char key; /* key (aka all values are unique) */
char aggr; /* aggregated */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list