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