Changeset: 7726c0f689b5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7726c0f689b5
Modified Files:
ctest/tools/monetdbe/example2.c
tools/monetdbe/monetdbe.c
Branch: Jul2021
Log Message:
Fix for bug #7191, ie don't free NULL values on prepared statement data
diffs (57 lines):
diff --git a/ctest/tools/monetdbe/example2.c b/ctest/tools/monetdbe/example2.c
--- a/ctest/tools/monetdbe/example2.c
+++ b/ctest/tools/monetdbe/example2.c
@@ -170,6 +170,20 @@ main(void)
if ((err = monetdbe_cleanup_statement(mdbe, stmt)) != NULL)
error(err)
+ /* NULL value version */
+ if ((err = monetdbe_prepare(mdbe, "SELECT b, t FROM test where t = ?;
", &stmt)) != NULL)
+ error(err)
+ char *s2 = NULL;
+ if ((err = monetdbe_bind(stmt, s2, 0)) != NULL)
+ error(err)
+ if ((err = monetdbe_execute(stmt, &result, NULL)) != NULL)
+ error(err)
+ fprintf(stdout, "Query result with %zu cols and %"PRId64" rows\n",
result->ncols, result->nrows);
+ if ((err = monetdbe_cleanup_result(mdbe, result)) != NULL)
+ error(err)
+ if ((err = monetdbe_cleanup_statement(mdbe, stmt)) != NULL)
+ error(err)
+
if ((err = monetdbe_prepare(mdbe, "SELECT b, y FROM test where y = ?;
", &stmt)) != NULL)
error(err)
char *y = "Hello";
@@ -183,6 +197,20 @@ main(void)
if ((err = monetdbe_cleanup_statement(mdbe, stmt)) != NULL)
error(err)
+ /* NULL value version */
+ if ((err = monetdbe_prepare(mdbe, "SELECT b, y FROM test where y = ?;
", &stmt)) != NULL)
+ error(err)
+ char *y2 = NULL;
+ if ((err = monetdbe_bind(stmt, y2, 0)) != NULL)
+ error(err)
+ if ((err = monetdbe_execute(stmt, &result, NULL)) != NULL)
+ error(err)
+ fprintf(stdout, "Query result with %zu cols and %"PRId64" rows\n",
result->ncols, result->nrows);
+ if ((err = monetdbe_cleanup_result(mdbe, result)) != NULL)
+ error(err)
+ if ((err = monetdbe_cleanup_statement(mdbe, stmt)) != NULL)
+ error(err)
+
if (monetdbe_close(mdbe))
error("Failed to close database")
return 0;
diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -1647,7 +1647,7 @@ monetdbe_cleanup_statement(monetdbe_data
for (size_t i = 0; i < stmt_internal->res.nparam + 1; i++) {
ValPtr data = &stmt_internal->data[i];
- if (data->vtype == TYPE_str || data->vtype == TYPE_blob) {
+ if (ATOMvarsized(data->vtype) && !VALisnil(data)) {
GDKfree(data->val.pval);
}
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list