Changeset: c9f6755cc596 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c9f6755cc596
Modified Files:
        configure.ag
        sql/backends/monet5/sql.mx
        sql/include/sql_relation.h
        sql/server/rel_bin.c
        sql/server/rel_exp.c
        sql/server/rel_schema.c
        sql/server/rel_semantic.c
        sql/server/rel_sequence.c
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_parser.y
        sql/server/sql_privileges.c
        sql/server/sql_privileges.h
        sql/server/sql_schema.c
        sql/server/sql_semantic.c
        sql/server/sql_statement.c
        sql/storage/sql_storage.h
        sql/storage/store_connections.c
        
sql/test/BugDay_2005-10-06_2.9.3/Tests/index_management.SF-927326.stable.err
        
sql/test/BugTracker-2009/Tests/unique_constraint_on_char.SF-2873564.stable.err
        sql/test/UserDump/Tests/create.stable.out
Branch: default
Log Message:

move the CREATE/ALTER/DROP USER and CREATE/DROP index and type
into the relational and mal layer


diffs (truncated from 1156 to 300 lines):

diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -1008,7 +1008,7 @@
                       dnl  (Mserver produces tons of incorrect BATpropcheck 
warnings);
                       dnl  hence, we omit -funroll-all-loops, here.
                       case "$gcc_ver" in
-                      4.*) CFLAGS="$CFLAGS -ftree-vectorize";;
+                      4.*) CFLAGS="$CFLAGS -ftree-vectorize -march=atom";;
                            dnl  "-ftree-vectorize" is only available with 
newer versions of gcc, only;
                            dnl  did not check the exact version, but 4.1 has 
it, while 3.4.5 does not.
                       esac
@@ -1016,7 +1016,7 @@
       x86_64-*-*|i*86-*-*)
                       CFLAGS="$CFLAGS -O6 -fomit-frame-pointer 
-finline-functions -malign-loops=4 -malign-jumps=4 -malign-functions=4 
-fexpensive-optimizations -funroll-all-loops  -funroll-loops 
-frerun-cse-after-loop -frerun-loop-opt"
                       case "$gcc_ver" in
-                      4.*) CFLAGS="$CFLAGS -ftree-vectorize";;
+                      4.*) CFLAGS="$CFLAGS -ftree-vectorize -march=atom";;
                            dnl  "-ftree-vectorize" is only available with 
newer versions of gcc, only;
                            dnl  did not check the exact version, but 4.1 has 
it, while 3.4.5 does not.
                       esac
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -66,10 +66,18 @@
 address SQLcatalog
 comment "a grant/revoke role statement";
 
+pattern 
catalog(type:int,user:str,passwd:str,enc:int,schema:str,fullname:str):void
+address SQLcatalog
+comment "a user catalog statement";
+
 pattern 
catalog(type:int,tname:str,grantee:str,privs:int,cname:str,grant:int,grantor:int):void
 address SQLcatalog
 comment "a grant/revoke privileges statement";
 
+pattern catalog(type:int,iname:str,itype:int,sname:str,tname:str...):void
+address SQLcatalog
+comment "a create index catalog statement";
+
 pattern eval(cmd:str):void 
 address SQLstatement
 comment "Compile and execute a single sql statement";
@@ -1931,6 +1939,65 @@
 }
 
 static str
