Niels,
could you please also check in the missing file
sql/test/Users/privs2.sql
Thanks! Stefan
On Wed, Feb 13, 2013 at 04:00:35PM +0100, Niels Nes wrote:
Changeset: fffd420f1ee8 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fffd420f1ee8 Added Files: sql/test/Users/Tests/privs2.sql.src sql/test/Users/Tests/privs2.stable.err sql/test/Users/Tests/privs2.stable.out sql/test/Users/Tests/test_privs2_p1.SQL.py sql/test/Users/Tests/test_privs2_p1.stable.err sql/test/Users/Tests/test_privs2_p1.stable.out sql/test/Users/Tests/test_privs2_p2.SQL.py sql/test/Users/Tests/test_privs2_p2.stable.err sql/test/Users/Tests/test_privs2_p2.stable.out Modified Files: sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_gencode.h sql/backends/monet5/sql_scenario.c sql/common/sql_backend.c sql/common/sql_backend.h sql/test/Users/Tests/All Branch: Feb2013 Log Message:
fixes and test added for bug 3230
diffs (truncated from 901 to 300 lines):
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 @@ -1124,8 +1124,6 @@ rel_parse_value(mvc *m, char *query, cha m->argc = 0; m->sym = NULL; m->errstr[0] = '\0';
/* via views we give access to protected objects */
m->user_id = USER_MONETDB;
(void) sqlparse(m); /* blindly ignore errors */
@@ -2741,8 +2739,6 @@ sql_parse(mvc *m, sql_allocator *sa, cha m->sym = NULL; m->errstr[0] = '\0'; m->errstr[ERRSIZE-1] = '\0';
/* via views we give access to protected objects */
m->user_id = USER_MONETDB;
/* create private allocator */ m->sa = (sa)?sa:sa_create();
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 @@ -54,7 +54,8 @@ #include <rel_bin.h>
static int _dumpstmt(backend *sql, MalBlkPtr mb, stmt *s); -static void backend_dumpstmt(backend *be, MalBlkPtr mb, stmt *s); +static int backend_dumpstmt(backend *be, MalBlkPtr mb, stmt *s); +static int backend_create_func(backend *be, sql_func *f);
/*
- @+ MAL code support
@@ -261,7 +262,7 @@ relational_func_create_result( mvc *sql, }
-static void +static int _create_relational_function(mvc *m, char *name, sql_rel *rel, stmt *call) { sql_rel *r; @@ -314,16 +315,18 @@ _create_relational_function(mvc *m, char } }
- backend_dumpstmt(be, curBlk, s);
- if (backend_dumpstmt(be, curBlk, s) < 0)
/* SQL function definitions meant for inlineing should not be optimized before */ varSetProp(curBlk, getArg(curInstr, 0), sqlfunctionProp, op_eq, NULL); addQueryToCache(c); if (backup) c->curprg = backup;return -1;
- return 0;
}
/* stub and remote function */ -static void +static int _create_relational_remote(mvc *m, char *name, sql_rel *rel, stmt *call, prop *prp) { Client c = MCgetClient(m->clientid); @@ -346,7 +349,8 @@ _create_relational_remote(mvc *m, char * /* dirty hack, rename (change first char of name) L->l, local * functions name start with 'l' */ name[0] = 'l';
- _create_relational_function(m, name, rel, call);
if (_create_relational_function(m, name, rel, call) < 0)
return -1;
/* create stub */ name[0] = old;
@@ -462,18 +466,19 @@ _create_relational_remote(mvc *m, char * if (backup) c->curprg = backup; name[0] = old; /* make sure stub is called */
- return 0;
}
-static void +static int monet5_create_relational_function(mvc *m, char *name, sql_rel *rel, stmt *call)
{ prop *p = NULL;
if (rel && (p = find_prop(rel->p, PROP_REMOTE)) != NULL)
_create_relational_remote(m, name, rel, call, p);
elsereturn _create_relational_remote(m, name, rel, call, p);
_create_relational_function(m, name, rel, call);
return _create_relational_function(m, name, rel, call);
}
/* @@ -663,7 +668,8 @@ dump_joinN(backend *sql, MalBlkPtr mb, s InstrPtr q; int op1, op2, op3 = 0;
- backend_create_func(sql, s->op4.funcval->func);
- if (backend_create_func(sql, s->op4.funcval->func) < 0)
mod = sql_func_mod(s->op4.funcval->func); fimp = sql_func_imp(s->op4.funcval->func);return -1;
@@ -1121,7 +1127,8 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st node *n; char *mod, *fimp;
backend_create_func(sql, s->op4.funcval->func);
if (backend_create_func(sql, s->op4.funcval->func) < 0)
return -1; mod = sql_func_mod(s->op4.funcval->func); fimp = sql_func_imp(s->op4.funcval->func);
@@ -1632,7 +1639,8 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st char *mod, *fimp; int l = _dumpstmt(sql, mb, s->op1);
backend_create_func(sql, s->op4.funcval->func);
if (backend_create_func(sql, s->op4.funcval->func) < 0)
return -1; mod = sql_func_mod(s->op4.funcval->func); fimp = sql_func_imp(s->op4.funcval->func); if (s->op1->nrcols && strcmp(fimp, "not_uniques") == 0) {
@@ -1666,7 +1674,8 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st int l = _dumpstmt(sql, mb, s->op1); int r = _dumpstmt(sql, mb, s->op2);
backend_create_func(sql, s->op4.funcval->func);
if (backend_create_func(sql, s->op4.funcval->func) < 0)
return -1; mod = sql_func_mod(s->op4.funcval->func); fimp = sql_func_imp(s->op4.funcval->func);
@@ -1713,7 +1722,8 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st /* dump operands */ _dumpstmt(sql, mb, s->op1);
backend_create_func(sql, f->func);
if (backend_create_func(sql, f->func) < 0)
return -1; mod = sql_func_mod(f->func); fimp = sql_func_imp(f->func); if (s->nrcols) {
@@ -1769,7 +1779,8 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st /* dump args */ if (s->op1) _dumpstmt(sql, mb, s->op1);
monet5_create_relational_function(sql->mvc, fimp, rel, s);
if (monet5_create_relational_function(sql->mvc, fimp, rel, s) < 0)
return -1; q = newStmt(mb, mod, fimp); q = relational_func_create_result(sql->mvc, mb, q, rel);
@@ -1791,7 +1802,8 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st int restype = s->op4.aggrval->res.type->localtype; int sum_or_prod = 0;
backend_create_func(sql, s->op4.aggrval->aggr);
if (backend_create_func(sql, s->op4.aggrval->aggr) < 0)
return -1; mod = s->op4.aggrval->aggr->mod; aggrfunc = s->op4.aggrval->aggr->imp;
@@ -2241,7 +2253,8 @@ static void setCommitProperty(MalBlkPtr varSetProperty(mb, getArg(getInstrPtr(mb,0),0), "autoCommit","=", &cst); }
-static void backend_dumpstmt(backend *be, MalBlkPtr mb, stmt *s) +static int +backend_dumpstmt(backend *be, MalBlkPtr mb, stmt *s) { mvc *c = be->mvc; stmt **stmts = stmt_array(c->sa, s); @@ -2258,9 +2271,11 @@ static void backend_dumpstmt(backend *be clear_stmts(stmts); while(stmts[nr]) { stmt *s = stmts[nr++];
(void)_dumpstmt(be, mb, s);
if (_dumpstmt(be, mb, s) < 0)
}return -1;
- (void)_dumpstmt(be, mb, s);
if (_dumpstmt(be, mb, s) < 0)
return -1;
be->mvc_var = old_mv; if (c->caching && (c->type == Q_SCHEMA || c->type == Q_TRANS)) {
@@ -2275,9 +2290,10 @@ static void backend_dumpstmt(backend *be q->barrier = RETURNsymbol; } pushEndInstruction(mb);
- return 0;
}
-void +int backend_callinline(backend *be, Client c, stmt *s ) { mvc *m = be->mvc; @@ -2311,8 +2327,10 @@ backend_callinline(backend *be, Client c } } }
- backend_dumpstmt(be, curBlk, s);
- if (backend_dumpstmt(be, curBlk, s) < 0)
c->curprg->def = curBlk;return -1;
- return 0;
}
Symbol @@ -2335,8 +2353,9 @@ backend_dumpproc(backend *be, Client c, sql_subfunc *cq = sql_find_func(m->sa, sys, "keepcall", NR_KEEPCALL_ARGS, F_PROC);
assert(kq && cq);
backend_create_func(be, kq->func);
backend_create_func(be, cq->func);
if (backend_create_func(be, kq->func) < 0 ||
backend_create_func(be, cq->func) < 0)
/* only needed once */ m->history = 2; }return NULL;
@@ -2382,7 +2401,8 @@ backend_dumpproc(backend *be, Client c, } }
- backend_dumpstmt(be, mb, s);
- if (backend_dumpstmt(be, mb, s) < 0)
Toptimize = GDKusec(); Tparse = Toptimize - m->Tparse;return NULL;
@@ -2459,53 +2479,6 @@ backend_call(backend *be, Client c, cq * } }
-void -monet5_create_table_function(ptr M, char *name, sql_rel *rel, sql_table *t) -{
- sql_rel *r;
- mvc *m = (mvc*)M;
- Client c = MCgetClient(m->clientid);
- backend *be = (backend *) c->sqlcontext;
- MalBlkPtr curBlk = 0;
- InstrPtr curInstr = 0;
- Symbol backup = NULL;
- stmt *s;
- (void)t;
- r = rel_optimizer(m, rel);
- s = rel_bin(m, r);
- if (s->type == st_list && s->nrcols == 0 && s->key) {
/* row to columns */
node *n;
list *l = sa_list(m->sa);
for(n=s->op4.lval->h; n; n = n->next)
list_append(l, const_column(m->sa, n->data));
s = stmt_list(m->sa, l);
- }
- s = stmt_table(m->sa, s, 1);
- s = stmt_return(m->sa, s, 0);
- backup = c->curprg;
- c->curprg = newFunction(userRef,putName(name,strlen(name)), FUNCTIONsymbol);
- curBlk = c->curprg->def;
- curInstr = getInstrPtr(curBlk, 0);
- curInstr = table_func_create_result(curBlk, curInstr, t);
- setVarUDFtype(curBlk,0);
- /* no ops */
- backend_dumpstmt(be, curBlk, s);
- /* SQL function definitions meant for inlineing should not be optimized before */
- varSetProp(curBlk, getArg(curInstr, 0), sqlfunctionProp, op_eq, NULL);
- addQueryToCache(c);
- if (backup)
c->curprg = backup;
-}
int monet5_resolve_function(ptr M, sql_func *f) { @@ -2548,7 +2521,7 @@ monet5_resolve_function(ptr M, sql_func }
/* TODO handle aggr */ -void +static int backend_create_func(backend *be, sql_func *f) { mvc *m = be->mvc; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list