Changeset: 1572a42868fa for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1572a42868fa
Modified Files:
sql/backends/monet5/sql_statistics.c
Branch: Jun2016
Log Message:
Create and use a variant of strToStr to convert value for inclusion in SQL
query.
This fixes bug 4021.
diffs (67 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
@@ -21,6 +21,37 @@ analysis by optimizers.
#include "sql_statistics.h"
#include "sql_scenario.h"
+#define atommem(TYPE, size) \
+ do { \
+ if (*dst == NULL || *len < (int) (size)) { \
+ GDKfree(*dst); \
+ *len = (size); \
+ *dst = (TYPE *) GDKmalloc(*len); \
+ if (*dst == NULL) \
+ return -1; \
+ } \
+ } while (0)
+
+static int
+strToStrSQuote(char **dst, int *len, const void *src)
+{
+ int l = 0;
+
+ if (GDK_STRNIL((str) src)) {
+ atommem(char, 4);
+
+ return snprintf(*dst, *len, "nil");
+ } else {
+ int sz = escapedStrlen(src, NULL, NULL, '\'');
+ atommem(char, sz + 3);
+ l = escapedStr((*dst) + 1, src, *len - 1, NULL, NULL, '\'');
+ l++;
+ (*dst)[0] = (*dst)[l++] = '"';
+ (*dst)[l] = 0;
+ }
+ return l;
+}
+
str
sql_analyze(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
@@ -86,10 +117,13 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
BAT *bn =
store_funcs.bind_col(tr, c, RDONLY), *br;
BAT *bsample;
lng sz = BATcount(bn);
- int (*tostr)(str*,int*,const
void*) = BATatoms[bn->ttype].atomToStr; \
+ int (*tostr)(str*,int*,const
void*) = BATatoms[bn->ttype].atomToStr;
int len = 0;
void *val=0;
+ if (tostr ==
BATatoms[TYPE_str].atomToStr)
+ tostr = strToStrSQuote;
+
if (col && strcmp(bc->name,
col))
continue;
snprintf(dquery, 8192, "delete
from sys.statistics where \"column_id\" = %d;", c->base.id);
@@ -132,8 +166,8 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
tostr(&minval,
&len,val);
GDKfree(val);
} else {
- maxval = (char *)
GDKzalloc(4);
- minval = (char *)
GDKzalloc(4);
+ maxval = GDKmalloc(4);
+ minval = GDKmalloc(4);
snprintf(maxval, 4,
"nil");
snprintf(minval, 4,
"nil");
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list