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

Reply via email to