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