Changeset: e960625b33da for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e960625b33da
Modified Files:
sql/backends/monet5/sql_statistics.c
Branch: Dec2016
Log Message:
Allocate enough memory for query.
This fixes bugs 6229 and 6230.
diffs (46 lines):
diff --git a/sql/backends/monet5/sql_statistics.c
b/sql/backends/monet5/sql_statistics.c
--- a/sql/backends/monet5/sql_statistics.c
+++ b/sql/backends/monet5/sql_statistics.c
@@ -60,6 +60,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
sql_trans *tr = m->session->tr;
node *nsch, *ntab, *ncol;
char *query, *dquery;
+ size_t querylen;
char *maxval = NULL, *minval = NULL;
int minlen = 0, maxlen = 0;
str sch = 0, tbl = 0, col = 0;
@@ -75,11 +76,10 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
if (msg != MAL_SUCCEED || (msg = checkSQLContext(cntxt)) != NULL)
return msg;
+ querylen = 0;
+ query = NULL;
dquery = (char *) GDKzalloc(8192);
- query = (char *) GDKzalloc(8192);
- if (!(dquery && query)) {
- GDKfree(dquery);
- GDKfree(query);
+ if (dquery == NULL) {
throw(SQL, "analyze", MAL_MALLOC_FAIL);
}
@@ -204,7 +204,18 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
strcpy(maxval, "nil");
strcpy(minval, "nil");
}
- snprintf(query, 8192, "insert
into sys.statistics
(column_id,type,width,stamp,\"sample\",count,\"unique\",nils,minval,maxval,sorted,revsorted)
values(%d,'%s',%d,now()," LLFMT "," LLFMT "," LLFMT "," LLFMT
",'%s','%s',%s,%s);", c->base.id, c->type.type->sqlname, width, (samplesize ?
samplesize : sz), sz, uniq, nils, minval, maxval, sorted ? "true" : "false",
revsorted ? "true" : "false");
+ if (strlen(minval) +
strlen(maxval) + 1024 > querylen) {
+ querylen =
strlen(minval) + strlen(maxval) + 1024;
+ GDKfree(query);
+ query =
GDKmalloc(querylen);
+ if (query == NULL) {
+ GDKfree(dquery);
+ GDKfree(maxval);
+ GDKfree(minval);
+ throw(SQL,
"analyze", MAL_MALLOC_FAIL);
+ }
+ }
+ snprintf(query, querylen,
"insert into sys.statistics
(column_id,type,width,stamp,\"sample\",count,\"unique\",nils,minval,maxval,sorted,revsorted)
values(%d,'%s',%d,now()," LLFMT "," LLFMT "," LLFMT "," LLFMT
",'%s','%s',%s,%s);", c->base.id, c->type.type->sqlname, width, (samplesize ?
samplesize : sz), sz, uniq, nils, minval, maxval, sorted ? "true" : "false",
revsorted ? "true" : "false");
#ifdef DEBUG_SQL_STATISTICS
mnstr_printf(cntxt->fdout,
"%s\n", dquery);
mnstr_printf(cntxt->fdout,
"%s\n", query);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list