Changeset: b7b30d092109 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b7b30d092109
Modified Files:
.bumpversion.cfg
MonetDB.spec
clients/Tests/exports.stable.out
clients/mapilib/mapi.rc
clients/odbc/driver/driver.rc
clients/odbc/winsetup/setup.rc
cmake/monetdb-versions.cmake
gdk/libbat.rc
monetdb5/optimizer/opt_prelude.c
monetdb5/optimizer/opt_prelude.h
monetdb5/optimizer/opt_support.c
monetdb5/tools/libmonetdb5.rc
Branch: default
Log Message:
Merge with Sep2022 branch.
diffs (truncated from 459 to 300 lines):
diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -776,3 +776,4 @@ 9785fa2a471fe32495e07479edf110335ddaa750
26ffeb5af5240c807a6583fd6eb4ee2c9cd210d2 Jan2022_19
3191fee438036ac0da1e6f31481b9681399123b5 Jan2022_21
3191fee438036ac0da1e6f31481b9681399123b5 Jan2022_SP4_release
+bdd04053973daa8a786a30e07b2bf1bd8aa6ebf1 Jul2021_27
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1336,7 +1336,6 @@ str setScenario(Client c, str nme);
const char *setVariableRef;
void setVariableScope(MalBlkPtr mb);
void setVariableType(MalBlkPtr mb, const int idx, malType type);
-const char *setWriteModeRef;
const char *set_protocolRef;
void setprofilerlimit(int limit);
void showAllScenarios(stream *f);
diff --git a/gdk/gdk_cand.c b/gdk/gdk_cand.c
--- a/gdk/gdk_cand.c
+++ b/gdk/gdk_cand.c
@@ -1098,6 +1098,8 @@ canditer_slice(const struct canditer *ci
return BATdense(0, 0, 0);
if (hi > ci->ncand)
hi = ci->ncand;
+ if (hi - lo == 1)
+ return BATdense(0, canditer_idx(ci, lo), 1);
switch (ci->tpe) {
case cand_materialized:
if (ci->s) {
diff --git a/gdk/gdk_cross.c b/gdk/gdk_cross.c
--- a/gdk/gdk_cross.c
+++ b/gdk/gdk_cross.c
@@ -36,6 +36,54 @@ BATsubcross(BAT **r1p, BAT **r2p, BAT *l
return GDK_FAIL;
}
+ /* first some special cases */
+ if (ci1.ncand == 0 || ci2.ncand == 0) {
+ if ((bn1 = BATdense(0, 0, 0)) == NULL)
+ return GDK_FAIL;
+ if (r2p) {
+ if ((bn2 = BATdense(0, 0, 0)) == NULL) {
+ BBPreclaim(bn1);
+ return GDK_FAIL;
+ }
+ *r2p = bn2;
+ }
+ *r1p = bn1;
+ return GDK_SUCCEED;
+ }
+ if (ci2.ncand == 1) {
+ if ((bn1 = canditer_slice(&ci1, 0, ci1.ncand)) == NULL)
+ return GDK_FAIL;
+ if (r2p) {
+ if (ci1.ncand == 1) {
+ bn2 = canditer_slice(&ci2, 0, ci2.ncand);
+ } else {
+ bn2 = BATconstant(0, TYPE_oid, &ci2.seq,
ci1.ncand, TRANSIENT);
+ }
+ if (bn2 == NULL) {
+ BBPreclaim(bn1);
+ return GDK_FAIL;
+ }
+ *r2p = bn2;
+ }
+ *r1p = bn1;
+ return GDK_SUCCEED;
+ }
+ if (ci1.ncand == 1) {
+ bn1 = BATconstant(0, TYPE_oid, &ci1.seq, ci2.ncand, TRANSIENT);
+ if (bn1 == NULL)
+ return GDK_FAIL;
+ if (r2p) {
+ bn2 = canditer_slice(&ci2, 0, ci2.ncand);
+ if (bn2 == NULL) {
+ BBPreclaim(bn1);
+ return GDK_FAIL;
+ }
+ *r2p = bn2;
+ }
+ *r1p = bn1;
+ return GDK_SUCCEED;
+ }
+
bn1 = COLnew(0, TYPE_oid, ci1.ncand * ci2.ncand, TRANSIENT);
if (r2p)
bn2 = COLnew(0, TYPE_oid, ci1.ncand * ci2.ncand, TRANSIENT);
diff --git a/monetdb5/mal/Tests/All b/monetdb5/mal/Tests/All
--- a/monetdb5/mal/Tests/All
+++ b/monetdb5/mal/Tests/All
@@ -153,7 +153,6 @@ tst401
tst500
tst501
tst560
-tst611
#tst620 word size problems on different platforms
tst660
tst661
diff --git a/monetdb5/mal/Tests/tst611.maltest
b/monetdb5/mal/Tests/tst611.maltest
deleted file mode 100644
--- a/monetdb5/mal/Tests/tst611.maltest
+++ /dev/null
@@ -1,9 +0,0 @@
-statement error
-function foo();
-RKA:bat[:int]:= bat.new(:int,1048576);
-bat.append(RKA,360:int);
-io.print(RKA);
-#the next one should fail
-bat.setWriteMode(RKB);
-end foo;
-
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
@@ -60,11 +60,9 @@ static void logjsonInternal(char *logbuf
size_t len;
len = strlen(logbuffer);
- if (maleventstream) {
- (void) mnstr_write(maleventstream, logbuffer, 1, len);
- if (flush)
- (void) mnstr_flush(maleventstream, MNSTR_FLUSH_DATA);
- }
+ (void) mnstr_write(maleventstream, logbuffer, 1, len);
+ if (flush)
+ (void) mnstr_flush(maleventstream, MNSTR_FLUSH_DATA);
}
/*
@@ -295,10 +293,6 @@ prepareMalEvent(Client cntxt, MalBlkPtr
clk = pci->clock;
mclk = (uint64_t)clk - ((uint64_t)startup_time.tv_sec*1000000 -
(uint64_t)startup_time.tv_usec);
/* make profile event tuple */
- /* TODO: This could probably be optimized somehow to avoid the
- * function call to mercurial_revision().
- */
- // No comma at the beginning
if (!logadd(&logbuf,
"{" // fill in
later with the event counter
"\"sessionid\":\"%d\""
@@ -651,8 +645,8 @@ profilerEvent(MalEvent *me, NonMalEvent
if (me != NULL && me->cntxt != NULL && getModuleId(me->pci) == myname)
return;
+ MT_lock_set(&mal_profileLock);
if (maleventstream) {
- MT_lock_set(&mal_profileLock);
if (me != NULL && me->mb != NULL && nme == NULL) {
if (me->stk == NULL ||
me->pci == NULL ||
@@ -669,8 +663,8 @@ profilerEvent(MalEvent *me, NonMalEvent
logjsonInternal(event, true);
free(event);
}
- MT_lock_unset(&mal_profileLock);
}
+ MT_lock_unset(&mal_profileLock);
}
/* The first scheme dumps the events on a stream (and in the pool)
@@ -752,10 +746,11 @@ startProfiler(Client cntxt)
#endif
(void) cntxt;
+ MT_lock_set(&mal_profileLock);
if(maleventstream){
+ MT_lock_unset(&mal_profileLock);
throw(MAL,"profiler.start","Profiler already running, stream
not available");
}
- MT_lock_set(&mal_profileLock);
if (myname == 0){
myname = putName("profiler");
}
diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c
--- a/monetdb5/optimizer/opt_prelude.c
+++ b/monetdb5/optimizer/opt_prelude.c
@@ -275,7 +275,6 @@ const char *semijoinRef;
const char *seriesRef;
const char *setAccessRef;
const char *setVariableRef;
-const char *setWriteModeRef;
const char *set_protocolRef;
const char *singleRef;
const char *sinkRef;
@@ -591,7 +590,6 @@ void optimizerInit(void)
seriesRef = putName("series");
setAccessRef = putName("setAccess");
setVariableRef = putName("setVariable");
- setWriteModeRef= putName("setWriteMode");
set_protocolRef= putName("set_protocol");
singleRef = putName("single");
sinkRef = putName("sink");
diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h
--- a/monetdb5/optimizer/opt_prelude.h
+++ b/monetdb5/optimizer/opt_prelude.h
@@ -273,7 +273,6 @@ mal_export const char *semijoinRef;
mal_export const char *seriesRef;
mal_export const char *setAccessRef;
mal_export const char *setVariableRef;
-mal_export const char *setWriteModeRef;
mal_export const char *set_protocolRef;
mal_export const char *singleRef;
mal_export const char *sinkRef;
diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c
--- a/monetdb5/optimizer/opt_support.c
+++ b/monetdb5/optimizer/opt_support.c
@@ -388,8 +388,7 @@ hasSideEffects(MalBlkPtr mb, InstrPtr p,
return TRUE;
if ( (getModuleId(p) == batRef || getModuleId(p)==sqlRef) &&
- (getFunctionId(p) == setAccessRef ||
- getFunctionId(p) == setWriteModeRef ))
+ (getFunctionId(p) == setAccessRef ))
return TRUE;
if (getModuleId(p) == malRef && getFunctionId(p) == multiplexRef)
diff --git a/sql/ChangeLog.Sep2022 b/sql/ChangeLog.Sep2022
--- a/sql/ChangeLog.Sep2022
+++ b/sql/ChangeLog.Sep2022
@@ -1,6 +1,26 @@
# ChangeLog file for sql
# This file is updated with Maddlog
+* Fri Aug 26 2022 Lucas Pereira <[email protected]>
+- Extended the built-in profiler to emit non-MAL events related to query
+ compilation, optimization, transactions and client connections. To
+ minimize, simplify and optimize the process of generating and processing
+ profiler output, only the events marking the end of an operation are
+ emitted in most cases and the emitted json messages themselves are
+ trimmed down to their essential fields. Furthermore the MAL instruction
+ profiler.openstream now has an overload that takes a single string
+ argument which can be set to "min" to turn on the profiler in minimal
+ mode which causes it to only emit general events and excludes individual
+ MAL instruction execution events from the profiler streams.
+
+* Thu Aug 25 2022 Martin van Dinther <[email protected]>
+- Extended system view sys.users with columns: schema_path, max_memory,
+ max_workers, optimizer and default_role.
+ Extended system table sys.db_user_info with columns: schema_path,
+ max_memory, max_workers, optimizer, default_role and password.
+ The password is encrypted. This table can only be queried when the
+ user has been granted the select privilege from monetdb.
+
* Fri Aug 19 2022 svetlin <[email protected]>
- Added default role to create user statement
diff --git a/sql/test/miscellaneous/Tests/unlogged.py
b/sql/test/miscellaneous/Tests/unlogged.py
--- a/sql/test/miscellaneous/Tests/unlogged.py
+++ b/sql/test/miscellaneous/Tests/unlogged.py
@@ -19,13 +19,16 @@ with tempfile.TemporaryDirectory() as fa
node1_cur = node1_conn.cursor()
node1_cur.execute("CREATE unlogged TABLE foo (i INT)")
- if node1_cur.execute("INSERT INTO foo VALUES (10), (20)") != 2:
- sys.stderr.write("2 rows inserted expected")
- if node1_cur.execute("UPDATE foo set i = i + 20 WHERE i = 10") !=
1:
- sys.stderr.write("1 rows updated expected")
+ res = node1_cur.execute("INSERT INTO foo VALUES (10), (20)")
+ if res != 2:
+ sys.stderr.write(f"2 rows inserted expected, {res} received")
+ res = node1_cur.execute("UPDATE foo set i = i + 20 WHERE i = 10")
+ if res != 1:
+ sys.stderr.write(f"1 row updated expected, {res} received")
node1_cur.execute("SELECT i FROM foo ORDER BY i")
- if node1_cur.fetchall() != [(20,), (30,)]:
- sys.stderr.write("[(20), (30)] expected")
+ res = node1_cur.fetchall()
+ if res != [(20,), (30,)]:
+ sys.stderr.write(f"[(20), (30)] expected, {res} received")
node1_cur.close()
node1_conn.close()
@@ -40,8 +43,9 @@ with tempfile.TemporaryDirectory() as fa
node1_cur = node1_conn.cursor()
node1_cur.execute("SELECT i FROM foo ORDER BY i")
- if node1_cur.fetchall() != []:
- sys.stderr.write("[] expected")
+ res = node1_cur.fetchall()
+ if res != []:
+ sys.stderr.write(f"[] expected, {res} received")
node1_cur.close()
node1_conn.close()
@@ -59,13 +63,16 @@ with tempfile.TemporaryDirectory() as fa
node1_cur = node1_conn.cursor()
node1_cur.execute("CREATE unlogged TABLE foo (i) AS VALUES (10),
(20)")
- if node1_cur.execute("INSERT INTO foo VALUES (30), (40)") != 2:
- sys.stderr.write("2 rows inserted expected")
- if node1_cur.execute("UPDATE foo set i = 50 WHERE i = 10") != 1:
- sys.stderr.write("1 rows updated expected")
+ res = node1_cur.execute("INSERT INTO foo VALUES (30), (40)")
+ if res != 2:
+ sys.stderr.write(f"2 rows inserted expected, {res} received")
+ res = node1_cur.execute("UPDATE foo set i = 50 WHERE i = 10")
+ if res != 1:
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]