Changeset: 8f66f1611a5d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8f66f1611a5d
Modified Files:
monetdb5/mal/mal_client.c
sql/backends/monet5/rel_bin.c
sql/server/rel_unnest.c
Branch: default
Log Message:
Merge with Mar2025 branch.
diffs (truncated from 780 to 300 lines):
diff --git a/clients/mapilib/mapi_querytype.h b/clients/mapilib/mapi_querytype.h
--- a/clients/mapilib/mapi_querytype.h
+++ b/clients/mapilib/mapi_querytype.h
@@ -13,7 +13,7 @@
#ifndef _MAPI_QUERYTYPE_H_INCLUDED
#define _MAPI_QUERYTYPE_H_INCLUDED 1
-/* this definition is a straight copy from sql/include/sql_query.h */
+/* this definition is also used by the SQL layer */
typedef enum {
Q_PARSE = 0,
Q_TABLE = 1,
diff --git a/common/utils/msabaoth.c b/common/utils/msabaoth.c
--- a/common/utils/msabaoth.c
+++ b/common/utils/msabaoth.c
@@ -292,7 +292,7 @@ msab_marchScenario(const char *lang)
if ((tmp = getDBPath(pathbuf, sizeof(pathbuf), SCENARIOFILE)) != NULL)
return(tmp);
- if ((f = MT_fopen(pathbuf, "a+")) != NULL) {
+ if ((f = MT_fopen(pathbuf, "r")) != NULL) {
if ((len = fread(buf, 1, 255, f)) > 0) {
char *p;
@@ -308,6 +308,9 @@ msab_marchScenario(const char *lang)
tmp = p;
}
}
+ fclose(f);
+ }
+ if ((f = MT_fopen(pathbuf, "a")) != NULL) {
/* append to the file */
fprintf(f, "%s\n", lang);
(void)fflush(f);
@@ -336,10 +339,10 @@ msab_retreatScenario(const char *lang)
if ((tmp = getDBPath(pathbuf, sizeof(pathbuf), SCENARIOFILE)) != NULL)
return(tmp);
- if ((f = MT_fopen(pathbuf, "a+")) != NULL) {
+ if ((f = MT_fopen(pathbuf, "r")) != NULL) {
if ((len = fread(buf, 1, 255, f)) > 0) {
char *p;
- char written = 0;
+ bool written = false;
buf[len] = '\0';
tmp = buf;
@@ -348,14 +351,14 @@ msab_retreatScenario(const char *lang)
*p = '\0';
if (strcmp(tmp, lang) == 0) {
memmove(tmp, p + 1, strlen(p + 1) + 1);
- written = 1;
+ written = true;
} else {
*p = '\n';
tmp = p+1;
}
}
- if (written != 0) {
- rewind(f);
+ fclose(f);
+ if (written && (f = fopen(pathbuf, "w")) != NULL) {
len = strlen(buf) + 1;
if (fwrite(buf, 1, len, f) < len) {
snprintf(buf, sizeof(buf), "failed to
write: %s (%s)",
@@ -366,8 +369,11 @@ msab_retreatScenario(const char *lang)
fflush(f);
fclose(f);
return(NULL);
+ } else if (written) {
+ snprintf(buf, sizeof(buf), "failed to open
file: %s (%s)",
+ strerror(errno), pathbuf);
+ return strdup(buf);
}
- (void)fclose(f);
(void) MT_remove(pathbuf);
return(NULL);
} else {
@@ -383,9 +389,7 @@ msab_retreatScenario(const char *lang)
return(NULL);
}
}
- snprintf(buf, sizeof(buf), "failed to open file: %s (%s)",
- strerror(errno), pathbuf);
- return(strdup(buf));
+ return(NULL);
}
#define CONNECTIONFILE ".conn"
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -256,7 +256,8 @@ MCinitClientRecord(Client c, oid user, b
c->usermodule = c->curmodule = 0;
c->father = NULL;
- c->idle = c->login = c->lastcmd = time(0);
+ c->idle = 0;
+ c->login = c->lastcmd = time(0);
c->session = GDKusec();
strcpy_len(c->optimizer, "default_pipe", sizeof(c->optimizer));
c->workerlimit = 0;
diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -267,9 +267,6 @@ runtimeProfileInit(Client cntxt, MalBlkP
}
}
MT_lock_unset(&mal_delayLock);
- MT_lock_set(&mal_contextLock);
- cntxt->idle = 0;
- MT_lock_unset(&mal_contextLock);
}
/*
@@ -306,9 +303,6 @@ runtimeProfileFinish(Client cntxt, MalBl
QRYqueue[i].finished,
QRYqueue[i].query);
// assume that the user is now idle
MT_lock_unset(&mal_delayLock);
- MT_lock_set(&mal_contextLock);
- cntxt->idle = time(0);
- MT_lock_unset(&mal_contextLock);
found = true;
break;
}
diff --git a/monetdb5/optimizer/opt_mitosis.c b/monetdb5/optimizer/opt_mitosis.c
--- a/monetdb5/optimizer/opt_mitosis.c
+++ b/monetdb5/optimizer/opt_mitosis.c
@@ -162,9 +162,6 @@ OPTmitosisImplementation(Client cntxt, M
* Take into account the number of client connections,
* because all user together are responsible for resource contentions
*/
- MT_lock_set(&mal_contextLock);
- cntxt->idle = 0; // this one is definitely not
idle
- MT_lock_unset(&mal_contextLock);
/* improve memory usage estimation */
if (nr_cols > 1 || nr_aggrs > 1 || nr_maps > 1)
diff --git a/sql/backends/monet5/UDF/pyapi3/conversion3.c
b/sql/backends/monet5/UDF/pyapi3/conversion3.c
--- a/sql/backends/monet5/UDF/pyapi3/conversion3.c
+++ b/sql/backends/monet5/UDF/pyapi3/conversion3.c
@@ -136,19 +136,18 @@ PyMaskedArray_FromBAT(PyInput *inp, size
bool bnonil = b->tnonil;
MT_lock_unset(&b->theaplock);
if (!bnonil) {
- PyObject *mod = PyImport_ImportModule("numpy.ma");
- PyObject *mafunc = PyObject_GetAttrString( mod, "masked_array");
PyObject *nullmask = PyNullMask_FromBAT(b, t_start, t_end);
if (!nullmask) {
Py_DECREF(vararray);
- Py_DECREF(mafunc);
- Py_DECREF(mod);
msg = createException(MAL, "pyapi3.eval", "Failed to
create mask for some reason");
goto wrapup;
} else if (nullmask == Py_None) {
Py_DECREF(nullmask);
} else {
+ PyObject *mod = PyImport_ImportModule("numpy.ma");
+ PyObject *mafunc = PyObject_GetAttrString( mod,
"masked_array");
+ Py_DECREF(mod);
PyObject *maargs = PyTuple_New(2);
PyTuple_SetItem(maargs, 0, vararray);
PyTuple_SetItem(maargs, 1, nullmask);
@@ -157,16 +156,13 @@ PyMaskedArray_FromBAT(PyInput *inp, size
// array constructor
PyObject *mask = PyObject_CallObject(mafunc, maargs);
Py_DECREF(maargs);
+ Py_DECREF(mafunc);
if (!mask) {
- Py_DECREF(mafunc);
- Py_DECREF(mod);
msg = createException(MAL, "pyapi3.eval",
SQLSTATE(PY000) "Failed to create mask");
goto wrapup;
}
vararray = mask;
}
- Py_DECREF(mafunc);
- Py_DECREF(mod);
}
return vararray;
wrapup:
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
@@ -4748,6 +4748,8 @@ rel2bin_project(backend *be, sql_rel *re
}
limit = lpiv;
+ if (!limit) /* partition/order by cols fully overlap */
+ limit = stmt_limit(be, pl->h->data, NULL, grp,
stmt_atom_lng(be, 0), l, 0,0,0,0,1);
if (limit && grp)
limit = stmt_project(be, stmt_selectnonil(be, limit,
NULL), limit);
stmt *s;
diff --git a/sql/backends/monet5/sql_execute.c
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -271,7 +271,6 @@ SQLrun(Client c, mvc *m)
if((msg = SQLsetTrace(c,mb)) == MAL_SUCCEED) {
setVariableScope(mb);
MT_lock_set(&mal_contextLock);
- c->idle = 0;
c->lastcmd = time(0);
MT_lock_unset(&mal_contextLock);
msg = runMAL(c, mb, 0, 0);
@@ -280,7 +279,6 @@ SQLrun(Client c, mvc *m)
} else {
setVariableScope(mb);
MT_lock_set(&mal_contextLock);
- c->idle = 0;
c->lastcmd = time(0);
MT_lock_unset(&mal_contextLock);
msg = runMAL(c, mb, 0, 0);
@@ -289,7 +287,6 @@ SQLrun(Client c, mvc *m)
}
/* after the query has been finished we enter the idle state */
MT_lock_set(&mal_contextLock);
- c->idle = time(0);
c->lastcmd = 0;
MT_lock_unset(&mal_contextLock);
MT_thread_setworking(NULL);
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -1100,6 +1100,7 @@ SQLreader(Client c, backend *be)
MT_lock_unset(&mal_contextLock);
return MAL_SUCCEED;
}
+ c->idle = time(0);
MT_lock_unset(&mal_contextLock);
language = be->language; /* 'S', 's' or 'X' */
m = be->mvc;
@@ -1125,11 +1126,6 @@ SQLreader(Client c, backend *be)
break;
commit_done = true;
}
- if (m->session->tr && m->session->tr->active) {
- MT_lock_set(&mal_contextLock);
- c->idle = 0;
- MT_lock_unset(&mal_contextLock);
- }
if (go && in->pos >= in->len) {
ssize_t rd;
@@ -1151,12 +1147,6 @@ SQLreader(Client c, backend *be)
if (msg)
break;
commit_done = true;
- MT_lock_set(&mal_contextLock);
- if (c->idle == 0 && (m->session->tr ==
NULL || !m->session->tr->active)) {
- /* now the session is idle */
- c->idle = time(0);
- }
- MT_lock_unset(&mal_contextLock);
}
if (go && ((!blocked && mnstr_write(c->fdout,
c->prompt, c->promptlength, 1) != 1) || mnstr_flush(c->fdout,
MNSTR_FLUSH_DATA))) {
@@ -1202,6 +1192,9 @@ SQLreader(Client c, backend *be)
MT_lock_unset(&mal_contextLock);
return msg;
}
+ MT_lock_set(&mal_contextLock);
+ c->idle = 0;
+ MT_lock_unset(&mal_contextLock);
return msg;
}
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
@@ -698,6 +698,15 @@ monet5_schema_user_dependencies(ptr _tra
return A;
}
+static void
+SQLsetIdle(int clientid, time_t t)
+{
+ Client c = mal_clients + clientid;
+ MT_lock_set(&mal_contextLock);
+ c->idle = t;
+ MT_lock_unset(&mal_contextLock);
+}
+
void
monet5_user_init(backend_functions *be_funcs)
{
@@ -710,6 +719,7 @@ monet5_user_init(backend_functions *be_f
be_funcs->fauser = &monet5_alter_user;
be_funcs->fruser = &monet5_rename_user;
be_funcs->fschuserdep = &monet5_schema_user_dependencies;
+ be_funcs->setIdle = SQLsetIdle;
}
int
diff --git a/sql/common/sql_backend.c b/sql/common/sql_backend.c
--- a/sql/common/sql_backend.c
+++ b/sql/common/sql_backend.c
@@ -126,3 +126,10 @@ backend_find_role(ptr mvc, char *name, s
return be_funcs.ffrole(mvc, name, role_id);
return 0;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]