Changeset: 314c22fb6415 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=314c22fb6415
Modified Files:
        sql/backends/monet5/sql_cat.c
Branch: mosaic
Log Message:

Fix ancient Mercurial merge bug:
mosaic compression wasn't called when using sql storage directive.


diffs (68 lines):

diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -35,6 +35,9 @@
 #include "rel_remote.h"
 #include "orderidx.h"
 
+
+#include "mosaic.h"
+
 #define initcontext() \
     if ((msg = getSQLContext(cntxt, mb, &sql, NULL)) != NULL)\
         return msg;\
@@ -872,9 +875,53 @@ alter_table(Client cntxt, mvc *sql, char
                        mvc_default(sql, nc, c->def);
 
                if (c->storage_type != nc->storage_type) {
+                       bat bid = 0;
+                       BAT *b;
+                       size_t cnt;
+                       sql_delta *d;
+                       char *msg;
+                       MOStask task;
+/* no restriction
                        if (c->t->access == TABLE_WRITABLE)
-                               throw(SQL,"sql.alter_table", SQLSTATE(40002) 
"ALTER TABLE: SET STORAGE for column %s.%s only allowed on READ or INSERT ONLY 
tables", c->t->base.name, c->base.name);
+                               return sql_message("40002!ALTER TABLE: SET 
STORAGE for column %s.%s only allowed on READ or INSERT ONLY tables", 
c->t->base.name, c->base.name);
+*/
                        nc->base.rtime = nc->base.wtime = 
sql->session->tr->wtime;
+                       b = store_funcs.bind_col(sql->session->tr, nc, 0);
+                       assert(b);
+                       cnt = BATcount(b);
+                       if (cnt < MOSAIC_THRESHOLD){
+                               BBPunfix(b->batCacheid);
+                               continue;
+                       }
+
+                       // TODO check where this task is cleaned up.
+                       task = (MOStask) GDKzalloc(sizeof(*task));
+                       if( c->storage_type && 
!strstr(c->storage_type,"mosaic")) {
+                               if( task == NULL)
+                                       throw(MAL, "sql.alter", 
MAL_MALLOC_FAIL);
+
+                               for(int i = 0; i< MOSAIC_METHODS; i++)
+                                       task->filter[i]= 
strstr(c->storage_type,MOSfiltername[i]) != 0;
+                       }
+                       else
+                               for(int i = 0; i< MOSAIC_METHODS; i++)
+                                       task->filter[i]= 1;
+
+                       if( c->storage_type)
+                               msg = MOScompressInternal(cntxt, 
&b->batCacheid, task, 0);
+                       else
+                               msg = MOSdecompressInternal(cntxt, 
&b->batCacheid);
+
+                       BBPunfix(b->batCacheid);
+
+                       if (msg)
+                               return msg;
+
+                       store_funcs.clear_col(sql->session->tr, nc);
+                       assert(nc->base.allocated == 1);
+                       d = nc->data;
+                       d->bid = bid;
+                       d->cnt = cnt;
                        mvc_storage(sql, nc, c->storage_type);
                }
        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to