Changeset: 90de3d546fe9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/90de3d546fe9
Modified Files:
common/stream/memio.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_cast.c
sql/backends/monet5/sql_cat.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_user.c
sql/backends/monet5/vaults/fits/fits.c
sql/common/sql_list.c
sql/common/sql_mem.c
sql/include/sql_list.h
sql/server/rel_unnest.c
sql/storage/store.c
Branch: Sep2022
Log Message:
Fixing some buglets.
diffs (262 lines):
diff --git a/common/stream/memio.c b/common/stream/memio.c
--- a/common/stream/memio.c
+++ b/common/stream/memio.c
@@ -59,8 +59,8 @@ buffer_get_buf(buffer *b)
r[b->pos] = '\0';
b->buf = malloc(b->len);
if (b->buf == NULL) {
- free(b);
- free(r);
+ /* restore b->buf */
+ b->buf = r;
return NULL;
}
b->len = b->buf ? b->len : 0;
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -589,7 +589,7 @@ mvc_add_column_predicate(Client cntxt, M
if ((t = mvc_bind_table(m, s, tname)) == NULL)
throw(SQL, "sql.column_predicate", SQLSTATE(42S02) "Table
missing %s.%s", sname, tname);
if ((c = mvc_bind_column(m, t, cname)) == NULL)
- throw(SQL, "sql.column_predicate", SQLSTATE(42S22) "Column not
found %s.%s",sname,tname);
+ throw(SQL, "sql.column_predicate", SQLSTATE(42S22) "Column not
found in %s.%s.%s",sname,tname,cname);
if ((m->session->level & tr_snapshot) == tr_snapshot || isNew(c) ||
!isGlobal(c->t) || isGlobalTemp(c->t))
return MAL_SUCCEED;
@@ -1360,8 +1360,10 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb
else { /*unpartitioned access to base column*/
int coltype = getBatType(getArgType(mb, pci, 0));
b = store->storage_api.bind_col(m->session->tr, c, access);
-
- if (b && b->ttype && b->ttype != coltype) {
+ if (b == NULL)
+ throw(SQL, "sql.bin", "Couldn't bind column");
+
+ if (b->ttype && b->ttype != coltype) {
BBPunfix(b->batCacheid);
throw(SQL,"sql.bind",SQLSTATE(42000) "Column type
mismatch %s.%s.%s",sname,tname,cname);
}
@@ -1709,8 +1711,10 @@ mvc_bind_idxbat_wrap(Client cntxt, MalBl
else { /*unpartitioned access to base index*/
int idxtype = getBatType(getArgType(mb, pci, 0));
b = store->storage_api.bind_idx(m->session->tr, i, access);
-
- if (b && b->ttype && b->ttype != idxtype) {
+ if (b == NULL)
+ throw(SQL,"sql.bindidx", "Couldn't bind index");
+
+ if (b->ttype && b->ttype != idxtype) {
BBPunfix(b->batCacheid);
throw(SQL,"sql.bindidx",SQLSTATE(42000) "Index type
mismatch %s.%s.%s",sname,tname,iname);
}
@@ -4876,7 +4880,7 @@ SQLstr_column_vacuum(Client cntxt, MalBl
if (isTempTable(t))
throw(SQL, "sql.str_column_vacuum", SQLSTATE(42000) "Cannot
vacuum column from temporary table");
if ((c = mvc_bind_column(m, t, cname)) == NULL)
- throw(SQL, "sql.str_column_vacuum", SQLSTATE(42S22) "Column not
found %s.%s",sname,tname);
+ throw(SQL, "sql.str_column_vacuum", SQLSTATE(42S22) "Column not
found in %s.%s.%s",sname,tname,cname);
if (c->storage_type)
throw(SQL, "sql.str_column_vacuum", SQLSTATE(42000) "Cannot
vacuum compressed column");
@@ -5013,7 +5017,7 @@ SQLstr_column_auto_vacuum(Client cntxt,
if (isTempTable(t))
throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(42000)
"Cannot vacuum column from temporary table");
if ((c = mvc_bind_column(m, t, cname)) == NULL)
- throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(42S22)
"Column not found %s.%s",sname,tname);
+ throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(42S22)
"Column not found in %s.%s.%s",sname,tname,cname);
if (c->storage_type)
throw(SQL, "sql.str_column_auto_vacuum", SQLSTATE(42000)
"Cannot vacuum compressed column");
@@ -5068,7 +5072,7 @@ SQLstr_column_stop_vacuum(Client cntxt,
if (isTempTable(t))
throw(SQL, "sql.str_column_stop_vacuum", SQLSTATE(42000)
"Cannot vacuum column from temporary table");
if ((c = mvc_bind_column(m, t, cname)) == NULL)
- throw(SQL, "sql.str_column_stop_vacuum", SQLSTATE(42S22)
"Column not found %s.%s",sname,tname);
+ throw(SQL, "sql.str_column_stop_vacuum", SQLSTATE(42S22)
"Column not found in %s.%s.%s",sname,tname,cname);
if(gdk_remove_callback("str_column_vacuum",
str_column_vacuum_callback_args_free) != GDK_SUCCEED)
throw(SQL, "sql.str_column_stop_vacuum", "removing vacuum
callback failed!");
diff --git a/sql/backends/monet5/sql_cast.c b/sql/backends/monet5/sql_cast.c
--- a/sql/backends/monet5/sql_cast.c
+++ b/sql/backends/monet5/sql_cast.c
@@ -90,7 +90,7 @@ SQLstr_cast(Client cntxt, MalBlkPtr mb,
*res = GDKstrdup(r);
if (!from_str)
GDKfree(r);
- if (!res)
+ if (!*res)
throw(SQL, "calc.str_cast", SQLSTATE(HY013) MAL_MALLOC_FAIL);
return MAL_SUCCEED;
}
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -1238,6 +1238,8 @@ alter_table(Client cntxt, mvc *sql, char
if (i->base.new || !i->base.deleted)
continue;
sql_idx *ni = mvc_bind_idx(sql, s,
i->base.name);
+ if (ni == NULL)
+ throw(SQL, "sql.alter_table", "Couldn't
bind index %s", i->base.name);
switch (mvc_drop_idx(sql, s, ni)) {
case -1:
throw(SQL,"sql.alter_table",SQLSTATE(HY013) MAL_MALLOC_FAIL);
diff --git a/sql/backends/monet5/sql_statement.c
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -2483,10 +2483,12 @@ stmt_rs_column(backend *be, stmt *rs, in
#define meta(P, Id, Tpe, Args) \
do {
\
P = newStmtArgs(mb, batRef, packRef, Args); \
- Id = getArg(P,0);
\
- setVarType(mb, Id, newBatType(Tpe)); \
- setVarFixed(mb, Id);
\
- list = pushArgument(mb, list, Id); \
+ if (P) {
\
+ Id = getArg(P,0);
\
+ setVarType(mb, Id, newBatType(Tpe)); \
+ setVarFixed(mb, Id);
\
+ list = pushArgument(mb, list, Id); \
+ }
\
} while (0)
#define metaInfo(P,Tpe,Val) \
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
@@ -407,8 +407,7 @@ monet5_create_user(ptr _mvc, str user, s
}
if ((ret = parse_schema_path_str(m, schema_path, false)) !=
MAL_SUCCEED) {
- if (schema_buf)
- GDKfree(schema_buf);
+ GDKfree(schema_buf);
return ret;
}
@@ -417,8 +416,7 @@ monet5_create_user(ptr _mvc, str user, s
if (!enc) {
if (!(pwd = mcrypt_BackendSum(passwd, strlen(passwd)))) {
- if (schema_buf)
- GDKfree(schema_buf);
+ GDKfree(schema_buf);
throw(MAL, "sql.create_user", SQLSTATE(42000) "Crypt
backend hash not found");
}
} else {
@@ -426,8 +424,7 @@ monet5_create_user(ptr _mvc, str user, s
}
if ((err = AUTHGeneratePasswordHash(&hash, pwd)) != MAL_SUCCEED) {
- if (schema_buf)
- GDKfree(schema_buf);
+ GDKfree(schema_buf);
if (!enc)
free(pwd);
throw(MAL, "sql.create_user", SQLSTATE(42000) "create backend
hash failure");
@@ -529,7 +526,8 @@ monet5_create_privileges(ptr _mvc, sql_s
char *username = "monetdb";
char *password = initpasswd ? mcrypt_BackendSum(initpasswd,
strlen(initpasswd)) : mcrypt_BackendSum("monetdb", strlen("monetdb"));
char *hash = NULL;
- if ((err = AUTHGeneratePasswordHash(&hash, password)) != MAL_SUCCEED) {
+ if (password == NULL ||
+ (err = AUTHGeneratePasswordHash(&hash, password)) !=
MAL_SUCCEED) {
TRC_CRITICAL(SQL_TRANS, "generate password hash failure");
freeException(err);
free(password);
diff --git a/sql/backends/monet5/vaults/fits/fits.c
b/sql/backends/monet5/vaults/fits/fits.c
--- a/sql/backends/monet5/vaults/fits/fits.c
+++ b/sql/backends/monet5/vaults/fits/fits.c
@@ -749,6 +749,10 @@ str FITSattach(Client cntxt, MalBlkPtr m
s = fname;
else
s++;
+ if (strcpy_len(bname, s, sizeof(bname)) >= sizeof(bname)) {
+ fits_close_file(fptr, &status);
+ throw(MAL, "fits.attach", SQLSTATE(FI000) "File name too
long\n");
+ }
strcpy(bname, s);
s = strrchr(bname, '.');
if (s) *s = 0;
@@ -878,7 +882,7 @@ str FITSattach(Client cntxt, MalBlkPtr m
throw(MAL, "fits.attach", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
}
esc_tunit = SQLescapeString(tunit);
- if (!esc_tform) {
+ if (!esc_tunit) {
GDKfree(esc_tform);
GDKfree(esc_cname);
fits_close_file(fptr, &status);
diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c
--- a/sql/common/sql_list.c
+++ b/sql/common/sql_list.c
@@ -757,13 +757,15 @@ list_dup(list *l, fdup dup)
}
list *
-list_flaten(list *l)
+list_flatten(list *l)
{
list *res = list_new_(l);
- for (node *n = l->h ; n ; n = n->next) {
- list *ll = (list*) n->data;
- for (node *m = ll->h ; m ; m = m->next)
- list_append(res, m->data);
+ if (res) {
+ for (node *n = l->h ; n ; n = n->next) {
+ list *ll = (list*) n->data;
+ for (node *m = ll->h ; m ; m = m->next)
+ list_append(res, m->data);
+ }
}
return res;
}
diff --git a/sql/common/sql_mem.c b/sql/common/sql_mem.c
--- a/sql/common/sql_mem.c
+++ b/sql/common/sql_mem.c
@@ -153,7 +153,7 @@ sa_alloc( sql_allocator *sa, size_t sz )
if (sa->pa)
r = SA_NEW_ARRAY(sa->pa,char,(sz > SA_BLOCK ? sz :
SA_BLOCK));
else if (sz <= SA_BLOCK && sa->freelist) {
- r = sa_use_freed(sa, sz > SA_BLOCK ? sz : SA_BLOCK);
+ r = sa_use_freed(sa, SA_BLOCK);
} else
r = GDKmalloc(sz > SA_BLOCK ? sz : SA_BLOCK);
if (r == NULL) {
diff --git a/sql/include/sql_list.h b/sql/include/sql_list.h
--- a/sql/include/sql_list.h
+++ b/sql/include/sql_list.h
@@ -101,7 +101,7 @@ extern list *list_dup(list *l, fdup dup)
extern list *list_merge(list *l, list *data, fdup dup);
extern list *list_merge_destroy(list *l, list *data, fdup dup);
-extern list *list_flaten(list *l);
+extern list *list_flatten(list *l);
extern void list_hash_delete(list *l, void *data, fcmp cmp);
extern void* list_hash_add(list *l, void *data, fcmp cmp);
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -3648,7 +3648,7 @@ rewrite_groupings(visitor *v, sql_rel *r
sql_rel *nrel;
list *l = (list*) n->data, *exps =
sa_list(v->sql->sa), *pexps = sa_list(v->sql->sa);
- l = list_flaten(l);
+ l = list_flatten(l);
nrel = rel_groupby(v->sql, rel_dup(rel->l), l);
for (node *m = rel->exps->h ; m ; m = m->next) {
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2558,6 +2558,9 @@ end:
static gdk_return __attribute__((__warn_unused_result__))
hot_snapshot_write_tar(stream *out, const char *prefix, char *plan)
{
+ if (plan == NULL)
+ return GDK_FAIL;
+
gdk_return ret = GDK_FAIL;
const char *p = plan; // our cursor in the plan
time_t timestamp = 1234567890; // dummy date, Sat 14 Feb 2009 12:31:30
AM CET
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]