Changeset: 46a74207c25d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=46a74207c25d
Modified Files:
        sql/src/backends/monet5/sql.mx
        sql/src/include/sql_catalog.h
        sql/src/server/rel_optimizer.mx
        sql/src/server/sql_mvc.mx
        sql/src/server/sql_parser.mx
        sql/src/storage/sql_storage.h
        sql/src/storage/store.mx
Branch: default
Log Message:

Merge with Jun2010 branch.


diffs (truncated from 309 to 300 lines):

diff -r e4ae9e48d397 -r 46a74207c25d sql/src/backends/monet5/sql.mx
--- a/sql/src/backends/monet5/sql.mx    Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/backends/monet5/sql.mx    Wed Jul 07 17:30:06 2010 +0200
@@ -1814,7 +1814,7 @@
        } 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);  
+       sql_trans_create_sequence(sql->session->tr, s, seq->base.name, 
seq->start, seq->minvalue, seq->maxvalue, seq->increment, seq->cacheinc, 
seq->cycle, seq->bedropped);
        return NULL;
 }
 
@@ -1848,17 +1848,21 @@
 drop_seq(mvc *sql, char *sname, char *name)
 {
        sql_schema *s = NULL;
+       sql_sequence *seq = 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)) {
+       if (!(seq = 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);  
+       if (mvc_check_dependency(sql, seq->base.id, BEDROPPED_DEPENDENCY, NULL))
+               return sql_message("DROP SEQUENCE: unable to drop sequence %s 
(there are database objects which depend on it)\n", seq->base.name);
+
+       sql_trans_drop_sequence(sql->session->tr, s, seq, 0);
        return NULL;
 }
 
diff -r e4ae9e48d397 -r 46a74207c25d 
sql/src/benchmarks/arno_flt/Tests/init.stable.out.Windows
--- a/sql/src/benchmarks/arno_flt/Tests/init.stable.out.Windows Wed Jul 07 
16:55:54 2010 +0200
+++ b/sql/src/benchmarks/arno_flt/Tests/init.stable.out.Windows Wed Jul 07 
17:30:06 2010 +0200
@@ -10,6 +10,23 @@
 # Compiled for i686-redhat-linux-gnu/32bit; dynamically linked.
 # Visit http://monetdb.cwi.nl/ for further information.
 
+# MonetDB server v5.19.0, based on kernel v1.37.0
+# Serving database 'mTests_src_benchmarks_arno_flt', using 4 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically 
linked
+# Found 7.751 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2010 MonetDB B.V., all rights reserved
+# Visit http://monetdb.cwi.nl/ for further information
+# Listening for connection requests on mapi:monetdb://eir.ins.cwi.nl:31295/
+# MonetDB/SQL module v2.37.0 loaded
+function user.main():void;
+    INT_MAX := 2147483647;
+    dbgmsk := mdb.getDebug();
+    unset := calc.+(8,8388608);
+    keep := calc.xor(INT_MAX,unset);
+    set := calc.and(dbgmsk,keep);
+    mdb.setDebug(set);
+end main;
 
 Ready.
 
diff -r e4ae9e48d397 -r 46a74207c25d 
sql/src/benchmarks/wisconsin/Tests/load.timeout
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sql/src/benchmarks/wisconsin/Tests/load.timeout   Wed Jul 07 17:30:06 
2010 +0200
@@ -0,0 +1,1 @@
+2
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/include/sql_catalog.h
--- a/sql/src/include/sql_catalog.h     Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/include/sql_catalog.h     Wed Jul 07 17:30:06 2010 +0200
@@ -60,6 +60,7 @@
 #define TYPE_DEPENDENCY 11
 #define SEQ_DEPENDENCY 12
 #define PROC_DEPENDENCY 13
+#define BEDROPPED_DEPENDENCY 14                /*The object must be dropped 
when the dependent object is dropped independently of the DROP type.*/
 #define NO_DEPENDENCY 0
 #define HAS_DEPENDENCY 1
 #define CICLE_DEPENDENCY 2
@@ -328,6 +329,7 @@
        lng increment;
        lng cacheinc;
        bit cycle;
+       bit bedropped;          /*Drop the SEQUENCE if you are dropping the 
column, e.g., SERIAL COLUMN".*/
        sql_schema *s;
 } sql_sequence;
 
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/server/rel_optimizer.mx
--- a/sql/src/server/rel_optimizer.mx   Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/server/rel_optimizer.mx   Wed Jul 07 17:30:06 2010 +0200
@@ -1073,8 +1073,13 @@
                return e;
        case e_cmp: 
                if (e->flag == cmp_or) {
-                       list *l = exps_push_down(sql, e->l, f, t);
-                       list *r = exps_push_down(sql, e->r, f, t);
+                       list *l;
+                       list *r;
+                       /* for SkyTec's query in bug #2595, allow to disable 
this */
+                       if (mvc_debug_on(sql, 65536))
+                               return NULL;
+                       l = exps_push_down(sql, e->l, f, t);
+                       r = exps_push_down(sql, e->r, f, t);
                        if (!l || !r) {
                                list_destroy(l);
                                list_destroy(r);
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/server/rel_sequence.mx
--- a/sql/src/server/rel_sequence.mx    Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/server/rel_sequence.mx    Wed Jul 07 17:30:06 2010 +0200
@@ -104,7 +104,8 @@
        lng min,
        lng max,
        lng cache,
-       int cycle)
+       int cycle,
+       int bedropped)
 {
        sql_rel *res = NULL;
        sql_sequence *seq = NULL;
@@ -135,6 +136,7 @@
        if (cache <= 0) cache = 1;
 
        seq = create_sql_sequence(sql->sa, s, name, start, min, max, inc, 
cache, cycle);  
+       seq->bedropped = bedropped;
        res = rel_seq(DDL_CREATE_SEQ, s->base.name, seq, NULL, NULL);
        if (res)
                stack_push_rel_view(sql, name, rel_dup(res));
@@ -229,6 +231,7 @@
                        assert(h->h->next->next->next->type == type_lng);
                        assert(h->h->next->next->next->next->type == type_lng);
                        assert(h->h->next->next->next->next->next->type == 
type_int);
+                       assert(h->h->next->next->next->next->next->next->type 
== type_int);
                        res = rel_create_seq(
 /* mvc* sql */         sql,
 /* sql_schema* s */    cur_schema(sql), 
@@ -239,7 +242,8 @@
 /* lng min */          h->h->next->next->data.l_val, 
 /* lng max */          h->h->next->next->next->data.l_val,
 /* lng cache */                h->h->next->next->next->next->data.l_val,
-/* int cycle */                h->h->next->next->next->next->next->data.i_val);
+/* int cycle */                h->h->next->next->next->next->next->data.i_val,
+/* int bedropped */    h->h->next->next->next->next->next->next->data.i_val);
                }
                break;
                case SQL_ALTER_SEQ:
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/server/sql_mvc.mx
--- a/sql/src/server/sql_mvc.mx Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/server/sql_mvc.mx Wed Jul 07 17:30:06 2010 +0200
@@ -1313,7 +1313,7 @@
 {
        if (mvc_debug)
                fprintf(stderr, "mvc_create_dependency %d %d %d\n", id, 
depend_id, depend_type);
-       if (id != depend_id)
+       if ( (id != depend_id) || (depend_type == BEDROPPED_DEPENDENCY) )
                sql_trans_create_dependency(m->session->tr, id, depend_id, 
depend_type);
        
 }
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/server/sql_parser.mx
--- a/sql/src/server/sql_parser.mx      Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/server/sql_parser.mx      Wed Jul 07 17:30:06 2010 +0200
@@ -1280,6 +1280,7 @@
          append_lng(l, $4);
          append_lng(l, $5);
          append_int(l, $6);
