Changeset: 6170f73d2595 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/6170f73d2595 Modified Files: .bumpversion.cfg MonetDB.spec clients/mapilib/mapi.rc clients/odbc/driver/driver.rc clients/odbc/winsetup/setup.rc cmake/monetdb-versions.cmake gdk/libbat.rc monetdb5/tools/libmonetdb5.rc Branch: default Log Message:
Merge with Jun2023 branch. diffs (truncated from 471 to 300 lines): diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -796,3 +796,5 @@ e8b0e5558313f4d98bc48316368299decc55ed4e 8a95168e853382b9b89ac7b67e343788ea837f3a Jul2021_31 8a95168e853382b9b89ac7b67e343788ea837f3a Jul2021_SP9_release bb95192134c0d8ef8fea525204eefcd0de099a54 Jun2023_root +24385ee6130494440e09d31ec73f4aa2e2893e98 Jul2021_33 +05b3d9ea9165baf1d2956d5b06ad85f817ecc6d2 Jul2021_33 diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,6 @@ include(monetdb-toolchain) monetdb_default_compiler_options() include(monetdb-defines) -monetdb_hg_revision() # required for symbol existance tests if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") 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 @@ -289,7 +289,7 @@ bool GDKgetenv_istrue(const char *name); bool GDKgetenv_isyes(const char *name); gdk_return GDKgetsem(int sem_id, int count, int *semid); gdk_return GDKgetsemval(int sem_id, int number, int *semval); -gdk_return GDKinit(struct opt *set, int setlen, bool embedded); +gdk_return GDKinit(struct opt *set, int setlen, bool embedded, const char *caller_revision); BAT *GDKinitialize_segment_tree(void); void *GDKinitmmap(size_t id, size_t size, size_t *return_size); bool GDKinmemory(int farmid); @@ -1033,7 +1033,7 @@ void mal_atom_reset(void); ClientRec *mal_clients; MT_Lock mal_contextLock; _Noreturn void mal_exit(int status); -int mal_init(char *modules[], bool embedded, const char *initpasswd); +int mal_init(char *modules[], bool embedded, const char *initpasswd, const char *caller_revision); void mal_instruction_reset(void); void mal_module(const char *name, mel_atom *atoms, mel_func *funcs); void mal_module2(const char *name, mel_atom *atoms, mel_func *funcs, mel_init initfunc, const char *code); diff --git a/clients/odbc/driver/ODBCDesc.c b/clients/odbc/driver/ODBCDesc.c --- a/clients/odbc/driver/ODBCDesc.c +++ b/clients/odbc/driver/ODBCDesc.c @@ -227,7 +227,7 @@ ODBCLength(ODBCDescRec *rec, int lengtht case SQL_VARCHAR: case SQL_LONGVARCHAR: if (lengthtype == SQL_DESC_OCTET_LENGTH) - return rec->sql_desc_length * 6; + return rec->sql_desc_length * 4; else return rec->sql_desc_length; case SQL_WCHAR: diff --git a/clients/odbc/driver/SQLExecute.c b/clients/odbc/driver/SQLExecute.c --- a/clients/odbc/driver/SQLExecute.c +++ b/clients/odbc/driver/SQLExecute.c @@ -376,9 +376,23 @@ ODBCInitResult(ODBCStmt *stmt) /* this must come after other fields have been * initialized */ - rec->sql_desc_length = ODBCLength(rec, SQL_DESC_LENGTH); - rec->sql_desc_display_size = ODBCLength(rec, SQL_DESC_DISPLAY_SIZE); - rec->sql_desc_octet_length = ODBCLength(rec, SQL_DESC_OCTET_LENGTH); + if (rec->sql_desc_concise_type == SQL_CHAR || + rec->sql_desc_concise_type == SQL_VARCHAR || + rec->sql_desc_concise_type == SQL_LONGVARCHAR || + rec->sql_desc_concise_type == SQL_WCHAR || + rec->sql_desc_concise_type == SQL_WVARCHAR || + rec->sql_desc_concise_type == SQL_WLONGVARCHAR) { + /* for strings, get the display size from what + * the server told us the size is for this + * column, and derive the octet length from + * that */ + rec->sql_desc_display_size = mapi_get_len(hdl, i); + rec->sql_desc_octet_length = 4 * rec->sql_desc_display_size; + } else { + rec->sql_desc_length = ODBCLength(rec, SQL_DESC_LENGTH); + rec->sql_desc_display_size = ODBCLength(rec, SQL_DESC_DISPLAY_SIZE); + rec->sql_desc_octet_length = ODBCLength(rec, SQL_DESC_OCTET_LENGTH); + } if (rec->sql_desc_length == 0) { rec->sql_desc_length = SQL_NO_TOTAL; rec->sql_desc_display_size = SQL_NO_TOTAL; diff --git a/cmake/monetdb-functions.cmake b/cmake/monetdb-functions.cmake --- a/cmake/monetdb-functions.cmake +++ b/cmake/monetdb-functions.cmake @@ -8,59 +8,6 @@ # Copyright 1997 - July 2008 CWI, August 2008 - 2023 MonetDB B.V. #]] -function(monetdb_hg_revision) - # Get the current version control revision - if(EXISTS "${CMAKE_SOURCE_DIR}/.hg_archival.txt") - file(READ "${CMAKE_SOURCE_DIR}/.hg_archival.txt" HG_ARCHIVAL) - if(HG_ARCHIVAL MATCHES ".*node:.*") - string(REGEX REPLACE ".*node: ([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]).*" "\\1" HG_NODE "${HG_ARCHIVAL}") - if(HG_ARCHIVAL MATCHES ".*local:.*") - string(REGEX REPLACE ".*local: ([0-9][0-9]*).*" "\\1" HG_LOCAL "${HG_ARCHIVAL}") - set(MERCURIAL_ID "${HG_NODE} ${HG_LOCAL}" PARENT_SCOPE) - else() - set(MERCURIAL_ID "${HG_NODE}" PARENT_SCOPE) - endif() - else() - message(WARNING "Failed to find mercurial ID") - set(MERCURIAL_ID "Unknown" PARENT_SCOPE) - endif() - elseif(EXISTS "${CMAKE_SOURCE_DIR}/.hg") - find_package(Hg) - if(HG_FOUND) - message("hg found: ${HG_EXECUTABLE}") - else() - message(WARNING "Failed to find mercurial") - set(MERCURIAL_ID "Unknown" PARENT_SCOPE) - endif() - execute_process(COMMAND "${HG_EXECUTABLE}" "id" "-i" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" RESULT_VARIABLE HG_RETURN_CODE - OUTPUT_VARIABLE HG_OUPUT_RES OUTPUT_STRIP_TRAILING_WHITESPACE) - if(HG_RETURN_CODE EQUAL 0 AND HG_OUPUT_RES) - set(MERCURIAL_ID "${HG_OUPUT_RES}" PARENT_SCOPE) - else() - message(WARNING "Failed to find mercurial ID") - set(MERCURIAL_ID "Unknown" PARENT_SCOPE) - endif() - elseif(EXISTS "${CMAKE_SOURCE_DIR}/.git") - find_package(Git) - if(GIT_FOUND) - message("git found: ${GIT_EXECUTABLE}") - else() - message(WARNING "Failed to find git") - set(MERCURIAL_ID "Unknown" PARENT_SCOPE) - endif() - execute_process(COMMAND "${GIT_EXECUTABLE}" "rev-parse" "--short" "HEAD" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" - RESULT_VARIABLE GIT_RETURN_CODE OUTPUT_VARIABLE GIT_OUPUT_RES OUTPUT_STRIP_TRAILING_WHITESPACE) - if(GIT_RETURN_CODE EQUAL 0 AND GIT_OUPUT_RES) - set(MERCURIAL_ID "${GIT_OUPUT_RES}" PARENT_SCOPE) - else() - message(WARNING "Failed to find git ID") - set(MERCURIAL_ID "Unknown" PARENT_SCOPE) - endif() - else() - set(MERCURIAL_ID "Unknown" PARENT_SCOPE) - endif() -endfunction() - function(add_option_if_available Flag) string(REGEX REPLACE "[-/=,]" "" FLAG_TEST "${Flag}") check_c_compiler_flag(${Flag} ${FLAG_TEST}_FOUND) diff --git a/common/utils/CMakeLists.txt b/common/utils/CMakeLists.txt --- a/common/utils/CMakeLists.txt +++ b/common/utils/CMakeLists.txt @@ -8,9 +8,6 @@ # Copyright 1997 - July 2008 CWI, August 2008 - 2023 MonetDB B.V. #]] -configure_file(monetdb_hgversion.h.in - ${CMAKE_CURRENT_BINARY_DIR}/monetdb_hgversion.h) - add_library(mutils STATIC) target_sources(mutils @@ -41,6 +38,14 @@ set_target_properties(mutils POSITION_INDEPENDENT_CODE ON PUBLIC_HEADER mutils.h) +add_custom_target(version + ${CMAKE_COMMAND} -D SRC=${CMAKE_CURRENT_SOURCE_DIR}/monetdb_hgversion.h.in + -D DST=${CMAKE_CURRENT_BINARY_DIR}/monetdb_hgversion.h + -D DIR=${CMAKE_SOURCE_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/GenerateVersionHeader.cmake + ) +add_dependencies(mutils version) + add_library(mcrypt STATIC) target_sources(mcrypt diff --git a/common/utils/GenerateVersionHeader.cmake b/common/utils/GenerateVersionHeader.cmake new file mode 100644 --- /dev/null +++ b/common/utils/GenerateVersionHeader.cmake @@ -0,0 +1,54 @@ +# Get the current version control revision +message("dir is ${DIR}.") +if(EXISTS "${DIR}/.hg_archival.txt") + file(READ "${DIR}/.hg_archival.txt" HG_ARCHIVAL) + if(HG_ARCHIVAL MATCHES ".*node:.*") + string(REGEX REPLACE ".*node: ([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]).*" "\\1" HG_NODE "${HG_ARCHIVAL}") + if(HG_ARCHIVAL MATCHES ".*local:.*") + string(REGEX REPLACE ".*local: ([0-9][0-9]*).*" "\\1" HG_LOCAL "${HG_ARCHIVAL}") + set(MERCURIAL_ID "${HG_NODE} ${HG_LOCAL}") + else() + set(MERCURIAL_ID "${HG_NODE}") + endif() + else() + message(WARNING "Failed to find mercurial ID") + set(MERCURIAL_ID "Unknown") + endif() +elseif(EXISTS "${DIR}/.hg") + find_package(Hg) + if(HG_FOUND) + message("hg found: ${HG_EXECUTABLE}") + else() + message(WARNING "Failed to find mercurial") + set(MERCURIAL_ID "Unknown") + endif() + execute_process(COMMAND "${HG_EXECUTABLE}" "id" "-i" WORKING_DIRECTORY "${DIR}" RESULT_VARIABLE HG_RETURN_CODE + OUTPUT_VARIABLE HG_OUPUT_RES OUTPUT_STRIP_TRAILING_WHITESPACE) + if(HG_RETURN_CODE EQUAL 0 AND HG_OUPUT_RES) + set(MERCURIAL_ID "${HG_OUPUT_RES}") + else() + message(WARNING "Failed to find mercurial ID") + set(MERCURIAL_ID "Unknown") + endif() +elseif(EXISTS "${DIR}/.git") + find_package(Git) + if(GIT_FOUND) + message("git found: ${GIT_EXECUTABLE}") + else() + message(WARNING "Failed to find git") + set(MERCURIAL_ID "Unknown") + endif() + execute_process(COMMAND "${GIT_EXECUTABLE}" "rev-parse" "--short" "HEAD" WORKING_DIRECTORY "${DIR}" + RESULT_VARIABLE GIT_RETURN_CODE OUTPUT_VARIABLE GIT_OUPUT_RES OUTPUT_STRIP_TRAILING_WHITESPACE) + if(GIT_RETURN_CODE EQUAL 0 AND GIT_OUPUT_RES) + set(MERCURIAL_ID "${GIT_OUPUT_RES}") + else() + message(WARNING "Failed to find git ID") + set(MERCURIAL_ID "Unknown") + endif() +else() + set(MERCURIAL_ID "Unknown") +endif() + +message("Configure ${SRC} with ${MERCURIAL_ID}.") +configure_file(${SRC} ${DST} @ONLY) diff --git a/ctest/monetdb5/mal/test_malEmbeddedBoot.c b/ctest/monetdb5/mal/test_malEmbeddedBoot.c --- a/ctest/monetdb5/mal/test_malEmbeddedBoot.c +++ b/ctest/monetdb5/mal/test_malEmbeddedBoot.c @@ -18,7 +18,7 @@ main(void) char* msg = MAL_SUCCEED; gdk_return gdk_res; - gdk_res = GDKinit(NULL, 0, true); + gdk_res = GDKinit(NULL, 0, true, NULL); if (gdk_res != GDK_SUCCEED) { msg = createException(MAL, "embedded.monetdb_startup", "GDKinit() failed"); return 1; diff --git a/ctest/monetdb5/mal/test_malInclude.c b/ctest/monetdb5/mal/test_malInclude.c --- a/ctest/monetdb5/mal/test_malInclude.c +++ b/ctest/monetdb5/mal/test_malInclude.c @@ -18,7 +18,7 @@ main(void) { gdk_return gdk_res; - gdk_res = GDKinit(NULL, 0, true); + gdk_res = GDKinit(NULL, 0, true, NULL); if (gdk_res != GDK_SUCCEED) { createException(MAL, "embedded.monetdb_startup", "GDKinit() failed"); return 1; @@ -26,6 +26,6 @@ main(void) char *modules[2]; modules[0] = "sql"; modules[1] = 0; - mal_init(modules, true, NULL); + mal_init(modules, true, NULL, NULL); return 0; } diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -895,7 +895,7 @@ GDKembedded(void) static MT_Id mainpid; gdk_return -GDKinit(opt *set, int setlen, bool embedded) +GDKinit(opt *set, int setlen, bool embedded, const char *caller_revision) { static bool first = true; const char *dbpath; @@ -905,6 +905,14 @@ GDKinit(opt *set, int setlen, bool embed int i, nlen = 0; char buf[16]; + if (caller_revision) { + p = mercurial_revision(); + if (p && strcmp(p, caller_revision) != 0) { + GDKerror("incompatible versions: caller is %s, GDK is %s\n", caller_revision, p); + return GDK_FAIL; + } + } + ATOMIC_SET(&GDKstopped, 0); mainpid = MT_getpid(); diff --git a/gdk/gdk_utils.h b/gdk/gdk_utils.h --- a/gdk/gdk_utils.h +++ b/gdk/gdk_utils.h @@ -104,7 +104,7 @@ gdk_export size_t GDKmallocated(const vo gdk_export void MT_init(void); /* init the package. */ struct opt; -gdk_export gdk_return GDKinit(struct opt *set, int setlen, bool embedded); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org