Changeset: 593b7ab606ed for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=593b7ab606ed
Modified Files:
        sql/rel.txt
        sql/src/backends/monet5/sql.mx
        sql/src/backends/monet5/sql_result.mx
        sql/src/backends/monet5/vaults/70_vault.mal
        sql/src/backends/monet5/vaults/mseed.sql
        sql/src/server/rel_bin.c
        sql/src/server/rel_dump.c
        sql/src/server/rel_exp.c
        sql/src/server/rel_exp.h
        sql/src/server/rel_select.c
        sql/src/server/rel_select.h
        sql/src/server/rel_updates.c
Branch: default
Log Message:

handle functions on relations beter.

added function to drop hash indices (sql.drop_hash)


diffs (266 lines):

diff -r 2ec4de549bf6 -r 593b7ab606ed sql/rel.txt
--- a/sql/rel.txt       Thu Jan 13 21:36:11 2011 +0100
+++ b/sql/rel.txt       Thu Jan 13 21:52:28 2011 +0100
@@ -6,7 +6,8 @@
 
 TABLE  (card MULTI)
        -> exps         is list of column expressions (also used for aliases)
-       -> l            table function expression
+       -> l            optional input relation
+       -> r            table function expression
 
 /* Wrapping relational operator, is a big complex top level only 
    operator, which only does DDL kind of statements
diff -r 2ec4de549bf6 -r 593b7ab606ed sql/src/backends/monet5/sql.mx
--- a/sql/src/backends/monet5/sql.mx    Thu Jan 13 21:36:11 2011 +0100
+++ b/sql/src/backends/monet5/sql.mx    Thu Jan 13 21:52:28 2011 +0100
@@ -824,6 +824,10 @@
 address SQLvacuum
 comment "Choose an approach to consolidate the deletions";
 
+pattern drop_hash(sch:str, tbl:str)
+address SQLdrop_hash
+comment "Drop hash indices for the given table";
+
 pattern newdictionary(sch:str, tbl:str):void
 address SQLnewDictionary
 comment "Perform dictionary compression on a table";
@@ -1124,6 +1128,7 @@
 sql5_export str SQLshrink(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str SQLreuse(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str SQLvacuum(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+sql5_export str SQLdrop_hash(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str SQLnewDictionary(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str SQLdropDictionary(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str SQLgzcompress(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
@@ -5328,6 +5333,43 @@
        return MAL_SUCCEED;
 }
 @-
+The drop_hash operation cleans up any hash indices on any of the tables 
columns.
+@c
+str
+SQLdrop_hash(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       str *sch = (str *) getArgReference(stk,pci,1);
+       str *tbl = (str *) getArgReference(stk,pci,2);
+       sql_schema      *s;
+       sql_table       *t;
+       sql_column      *c;
+       mvc *m = NULL;
+       str msg = getContext(cntxt,mb, &m, NULL);
+       BAT *b;
+       node *o;
+
+       if (msg)
+               return msg;
+       s = mvc_bind_schema(m, *sch);
+       if ( s == NULL)
+               throw(MAL,"sql.drop_hash","Schema missing");
+       t = mvc_bind_table(m, s, *tbl);
+       if ( t == NULL)
+               throw(MAL,"sql.drop_hash","Table missing");
+
+       for (o = t->columns.set->h; o; o = o->next) {
+               c = o->data;
+               b = store_funcs.bind_col(m->session->tr, c, RDONLY);
+               if (b == NULL) 
+                       throw(MAL,"sql.drop_hash","Can not access descriptor");
+               HASHremove(b);
+               HASHremove(BATmirror(b));
+               BBPreleaseref(b->batCacheid);
+       }
+       return MAL_SUCCEED;
+}
+
+@-
 Take a SQL table and compress its columns using the dictionary compression 
scheme.
 @= compression
        str *sch = (str *) getArgReference(stk,pci,1);
diff -r 2ec4de549bf6 -r 593b7ab606ed sql/src/backends/monet5/sql_result.mx
--- a/sql/src/backends/monet5/sql_result.mx     Thu Jan 13 21:36:11 2011 +0100
+++ b/sql/src/backends/monet5/sql_result.mx     Thu Jan 13 21:52:28 2011 +0100
@@ -521,9 +521,12 @@
                        if (locked) {
                                BAT *b = store_funcs.bind_col(m->session->tr, 
col, RDONLY);
                                        BATmmap(b, STORE_MMAP, STORE_MMAP, 
STORE_MMAP, STORE_MMAP, 1);
+                               HASHremove(b);
+                               HASHremove(BATmirror(b));
+
                                fmt[i].c[0] = b;
                                cnt = BATcount(b);
-                               if ( BATcapacity(b) < (BUN) sz )
+                               if ( sz > 0 && BATcapacity(b) < (BUN) sz )
                                        if ( (fmt[i].c[0] =  
BATextend(fmt[i].c[0], (BUN) sz)) == NULL){
                                                        for ( i--; i>=0; i--)
                                                                BBPunfix( 
fmt[i].c[0]->batCacheid);
diff -r 2ec4de549bf6 -r 593b7ab606ed sql/src/backends/monet5/vaults/70_vault.mal
--- a/sql/src/backends/monet5/vaults/70_vault.mal       Thu Jan 13 21:36:11 
2011 +0100
+++ b/sql/src/backends/monet5/vaults/70_vault.mal       Thu Jan 13 21:52:28 
2011 +0100
@@ -16,4 +16,4 @@
 # All Rights Reserved.
 
 # This loads the MonetDB/SQL module
-include vault;
+#include vault;
diff -r 2ec4de549bf6 -r 593b7ab606ed sql/src/backends/monet5/vaults/mseed.sql
--- a/sql/src/backends/monet5/vaults/mseed.sql  Thu Jan 13 21:36:11 2011 +0100
+++ b/sql/src/backends/monet5/vaults/mseed.sql  Thu Jan 13 21:52:28 2011 +0100
@@ -30,5 +30,5 @@
 EXTERNAL NAME mseed.import;
 
 CREATE FUNCTION mseedLoad(entry string)
-RETURNS int
+RETURNS TABLE (a int)
 EXTERNAL NAME mseed.load;
diff -r 2ec4de549bf6 -r 593b7ab606ed sql/src/server/rel_bin.c
--- a/sql/src/server/rel_bin.c  Thu Jan 13 21:36:11 2011 +0100
+++ b/sql/src/server/rel_bin.c  Thu Jan 13 21:52:28 2011 +0100
@@ -765,8 +765,9 @@
        stmt *sub = NULL;
        node *en;
                        
-       (void)refs;
-       sub = exp_bin(sql, rel->l, NULL, NULL, NULL, NULL); /* table function */
+       if (rel->l)
+               sub = subrel_bin(sql, rel->l, refs);
+       sub = exp_bin(sql, rel->r, sub, NULL, NULL, NULL); /* table function */
        if (!sub) { 
                assert(0);
                return NULL;    
diff -r 2ec4de549bf6 -r 593b7ab606ed sql/src/server/rel_dump.c
--- a/sql/src/server/rel_dump.c Thu Jan 13 21:36:11 2011 +0100
+++ b/sql/src/server/rel_dump.c Thu Jan 13 21:52:28 2011 +0100
@@ -295,7 +295,9 @@
                print_indent(sql, fout, depth);
                mnstr_printf(fout, "table ");
                if (rel->l)
-                       exp_print(sql, fout, rel->l, depth, 1, 0);
+                       rel_print_(sql, fout, rel->l, depth+1, refs);
+               if (rel->r)
+                       exp_print(sql, fout, rel->r, depth, 1, 0);
                if (rel->exps) 
                        exps_print(sql, fout, rel->exps, depth, 1, 0);
                break;
diff -r 2ec4de549bf6 -r 593b7ab606ed sql/src/server/rel_exp.c
--- a/sql/src/server/rel_exp.c  Thu Jan 13 21:36:11 2011 +0100
+++ b/sql/src/server/rel_exp.c  Thu Jan 13 21:52:28 2011 +0100
@@ -387,6 +387,20 @@
        return NULL;
 }
 
