Changeset: 0b290dc0ea03 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0b290dc0ea03 Modified Files: sql/backends/monet5/sql.c Branch: leftmart Log Message:
SQL support for creating ordered indexes. The command to create an order index for a specific table attribute is CREATE ORDERED INDEX identifier ON qname_table(qname_column); and to drop that index DROP INDEX identifier; diffs (132 lines): 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 @@ -33,6 +33,7 @@ #include <rel_bin.h> #include <bbp.h> #include <opt_pipes.h> +#include <orderidx.h> #include "clients.h" #include "mal_instruction.h" #include "mal_resource.h" @@ -496,8 +497,31 @@ table_has_updates(sql_trans *tr, sql_tab return cnt; } +static BAT * +mvc_bind(mvc *m, char *sname, char *tname, char *cname, int access) +{ + sql_trans *tr = m->session->tr; + BAT *b = NULL; + sql_schema *s = NULL; + sql_table *t = NULL; + sql_column *c = NULL; + + s = mvc_bind_schema(m, sname); + if (s == NULL) + return NULL; + t = mvc_bind_table(m, s, tname); + if (t == NULL) + return NULL; + c = mvc_bind_column(m, t, cname); + if (c == NULL) + return NULL; + + b = store_funcs.bind_col(tr, c, access); + return b; +} + static str -alter_table(mvc *sql, char *sname, sql_table *t) +alter_table(Client cntxt, mvc *sql, char *sname, sql_table *t) { sql_schema *s = mvc_bind_schema(sql, sname); sql_table *nt = NULL; @@ -580,10 +604,13 @@ alter_table(mvc *sql, char *sname, sql_t for (n = t->idxs.nelm; n; n = n->next) { sql_idx *i = n->data; - if (i->type == ordered_idx) - printf("TODO call create ordered index code\n"); - else - mvc_copy_idx(sql, nt, i); + if (i->type == ordered_idx) { + sql_kc *ic = i->columns->h->data; + BAT *b = mvc_bind(sql, nt->s->base.name, nt->base.name, ic->c->base.name, 0); + OIDXcreateImplementation(cntxt, newBatType(TYPE_void,b->ttype), b, -1); + BBPunfix(b->batCacheid); + } + mvc_copy_idx(sql, nt, i); } } if (t->keys.set) { @@ -708,7 +735,7 @@ drop_key(mvc *sql, char *sname, char *kn } static str -drop_index(mvc *sql, char *sname, char *iname) +drop_index(Client cntxt, mvc *sql, char *sname, char *iname) { sql_schema *s = NULL; sql_idx *i = NULL; @@ -721,6 +748,12 @@ drop_index(mvc *sql, char *sname, char * } else if (!mvc_schema_privs(sql, s)) { return sql_message("42000!DROP INDEX: access denied for %s to schema ;'%s'", stack_get_string(sql, "current_user"), s->base.name); } else { + if (i->type == ordered_idx) { + sql_kc *ic = i->columns->h->data; + BAT *b = mvc_bind(sql, s->base.name, ic->c->t->base.name, ic->c->base.name, 0); + OIDXdropImplementation(cntxt, b); + BBPunfix(b->batCacheid); + } mvc_drop_idx(sql, s, i); } return NULL; @@ -1269,7 +1302,7 @@ SQLcatalog(Client cntxt, MalBlkPtr mb, M } case DDL_ALTER_TABLE:{ sql_table *t = *(sql_table **) getArgReference(stk, pci, 3); - msg = alter_table(sql, sname, t); + msg = alter_table(cntxt, sql, sname, t); break; } case DDL_CREATE_TYPE:{ @@ -1397,7 +1430,7 @@ SQLcatalog(Client cntxt, MalBlkPtr mb, M } case DDL_DROP_INDEX:{ char *iname = *getArgReference_str(stk, pci, 3); - msg = drop_index(sql, sname, iname); + msg = drop_index(cntxt, sql, sname, iname); break; } case DDL_DROP_FUNCTION:{ @@ -1763,29 +1796,6 @@ mvc_restart_seq(Client cntxt, MalBlkPtr } static BAT * -mvc_bind(mvc *m, char *sname, char *tname, char *cname, int access) -{ - sql_trans *tr = m->session->tr; - BAT *b = NULL; - sql_schema *s = NULL; - sql_table *t = NULL; - sql_column *c = NULL; - - s = mvc_bind_schema(m, sname); - if (s == NULL) - return NULL; - t = mvc_bind_table(m, s, tname); - if (t == NULL) - return NULL; - c = mvc_bind_column(m, t, cname); - if (c == NULL) - return NULL; - - b = store_funcs.bind_col(tr, c, access); - return b; -} - -static BAT * mvc_bind_dbat(mvc *m, char *sname, char *tname, int access) { sql_trans *tr = m->session->tr; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list