Update of /cvsroot/monetdb/sql/src/backends/monet5
In directory
sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv10921/src/backends/monet5
Modified Files:
sql.mx sql_gencode.mx sql_optimizer.mx sql_scenario.mx
sql_user.mx
Log Message:
moved most of the DDL statements into mal
Index: sql_scenario.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_scenario.mx,v
retrieving revision 1.371
retrieving revision 1.372
diff -u -d -r1.371 -r1.372
--- sql_scenario.mx 7 Jan 2010 15:24:31 -0000 1.371
+++ sql_scenario.mx 10 Jan 2010 15:33:33 -0000 1.372
@@ -235,7 +235,7 @@
char *debug_str = GDKgetenv("sql_debug");
int readonly = GDKgetenv_isyes("gdk_readonly");
int single_user = GDKgetenv_isyes("gdk_single_user");
- char *gmt = "GMT";
+ char *gmt = "GMT", *dbname = NULL;
tzone tz;
#ifdef _SQL_SCENARIO_DEBUG
@@ -260,11 +260,12 @@
SQLdebug |= 64;
if (readonly)
SQLdebug |= 32;
- if (((SQLdebug&16)==16 && mvc_init(FALSE, store_bpm, 0) < 0) ||
- ((SQLdebug&96)==96 && mvc_init(FALSE, store_suro, 0) <
0) ||
- ((SQLdebug&96)==64 && mvc_init(FALSE, store_su, 0) < 0)
||
- ((SQLdebug&96)==32 && mvc_init(FALSE, store_ro, 0) < 0)
||
- ((SQLdebug&112)==0 && mvc_init(FALSE, store_bat, 0) <
0))
+ dbname = GDKgetenv("gdk_dbname");
+ if (((SQLdebug&16)==16 && mvc_init(dbname, FALSE, store_bpm, 0) < 0) ||
+ ((SQLdebug&96)==96 && mvc_init(dbname, FALSE,
store_suro, 0) < 0) ||
+ ((SQLdebug&96)==64 && mvc_init(dbname, FALSE, store_su,
0) < 0) ||
+ ((SQLdebug&96)==32 && mvc_init(dbname, FALSE, store_ro,
0) < 0) ||
+ ((SQLdebug&112)==0 && mvc_init(dbname, FALSE,
store_bat, 0) < 0))
throw(SQL, "SQLinit", "Catalogue initialization failed");
SQLinitialized = TRUE;
mal_unset_lock(sql_contextLock,"SQL init");
Index: sql_gencode.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_gencode.mx,v
retrieving revision 1.349
retrieving revision 1.350
diff -u -d -r1.349 -r1.350
--- sql_gencode.mx 7 Jan 2010 15:24:31 -0000 1.349
+++ sql_gencode.mx 10 Jan 2010 15:33:33 -0000 1.350
@@ -471,7 +471,6 @@
return k;
}
-
InstrPtr
pushSchema(MalBlkPtr mb, InstrPtr q, sql_table *t)
{
@@ -1630,6 +1629,24 @@
s->nr = getDestVar(q);
break;
}
+ case st_catalog: {
+ int l = -1, r = -1, k = -1;
+
+ l = _dumpstmt(sql, mb, s->op1.stval);
+ if (s->op2.stval)
+ r = _dumpstmt(sql, mb, s->op2.stval);
+ k = _dumpstmt(sql, mb, s->op3.stval);
+ q = newStmt1(mb, sqlRef, "catalog");
+ q = pushInt(mb, q, s->flag);
+ q = pushArgument(mb, q, l);
+ if (r > 0)
+ q = pushArgument(mb, q, r);
+ else
+ q = pushNil(mb, q, TYPE_str);
+ q = pushArgument(mb, q, k);
+ s->nr = getDestVar(q);
+ break;
+ }
case st_alias:
s->nr = _dumpstmt(sql, mb, s->op1.stval);
break;
@@ -2174,12 +2191,13 @@
Symbol backup = NULL;
stmt *s;
int i, retseen =0, sideeffects =0;
+ sql_allocator *sa = sa_create(); /* NIELS: leaks, will be
resolved once we keep rel,sa,mb (for recompiles) */
/* nothing to do for internal and ready (not recompiling) functions */
if (!f->sql || f->sql > 1)
return;
f->sql++;
- s = sql_parse(m, f->imp, m_instantiate);
+ s = sql_parse(m, sa, f->imp, m_instantiate);
if (!s) {
fputs(m->errstr, stderr);
return;
Index: sql_user.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_user.mx,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -d -r1.51 -r1.52
--- sql_user.mx 7 Jan 2010 15:24:31 -0000 1.51
+++ sql_user.mx 10 Jan 2010 15:33:33 -0000 1.52
@@ -240,7 +240,7 @@
mvc_create_func(m, s, "db_users", l, &tpe, FALSE, FALSE, "sql",
"db_users", 1);
list_destroy(l);
- t = mvc_create_view(m, s, "users",
+ t = mvc_create_view(m, s, "users", SQL_PERSIST,
"SELECT u.\"name\" AS \"name\", "
"ui.\"fullname\", ui.\"default_schema\" "
"FROM db_users() AS u LEFT JOIN "
Index: sql_optimizer.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql_optimizer.mx,v
retrieving revision 1.242
retrieving revision 1.243
diff -u -d -r1.242 -r1.243
--- sql_optimizer.mx 7 Jan 2010 15:24:31 -0000 1.242
+++ sql_optimizer.mx 10 Jan 2010 15:33:33 -0000 1.243
@@ -359,15 +359,17 @@
sql_table *t = mvc_bind_table(m, s, tname);
sql_column *c = mvc_bind_column(m, t, cname);
- not_null = !c->null;
+ if (c) {
+ not_null = !c->null;
- if (active_store_type == store_bpm && c->data) {
- bpm = c->data;
- part = bpm->nr;
+ if (active_store_type == store_bpm &&
c->data) {
+ bpm = c->data;
+ part = bpm->nr;
+ }
+ cnt = store_funcs.count_col(c);
+ assert(cnt <= (size_t) GDK_oid_max);
+ rows = (oid) cnt;
}
- cnt = store_funcs.count_col(c);
- assert(cnt <= (size_t) GDK_oid_max);
- rows = (oid) cnt;
}
if (rows > 1 && mode != RD_INS)
varSetProp(mb, k, rowsProp, op_eq, VALset(&vr,
TYPE_oid, &rows));
Index: sql.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/backends/monet5/sql.mx,v
retrieving revision 1.387
retrieving revision 1.388
diff -u -d -r1.387 -r1.388
--- sql.mx 8 Jan 2010 13:40:18 -0000 1.387
+++ sql.mx 10 Jan 2010 15:33:33 -0000 1.388
@@ -44,6 +44,18 @@
address SQLtransaction
comment "a transaction statement (type can be commit,release,rollback or
start)";
+pattern catalog(type:int,sname:str,name:str,action:int):void
+address SQLcatalog
+comment "a catalog statement";
+
+pattern catalog(type:int,sname:str,t:ptr,temp:int):void
+address SQLcatalog
+comment "a catalog statement";
+
+pattern catalog(type:int,sname:str,t:ptr,restart:lng):void
+address SQLcatalog
+comment "a catalog statement";
+
pattern eval(cmd:str):void
address SQLstatement
comment "Compile and execute a single sql statement";
@@ -968,6 +980,7 @@
extern BAT *mvc_bind_idxbat(mvc *m, char *sname, char *tname, char *iname, int
access);
sql5_export str SQLtransaction(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+sql5_export str SQLcatalog(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
sql5_export str mvc_append_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
sql5_export str mvc_update_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
@@ -1177,6 +1190,7 @@
#include <sql_datetime.h>
#include <rel_optimizer.h>
#include <rel_select.h>
+#include <rel_exp.h>
#include <rel_dump.h>
#include <rel_bin.h>
#include <math.h>
@@ -1226,7 +1240,8 @@
from the statement cache. Compile and optimize it for later
consumption, e.g. display
@c
-stmt *
+/*
+static stmt *
sql_symbols2stmt(mvc *c, symbol *s)
{
dnode *d;
@@ -1244,6 +1259,7 @@
}
return stmt_list(l);
}
+*/
stmt *
sql_symbol2stmt(mvc *c, symbol *sym)
@@ -1252,8 +1268,10 @@
int status;
sql_rel *r;
+/*
if (sym->token == SQL_MULSTMT)
return sql_symbols2stmt(c, sym);
+*/
status = c->session->status;
r = rel_semantic(c, sym);
@@ -1417,6 +1435,416 @@
return MAL_SUCCEED;
}
+static str
+create_table_or_view( mvc *sql, char *sname, sql_table *t, int temp)
+{
+ sql_schema *s = mvc_bind_schema(sql, sname);
+ sql_table *nt = NULL;
+ node *n;
+
+ if (STORE_READONLY(active_store_type))
+ return sql_error(sql, 06, "schema statements cannot be executed
on a readonly database.");
+
+ if (!s)
+ return sql_message("CREATE %s: schema '%s' doesn't exist",
(t->query)?"TABLE":"VIEW", sname);
+
+ if (mvc_bind_table(sql, s, t->base.name)) {
+ char *cd = (temp == SQL_DECLARED_TABLE)?"DECLARE":"CREATE";
+ return sql_message("%s TABLE: name '%s' already in use", cd,
t->base.name);
+ } else if (temp != SQL_DECLARED_TABLE &&!schema_privs(sql->role_id, s)){
+ return sql_message("CREATE TABLE: insufficient privileges for
user '%s' in schema '%s'", stack_get_string(sql, "current_user"), s->base.name);
+ }
+
+ /* first check default values */
+ for (n = t->columns.set->h; n; n = n->next) {
+ sql_column *c = n->data;
+
+ if (c->def) {
+ char buf[BUFSIZ];
+ sql_rel *r = NULL;
+ sql_exp *e;
+
+ sql->sa = sa_create();
+ snprintf(buf, BUFSIZ, "select %s;", c->def);
+ r = rel_parse(sql, buf, m_deps);
+ if (!r || !is_project(r->op) || !r->exps ||
list_length(r->exps) != 1 || (e = rel_check_type(sql, &c->type,
exp_dup(r->exps->h->data), type_equal)) == NULL)
+ throw(SQL, "sql.catalog", sql->errstr);
+ exp_destroy(e);
+ sa_destroy(sql->sa);
+ sql->sa = NULL;
+ rel_destroy(r);
+ }
+ }
+
+ nt = sql_trans_create_table(sql->session->tr, s, t->base.name,
t->query, t->type, t->system, temp, t->commit_action, t->sz);
+
+ for (n = t->columns.set->h; n; n = n->next) {
+ sql_column *c = n->data;
+ mvc_copy_column(sql, nt, c);
+ }
+ if (t->idxs.set) {
+ for (n = t->idxs.set->h; n; n = n->next) {
+ sql_idx *i = n->data;
+ mvc_copy_idx(sql, nt, i);
+ }
+ }
+ if (t->keys.set) {
+ for (n = t->keys.set->h; n; n = n->next) {
+ sql_key *k = n->data;
+
+ mvc_copy_key(sql, nt, k);
+ }
+ }
+ /* TODO copy triggers */
+ /* also create dependencies */
+ if (t->query) {
+ sql_rel *r = NULL;
+ sql->sa = sa_create();
+ r = rel_parse(sql, t->query, m_deps);
+ sa_destroy(sql->sa);
+ sql->sa = NULL;
+ rel_destroy(r);
+ }
+ return MAL_SUCCEED;
+}
+
+static str
+alter_table( mvc *sql, char *sname, sql_table *t)
+{
+ sql_schema *s = mvc_bind_schema(sql, sname);
+ sql_table *nt = NULL;
+ node *n;
+
+ if (!s)
+ return sql_message("ALTER TABLE: no such schema '%s'", sname);
+
+ if ((nt = mvc_bind_table(sql, s, t->base.name)) == NULL) {
+ return sql_message("ALTER TABLE: no such table '%s'",
t->base.name);
+
+ } else if (!schema_privs(sql->role_id, s)){
+ return sql_message("ALTER TABLE: insufficient privileges for
user '%s' in schema '%s'", stack_get_string(sql, "current_user"), s->base.name);
+ }
+
+ /* check for changes */
+ if (t->columns.dset) for (n = t->columns.dset->h; n; n = n->next) {
+ /* propagate alter table .. drop column */
+ sql_column *c = n->data;
+ sql_column *nc = mvc_bind_column(sql, nt, c->base.name);
+ mvc_drop_column(sql, nt, nc, c->drop_action);
+ }
+ /* check for changes on current cols */
+ for (n = t->columns.set->h; n != t->columns.nelm; n = n->next) {
+
+ /* null or default value changes */
+ sql_column *c = n->data;
+ sql_column *nc = mvc_bind_column(sql, nt, c->base.name);
+
+ if (c->null != nc->null) {
+ mvc_null(sql, nc, c->null);
+ /* for non empty check for nulls */
+ if (c->null == 0){
+ BAT *b = store_funcs.bind_col(sql->session->tr,
nc, 0);
+
+ /* TODO also check updates and inserts */
+ if (BATcount(b) && b->T->nonil != TRUE) {
+ BUN bun = BUNfnd(BATmirror(b),
ATOMnilptr(b->ttype));
+ if (bun != BUN_NONE)
+ return sql_message ("ALTER
TABLE: NOT NULL constraint violated for column %s.%s", c->t->base.name,
c->base.name );
+ }
+ BBPunfix(b->batCacheid);
+ }
+ }
+ if (c->def != nc->def)
+ mvc_default(sql, nc, c->def);
+ }
+ for (; n; n = n->next) {
+ /* propagate alter table .. add column */
+ sql_column *c = n->data;
+ mvc_copy_column(sql, nt, c);
+ }
+ if (t->idxs.set) {
+ /* alter drop index */
+ if (t->idxs.dset) for (n = t->idxs.dset->h; n; n = n->next) {
+ sql_idx *i = n->data;
+ sql_idx *ni = mvc_bind_idx(sql, s, i->base.name);
+ mvc_drop_idx(sql, s, ni);
+ }
+ /* alter add index */
+ for (n = t->idxs.nelm; n; n = n->next) {
+ sql_idx *i = n->data;
+ mvc_copy_idx(sql, nt, i);
+ }
+ }
+ if (t->keys.set) {
+ /* alter drop key */
+ if (t->keys.dset) for (n = t->keys.dset->h; n; n = n->next) {
+ sql_key *k = n->data;
+ sql_key *nk = mvc_bind_key(sql, s, k->base.name);
+ mvc_drop_key(sql, s, nk, k->drop_action);
+ }
+ /* alter add key */
+ for (n = t->keys.nelm; n; n = n->next) {
+ sql_key *k = n->data;
+ mvc_copy_key(sql, nt, k);
+ }
+ }
+
+ /* TODO copy triggers */
+ /* also create dependencies */
+ return MAL_SUCCEED;
+}
+
+
+
+static char *
+drop_table(mvc *sql, char *sname, char *tname, int drop_action)
+{
+ sql_schema *s = NULL;
+ sql_table *t = NULL;
+ node *n;
+
+ if (sname && !(s=mvc_bind_schema(sql, sname)))
+ return sql_message("DROP TABLE: no such schema '%s'", sname);
+ if (!s)
+ s = cur_schema(sql);
+ t = mvc_bind_table(sql, s, tname);
+ if (!t && !sname) {
+ s = tmp_schema(sql);
+ t = mvc_bind_table(sql, s, tname);
+ }
+ if (!t) {
+ return sql_message("DROP TABLE: no such table '%s'", tname);
+ } else if (!isTable(t)) {
+ return sql_message("DROP TABLE: cannot drop VIEW '%s'", tname);
+ } else if (t->system) {
+ return sql_message("DROP TABLE: cannot drop system table '%s'",
tname);
+ } else if (!schema_privs(sql->role_id, s)) {
+ return sql_message("DROP TABLE: access denied for %s to schema
;'%s'", stack_get_string(sql, "current_user"), s->base.name);
+ }
+ if ( !drop_action && t->keys.set) {
+ for (n = t->keys.set->h; n; n = n->next) {
+ sql_key *k = n->data;
+
+ if (k->type == ukey || k->type == pkey) {
+ sql_ukey *uk = (sql_ukey *) k;
+
+ if (uk->keys && list_length(uk->keys)) {
+ node *l = uk->keys->h;
+
+ for (; l; l = l->next) {
+ k = l->data;
+ /* make sure it is not a self
referencing key */
+ if (k->t != t)
+ return
sql_message("DROP TABLE: FOREIGN KEY %s.%s depends on %s", k->t->base.name,
k->base.name, tname);
+ }
+ }
+ }
+ }
+ }
+
+ if (!drop_action && mvc_check_dependency(sql, t->base.id,
TABLE_DEPENDENCY, NULL))
+ return sql_message("DROP TABLE: unable to drop table %s (there
are database objects which depend on it)\n", t->base.name);
+
+ mvc_drop_table(sql, s, t, drop_action);
+ return MAL_SUCCEED;
+}
+
+static char *
+drop_view(mvc *sql, char *sname, char *tname, int drop_action)
+{
+ sql_table *t = NULL;
+ sql_schema *ss = NULL;
+
+ if (sname != NULL && (ss = mvc_bind_schema(sql, sname)) == NULL)
+ return sql_message("DROP VIEW: no such schema '%s'", sname);
+
+ if (ss == NULL)
+ ss = cur_schema(sql);
+
+ t = mvc_bind_table(sql, ss, tname);
+
+ if (!schema_privs(sql->role_id, ss)) {
+ return sql_message("DROP VIEW: access denied for %s to schema
'%s'", stack_get_string(sql, "current_user"), ss->base.name);
+ } else if (!t) {
+ return sql_message("DROP VIEW: unknown view '%s'", tname);
+ } else if (!isView(t)) {
+ return sql_message("DROP VIEW: unable to drop view '%s'",
tname);
+ } else if (t->system) {
+ return sql_message("DROP VIEW: cannot drop system view '%s'",
tname);
+ } else if (! drop_action && mvc_check_dependency(sql, t->base.id,
VIEW_DEPENDENCY, NULL)) {
+ return sql_message("unable to drop view %s (there are
database objects which depend on it)\n", t->base.name);
+ } else {
+ mvc_drop_table(sql, ss, t, drop_action);
+ return MAL_SUCCEED;
+ }
+}
+
+static str
+create_seq( mvc *sql, char *sname, sql_sequence *seq)
+{
+ sql_schema *s = NULL;
+
+ if (sname && !(s = mvc_bind_schema(sql, sname)))
+ return sql_message("CREATE SEQUENCE: no such schema '%s'",
sname);
+ if (s == NULL)
+ s = cur_schema(sql);
+ if (find_sql_sequence(s, seq->base.name)) {
+ return sql_message("CREATE SEQUENCE: name '%s' already in use",
seq->base.name);
+ } else if (!schema_privs(sql->role_id, s)) {
+ return sql_message( "CREATE SEQUENCE: insufficient privileges
for '%s' in schema '%s'", stack_get_string(sql, "current_user"), s->base.name);
+ }
+ sql_trans_create_sequence(sql->session->tr, s, seq->base.name,
seq->start, seq->minvalue, seq->maxvalue, seq->increment, seq->cacheinc,
seq->cycle);
+ return NULL;
+}
+
+static str
+alter_seq( mvc *sql, char *sname, sql_sequence *seq, lng *val)
+{
+ sql_schema *s = NULL;
+ sql_sequence *nseq = NULL;
+
+ if (sname && !(s = mvc_bind_schema(sql, sname)))
+ return sql_message("ALTER SEQUENCE: no such schema '%s'",
sname);
+ if (s == NULL)
+ s = cur_schema(sql);
+ if (!(nseq = find_sql_sequence(s, seq->base.name))) {
+ return sql_message( "ALTER SEQUENCE: no such sequence '%s'",
seq->base.name);
+ } else if (!schema_privs(sql->role_id, s)) {
+ return sql_message( "ALTER SEQUENCE: insufficient privileges
for '%s' in schema '%s'", stack_get_string(sql, "current_user"), s->base.name);
+ }
+
+ /* first alter the known values */
+ sql_trans_alter_sequence(sql->session->tr, nseq, seq->minvalue,
seq->maxvalue, seq->increment, seq->cacheinc, seq->cycle);
+ if (val)
+ sql_trans_sequence_restart(sql->session->tr, nseq, *val);
+ return MAL_SUCCEED;
+}
+
+
+
+
+static str
+drop_seq(mvc *sql, char *sname, char *name)
+{
+ sql_schema *s = NULL;
+
+ if (sname && !(s = mvc_bind_schema(sql, sname)))
+ return sql_message("DROP SEQUENCE: no such schema '%s'", sname);
+ if (!s)
+ s = cur_schema(sql);
+ if (!find_sql_sequence(s, name)) {
+ return sql_message("DROP SEQUENCE: no such sequence '%s'",
name);
+ } else if (!schema_privs(sql->role_id, s)) {
+ return sql_message("DROP SEQUENCE: insufficient privileges for
'%s' in schema '%s'", stack_get_string(sql, "current_user"), s->base.name);
+ }
+ sql_trans_drop_sequence(sql->session->tr, s, name, 0);
+ return NULL;
+}
+
+
+str
+SQLcatalog(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ mvc *sql = NULL;
+ str msg = getContext(cntxt, mb, &sql, NULL);
+ int type = *(int*) getArgReference(stk, pci, 1);
+ str sname = *(str*) getArgReference(stk, pci, 2);
+
+ if (msg)
+ return msg;
+
+ if (STORE_READONLY(active_store_type))
+ return sql_message("schema statements cannot be executed on a
readonly database.");
+
+ switch (type) {
+ case DDL_CREATE_SEQ:
+ {
+ sql_sequence *s = *(sql_sequence**) getArgReference(stk, pci,
3);
+ msg = create_seq(sql, sname, s);
+ } break;
+ case DDL_ALTER_SEQ:
+ {
+ lng *val;
+ sql_sequence *s = *(sql_sequence**) getArgReference(stk, pci,
3);
+ if (getArgType(mb, pci, 4) == TYPE_lng)
+ val = getArgReference(stk, pci, 4);
+ msg = alter_seq(sql, sname, s, val);
+ } break;
+ case DDL_DROP_SEQ: {
+ str name = *(str*) getArgReference(stk, pci, 3);
+
+ msg = drop_seq( sql, sname, name);
+ } break;
+ case DDL_CREATE_SCHEMA: {
+ str name = *(str*) getArgReference(stk, pci, 3);
+ int auth_id = sql->role_id;
+
+ if (name && strcmp(name, str_nil) == 0)
+ name = NULL;
+
+ if (name && (auth_id = sql_find_auth(sql, name)) < 0) {
+ msg = sql_message("CREATE SCHEMA: no such authorization
'%s'", name);
+ }
+ if (sql->user_id != USER_MONETDB && sql->role_id !=
ROLE_SYSADMIN) {
+ msg = sql_message("CREATE SCHEMA: insufficient
privileges for user '%s'", stack_get_string(sql, "current_user"));
+ }
+ if (mvc_bind_schema(sql, sname)) {
+ msg = sql_message("CREATE SCHEMA: name '%s' already in
use", sname);
+ } else {
+ (void)mvc_create_schema(sql, sname, auth_id,
sql->user_id);
+ }
+ } break;
+ case DDL_DROP_SCHEMA: {
+ int action = *(int*) getArgReference(stk, pci, 4);
+ sql_schema *s = mvc_bind_schema(sql, sname);
+
+ if (!s) {
+ msg = sql_message("DROP SCHEMA: name %s does not
exist", sname);
+ } else if (!schema_privs(sql->role_id, s)) {
+ msg = sql_message("DROP SCHEMA: access denied for %s to
schema ;'%s'", stack_get_string(sql, "current_user"), s->base.name);
+ } else if (s == cur_schema(sql)) {
+ msg = sql_message("DROP SCHEMA: cannot drop current
schema");
+ } else if (strcmp(sname, "sys") == 0 || strcmp(sname, "tmp") ==
0) {
+ msg = sql_message("DROP SCHEMA: access denied for
'%s'", sname);
+ } else if (sql_schema_has_user(sql, s)) {
+ msg = sql_message("DROP SCHEMA: unable to drop schema
'%s' (there are database objects which depend on it", sname);
+ } else {
+ mvc_drop_schema(sql, s, action);
+ }
+ } break;
+ case DDL_CREATE_TABLE:
+ case DDL_CREATE_VIEW:
+ {
+ sql_table *t = *(sql_table**) getArgReference(stk, pci, 3);
+ int temp = *(int*) getArgReference(stk, pci, 4);
+
+ msg = create_table_or_view(sql, sname, t, temp);
+ } break;
+ case DDL_DROP_TABLE: {
+ int action = *(int*) getArgReference(stk, pci, 4);
+ str name = *(str*) getArgReference(stk, pci, 3);
+
+ msg = drop_table( sql, sname, name, action);
+ } break;
+ case DDL_DROP_VIEW: {
+ int action = *(int*) getArgReference(stk, pci, 4);
+ str name = *(str*) getArgReference(stk, pci, 3);
+
+ msg = drop_view( sql, sname, name, action);
+ } break;
+ case DDL_ALTER_TABLE:
+ {
+ sql_table *t = *(sql_table**) getArgReference(stk, pci, 3);
+ msg = alter_table(sql, sname, t);
+ } break;
+ default:
+ throw(SQL, "sql.catalog", "catalog unknown type");
+ }
+ if (msg)
+ throw(SQL, "sql.catalog", msg);
+ return MAL_SUCCEED;
+}
+
/* setVariable(int *ret, str *name, any value) */
str
setVariable(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
@@ -3210,15 +3638,15 @@
q = (@2*) Tloc(b, BUNlast(b));
bn->T->nonil= b->T->nonil;
if ( b->T->nonil){
- for (; p<q; p++)
- *o++ = (@1)*p;
+ for (; p<q; p++, o++)
+ *o = (@1)*p;
} else{
- for (; p<q; p++)
+ for (; p<q; p++, o++)
if (*p == @2_nil) {
- *o++ = @1_nil;
+ *o = @1_nil;
bn->T->nonil= FALSE;
} else
- *o++ = (@1)*p;
+ *o = (@1)*p;
}
BATsetcount(bn, BATcount(b));
bn->tsorted = 0;
@@ -3279,29 +3707,30 @@
q = (@2*) Tloc(b, BUNlast(b));
bn->T->nonil= b->T->nonil;
if ( b->T->nonil){
- for (; p<q; p++){
+ for (; p<q; p++, o++){
val = *p;
/* see if the number fits in the data type */
if ((@3)(@1)val > (@3) g...@1_min && val > (@3)
g...@1_min && val <= (@3) g...@1_max) {
- *o++ = (@1)val;
+ *o = (@1)val;
} else {
msg= createException(SQL, "convert", "value ("
@4 ") exceeds limits of type @1", val);
break;
}
}
- } else{
- for (; p<q; p++)
- if (*p == @2_nil) {
- *o++ = @1_nil;
- bn->T->nonil= FALSE;
- } else {
- val = *p;
- /* see if the number fits in the data type */
- if ((@3)(@1)val > (@3) g...@1_min && val > (@3)
g...@1_min && val <= (@3) g...@1_max) {
- *o++ = (@1)val;
+ } else {
+ for (; p<q; p++, o++) {
+ if (*p == @2_nil) {
+ *o = @1_nil;
+ bn->T->nonil= FALSE;
} else {
- msg= createException(SQL, "convert", "value ("
@4 ") exceeds limits of type @1", val);
- break;
+ val = *p;
+ /* see if the number fits in the data type */
+ if ((@3)(@1)val > (@3) g...@1_min && val > (@3)
g...@1_min && val <= (@3) g...@1_max) {
+ *o = (@1)val;
+ } else {
+ msg= createException(SQL, "convert",
"value (" @4 ") exceeds limits of type @1", val);
+ break;
+ }
}
}
}
@@ -3409,15 +3838,17 @@
q = (@2*) Tloc(b, BUNlast(b));
bn->T->nonil= b->T->nonil;
if ( b->T->nonil){
- for (; p<q; p++)
- *o = (@1) ((*p + (*p<0)?-5:5) / scales[scale]);
- } else{
- for (; p<q; p++)
- if (*p == @2_nil) {
- *o = @1_nil;
- bn->T->nonil= FALSE;
- } else
+ for (; p<q; p++, o++)
*o = (@1) ((*p + (*p<0)?-5:5) / scales[scale]);
+ } else {
+ for (; p<q; p++, o++) {
+ if (*p == @2_nil) {
+ *o = @1_nil;
+ bn->T->nonil= FALSE;
+ } else {
+ *o = (@1) ((*p + (*p<0)?-5:5) / scales[scale]);
+ }
+ }
}
BATsetcount(bn, BATcount(b));
bn->tsorted = 0;
@@ -3738,15 +4169,15 @@
q = (@2*) Tloc(b, BUNlast(b));
bn->T->nonil= b->T->nonil;
if ( b->T->nonil){
- for (; p<q; p++)
- *o = (@1) (*p/scales[scale]);
+ for (; p<q; p++, o++)
+ *o = (((@1)*p)/scales[scale]);
} else{
- for (; p<q; p++) {
+ for (; p<q; p++, o++) {
if (*p == @2_nil) {
*o = @1_nil;
bn->T->nonil= FALSE;
} else
- *o = (@1) (*p/scales[scale]);
+ *o = (((@1)*p)/scales[scale]);
}
}
BATsetcount(bn, BATcount(b));
@@ -3924,7 +4355,7 @@
q = (@2*) Tloc(b, BUNlast(b));
bn->T->nonil= b->T->nonil;
if ( b->T->nonil){
- for (; p<q; p++) {
+ for (; p<q; p++, o++) {
val = (@2) ((*p+ (*p<0)?-5:5)/scales[scale]);
/* see if the number fits in the data type */
if (val > g...@1_min && val <= g...@1_max)
@@ -3936,7 +4367,7 @@
}
}
} else{
- for (; p<q; p++) {
+ for (; p<q; p++, o++) {
if (*p == @2_nil) {
*o = @1_nil;
bn->T->nonil= FALSE;
------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins