Changeset: db2673159aa1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/db2673159aa1
Branch: default
Log Message:
Merge with Sep2022 branch.
diffs (truncated from 421 to 300 lines):
diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -770,6 +770,7 @@ 1252291e5c0ddc91ccb16d612d04e34e6a7d3bc3
59de1ee118d4eccc072c0cf3938f90635a7db311 Jan2022_15
59de1ee118d4eccc072c0cf3938f90635a7db311 Jan2022_SP3_release
38ba6e40ba9148c762fe4a4b40f4937f86e516b6 Jul2021_25
+38ba6e40ba9148c762fe4a4b40f4937f86e516b6 Jul2021_SP7_release
470e524a786ee0e94c7901ec98d95ac351a0e472 Sep2022_root
9785fa2a471fe32495e07479edf110335ddaa750 Jan2022_17
26ffeb5af5240c807a6583fd6eb4ee2c9cd210d2 Jan2022_19
diff --git a/clients/odbc/tests/ODBCmetadata.c
b/clients/odbc/tests/ODBCmetadata.c
--- a/clients/odbc/tests/ODBCmetadata.c
+++ b/clients/odbc/tests/ODBCmetadata.c
@@ -316,6 +316,39 @@ compareResultOptClose(SQLHANDLE stmt, SQ
#define compareResultNoClose(stmt, retcode, functionname, expected)
compareResultOptClose(stmt, retcode, functionname, expected, 0)
#define compareResult(stmt, retcode, functionname, expected)
compareResultOptClose(stmt, retcode, functionname, expected, 1)
+/*
+ * Utility function to query the gdk_nr_threads value from the server.
+ * The output of some queries (EXPLAIN, TRACE) differ when the server
+ * is started with 1 thread, as is done in our testweb.
+ */
+static int
+getNrOfServerThreads(SQLHANDLE dbc)
+{
+ SQLRETURN ret;
+ SQLHANDLE stmt;
+ SQLLEN indicator;
+ int threads = 0;
+
+ ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
+ check(ret, SQL_HANDLE_DBC, dbc, "SQLAllocHandle (STMT)");
+
+ ret = SQLExecDirect(stmt, (SQLCHAR *)
+ "SELECT cast(value as int) as val from sys.env() where name =
'gdk_nr_threads';"
+ , SQL_NTS);
+ check(ret, SQL_HANDLE_STMT, stmt, "select gdk_nr_threads");
+
+ ret = SQLFetch(stmt);
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLFetch(gdk_nr_threads)");
+ if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
+ ret = SQLGetData(stmt, 1, SQL_C_LONG, &threads,
sizeof(threads), &indicator);
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLGetData(gdk_nr_threads)");
+ }
+ ret = SQLCloseCursor(stmt);
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLCloseCursor");
+
+ /* fprintf(stderr, "getNrOfServerThreads: %d\n", threads); */
+ return threads;
+}
int
main(int argc, char **argv)
@@ -327,6 +360,7 @@ main(int argc, char **argv)
char *dsn = "MonetDB";
char *user = "monetdb";
char *pass = "monetdb";
+ int nrServerThreads = 0;
if (argc > 1)
dsn = argv[1];
@@ -361,7 +395,7 @@ main(int argc, char **argv)
"CREATE SCHEMA odbctst;\n"
"SET SCHEMA odbctst;\n"
, SQL_NTS);
- check(ret, SQL_HANDLE_DBC, dbc, "SQLExecDirect (create and set schema
script)");
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLExecDirect (create and set schema
script)");
// create tables to populate catalog. Used for testing SQLTables(),
// SQLColumns(), SQLSpecialColumns(), SQLPrimaryKeys() and
SQLForeignKeys()
@@ -382,7 +416,7 @@ main(int argc, char **argv)
", FOREIGN KEY (fkc2, fkc1) REFERENCES odbctst.pk2c (pkc2,
pkc1) ON UPDATE CASCADE ON DELETE RESTRICT"
", FOREIGN KEY (fkc2, fkc3) REFERENCES odbctst.pk2c (pkc2,
pkc1) ON UPDATE SET NULL ON DELETE NO ACTION);\n"
, SQL_NTS);
- check(ret, SQL_HANDLE_DBC, dbc, "SQLExecDirect (create tables script)");
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLExecDirect (create tables
script)");
// create indexes to populate catalog. Used for testing SQLStatistics()
ret = SQLExecDirect(stmt, (SQLCHAR *)
@@ -393,7 +427,7 @@ main(int argc, char **argv)
"CREATE INDEX tmp_nopk_twoucs_i ON tmp.tmp_nopk_twoucs (id2,
name2);\n"
"CREATE INDEX glbl_nopk_twoucs_i ON tmp.glbl_nopk_twoucs (id2,
name2);\n"
, SQL_NTS);
- check(ret, SQL_HANDLE_DBC, dbc, "SQLExecDirect (create indices
script)");
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLExecDirect (create indices
script)");
// grant privileges to populate catalog. Used for testing
SQLTablePrivileges() and SQLColumnPrivileges()
ret = SQLExecDirect(stmt, (SQLCHAR *)
@@ -409,7 +443,7 @@ main(int argc, char **argv)
"GRANT DELETE, INSERT ON TABLE tmp.glbl_nopk_twoucs TO
monetdb;\n"
"GRANT SELECT (id2, name2), UPDATE (name2) ON TABLE
tmp.glbl_nopk_twoucs TO monetdb;\n"
, SQL_NTS);
- check(ret, SQL_HANDLE_DBC, dbc, "SQLExecDirect (add privileges
script)");
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLExecDirect (add privileges
script)");
// TODO add user procedures / functions to test SQLProcedures() and
SQLProcedureColumns() more
@@ -427,7 +461,7 @@ main(int argc, char **argv)
"COMMENT ON FUNCTION sys.env() IS 'sys.env() function
comment';\n"
"COMMENT ON FUNCTION sys.statistics() IS 'sys.statistics()
function comment';\n"
, SQL_NTS);
- check(ret, SQL_HANDLE_DBC, dbc, "SQLExecDirect (add comments script)");
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLExecDirect (add comments
script)");
/* run actual metadata query tests */
// All catalogs query. MonetDB should return no rows. Catalog qualifier
not supported.
@@ -1418,8 +1452,11 @@ main(int argc, char **argv)
"interval minute to second 113 13 ' '
precision 1 0 2 -1 0 -1 NULL 0
0 10 13 -1 10\n"
"hugeint 16384 38 NULL NULL NULL 1
0 2 0 0 0 NULL 0 0 16384 -1
10 -1\n");
+
+ nrServerThreads = getNrOfServerThreads(dbc);
+
// test SELECT query
- ret = SQLExecDirect(stmt, (SQLCHAR *) "SELECT * from
odbctst.\"LINES\";\n", SQL_NTS);
+ ret = SQLExecDirect(stmt, (SQLCHAR *) "SELECT * from
odbctst.\"LINES\";", SQL_NTS);
compareResult(stmt, ret, "SELECT * from odbctst.\"LINES\"",
"Resultset with 4 columns\n"
"Resultset with 0 rows\n"
@@ -1427,7 +1464,7 @@ main(int argc, char **argv)
"INTEGER INTEGER INTEGER DECIMAL(9,3)\n");
// test PLAN SELECT query
- ret = SQLExecDirect(stmt, (SQLCHAR *) "PLAN SELECT * from
odbctst.\"LINES\";\n", SQL_NTS);
+ ret = SQLExecDirect(stmt, (SQLCHAR *) "PLAN SELECT * from
odbctst.\"LINES\";", SQL_NTS);
compareResult(stmt, ret, "PLAN SELECT * from odbctst.\"LINES\"",
"Resultset with 1 columns\n"
"Resultset with 3 rows\n"
@@ -1438,8 +1475,9 @@ main(int argc, char **argv)
") [ \"LINES\".\"ORDERID\" NOT NULL UNIQUE HASHCOL ,
\"LINES\".\"LINES\" NOT NULL UNIQUE, \"LINES\".\"PARTID\" NOT NULL UNIQUE,
\"LINES\".\"QUANTITY\" NOT NULL UNIQUE ]\n");
// test EXPLAIN SELECT query
- ret = SQLExecDirect(stmt, (SQLCHAR *) "EXPLAIN SELECT * from
odbctst.\"LINES\";\n", SQL_NTS);
+ ret = SQLExecDirect(stmt, (SQLCHAR *) "EXPLAIN SELECT * from
odbctst.\"LINES\";", SQL_NTS);
compareResult(stmt, ret, "EXPLAIN SELECT * from odbctst.\"LINES\"",
+ nrServerThreads > 1 ?
"Resultset with 1 columns\n"
"Resultset with 48 rows\n"
"mal\n"
@@ -1462,10 +1500,34 @@ main(int argc, char **argv)
"\n\n\n\n\n\n\n\n\n\n"
"\n\n\n\n\n\n\n\n\n\n"
"\n\n\n\n\n\n\n\n\n\n"
+ "\n\n\n"
+ :
+ "Resultset with 1 columns\n"
+ "Resultset with 46 rows\n"
+ "mal\n"
+ "WLONGVARCHAR(174)\n"
+ "function user.main():void;\n"
+ " X_1:void := querylog.define(\"explain select * from
odbctst.\\\"LINES\\\";\":str, \"default_pipe\":str, 26:int);\n"
+ " X_33:bat[:int] := bat.new(nil:int);\n"
+ " X_34:bat[:int] := bat.new(nil:int);\n"
+ " X_35:bat[:int] := bat.new(nil:int);\n"
+ " X_36:bat[:int] := bat.new(nil:int);\n"
+ " X_38:bat[:str] := bat.pack(\"odbctst.LINES\":str,
\"odbctst.LINES\":str, \"odbctst.LINES\":str, \"odbctst.LINES\":str);\n"
+ " X_39:bat[:str] := bat.pack(\"ORDERID\":str, \"LINES\":str,
\"PARTID\":str, \"QUANTITY\":str);\n"
+ " X_40:bat[:str] := bat.pack(\"int\":str, \"int\":str,
\"int\":str, \"decimal\":str);\n"
+ " X_41:bat[:int] := bat.pack(32:int, 32:int, 32:int,
9:int);\n"
+ " X_42:bat[:int] := bat.pack(0:int, 0:int, 0:int, 3:int);\n"
+ " X_37:int := sql.resultSet(X_38:bat[:str], X_39:bat[:str],
X_40:bat[:str], X_41:bat[:int], X_42:bat[:int], X_33:bat[:int], X_34:bat[:int],
X_35:bat[:int], X_36:bat[:int]);\n"
+ "end user.main;\n"
+ "\n\n\n\n\n\n\n\n\n\n"
+ "\n\n\n\n\n\n\n\n\n\n"
+ "\n\n\n\n\n\n\n\n\n\n"
"\n\n\n");
- // test TRACE SELECT query. This will return two resultsets: first with
the query results and next with the trace results
- ret = SQLExecDirect(stmt, (SQLCHAR *) "TRACE SELECT * from
odbctst.\"LINES\";\n", SQL_NTS);
+ // test TRACE SELECT query.
+ // This will return two resultsets: first with the query results and
next with the trace results
+ // We use (and thus test) SQLMoreResults() to get the next/second
result.
+ ret = SQLExecDirect(stmt, (SQLCHAR *) "TRACE SELECT * from
odbctst.\"LINES\";", SQL_NTS);
compareResultNoClose(stmt, ret, "TRACE(1) SELECT * from
odbctst.\"LINES\"",
"Resultset with 4 columns\n"
"Resultset with 0 rows\n"
@@ -1475,6 +1537,7 @@ main(int argc, char **argv)
check(ret, SQL_HANDLE_STMT, stmt, "SQLMoreResults()");
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
compareResult(stmt, ret, "TRACE(2) SELECT * from
odbctst.\"LINES\"",
+ nrServerThreads > 1 ?
"Resultset with 2 columns\n"
"Resultset with 12 rows\n"
"usec statement\n"
@@ -1490,6 +1553,22 @@ main(int argc, char **argv)
"4 variable output\n"
"4 variable output\n"
"4 variable output\n"
+ "4 variable output\n"
+ :
+ "Resultset with 2 columns\n"
+ "Resultset with 11 rows\n"
+ "usec statement\n"
+ "BIGINT WLONGVARCHAR(213)\n"
+ "4 variable output\n"
+ "4 variable output\n"
+ "4 variable output\n"
+ "4 variable output\n"
+ "4 variable output\n"
+ "4 variable output\n"
+ "4 variable output\n"
+ "4 variable output\n"
+ "4 variable output\n"
+ "4 variable output\n"
"4 variable output\n");
/* next is the original output but it is varying a lot on usec
values, X_## values and even the order of rows,
so all data is replaced (see above) for stable output
comparison.
@@ -1508,8 +1587,9 @@ main(int argc, char **argv)
*/
}
- // test DEBUG SELECT query. DEBUG statements are not supported in ODBC
and should produce an Error
- ret = SQLExecDirect(stmt, (SQLCHAR *) "DEBUG SELECT * from
odbctst.\"LINES\";\n", SQL_NTS);
+ // test DEBUG SELECT query.
+ // DEBUG statements are *not* supported in ODBC and should produce an
Error
+ ret = SQLExecDirect(stmt, (SQLCHAR *) "DEBUG SELECT * from
odbctst.\"LINES\";", SQL_NTS);
if (ret != SQL_ERROR) {
/* Error: SQLstate 42000, Errnr 0, Message [MonetDB][ODBC
Driver 11.45.0][MonetDB-Test]SQL debugging only supported in interactive mode
in: "debug" */
compareResult(stmt, ret, "DEBUG SELECT * from
odbctst.\"LINES\"",
@@ -1526,7 +1606,7 @@ main(int argc, char **argv)
"DROP INDEX tmp.tmp_nopk_twoucs_i;\n"
"DROP INDEX tmp.glbl_nopk_twoucs_i;\n"
, SQL_NTS);
- check(ret, SQL_HANDLE_DBC, dbc, "SQLExecDirect (drop indices script)");
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLExecDirect (drop indices
script)");
ret = SQLExecDirect(stmt, (SQLCHAR *)
"DROP TABLE odbctst.pk_uc;\n"
@@ -1541,7 +1621,7 @@ main(int argc, char **argv)
"DROP TABLE odbctst.fk2c;\n"
"DROP TABLE odbctst.pk2c;\n"
, SQL_NTS);
- check(ret, SQL_HANDLE_DBC, dbc, "SQLExecDirect (drop tables script)");
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLExecDirect (drop tables script)");
// All tables in schema odbctst should now be gone, else we missed some
DROP statements
ret = SQLTables(stmt, NULL, 0,
@@ -1557,7 +1637,7 @@ main(int argc, char **argv)
"SET SCHEMA sys;\n"
"DROP SCHEMA odbctst;\n"
, SQL_NTS);
- check(ret, SQL_HANDLE_DBC, dbc, "SQLExecDirect (drop schema script)");
+ check(ret, SQL_HANDLE_STMT, stmt, "SQLExecDirect (drop schema script)");
ret = SQLFreeHandle(SQL_HANDLE_STMT, stmt);
check(ret, SQL_HANDLE_STMT, stmt, "SQLFreeHandle (STMT)");
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -97,7 +97,7 @@ VIEWcreate(oid seq, BAT *b)
assert(bn->theap == NULL);
MT_lock_set(&b->theaplock);
- bn->batInserted = b->batInserted;
+ bn->batInserted = 0;
bn->batCount = b->batCount;
bn->batCapacity = b->batCapacity;
bn->batRestricted = BAT_READ;
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -704,6 +704,13 @@ BATdestroy(BAT *b)
ATOMIC_DESTROY(&b->theap->refs);
GDKfree(b->theap);
}
+ if (b->oldtail) {
+ /* the bat has not been committed, so we cannot remove
+ * the old tail file */
+ ATOMIC_AND(&b->oldtail->refs, ~DELAYEDREMOVE);
+ HEAPdecref(b->oldtail, false);
+ b->oldtail = NULL;
+ }
GDKfree(b);
}
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1053,6 +1053,8 @@ log_open_output(logger *lg)
return GDK_FAIL;
}
+ if (lg->debug & 1)
+ fprintf(stderr, "#log_open_output: %s.%s\n", LOGFILE,
id);
lg->output_log = open_wstream(filename);
if (lg->output_log) {
short byteorder = 1234;
@@ -1753,9 +1755,9 @@ bm_subcommit(logger *lg)
if (res == GDK_SUCCEED) { /* now cleanup */
for(i=0;i<rcnt; i++) {
if (lg->debug & 1) {
- fprintf(stderr, "release %d\n", r[i]);
+ fprintf(stderr, "#release %d\n", r[i]);
if (BBP_lrefs(r[i]) != 2)
- fprintf(stderr, "release %d %d\n",
r[i], BBP_lrefs(r[i]));
+ fprintf(stderr, "#release %d %d\n",
r[i], BBP_lrefs(r[i]));
}
BBPrelease(r[i]);
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]