Changeset: 6c9085d2766d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6c9085d2766d
Modified Files:
sql/backends/monet5/sql_user.c
sql/storage/store.c
Branch: Jul2021
Log Message:
Don't pass backend bat heap pointer, because if the sql allocator malloc fails,
it will jump, thus leaking the bat descriptor. Prefer the old way to minimize
the leak
diffs (89 lines):
diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -561,9 +561,8 @@ monet5_user_get_def_schema(mvc *m, int u
sql_table *user_info = NULL;
sql_table *schemas = NULL;
sql_table *auths = NULL;
- str username = NULL;
+ str username = NULL, sname = NULL;
sqlstore *store = m->session->tr->store;
- ptr cbat;
sys = find_sql_schema(m->session->tr, "sys");
auths = find_sql_table(m->session->tr, sys, "auths");
@@ -573,9 +572,10 @@ monet5_user_get_def_schema(mvc *m, int u
rid = store->table_api.column_find_row(m->session->tr,
find_sql_column(auths, "id"), &user, NULL);
if (is_oid_nil(rid))
return -2;
- username = store->table_api.column_find_string_start(m->session->tr,
find_sql_column(auths, "name"), rid, &cbat);
+ if (!(username = store->table_api.column_find_value(m->session->tr,
find_sql_column(auths, "name"), rid)))
+ return -1;
rid = store->table_api.column_find_row(m->session->tr,
find_sql_column(user_info, "name"), username, NULL);
- store->table_api.column_find_string_end(cbat);
+ _DELETE(username);
if (!is_oid_nil(rid))
schema_id = store->table_api.column_find_sqlid(m->session->tr,
find_sql_column(user_info, "default_schema"), rid);
@@ -585,12 +585,11 @@ monet5_user_get_def_schema(mvc *m, int u
if (is_oid_nil(rid))
return -3;
- str sname = store->table_api.column_find_string_start(m->session->tr,
find_sql_column(schemas, "name"), rid, &cbat);
+ if (!(sname = store->table_api.column_find_value(m->session->tr,
find_sql_column(schemas, "name"), rid)))
+ return -1;
*schema = sa_strdup(m->session->sa, sname);
- store->table_api.column_find_string_end(cbat);
- if (!*schema)
- return -1;
- return 0;
+ _DELETE(sname);
+ return *schema ? 0 : -1;
}
int
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -983,7 +983,6 @@ sql_trans_update_schema(sql_trans *tr, o
sql_table *ss = find_sql_table(tr, syss, "schemas");
sqlid sid;
str v;
- ptr cbat;
sid = store->table_api.column_find_sqlid(tr, find_sql_column(ss, "id"),
rid);
s = find_sql_schema_id(tr, sid);
@@ -994,9 +993,9 @@ sql_trans_update_schema(sql_trans *tr, o
TRC_DEBUG(SQL_STORE, "Update schema: %s %d\n", s->base.name,
s->base.id);
_DELETE(s->base.name);
- v = store->table_api.column_find_string_start(tr, find_sql_column(ss,
"name"), rid, &cbat);
+ v = store->table_api.column_find_value(tr, find_sql_column(ss, "name"),
rid);
base_init(tr->sa, &s->base, sid, 0, v);
- store->table_api.column_find_string_end(cbat);
+ _DELETE(v);
s->auth_id = store->table_api.column_find_sqlid(tr, find_sql_column(ss,
"authorization"), rid);
s->system = (bit) store->table_api.column_find_bte(tr,
find_sql_column(ss, "system"), rid);
s->owner = store->table_api.column_find_sqlid(tr, find_sql_column(ss,
"owner"), rid);
@@ -5975,17 +5974,16 @@ sql_trans_ranges( sql_trans *tr, sql_col
sql_column *stats_column_id = find_sql_column(stats,
"column_id");
oid rid = store->table_api.column_find_row(tr,
stats_column_id, &col->base.id, NULL);
if (!is_oid_nil(rid)) {
- ptr cbat;
char *v;
sql_column *stats_min = find_sql_column(stats,
"minval");
sql_column *stats_max = find_sql_column(stats,
"maxval");
- v =
store->table_api.column_find_string_start(tr, stats_min, rid, &cbat);
+ v = store->table_api.column_find_value(tr,
stats_min, rid);
*min = col->min = SA_STRDUP(tr->sa, v);
- store->table_api.column_find_string_end(cbat);
- v =
store->table_api.column_find_string_start(tr, stats_max, rid, &cbat);
+ _DELETE(v);
+ v = store->table_api.column_find_value(tr,
stats_max, rid);
*max = col->max = SA_STRDUP(tr->sa, v);
- store->table_api.column_find_string_end(cbat);
+ _DELETE(v);
return 1;
}
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list