Changeset: b3d35ad4fcf9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b3d35ad4fcf9
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_optimizer.c
sql/backends/monet5/sql_statement.c
sql/storage/store.c
Branch: Dec2025
Log Message:
Merge with Mar2025 branch.
diffs (199 lines):
diff --git a/common/stream/bs.c b/common/stream/bs.c
--- a/common/stream/bs.c
+++ b/common/stream/bs.c
@@ -93,8 +93,14 @@ bs_write(stream *restrict ss, const void
* to the left */
blksize <<= 1;
if (!mnstr_writeSht(ss->inner, (int16_t) blksize) ||
- ss->inner->write(ss->inner, s->buf, 1, s->nr) !=
(ssize_t) s->nr) {
- mnstr_copy_error(ss, ss->inner);
+ ss->inner->write(ss->inner, s->buf, 1, s->nr) !=
(ssize_t) s->nr
+ ) {
+ if (mnstr_errnr(ss->inner) != MNSTR_NO__ERROR) {
+ mnstr_copy_error(ss, ss->inner);
+ } else {
+ mnstr_set_error(ss, MNSTR_WRITE_ERROR,
"connection closed unexpectedly");
+ }
+
s->nr = 0; /* data is lost due to error */
return -1;
}
diff --git a/common/stream/mapi_stream.c b/common/stream/mapi_stream.c
--- a/common/stream/mapi_stream.c
+++ b/common/stream/mapi_stream.c
@@ -56,6 +56,7 @@ discard(stream *s)
struct mapi_filetransfer {
stream *from_client; // set to NULL after sending MAPI_PROMPT3
stream *to_client; // set to NULL when client sends empty
+ bstream *bs;
};
static ssize_t
@@ -77,7 +78,8 @@ upload_read(stream *restrict s, void *re
mnstr_write(state->to_client, PROMPT2, strlen(PROMPT2),
1) != 1
|| mnstr_flush(state->to_client, MNSTR_FLUSH_ALL) < 0
) {
- mnstr_set_error(s, mnstr_errnr(state->to_client), "%s",
mnstr_peek_error(state->to_client));
+ state->bs->pos = state->bs->len;
+ mnstr_copy_error(s, state->to_client);
return -1;
}
@@ -92,6 +94,7 @@ upload_read(stream *restrict s, void *re
state->from_client = NULL;
return nread;
} else {
+ state->bs->pos = state->bs->len;
mnstr_set_error(s, mnstr_errnr(state->from_client), "%s",
mnstr_peek_error(state->from_client));
return -1;
}
@@ -116,7 +119,15 @@ download_write(stream *restrict s, const
{
struct mapi_filetransfer *state = s->stream_data.p;
stream *to = state->to_client;
- return to->write(to, buf, elmsize, cnt);
+ ssize_t res = to->write(to, buf, elmsize, cnt);
+ if (res < 0) {
+ state->bs->pos = state->bs->len;
+ mnstr_copy_error(s, to);
+ } else if (res == 0) {
+ assert(to->eof);
+ s->eof = to->eof;
+ }
+ return res;
}
static void
@@ -205,6 +216,7 @@ setup_transfer(const char *req, const ch
}
state->from_client = rs;
state->to_client = ws;
+ state->bs = bs;
s->stream_data.p = state;
end:
if (msg) {
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -2557,7 +2557,7 @@ rel2bin_table(backend *be, sql_rel *rel,
{
mvc *sql = be->mvc;
list *l;
- stmt *sub = NULL, *osub = NULL;
+ stmt *sub = NULL;
node *en, *n;
sql_exp *op = rel->r;
@@ -2782,8 +2782,6 @@ rel2bin_table(backend *be, sql_rel *rel,
s = stmt_alias(be, s, exp->alias.label, rnme, exp_name(exp));
list_append(l, s);
}
- if (osub && osub->nrcols)
- list_join(l, osub->op4.lval);
sub = stmt_list(be, l);
return sub;
}
diff --git a/sql/backends/monet5/sql_optimizer.c
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -58,7 +58,6 @@ SQLgetSpace(mvc *m, MalBlkPtr mb, int pr
{
sql_trans *tr = m->session->tr;
lng size,space = 0, i;
- str lasttable = 0;
for (i = 0; i < mb->stop; i++) {
InstrPtr p = mb->stmt[i];
@@ -84,11 +83,10 @@ SQLgetSpace(mvc *m, MalBlkPtr mb, int pr
continue;
/* we have to sum the cost of all three components of a
BAT */
- if (c && isTable(c->t) && (lasttable == 0 ||
strcmp(lasttable,tname)==0)) {
+ if (c && isTable(c->t)) {
size = SQLgetColumnSize(tr, c, access);
space += size; // accumulate once per table
- //lasttable = tname; invalidate this attempt
- if (!prepare && size == 0 && !t->system)
+ if (!prepare && size == 0 && !t->system)
setFunctionId(p, emptybindRef);
}
}
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
@@ -2048,7 +2048,7 @@ select2_join2(backend *be, stmt *op1, st
int r1 = op2->nr;
int r2 = op3->nr;
- int rs = 0;
+ /* int rs = 0; */
q = newStmtArgs(mb, algebraRef, cmd, 12);
if (q == NULL)
goto bailout;
@@ -2066,12 +2066,12 @@ select2_join2(backend *be, stmt *op1, st
}
if (sub) /* only for uselect2 */
q = pushArgument(mb, q, sub->nr);
- if (rs) {
- q = pushArgument(mb, q, rs);
- } else {
- q = pushArgument(mb, q, r1);
- q = pushArgument(mb, q, r2);
- }
+ /* if (rs) { */
+ /* q = pushArgument(mb, q, rs); */
+ /* } else { */
+ q = pushArgument(mb, q, r1);
+ q = pushArgument(mb, q, r2);
+ /* } */
if (type == st_join2) {
q = pushNilBat(mb, q);
q = pushNilBat(mb, q);
@@ -3994,7 +3994,6 @@ stmt_convert(backend *be, stmt *v, stmt
InstrPtr q = NULL;
const char *convert = t->type->impl, *mod = calcRef;
int pushed = (v->cand && v->cand == sel), no_candidates = 0;
- bool add_tz = false;
/* convert types and make sure they are rounded up correctly */
if (v->nr < 0)
@@ -4078,15 +4077,13 @@ stmt_convert(backend *be, stmt *v, stmt
q = pushInt(mb, q, 3);
}
q = pushArgument(mb, q, v->nr);
- if (add_tz)
- q = pushLng(mb, q, be->mvc->timezone);
if (sel && !pushed && !v->cand) {
q = pushArgument(mb, q, sel->nr);
pushed = 1;
} else if (v->nrcols > 0 && !no_candidates) {
q = pushNilBat(mb, q);
}
- if (!add_tz && (t->type->eclass == EC_DEC ||
EC_TEMP_FRAC(t->type->eclass) || EC_INTERVAL(t->type->eclass))) {
+ if (t->type->eclass == EC_DEC || EC_TEMP_FRAC(t->type->eclass) ||
EC_INTERVAL(t->type->eclass)) {
/* digits, scale of the result decimal */
q = pushInt(mb, q, t->digits);
if (!EC_TEMP_FRAC(t->type->eclass))
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3165,8 +3165,6 @@ store_hot_snapshot(sql_trans *tx, str ta
int do_remove = 0;
int dir_fd = -1;
stream *tar_stream = NULL;
- buffer *plan_buf = NULL;
- stream *plan_stream = NULL;
sqlstore *store = tx->store;
if (!store->logger_api.get_snapshot_files) {
@@ -3262,10 +3260,6 @@ end:
close(dir_fd);
if (tar_stream)
close_stream(tar_stream);
- if (plan_stream)
- close_stream(plan_stream);
- if (plan_buf)
- buffer_destroy(plan_buf);
if (do_remove)
(void) MT_remove(tmppath); // Best effort, ignore the
result
GDKfree(tmppath);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]