Changeset: b07792eeb6c3 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b07792eeb6c3
Modified Files:
        sql/storage/store.c
Branch: default
Log Message:

fixed leak in sql storage


diffs (55 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -545,9 +545,8 @@ load_table(sql_trans *tr, sql_schema *s,
        t->query = NULL;
        query = (char *)v;
        if (ATOMcmp(TYPE_str, ATOMnilptr(TYPE_str), query) != 0)
-               t->query = query;
-       else
-               _DELETE(query);
+               t->query = sa_strdup(tr->sa, query);
+       _DELETE(query);
        v = table_funcs.column_find_value(tr, find_sql_column(tables, "type"), 
rid);
        t->type = *(sht *)v;                    _DELETE(v);
        v = table_funcs.column_find_value(tr, find_sql_column(tables, 
"system"), rid);
@@ -645,7 +644,8 @@ load_type(sql_trans *tr, sql_schema *s, 
        tid = *(sqlid *)v;                      _DELETE(v);
        v = table_funcs.column_find_value(tr, find_sql_column(types, 
"systemname"), rid);
        base_init(tr->sa, &t->base, tid, TR_OLD, v);    _DELETE(v);
-       t->sqlname = table_funcs.column_find_value(tr, find_sql_column(types, 
"sqlname"), rid);
+       v = table_funcs.column_find_value(tr, find_sql_column(types, 
"sqlname"), rid);
+       t->sqlname = (v)?sa_strdup(tr->sa, v):NULL;     _DELETE(v);
        v = table_funcs.column_find_value(tr, find_sql_column(types, "digits"), 
rid);
        t->digits = *(int *)v;                  _DELETE(v); 
        v = table_funcs.column_find_value(tr, find_sql_column(types, "scale"), 
rid);
@@ -686,12 +686,14 @@ load_arg(sql_trans *tr, sql_func * f, oi
        sql_table *args = find_sql_table(syss, "args");
 
        (void)f;
-       a->name = table_funcs.column_find_value(tr, find_sql_column(args, 
"name"), rid);
-       tpe = table_funcs.column_find_value(tr, find_sql_column(args, "type"), 
rid);
+       v = table_funcs.column_find_value(tr, find_sql_column(args, "name"), 
rid);
+       a->name = sa_strdup(tr->sa, v); _DELETE(v);
        v = table_funcs.column_find_value(tr, find_sql_column(args, 
"type_digits"), rid);
        digits = *(int *)v;     _DELETE(v);
        v = table_funcs.column_find_value(tr, find_sql_column(args, 
"type_scale"), rid);
        scale = *(int *)v;      _DELETE(v);
+
+       tpe = table_funcs.column_find_value(tr, find_sql_column(args, "type"), 
rid);
        if (!sql_find_subtype(&a->type, tpe, digits, scale))
                sql_init_subtype(&a->type, sql_trans_bind_type(tr, f->s, tpe), 
digits, scale);
        _DELETE(tpe);
@@ -719,8 +721,10 @@ load_func(sql_trans *tr, sql_schema *s, 
        fid = *(sqlid *)v;                      _DELETE(v);
        v = table_funcs.column_find_value(tr, find_sql_column(funcs, "name"), 
rid);
        base_init(tr->sa, &t->base, fid, TR_OLD, v);    _DELETE(v);
-       t->imp = table_funcs.column_find_value(tr, find_sql_column(funcs, 
"func"), rid);
-       t->mod = table_funcs.column_find_value(tr, find_sql_column(funcs, 
"mod"), rid);
+       v = table_funcs.column_find_value(tr, find_sql_column(funcs, "func"), 
rid);
+       t->imp = (v)?sa_strdup(tr->sa, v):NULL; _DELETE(v);
+       v = table_funcs.column_find_value(tr, find_sql_column(funcs, "mod"), 
rid);
+       t->mod = (v)?sa_strdup(tr->sa, v):NULL; _DELETE(v);
        v = table_funcs.column_find_value(tr, find_sql_column(funcs, "sql"), 
rid);
        t->sql = *(bit *)v;                     _DELETE(v);
        v = table_funcs.column_find_value(tr, find_sql_column(funcs, "type"), 
rid);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to