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