Changeset: 075ef4dba3bf for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=075ef4dba3bf
Modified Files:
        monetdb5/modules/mal/tablet.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_result.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
        sql/storage/bat/res_table.c
Branch: arrays
Log Message:

materialisation of dimensions is performed in export_result andnot before


diffs (139 lines):

diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c
--- a/monetdb5/modules/mal/tablet.c
+++ b/monetdb5/modules/mal/tablet.c
@@ -629,6 +629,9 @@ TABLEToutput_file(Tablet *as, BAT *order
        BUN maxnr = BATcount(order);
        int ret = 0;
 
+       if(isBATarray(order))
+               maxnr = dimensionBATsize(order);
+
        /* only set nr if it is zero or lower (bogus) to the maximum value
         * possible (BATcount), if already set within BATcount range,
         * preserve value such that for instance SQL's reply_size still
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
@@ -2428,8 +2428,8 @@ rel2bin_project( mvc *sql, sql_rel *rel,
                else if (sub && sub->nrcols >= 1 && s->nrcols == 0)
                        s = stmt_const(sql->sa, bin_first_column(sql->sa, sub), 
s);
        
-               if(exp->type == e_dimension)
-                       s = stmt_materialise(sql->sa, s);       
+//             if(exp->type == e_dimension)
+//                     s = stmt_materialise(sql->sa, s);       
                s = stmt_rename(sql, rel, exp, s);
                column_name(sql->sa, s); /* save column name */
                list_append(pl, s);
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -782,6 +782,7 @@ static int
                        s->nr = getDestVar(q);
                        (void) pushInt(mb, q, 1);
                } break;
+#if 0
                case st_materialise: { 
                        int l;
                        if ((l = _dumpstmt(sql, mb, s->op1)) < 0)
@@ -794,6 +795,7 @@ static int
                        s->nr = getDestVar(q);
                        return s->nr;
                }
+#endif
                case st_var:{
                        if (s->op1) {
                                if (VAR_GLOBAL(s->flag)) {      /* globals */
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -1614,6 +1614,8 @@ mvc_export_head(backend *b, stream *s, i
                                return -1;
 
                        count = BATcount(order);
+                       if(isBATarray(order))
+                               count = dimensionBATsize(order);                
        
                } else
                        count = 1;
        }
@@ -1774,6 +1776,8 @@ mvc_export_result(backend *b, stream *s,
        count = m->reply_size;
        if (m->reply_size != -2 && (count <= 0 || count >= BATcount(order))) {
                count = BATcount(order);
+               if(isBATarray(order))
+                       count = dimensionBATsize(order);                        
                clean = 1;
        }
        if (json) {
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
@@ -303,7 +303,7 @@ stmt_deps(list *dep_list, stmt *s, int d
                                break;
                                /* simple case of statements of only statements 
*/
                        case st_alias:
-                       case st_materialise:
+               //      case st_materialise:
                        case st_tunion:
                        case st_tdiff:
                        case st_tinter:
@@ -1248,12 +1248,14 @@ stmt_alias(sql_allocator *sa, stmt *op1,
        return s;
 }
 
+#if 0
 stmt* stmt_materialise(sql_allocator *sa, stmt *op1) {
        stmt *s = stmt_create(sa, st_materialise);
        s->op1 = op1;
        s->nrcols = op1->nrcols;
        return s;
 }
+#endif
 
 sql_subtype *
 tail_type(stmt *st)
@@ -1336,8 +1338,8 @@ tail_type(stmt *st)
                return sql_bind_localtype("bat");
        case st_dimension:
                return &st->op4.dval->type;
-       case st_materialise:
-               return tail_type(st->op1);
+//     case st_materialise:
+//             return tail_type(st->op1);
        default:
                fprintf(stderr, "missing tail type %u: %s\n", st->type, 
st_type2string(st->type));
                assert(0);
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
@@ -91,7 +91,7 @@ typedef enum stmt_type {
 
        st_alias,
 
-       st_materialise,
+       //st_materialise,
 
        /* used internally only */
        st_list,
@@ -241,7 +241,7 @@ extern stmt *stmt_aggr(sql_allocator *sa
 
 extern stmt *stmt_alias(sql_allocator *sa, stmt *op1, char *tname, char *name);
 
-extern stmt *stmt_materialise(sql_allocator *sa, stmt *op1);
+//extern stmt *stmt_materialise(sql_allocator *sa, stmt *op1);
 
 extern stmt *stmt_output(sql_allocator *sa, stmt *l);
 extern stmt *stmt_affected_rows(sql_allocator *sa, stmt *l);
diff --git a/sql/storage/bat/res_table.c b/sql/storage/bat/res_table.c
--- a/sql/storage/bat/res_table.c
+++ b/sql/storage/bat/res_table.c
@@ -62,6 +62,9 @@ res_col_create(sql_trans *tr, res_table 
        c->mtype = mtype;
        if (mtype == TYPE_bat) {
                BAT *b = (BAT*)val;
+               
+               if(isBATarray(b))
+                       b = materialiseDimensionBAT(b);
 
                c->b = b->batCacheid;
                bat_incref(c->b);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to