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 -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org