Changeset: 25384da1c126 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=25384da1c126
Modified Files:
        sql/src/server/rel_sequence.c
        sql/src/server/sql_mvc.c
        sql/src/server/sql_mvc.h
        sql/src/test/BugTracker-2010/Tests/All
Branch: default
Log Message:

fix bug 2730


diffs (59 lines):

diff -r 552431d03806 -r 25384da1c126 sql/src/server/rel_sequence.c
--- a/sql/src/server/rel_sequence.c     Wed Nov 24 19:02:01 2010 +0100
+++ b/sql/src/server/rel_sequence.c     Wed Nov 24 21:01:27 2010 +0100
@@ -121,7 +121,8 @@
        seq = create_sql_sequence(sql->sa, s, name, start, min, max, inc, 
cache, cycle);  
        seq->bedropped = bedropped;
        res = rel_seq(sql->sa, DDL_CREATE_SEQ, s->base.name, seq, NULL, NULL);
-       if (res)
+       /* for multi statements we keep the sequence around */
+       if (res && stack_has_frame(sql, "MUL") != 0)
                stack_push_rel_view(sql, name, rel_dup(res));
        return res;
 }
diff -r 552431d03806 -r 25384da1c126 sql/src/server/sql_mvc.c
--- a/sql/src/server/sql_mvc.c  Wed Nov 24 19:02:01 2010 +0100
+++ b/sql/src/server/sql_mvc.c  Wed Nov 24 21:01:27 2010 +0100
@@ -1465,6 +1465,20 @@
 }
 
 int
+stack_has_frame(mvc *sql, char *name)
+{
+       int i;
+
+       for (i = sql->topvars-1; i >= 0; i--) {
+               /* frame has no statement and only sometimes a name */
+               if (!sql->vars[i].s && sql->vars[i].name && 
+                   strcmp(sql->vars[i].name, name)==0)
+                       return 1;
+       }
+       return 0;
+}
+
+int
 stack_nr_of_declared_tables(mvc *sql)
 {
        int i, dt = 0;
diff -r 552431d03806 -r 25384da1c126 sql/src/server/sql_mvc.h
--- a/sql/src/server/sql_mvc.h  Wed Nov 24 19:02:01 2010 +0100
+++ b/sql/src/server/sql_mvc.h  Wed Nov 24 21:01:27 2010 +0100
@@ -227,7 +227,10 @@
 extern sql_rel *stack_find_rel_var(mvc *sql, char *name);
 /* find var in current frame */
 extern int frame_find_var(mvc *sql, char *name);
+/* find frame holding variable 'name' */
 extern int stack_find_frame(mvc *sql, char *name);
+/* find frame with given name */
+extern int stack_has_frame(mvc *sql, char *name);
 extern int stack_nr_of_declared_tables(mvc *sql);
 
 extern ValRecord * stack_get_var(mvc *sql, char *name);
diff -r 552431d03806 -r 25384da1c126 sql/src/test/BugTracker-2010/Tests/All
--- a/sql/src/test/BugTracker-2010/Tests/All    Wed Nov 24 19:02:01 2010 +0100
+++ b/sql/src/test/BugTracker-2010/Tests/All    Wed Nov 24 21:01:27 2010 +0100
@@ -74,3 +74,4 @@
 join-and-like.Bug-2715
 between-timestamp.Bug-2718
 values.Bug-2726
+select_from_seq.Bug-2730
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to