Changeset: 2ea1d8f39502 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2ea1d8f39502
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/server/rel_optimizer.c
Branch: pushcands
Log Message:
Merged with default
diffs (truncated from 1482 to 300 lines):
diff --git a/clients/Tests/MAL-signatures.stable.out
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -7961,7 +7961,7 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "droporderindex", "unsafe pattern
sql.droporderindex(X_0:str, X_1:str, X_2:str):void ", "sql_droporderindex;",
"" ]
[ "sql", "dump_cache", "pattern sql.dump_cache() (X_0:bat[:str],
X_1:bat[:int]) ", "dump_cache;", "" ]
[ "sql", "dump_opt_stats", "pattern sql.dump_opt_stats()
(X_0:bat[:str], X_1:bat[:int]) ", "dump_opt_stats;", "" ]
-[ "sql", "dump_trace", "pattern sql.dump_trace() (X_0:bat[:lng],
X_1:bat[:str]) ", "dump_trace;", "" ]
+[ "sql", "dump_trace", "pattern sql.dump_trace() (X_0:bat[:lng],
X_1:bat[:str], X_2:bat[:str]) ", "dump_trace;", "" ]
[ "sql", "emptybind", "pattern sql.emptybind(X_0:int, X_1:str,
X_2:str, X_3:str, X_4:int) (X_5:bat[:oid], X_6:bat[:any_1]) ",
"mvc_bind_wrap;", "" ]
[ "sql", "emptybind", "pattern sql.emptybind(X_0:int, X_1:str,
X_2:str, X_3:str, X_4:int):bat[:any_1] ", "mvc_bind_wrap;", "" ]
[ "sql", "emptybind", "pattern sql.emptybind(X_0:int, X_1:str,
X_2:str, X_3:str, X_4:int, X_5:int, X_6:int) (X_7:bat[:oid], X_8:bat[:any_1])
", "mvc_bind_wrap;", "" ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -10863,7 +10863,7 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "droporderindex", "unsafe pattern
sql.droporderindex(X_0:str, X_1:str, X_2:str):void ", "sql_droporderindex;",
"" ]
[ "sql", "dump_cache", "pattern sql.dump_cache() (X_0:bat[:str],
X_1:bat[:int]) ", "dump_cache;", "" ]
[ "sql", "dump_opt_stats", "pattern sql.dump_opt_stats()
(X_0:bat[:str], X_1:bat[:int]) ", "dump_opt_stats;", "" ]
-[ "sql", "dump_trace", "pattern sql.dump_trace() (X_0:bat[:lng],
X_1:bat[:str]) ", "dump_trace;", "" ]
+[ "sql", "dump_trace", "pattern sql.dump_trace() (X_0:bat[:lng],
X_1:bat[:str], X_2:bat[:str]) ", "dump_trace;", "" ]
[ "sql", "emptybind", "pattern sql.emptybind(X_0:int, X_1:str,
X_2:str, X_3:str, X_4:int) (X_5:bat[:oid], X_6:bat[:any_1]) ",
"mvc_bind_wrap;", "" ]
[ "sql", "emptybind", "pattern sql.emptybind(X_0:int, X_1:str,
X_2:str, X_3:str, X_4:int):bat[:any_1] ", "mvc_bind_wrap;", "" ]
[ "sql", "emptybind", "pattern sql.emptybind(X_0:int, X_1:str,
X_2:str, X_3:str, X_4:int, X_5:int, X_6:int) (X_7:bat[:oid], X_8:bat[:any_1])
", "mvc_bind_wrap;", "" ]
diff --git a/clients/odbc/driver/SQLSpecialColumns.c
b/clients/odbc/driver/SQLSpecialColumns.c
--- a/clients/odbc/driver/SQLSpecialColumns.c
+++ b/clients/odbc/driver/SQLSpecialColumns.c
@@ -221,7 +221,7 @@ MNDBSpecialColumns(ODBCStmt *stmt,
"sys.tables t, "
"sys.columns c, "
"sys.keys k, "
- "sys.objects kc"
+ "sys.objects kc "
"where s.id = t.schema_id and "
"t.id = c.table_id and "
"t.id = k.table_id and "
diff --git a/ctest/tools/monetdbe/CMakeLists.txt
b/ctest/tools/monetdbe/CMakeLists.txt
--- a/ctest/tools/monetdbe/CMakeLists.txt
+++ b/ctest/tools/monetdbe/CMakeLists.txt
@@ -85,7 +85,6 @@ target_link_libraries(example_proxy
PRIVATE
monetdb_config_header
monetdbe)
-add_test(run_example_proxy example_proxy)
if(WITH_CMOCKA)
add_executable(cmocka_test cmocka_test.c test_helper.c)
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -4016,13 +4016,15 @@ BATjoin(BAT **r1p, BAT **r2p, BAT *l, BA
if ((parent = VIEWtparent(l)) != 0) {
BAT *b = BBPdescriptor(parent);
if (l->hseqbase == b->hseqbase &&
- BATcount(l) == BATcount(b))
+ BATcount(l) == BATcount(b) &&
+ ATOMtype(l->ttype) == ATOMtype(b->ttype))
l = b;
}
if ((parent = VIEWtparent(r)) != 0) {
BAT *b = BBPdescriptor(parent);
if (r->hseqbase == b->hseqbase &&
- BATcount(r) == BATcount(b))
+ BATcount(r) == BATcount(b) &&
+ ATOMtype(r->ttype) == ATOMtype(b->ttype))
r = b;
}
diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c
--- a/gdk/gdk_project.c
+++ b/gdk/gdk_project.c
@@ -45,6 +45,7 @@ project1_##TYPE(BAT *restrict bn, BAT *r
for (lo = 0, hi = BATcount(l); lo < hi; lo++) \
bt[lo] = r1t[lo]; \
} else { \
+ assert(l->ttype);\
const oid *restrict ot = (const oid *) Tloc(l, 0); \
for (lo = 0, hi = BATcount(l); lo < hi; lo++) { \
oid o = ot[lo]; \
@@ -85,7 +86,8 @@ project_##TYPE(BAT *restrict bn, BAT *re
oid r1seq, r1end; \
oid r2seq, r2end; \
\
- if ((!ci || ci->tpe == cand_dense) && l->tnonil && !r2) \
+ if ((!ci || (ci->tpe == cand_dense && BATtdense(l))) && \
+ l->tnonil && r1->ttype && !BATtdense(r1) && !r2) \
return project1_##TYPE(bn, l, r1); \
MT_thread_setalgorithm(__func__); \
r1t = (const TYPE *) Tloc(r1, 0); \
@@ -173,7 +175,7 @@ project_oid(BAT *restrict bn, BAT *restr
const oid *restrict r2t = NULL;
struct canditer r1ci = {0}, r2ci = {0};
- if ((!lci || lci->tpe == cand_dense) && r1->ttype && !BATtdense(r1) &&
!r2) {
+ if ((!lci || (lci->tpe == cand_dense && BATtdense(l))) && r1->ttype &&
!BATtdense(r1) && !r2) {
if (sizeof(oid) == sizeof(lng))
return project1_lng(bn, l, r1);
else
diff --git a/monetdb5/mal/mal_client.h b/monetdb5/mal/mal_client.h
--- a/monetdb5/mal/mal_client.h
+++ b/monetdb5/mal/mal_client.h
@@ -82,6 +82,7 @@ typedef struct CLIENT {
/* The user can request a TRACE SQL statement, calling for collecting
the events locally */
BAT *profticks;
BAT *profstmt;
+ BAT *profevents;
ATOMIC_TYPE lastprint; /* when we last printed the query, to
be depricated */
/*
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -182,8 +182,8 @@ EXAMPLE:
}
"stmt":"X_41=0@0:void := querylog.define(\"select count(*) from
tables;\":str,\"default_pipe\":str,30:int);",
*/
-static void
-renderProfilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci,
int start)
+static str
+prepareProfilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci,
int start)
{
struct logbuf logbuf;
str c;
@@ -199,14 +199,14 @@ renderProfilerEvent(Client cntxt, MalBlk
if( !start && pci->calls > HIGHWATERMARK){
if( pci->calls == 10000 || pci->calls == 100000 || pci->calls
== 1000000 || pci->calls == 10000000)
TRC_WARNING(MAL_SERVER, "Too many calls: %d\n",
pci->calls);
- return;
+ return NULL;
}
/* The stream of events can be complete read by the DBA,
* all other users can only see events assigned to their account
*/
if(malprofileruser!= MAL_ADMIN && malprofileruser != cntxt->user)
- return;
+ return NULL;
logbuf = (struct logbuf) {0};
@@ -235,16 +235,16 @@ renderProfilerEvent(Client cntxt, MalBlk
getModuleId(getInstrPtr(mb, 0)),
getFunctionId(getInstrPtr(mb, 0)),
mb?getPC(mb,pci):0,
stk?stk->tag:0))
- return;
+ return NULL;
if( pci->modname && !logadd(&logbuf, ",\"module\":\"%s\"", pci->modname
? pci->modname : ""))
- return;
+ return NULL;
if( pci->fcnname && !logadd(&logbuf, ",\"function\":\"%s\"",
pci->fcnname ? pci->fcnname : ""))
- return;
+ return NULL;
if( pci->barrier && !logadd(&logbuf, ",\"barrier\":\"%s\"",
operatorName(pci->barrier)))
- return;
+ return NULL;
if ((pci->token < FCNcall || pci->token > PATcall) &&
!logadd(&logbuf, ",\"operator\":\"%s\"",
operatorName(pci->token)))
- return;
+ return NULL;
if (!GDKinmemory(0) && !GDKembedded()) {
char *uuid = NULL;
str c;
@@ -252,16 +252,16 @@ renderProfilerEvent(Client cntxt, MalBlk
ok = logadd(&logbuf, ",\"session\":\"%s\"", uuid);
free(uuid);
if (!ok)
- return;
+ return NULL;
} else
free(c);
}
if (!logadd(&logbuf, ",\"state\":\"%s\",\"usec\":"LLFMT,
start?"start":"done", pci->ticks))
- return;
+ return NULL;
const char *algo = MT_thread_getalgorithm();
if (algo && !logadd(&logbuf, ",\"algorithm\":\"%s\"", algo))
- return;
+ return NULL;
/* EXAMPLE MAL statement argument decomposition
* The eventparser may assume this layout for ease of parsing
@@ -279,7 +279,7 @@ renderProfilerEvent(Client cntxt, MalBlk
int j;
if (!logadd(&logbuf, ",\"args\":["))
- return;
+ return NULL;
for(j=0; j< pci->argc; j++){
int tpe = getVarType(mb, getArg(pci,j));
str tname = 0, cv;
@@ -290,16 +290,16 @@ renderProfilerEvent(Client cntxt, MalBlk
if (j == 0) {
// No comma at the beginning
if (!logadd(&logbuf, "{"))
- return;
+ return NULL;
}
else {
if (!logadd(&logbuf, ",{"))
- return;
+ return NULL;
}
if (!logadd(&logbuf, "\"%s\":%d,\"var\":\"%s\"",
j < pci->retc ? "ret" : "arg",
j,
getVarName(mb, getArg(pci,j))))
- return;
+ return NULL;
c =getVarName(mb, getArg(pci,j));
if(getVarSTC(mb,getArg(pci,j))){
InstrPtr stc = getInstrPtr(mb,
getVarSTC(mb,getArg(pci,j)));
@@ -310,7 +310,7 @@ renderProfilerEvent(Client cntxt, MalBlk
getVarConstant(mb,
getArg(stc,stc->retc +1)).val.sval,
getVarConstant(mb,
getArg(stc,stc->retc +2)).val.sval,
getVarConstant(mb,
getArg(stc,stc->retc +3)).val.sval))
- return;
+ return NULL;
}
if(isaBatType(tpe)){
BAT *d= BATdescriptor(bid =
stk->stk[getArg(pci,j)].val.bval);
@@ -318,7 +318,7 @@ renderProfilerEvent(Client cntxt, MalBlk
ok = logadd(&logbuf, ",\"type\":\"bat[:%s]\"",
tname);
GDKfree(tname);
if (!ok)
- return;
+ return NULL;
if(d) {
BAT *v;
cnt = BATcount(d);
@@ -332,10 +332,10 @@ renderProfilerEvent(Client cntxt, MalBlk
VIEWtparent(d),
d->hseqbase,
v &&
!v->batTransient ? "persistent" : "transient"))
- return;
+ return NULL;
} else {
if (!logadd(&logbuf,
",\"mode\":\"%s\"", (d->batTransient ? "transient" : "persistent")))
- return;
+ return NULL;
}
if (!logadd(&logbuf,
",\"sorted\":%d"
@@ -348,7 +348,7 @@ renderProfilerEvent(Client cntxt, MalBlk
d->tnonil,
d->tnil,
d->tkey))
- return;
+ return NULL;
#define keepprop(NME, LNME)\
{const void *valp = BATgetprop(d, NME); \
if ( valp){\
@@ -359,7 +359,7 @@ if ( valp){\
GDKfree(cv);\
GDKfree(cvquote);\
if (!ok)\
- return;\
+ return NULL;\
}\
}}
keepprop(GDK_MIN_VALUE,"min");
@@ -378,18 +378,18 @@ if ( valp){\
ok = logadd(&logbuf,
",\"file\":\"%s\"", cv + 1);
GDKfree(cv);
if (!ok)
- return;
+ return NULL;
total += cnt * d->twidth;
if (!logadd(&logbuf, ",\"width\":%d",
d->twidth))
- return;
+ return NULL;
/* keeping information about the
individual auxiliary heaps is helpful during analysis. */
if( d->thash && !logadd(&logbuf,
",\"hash\":" LLFMT, (lng) hashinfo(d->thash, d->batCacheid)))
- return;
+ return NULL;
if( d->tvheap && !logadd(&logbuf,
",\"vheap\":" LLFMT, (lng) heapinfo(d->tvheap, d->batCacheid)))
- return;
+ return NULL;
if( d->timprints && !logadd(&logbuf,
",\"imprints\":" LLFMT, (lng) IMPSimprintsize(d)))
- return;
- /* if (!logadd(&logbuf,
"\"debug\":\"%s\",", d->debugmessages)) return; */
+ return NULL;
+ /* if (!logadd(&logbuf,
"\"debug\":\"%s\",", d->debugmessages)) return NULL; */
BBPunfix(d->batCacheid);
}
if (!logadd(&logbuf,
@@ -397,7 +397,7 @@ if ( valp){\
",\"count\":"BUNFMT
",\"size\":" LLFMT,
bid, cnt, total))
- return;
+ return NULL;
} else{
tname = getTypeName(tpe);
ok = logadd(&logbuf,
@@ -406,7 +406,7 @@ if ( valp){\
tname,
isVarConstant(mb, getArg(pci,j)));
GDKfree(tname);
if (!ok)
- return;
+ return NULL;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list