Update of /cvsroot/monetdb/sql/src/server
In directory sc8-pr-cvs16:/tmp/cvs-serv10217

Modified Files:
        sql_semantic.mx sql_updates.mx 
Log Message:
Fix bug infinite_loop.SF-1714809

The list with all called triggers is now initialized correctly and its 
destruction
is done some levels up (at semantic level);



Index: sql_semantic.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_semantic.mx,v
retrieving revision 1.164
retrieving revision 1.165
diff -u -d -r1.164 -r1.165
--- sql_semantic.mx     4 May 2007 14:21:47 -0000       1.164
+++ sql_semantic.mx     10 May 2007 15:08:58 -0000      1.165
@@ -1143,6 +1143,10 @@
        default:
                return sql_error(sql, 01, "sql_stmt symbol(%ld)->token = %s", 
(long) s, token2string(s->token));
        }
+       if (sql->called_triggers) 
+               list_destroy(sql->called_triggers);
+
+       sql->called_triggers = NULL;
        return res;
 }
 

Index: sql_updates.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_updates.mx,v
retrieving revision 1.119
retrieving revision 1.120
diff -u -d -r1.119 -r1.120
--- sql_updates.mx      4 May 2007 00:06:11 -0000       1.119
+++ sql_updates.mx      10 May 2007 15:08:58 -0000      1.120
@@ -433,18 +433,18 @@
 {
        node *n;
        int res = 1;
-       list *tri_list = NULL;
 
        if (!t->triggers.set)
                return res;
 
        for (n = t->triggers.set->h; n; n = n->next) {
                sql_trigger *trigger = n->data;
-               int trigger_id = trigger->base.id;
+               int *trigger_id = NEW(int);
+               *trigger_id = trigger->base.id;
 
                if (trigger->event == 0 && 
                   (!sql->called_triggers || 
-                   !list_find_id(sql->called_triggers, trigger_id))) {
+                   !list_find_id(sql->called_triggers, *trigger_id))) {
                        scope *scp = scope_open(NULL);
                        stmt *s = NULL;
                        char *n = trigger->new_name;
@@ -453,21 +453,15 @@
                        if (!n) n = "new"; 
        
                        if (sql->called_triggers) {
-                               list_append(sql->called_triggers, &trigger_id);
+                               list_append(sql->called_triggers, trigger_id);
                        } else {
-                               tri_list = list_create((fdestroy) NULL);
-                               tri_list = list_append(tri_list, &trigger_id);
-                               sql->called_triggers = tri_list;
+                               sql->called_triggers = list_create((fdestroy) 
GDKfree);
+                               list_append(sql->called_triggers, trigger_id);
                        }
        
                        scope_add_inserted(scp, inserts, t, n);
                        s = scope_sqlparse(sql, scp, trigger->statement, 
m_execute);
 
-                       if (tri_list) {
-                               sql->called_triggers = NULL;
-                               list_destroy(tri_list); 
-                       }
-                       tri_list = NULL;
                        scope_close(scp);
                        
                        if (!s) 
@@ -1083,18 +1077,18 @@
 {
        node *n;
        int res = 1;
-       list *tri_list = NULL;
 
        if (!t->triggers.set)
                return res;
 
        for (n = t->triggers.set->h; n; n = n->next) {
                sql_trigger *trigger = n->data;
-               int trigger_id = trigger->base.id;
+               int *trigger_id = NEW(int);
+               *trigger_id = trigger->base.id;
 
                if (trigger->event == 2 && 
                   (!sql->called_triggers || 
-                   !list_find_id(sql->called_triggers, trigger_id))) {
+                   !list_find_id(sql->called_triggers, *trigger_id))) {
                        scope *scp = scope_open(NULL);
                        stmt *s = NULL;
        
@@ -1106,21 +1100,15 @@
                        if (!o) o = "old"; 
        
                        if (sql->called_triggers) {
-                               list_append(sql->called_triggers, &trigger_id);
+                               list_append(sql->called_triggers, trigger_id);
                        } else {
-                               tri_list = list_create((fdestroy) NULL);
-                               tri_list = list_append(tri_list, &trigger_id);
-                               sql->called_triggers = tri_list;
+                               sql->called_triggers = list_create((fdestroy) 
GDKfree);
+                               list_append(sql->called_triggers, trigger_id);
                        }
        
                        scope_add_updated(scp, inserts, t, o, n);
                        s = scope_sqlparse(sql, scp, trigger->statement, 
m_execute);
 
-                       if (tri_list) {
-                               sql->called_triggers = NULL;
-                               list_destroy(tri_list); 
-                       }
-                       tri_list = NULL;
                        scope_close(scp);
 
                        if (!s) 
@@ -1744,18 +1732,18 @@
 {
        node *n;
        int res = 1;
-       list *tri_list = NULL;
 
        if (!t->triggers.set)
                return res;
 
        for (n = t->triggers.set->h; n; n = n->next) {
                sql_trigger *trigger = n->data;
-               int trigger_id = trigger->base.id;
+               int *trigger_id = NEW(int);
+               *trigger_id = trigger->base.id;
 
                if (trigger->event == 1 && 
                   (!sql->called_triggers || 
-                   !list_find_id(sql->called_triggers, trigger_id))) {
+                   !list_find_id(sql->called_triggers, *trigger_id))) {
                        scope *scp = scope_open(NULL);
                        stmt *s = NULL;
        
@@ -1765,21 +1753,15 @@
                        if (!o) o = "old"; 
                
                        if (sql->called_triggers) {
-                               list_append(sql->called_triggers, &trigger_id);
+                               list_append(sql->called_triggers, trigger_id);
                        } else {
-                               tri_list = list_create((fdestroy) NULL);
-                               tri_list = list_append(tri_list, &trigger_id);
-                               sql->called_triggers = tri_list;
+                               sql->called_triggers = list_create((fdestroy) 
GDKfree);
+                               list_append(sql->called_triggers, trigger_id);
                        }
 
                        scope_add_deleted(scp, deletes, t, o);
                        s = scope_sqlparse(sql, scp, trigger->statement, 
m_execute);
 
-                       if (tri_list) {
-                               sql->called_triggers = NULL;
-                               list_destroy(tri_list); 
-                       }
-                       tri_list = NULL;
                        scope_close(scp);
 
                        if (!s) 
@@ -2042,5 +2024,6 @@
        default:
                return sql_error(sql, 01, "Updates statement unknown 
Symbol(%ld)->token = %s", (long) s, token2string(s->token));
        }
+
        return ret;
 }


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to