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

Modified Files:
        sql_semantic.mx sql_updates.mx 
Log Message:
The previous checkin fixed one bug, but it broked 4 trigger test. This checkin 
will fix taht and 
avoid complains from the Testing Godfather.

The recursive loop originated from trigger calls and procedure calls are now 
fixed.




Index: sql_semantic.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_semantic.mx,v
retrieving revision 1.165
retrieving revision 1.166
diff -u -d -r1.165 -r1.166
--- sql_semantic.mx     10 May 2007 15:08:58 -0000      1.165
+++ sql_semantic.mx     10 May 2007 16:31:30 -0000      1.166
@@ -1030,9 +1030,13 @@
 semantic(mvc *sql, scope *scp, symbol *s)
 {
        stmt *res = NULL;
-
+       int start = 0;
        if (!s)
                return NULL;
+       if( !sql->called_triggers) {
+               sql->called_triggers = list_create((fdestroy) GDKfree);
+               start = 1;
+       }
 
        switch (s->token) {
 
@@ -1042,8 +1046,10 @@
        case TR_ROLLBACK:
        case TR_START:
        case TR_MODE:
-               return transactions(sql, s);
-
+       {
+               res = transactions(sql, s);
+               break;
+       }
        case SQL_CREATE_SCHEMA:
        case SQL_DROP_SCHEMA:
        case SQL_CREATE_TABLE:
@@ -1067,27 +1073,35 @@
        case SQL_DROP_TRIGGER:
        case SQL_CONNECT:
        case SQL_DISCONNECT:
-               return schemas(sql, s);
-
+       {
+               res = schemas(sql, s);
+               break;
+       }
        case SQL_CREATE_SEQ:
        case SQL_ALTER_SEQ:
        case SQL_DROP_SEQ:
-               return sequences(sql, s);
-
+       {
+               res = sequences(sql, s);
+               break;
+       }
        case SQL_COPYFROM:
        case SQL_INSERT:
        case SQL_UPDATE:
        case SQL_DELETE:
-               return updates(sql, scp, s);
-
+       {
+               res = updates(sql, scp, s);
+               break;
+       }
        case SQL_SELECT:
        case SQL_JOIN:
        case SQL_CROSS:
        case SQL_UNION:
        case SQL_EXCEPT:
        case SQL_INTERSECT:
-               return selects(sql, scp, s);
-
+       {
+               res = selects(sql, scp, s);
+               break;
+       }
        case SQL_CREATE_FUNC:
        case SQL_CREATE_PROC:
        case SQL_DROP_FUNC:
@@ -1095,8 +1109,10 @@
        case SQL_DECLARE:
        case SQL_CALL:
        case SQL_SET:
-               return psm(sql, s);
-
+       {
+               res = psm(sql, s);
+               break;
+       }
        case SQL_WITH:
        {
                dnode *d = s->data.lval->h;
@@ -1109,16 +1125,26 @@
                        dnode *dn = sym->data.lval->h;
                        char *name = qname_table(dn->data.lval);
 
-                       if (frame_find_var(sql, name)) 
+                       if (frame_find_var(sql, name)) {
+                               if (start) {
+                                       list_destroy(sql->called_triggers);
+                                       sql->called_triggers = NULL;
+                               }
                                return sql_error(sql, 01, "Variable '%s' 
allready declared", name);
-
+                       }
                        st = semantic(sql, scp, sym);
-                       if (!st) 
+                       if (!st) { 
+                               if (start) {
+                                       list_destroy(sql->called_triggers);
+                                       sql->called_triggers = NULL;
+                               }
                                return NULL;
+                       }
                        stack_push_view(sql, name, st);
                }
                st = semantic(sql, scp, select);
-               return st;
+               res = st;
+               break;
        }
 
        case SQL_PREP:
@@ -1133,20 +1159,27 @@
 
                        if (!st) {
                                list_destroy(l);
+                               if (start) {
+                                       list_destroy(sql->called_triggers);
+                                       sql->called_triggers = NULL;
+                               }
                                return NULL;
                        }
                        list_append(l, st);
                }
-               return stmt_list(l);
+               res = stmt_list(l);
+               break;
        }
 
        default:
-               return sql_error(sql, 01, "sql_stmt symbol(%ld)->token = %s", 
(long) s, token2string(s->token));
+               res = sql_error(sql, 01, "sql_stmt symbol(%ld)->token = %s", 
(long) s, token2string(s->token));
        }
-       if (sql->called_triggers) 
+
+       if (start) {
                list_destroy(sql->called_triggers);
+               sql->called_triggers = NULL;
+       }
 
-       sql->called_triggers = NULL;
        return res;
 }
 

Index: sql_updates.mx
===================================================================
RCS file: /cvsroot/monetdb/sql/src/server/sql_updates.mx,v
retrieving revision 1.120
retrieving revision 1.121
diff -u -d -r1.120 -r1.121
--- sql_updates.mx      10 May 2007 15:08:58 -0000      1.120
+++ sql_updates.mx      10 May 2007 16:31:30 -0000      1.121
@@ -452,12 +452,7 @@
                        /* add name for the 'inserted' to the scope */
                        if (!n) n = "new"; 
        
-                       if (sql->called_triggers) {
-                               list_append(sql->called_triggers, trigger_id);
-                       } else {
-                               sql->called_triggers = list_create((fdestroy) 
GDKfree);
-                               list_append(sql->called_triggers, trigger_id);
-                       }
+                       list_append(sql->called_triggers, trigger_id);
        
                        scope_add_inserted(scp, inserts, t, n);
                        s = scope_sqlparse(sql, scp, trigger->statement, 
m_execute);
@@ -1099,12 +1094,7 @@
                        if (!n) n = "new"; 
                        if (!o) o = "old"; 
        
-                       if (sql->called_triggers) {
-                               list_append(sql->called_triggers, trigger_id);
-                       } else {
-                               sql->called_triggers = list_create((fdestroy) 
GDKfree);
-                               list_append(sql->called_triggers, trigger_id);
-                       }
+                       list_append(sql->called_triggers, trigger_id);
        
                        scope_add_updated(scp, inserts, t, o, n);
                        s = scope_sqlparse(sql, scp, trigger->statement, 
m_execute);
@@ -1752,12 +1742,7 @@
                
                        if (!o) o = "old"; 
                
-                       if (sql->called_triggers) {
-                               list_append(sql->called_triggers, trigger_id);
-                       } else {
-                               sql->called_triggers = list_create((fdestroy) 
GDKfree);
-                               list_append(sql->called_triggers, trigger_id);
-                       }
+                       list_append(sql->called_triggers, trigger_id);
 
                        scope_add_deleted(scp, deletes, t, o);
                        s = scope_sqlparse(sql, scp, trigger->statement, 
m_execute);


-------------------------------------------------------------------------
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