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

Reply via email to