+create_index( mvc *sql, char *iname, int itype, char *sname, char *tname, 
MalStkPtr stk, InstrPtr pci) 
+{
+       sql_schema *s = NULL;
+       sql_table *t = NULL;
+       sql_idx *i = NULL;
+
+       if (!(s = mvc_bind_schema(sql, sname)))
+               return sql_message("CREATE INDEX: no such schema '%s'", sname);
+
+       i = mvc_bind_idx(sql, s, iname);
+       t = mvc_bind_table(sql, s, tname);
+       if (i) {
+               return sql_message("CREATE INDEX: name '%s' already in use", 
iname);
+       } else if (!t) {
+               return sql_message("CREATE INDEX: no such table '%s'", tname);
+       } else if (isView(t)) {
+               return sql_message("CREATE INDEX: cannot create index on view 
'%s'", tname);
+       } else {
+               int n;
+               sql_idx *i = mvc_create_idx(sql, t, iname, (idx_type) itype);
+
+               if (!i) 
+                       return sql_message("CREATE INDEX: failed to create 
index '%s'", iname);
+
+               for (n=6; n<pci->argc; n++) {
+                       char *cname = *(str*)getArgReference(stk, pci, n);
+                       sql_column *c = mvc_bind_column(sql, t, cname);
+
+                       if (!c) {
+                               return sql_message("CREATE INDEX: no such 
column '%s'", cname);
+                       } else {
+                               mvc_create_ic(sql, i, c);
+                               mvc_create_dependency(sql, c->base.id, 
i->base.id, INDEX_DEPENDENCY);
+                       }
+               }
+       }
+       return NULL;
+}
+
+static str
+drop_index( mvc *sql, char *sname, char *iname)
+{
+       sql_schema *s = NULL;
+       sql_idx *i = NULL;
+
+       if (!(s=mvc_bind_schema(sql, sname))) 
+               return sql_message("DROP INDEX: no such schema '%s'", sname);
+       i = mvc_bind_idx(sql, s, iname);
+       if (!i) {
+               return sql_message("DROP INDEX: no such index '%s'", iname);
+       } else if (!schema_privs(sql->role_id, s)) {
+               return sql_message("DROP INDEX: access denied for %s to schema 
;'%s'", stack_get_string(sql, "current_user"), s->base.name);
+       } else {
+               mvc_drop_idx(sql, s, i);
+       }
+       return NULL;
+}
+
+static str
 create_seq( mvc *sql, char *sname, sql_sequence *seq)
 {
        sql_schema *s = NULL;
@@ -2097,16 +2164,23 @@
 
                msg = drop_view( sql, sname, name, action);
        }       break;
-       case DDL_ALTER_TABLE: 
-       {
+       case DDL_DROP_CONSTRAINT: {
+               int action = *(int*) getArgReference(stk, pci, 4);
+               str name = *(str*) getArgReference(stk, pci, 3);
+
+               msg = drop_key( 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;
-       case DDL_DROP_CONSTRAINT: {
-               int action = *(int*) getArgReference(stk, pci, 4);
-               str name = *(str*) getArgReference(stk, pci, 3);
-
-               msg = drop_key( sql, sname, name, action);
+       case DDL_CREATE_TYPE: {
+               char *impl = *(str*) getArgReference(stk, pci, 3);
+               if (!mvc_create_type(sql, sql->session->schema, sname, 0, 0, 0, 
impl)) 
+                       msg = sql_message("CREATE TYPE: unknown external type 
'%s'", impl);
+       }       break;
+       case DDL_DROP_TYPE: {
+               msg = sql_message("DROP TYPE: not implemented ('%s')", sname);
        }       break;
        case DDL_GRANT_ROLES: {
                char *auth = SaveArgReference(stk, pci, 3);
@@ -2134,6 +2208,27 @@
                int grantor = *(int*)getArgReference(stk, pci, 7);
                msg = sql_revoke_table_privs( sql, grantee, privs, sname, 
cname, grant, grantor);
        }       break;
+       case DDL_CREATE_USER: {
+               char *passwd = *(str*)getArgReference(stk, pci, 3);
+               int enc = *(int*)getArgReference(stk, pci, 4);
+               char *schema = SaveArgReference(stk, pci, 5);
+               char *fullname = SaveArgReference(stk, pci, 6);
+               msg = sql_create_user( sql, sname, passwd, enc, fullname, 
schema);
+       }       break;
+       case DDL_DROP_USER: {
+               msg = sql_drop_user( sql, sname);
+       }       break;
+       case DDL_ALTER_USER: {
+               char *passwd = SaveArgReference(stk, pci, 3);
+               int enc = *(int*)getArgReference(stk, pci, 4);
+               char *schema = SaveArgReference(stk, pci, 5);
+               char *oldpasswd = SaveArgReference(stk, pci, 6);
+               msg = sql_alter_user( sql, sname, passwd, enc, schema, 
oldpasswd);
+       }       break;
+       case DDL_RENAME_USER: {
+               char *newuser = *(str*)getArgReference(stk, pci, 3);
+               msg = sql_rename_user( sql, sname, newuser);
+       }       break;
        case DDL_CREATE_ROLE: {
                char *role = sname;
                int grantor = *(int*)getArgReference(stk, pci, 4);
@@ -2143,6 +2238,16 @@
                char *role = sname;
                msg = sql_drop_role( sql, role);
        }       break;
+       case DDL_CREATE_INDEX: {
+               int itype = *(int*)getArgReference(stk, pci, 3);
+               char *ssname = *(str*)getArgReference(stk, pci, 4);
+               char *tname = *(str*)getArgReference(stk, pci, 5);
+               msg = create_index( sql, sname, itype, ssname, tname, stk, pci);
+       }       break;
+       case DDL_DROP_INDEX: {
+               char *iname = *(str*)getArgReference(stk, pci, 3);
+               msg = drop_index( sql, sname, iname );
+       }       break;
        default:
                throw(SQL, "sql.catalog", "catalog unknown type");
        }
diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h
--- a/sql/include/sql_relation.h
+++ b/sql/include/sql_relation.h
@@ -93,15 +93,16 @@
 #define DDL_DROP_CONSTRAINT    28
 #define DDL_ALTER_TABLE  29
 
-#define DDL_CREATE_INDEX  30
-#define DDL_DROP_INDEX    31
+#define DDL_CREATE_TYPE 30 
+#define DDL_DROP_TYPE   31 
+
+#define DDL_CREATE_INDEX  32
+#define DDL_DROP_INDEX    33
 
 #define DDL_CREATE_FUNCTION 41 
 #define DDL_DROP_FUNCTION   42 
-#define DDL_CREATE_TYPE 43 
-#define DDL_DROP_TYPE   44 
-#define DDL_CREATE_TRIGGER 45 
-#define DDL_DROP_TRIGGER   46 
+#define DDL_CREATE_TRIGGER 43 
+#define DDL_DROP_TRIGGER   44 
 
 #define DDL_GRANT_ROLES 51
 #define DDL_REVOKE_ROLES 52
diff --git a/sql/server/rel_bin.c b/sql/server/rel_bin.c
--- a/sql/server/rel_bin.c
+++ b/sql/server/rel_bin.c
@@ -3385,22 +3385,6 @@
 }
 
 static stmt *
-rel2bin_drop_seq(mvc *sql, sql_rel *rel, list *refs) 
-{
-       node *en = rel->exps->h;
-       stmt *action = exp_bin(sql, en->data, NULL, NULL, NULL, NULL);
-       stmt *sname = exp_bin(sql, en->next->data, NULL, NULL, NULL, NULL);
-       stmt *name = exp_bin(sql, en->next->next->data, NULL, NULL, NULL, NULL);
-       list *l = list_new(sql->sa);
-
-       (void)refs;
-       append(l, sname);
-       append(l, name);
-       append(l, action);
-       return stmt_catalog(sql->sa, rel->flag, stmt_list(sql->sa, l));
-}
-
-static stmt *
 rel2bin_trans(mvc *sql, sql_rel *rel, list *refs) 
 {
        node *en = rel->exps->h;
@@ -3456,7 +3440,7 @@
 }
 
 static stmt *
-rel2bin_privs(mvc *sql, sql_rel *rel, list *refs) 
+rel2bin_catalog2(mvc *sql, sql_rel *rel, list *refs) 
 {
        node *en;
        list *l = list_new(sql->sa);
@@ -3491,7 +3475,7 @@
                s = rel2bin_seq(sql, rel, refs);
                sql->type = Q_SCHEMA;
        } else if (rel->flag <= DDL_DROP_SEQ) {
-               s = rel2bin_drop_seq(sql, rel, refs);
+               s = rel2bin_catalog2(sql, rel, refs);
                sql->type = Q_SCHEMA;
        } else if (rel->flag <= DDL_TRANS) {
                s = rel2bin_trans(sql, rel, refs);
@@ -3502,11 +3486,8 @@
        } else if (rel->flag <= DDL_ALTER_TABLE) {
                s = rel2bin_catalog_table(sql, rel, refs);
                sql->type = Q_SCHEMA;
-       } else if (rel->flag <= DDL_REVOKE) {
-               s = rel2bin_privs(sql, rel, refs);
-               sql->type = Q_SCHEMA;
        } else if (rel->flag <= DDL_DROP_ROLE) {
-               s = rel2bin_catalog(sql, rel, refs);
+               s = rel2bin_catalog2(sql, rel, refs);
                sql->type = Q_SCHEMA;
        }
        return s;
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -209,7 +209,7 @@
        sql_subtype clob;
 
        sql_find_subtype(&clob, "clob", 0, 0);
-       return exp_atom(sa, atom_string(sa, &clob, sa_strdup(sa, s)));
+       return exp_atom(sa, atom_string(sa, &clob, s?sa_strdup(sa, s):NULL));
 }
 
 sql_exp *
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -28,6 +28,8 @@
 #include "sql_parser.h"
 #include "sql_privileges.h"
 
+#define qname_index(qname) qname_table(qname)
+
 static sql_table *
 _bind_table(sql_table *t, sql_schema *ss, sql_schema *s, char *name)
 {
@@ -943,6 +945,26 @@
 }
 
 static sql_rel *
+rel_schema2(sql_allocator *sa, int cat_type, char *sname, char *auth, int nr)
+{
+       sql_rel *rel = rel_create(sa);
+       list *exps = new_exp_list(sa);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to