+         append_int(l, 0);     /* bedropped */
          $$ = l;
        }
 ;
@@ -1556,6 +1557,7 @@
                        append_lng(o, 0); /* max */
                        append_lng(o, 1); /* cache */
                        append_int(o, 0); /* cycle */
+                       append_int(o, 1); /* bedropped */
                        append_list(l, o);
 
                        if (m->sym) {
@@ -1689,6 +1691,7 @@
                append_lng(o, 0); /* max */
                append_lng(o, 1); /* cache */
                append_int(o, 0); /* cycle */
+               append_int(o, 0); /* bedropped */
                append_list(l, o);
                if (m->scanner.schema)
                        append_string(seqn2, m->scanner.schema);
@@ -1715,6 +1718,7 @@
          append_lng($$, -1); /* max */
          append_lng($$, -1); /* cache */
          append_int($$, 0);  /* cycle */
+         append_int($$, 0);  /* bedropped */
        }
   |    '(' opt_seq_params ')'  { $$ = $2; }
  ;
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/server/sql_schema.mx
--- a/sql/src/server/sql_schema.mx      Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/server/sql_schema.mx      Wed Jul 07 17:30:06 2010 +0200
@@ -583,24 +583,30 @@
 {
        char *server, * db, *db_alias, *user, *lang, *passwd; 
        int *id = GDKmalloc(sizeof(int)), *port = GDKmalloc(sizeof(int));
-       symbol *user_symb = qname->h->next->next->next->next->data.sym;
+       symbol *user_symb = NULL;
        char *default_dbalias;
-       assert(qname->h->next->type == type_int);
-       *port = qname->h->next->data.i_val;
        *id = -1;
-       server = GDKstrdup(qname->h->data.sval);
-       db = GDKstrdup(qname->h->next->next->data.sval);
-       user = GDKstrdup(user_symb->data.lval->h->data.sval);
-       passwd = GDKstrdup(user_symb->data.lval->h->next->data.sval);
 
-       if (qname->h->next->next->next->data.sval == NULL){
+       if (qname->cnt) {
+               user_symb = qname->h->next->next->next->next->data.sym;
+               assert(qname->h->next->type == type_int);
+               *port = qname->h->next->data.i_val;
+               server = GDKstrdup(qname->h->data.sval);
+               db = GDKstrdup(qname->h->next->next->data.sval);
+               user = GDKstrdup(user_symb->data.lval->h->data.sval);
+               passwd = GDKstrdup(user_symb->data.lval->h->next->data.sval);
+       } else {
+               return sql_error(sql, 02, "CONNECT TO: DEFAULT is not 
supported!");
+       }
+
+       if (!qname->cnt || qname->h->next->next->next->data.sval == NULL){
                default_dbalias = sql_message( "%s_%s_%s", server, db, user);
                db_alias = default_dbalias;
        } else {
                db_alias = GDKstrdup(qname->h->next->next->next->data.sval);
        }
 
-       if (qname->h->next->next->next->next->next->data.sval == NULL){
+       if (!qname->cnt || qname->h->next->next->next->next->next->data.sval == 
NULL){
                lang = GDKstrdup("sql");
        }
        else {
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/storage/sql_storage.h
--- a/sql/src/storage/sql_storage.h     Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/storage/sql_storage.h     Wed Jul 07 17:30:06 2010 +0200
@@ -343,8 +343,8 @@
 extern void sql_trans_drop_trigger(sql_trans *tr, sql_schema *s, int id, int 
drop_action);
 
 extern sql_sequence *create_sql_sequence(sql_allocator *sa, sql_schema *s, 
char *name, lng start, lng min, lng max, lng inc, lng cacheinc, bit cycle );
-extern sql_sequence * sql_trans_create_sequence(sql_trans *tr, sql_schema *s, 
char *name, lng start, lng min, lng max, lng inc, lng cacheinc, bit cycle );
-extern void sql_trans_drop_sequence(sql_trans *tr, sql_schema *s, char *name, 
int drop_action);
+extern sql_sequence * sql_trans_create_sequence(sql_trans *tr, sql_schema *s, 
char *name, lng start, lng min, lng max, lng inc, lng cacheinc, bit cycle, bit 
bedropped );
+extern void sql_trans_drop_sequence(sql_trans *tr, sql_schema *s, sql_sequence 
*seq, int drop_action);
 extern sql_sequence *sql_trans_alter_sequence(sql_trans *tr, sql_sequence 
*seq, lng min, lng max, lng inc, lng cache, lng cycle);
 extern lng sql_trans_sequence_restart(sql_trans *tr, sql_sequence *seq, lng 
start);
 
diff -r e4ae9e48d397 -r 46a74207c25d sql/src/storage/store.mx
--- a/sql/src/storage/store.mx  Wed Jul 07 16:55:54 2010 +0200
+++ b/sql/src/storage/store.mx  Wed Jul 07 17:30:06 2010 +0200
@@ -3235,6 +3235,7 @@
 
        assert(rid != oid_nil);
        table_funcs.table_delete(tr, sysseqs, rid);
+       sql_trans_drop_dependencies(tr, seq->base.id);
 
        if (drop_action)
                sql_trans_drop_all_dependencies(tr, seq->s, seq->base.id, 
SEQ_DEPENDENCY);
@@ -3258,10 +3259,15 @@
        if (col->def && (seq_pos = strstr(col->def, next_value_for))) {
                sql_sequence * seq = NULL;
                char *seq_name = _strdup(seq_pos + (strlen(next_value_for) - 
strlen("seq_")));
+               node *n = NULL;
                seq_name[strlen(seq_name)-1] = '\0';
+               n = cs_find_name(&syss->seqs, seq_name);
                seq = find_sql_sequence(syss, seq_name);
-               if (seq)
+               if (seq && sql_trans_get_dependency_type(tr, seq->base.id, 
BEDROPPED_DEPENDENCY)) {
                        sys_drop_sequence(tr, seq, drop_action);                
+                       seq->base.wtime = syss->base.wtime = tr->wtime = 
tr->stime;
+                       cs_del(&syss->seqs, n, seq->base.flag);
+               }
                _DELETE(seq_name);
        }
        
@@ -4508,7 +4514,7 @@
 }
 
 sql_sequence * 
-sql_trans_create_sequence(sql_trans *tr, sql_schema *s, char *name, lng start, 
lng min, lng max, lng inc, lng cacheinc, bit cycle )
+sql_trans_create_sequence(sql_trans *tr, sql_schema *s, char *name, lng start, 
lng min, lng max, lng inc, lng cacheinc, bit cycle, bit bedropped )
 {
        sql_schema *syss = find_sql_schema(tr, "sys");
        sql_table *sysseqs = find_sql_table(syss, "sequences");
@@ -4517,15 +4523,18 @@
        cs_add(&s->seqs, seq, TR_NEW);
        table_funcs.table_insert(tr, sysseqs, &seq->base.id, &s->base.id, 
seq->base.name, &seq->start, &seq->minvalue, &seq->maxvalue, &seq->increment, 
&seq->cacheinc, &seq->cycle);
        s->base.wtime = tr->wtime = tr->stime;
+
+       /*Create a BEDROPPED dependency for a SERIAL COLUMN*/
+       if (bedropped)
+               sql_trans_create_dependency(tr, seq->base.id, seq->base.id, 
BEDROPPED_DEPENDENCY);
+
        return seq;
 }
 
 void
-sql_trans_drop_sequence(sql_trans *tr, sql_schema *s, char *name, int 
drop_action)
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to