+char *
+exp_func_name( sql_exp *e )
+{
+       if (e->type == e_func && e->f) {
+               sql_subfunc *f = e->f;
+               return f->func->base.name;
+       }
+       if (e->name)
+               return e->name;
+       if (e->type == e_convert && e->l)
+               return exp_name(e->l);
+       return NULL;
+}
+
 
 char *
 exp_find_rel_name(sql_exp *e)
diff -r 2ec4de549bf6 -r 593b7ab606ed sql/src/server/rel_exp.h
--- a/sql/src/server/rel_exp.h  Thu Jan 13 21:36:11 2011 +0100
+++ b/sql/src/server/rel_exp.h  Thu Jan 13 21:52:28 2011 +0100
@@ -67,6 +67,7 @@
 extern sql_subtype * exp_subtype( sql_exp *e );
 extern char * exp_name( sql_exp *e );
 extern char * exp_relname( sql_exp *e );
+extern char * exp_func_name( sql_exp *e );
 
 extern char *exp_find_rel_name(sql_exp *e);
 
diff -r 2ec4de549bf6 -r 593b7ab606ed sql/src/server/rel_select.c
--- a/sql/src/server/rel_select.c       Thu Jan 13 21:36:11 2011 +0100
+++ b/sql/src/server/rel_select.c       Thu Jan 13 21:52:28 2011 +0100
@@ -452,12 +452,12 @@
 }
 
 sql_rel *
-rel_table_func(sql_allocator *sa, sql_exp *f, list *exps)
+rel_table_func(sql_allocator *sa, sql_rel *l, sql_exp *f, list *exps)
 {
        sql_rel *rel = rel_create(sa);
 
-       rel->l = f;
-       rel->r = NULL;
+       rel->l = l;
+       rel->r = f;
        rel->op = op_table;
        rel->exps = exps;
        rel->card = CARD_MULTI;
@@ -1237,7 +1237,7 @@
        /* column or table function */
        st = exp_subtype(e);
        if (!st->comp_type) {
-               (void) sql_error(sql, 02, "SELECT: '%s' does not return a 
table", tname);
+               (void) sql_error(sql, 02, "SELECT: '%s' does not return a 
table", exp_func_name(e));
                return NULL;
        }
 
@@ -1247,7 +1247,7 @@
                sql_column *c = m->data;
                append(exps, exp_column(sql->sa, tname, c->base.name, &c->type, 
CARD_MULTI, c->null, 0));
        }
-       return rel_table_func(sql->sa, e, exps);
+       return rel_table_func(sql->sa, rel, e, exps);
 }
 
 static sql_exp *
@@ -1290,6 +1290,7 @@
                column_spec = 
query->data.lval->h->next->data.sym->data.lval->h->next->data.lval;
        }
 
+       /* TODO niels this needs a cleanup, shouldn't be needed anymore */
        if ((t = mvc_create_table_as_subquery(sql, sq, sql->session->schema, 
tname, column_spec, tt_stream, CA_COMMIT)) == NULL) {
                rel_destroy(sq);
                return NULL;
@@ -1318,7 +1319,7 @@
                sql_column *c = m->data;
                append(exps, exp_column(sql->sa, tname, c->base.name, &c->type, 
CARD_MULTI, c->null, 0));
        }
-       return rel_table_func(sql->sa, e, exps);
+       return rel_table_func(sql->sa, sq, e, exps);
 }
 
 static sql_rel *
diff -r 2ec4de549bf6 -r 593b7ab606ed sql/src/server/rel_select.h
--- a/sql/src/server/rel_select.h       Thu Jan 13 21:36:11 2011 +0100
+++ b/sql/src/server/rel_select.h       Thu Jan 13 21:52:28 2011 +0100
@@ -43,7 +43,7 @@
 extern sql_rel *rel_select_copy(sql_allocator *sa, sql_rel *l, list *exps);
 extern sql_rel *rel_basetable(sql_allocator *sa, sql_table *t, char *tname);
 extern sql_rel *rel_recursive_func(sql_allocator *sa, list *exps);
-extern sql_rel *rel_table_func(sql_allocator *sa, sql_exp *f, list *exps);
+extern sql_rel *rel_table_func(sql_allocator *sa, sql_rel *l, sql_exp *f, list 
*exps);
 
 extern sql_exp *rel_bind_column( mvc *sql, sql_rel *rel, char *cname, int f );
 extern sql_exp *rel_bind_column2( mvc *sql, sql_rel *rel, char *tname, char 
*cname, int f );
diff -r 2ec4de549bf6 -r 593b7ab606ed sql/src/server/rel_updates.c
--- a/sql/src/server/rel_updates.c      Thu Jan 13 21:36:11 2011 +0100
+++ b/sql/src/server/rel_updates.c      Thu Jan 13 21:52:28 2011 +0100
@@ -528,7 +528,7 @@
                sql_column *c = n->data;
                append(exps, exp_column(sql->sa, t->base.name, c->base.name, 
&c->type, CARD_MULTI, c->null, 0));
        }
-       res = rel_table_func(sql->sa, import, exps);
+       res = rel_table_func(sql->sa, NULL, import, exps);
        return res;
 }
 
@@ -704,7 +704,7 @@
                sql_column *c = n->data;
                append(exps, exp_column(sql->sa, t->base.name, c->base.name, 
&c->type, CARD_MULTI, c->null, 0));
        }
-       res = rel_table_func(sql->sa, import, exps);
+       res = rel_table_func(sql->sa, NULL, import, exps);
        return rel_insert_cluster(sql, t, res);
 }
 
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to