Changeset: 8f24a2a8c37d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8f24a2a8c37d
Modified Files:
        clients/Tests/MAL-signatures-hge.test
        clients/Tests/MAL-signatures.test
        gdk/gdk_bbp.c
        gdk/gdk_string.c
        monetdb5/modules/atoms/str.c
        monetdb5/modules/kernel/algebra.c
        sql/backends/monet5/sql_gencode.c
        sql/server/rel_optimize_sel.c
        sql/test/BugTracker-2026/Tests/All
        sql/test/rel-optimizers/Tests/merge-unions.test
Branch: pp_hashjoin
Log Message:

Merge with default branch.


diffs (truncated from 1246 to 300 lines):

diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,10 @@
 # ChangeLog file for devel
 # This file is updated with Maddlog
 
+* Mon Aug  3 2026 Sjoerd Mullender <[email protected]>
+- The hash function used for all internal hash tables has been changed
+  to xxhash which is therefore now a build requirement.
+
 * Mon Jun 22 2026 Sjoerd Mullender <[email protected]>
 - Removed support for LOADER FUNCTION.  Since Python UDFs are not
   supported anymore, the loader functions can also not be supported
diff --git a/clients/Tests/MAL-signatures-hge.test 
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -35417,22 +35417,22 @@ batstr
 splitpart
 pattern batstr.splitpart(X_0:bat[:str], X_1:bat[:str], X_2:bat[:int]):bat[:str]
 STRbatsplitpart
-Split string on delimiter. Returns@given field (counting from one.)
+Split string on delimiter. Returns given field (counting from one.)
 batstr
 splitpart
 pattern batstr.splitpart(X_0:bat[:str], X_1:bat[:str], X_2:int):bat[:str]
 STRbatsplitpart_fieldcst
-Split string on delimiter. Returns@given field (counting from one.)
+Split string on delimiter. Returns given field (counting from one.)
 batstr
 splitpart
 pattern batstr.splitpart(X_0:bat[:str], X_1:str, X_2:bat[:int]):bat[:str]
 STRbatsplitpart_needlecst
-Split string on delimiter. Returns@given field (counting from one.)
+Split string on delimiter. Returns given field (counting from one.)
 batstr
 splitpart
 pattern batstr.splitpart(X_0:bat[:str], X_1:str, X_2:int):bat[:str]
 STRbatsplitpartcst
-Split string on delimiter. Returns@given field (counting from one.)
+Split string on delimiter. Returns given field (counting from one.)
 batstr
 startswith
 pattern batstr.startswith(X_0:bat[:str], X_1:bat[:str]):bat[:bit]
@@ -35587,12 +35587,12 @@ batstr
 substitute
 pattern batstr.substitute(X_0:bat[:str], X_1:bat[:str], X_2:bat[:str], 
X_3:bat[:bit]):bat[:str]
 STRbatSubstitute
-Substitute first occurrence of 'src' by@'dst'. Iff repeated = true this 
is@repeated while 'src' can be found in the@result string. In order to 
prevent@recursion and result strings of unlimited@size, repeating is only done 
iff src is@not a substring of dst.
+Substitute first occurrence of 'src' by 'dst'. Iff repeated = true this is 
repeated while 'src' can be found in the result string. In order to prevent 
recursion and result strings of unlimited size, repeating is only done iff src 
is not a substring of dst.
 batstr
 substitute
 pattern batstr.substitute(X_0:bat[:str], X_1:str, X_2:str, X_3:bit):bat[:str]
 STRbatSubstitutecst
-Substitute first occurrence of 'src' by@'dst'. Iff repeated = true this 
is@repeated while 'src' can be found in the@result string. In order to 
prevent@recursion and result strings of unlimited@size, repeating is only done 
iff src is@not a substring of dst.
+Substitute first occurrence of 'src' by 'dst'. Iff repeated = true this is 
repeated while 'src' can be found in the result string. In order to prevent 
recursion and result strings of unlimited size, repeating is only done iff src 
is not a substring of dst.
 batstr
 substring
 pattern batstr.substring(X_0:bat[:str], X_1:bat[:int]):bat[:str]
@@ -53067,7 +53067,7 @@ str
 containsjoin
 pattern str.containsjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:bit], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:lng, X_7:bit) (X_8:bat[:oid], 
X_9:bat[:oid])
 STRcontainsjoin
-Join the string bat L with the bat R if L contains the string of R@with 
optional candidate lists SL and SR@The result is two aligned bats with oids of 
matching rows + icase.
+Join the string bat L with the bat R if L contains the string of R with 
optional candidate lists SL and SR The result is two aligned bats with oids of 
matching rows + icase.
 str
 containsjoin
 pattern str.containsjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:bit], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:lng, X_7:bit):bat[:oid]
@@ -53077,7 +53077,7 @@ str
 containsjoin
 pattern str.containsjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bit, X_5:lng, X_6:bit) (X_7:bat[:oid], X_8:bat[:oid])
 STRcontainsjoin
-Join the string bat L with the bat R if L contains the string of R@with 
optional candidate lists SL and SR@The result is two aligned bats with oids of 
matching rows.
+Join the string bat L with the bat R if L contains the string of R with 
optional candidate lists SL and SR The result is two aligned bats with oids of 
matching rows.
 str
 containsjoin
 pattern str.containsjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bit, X_5:lng, X_6:bit):bat[:oid]
@@ -53087,12 +53087,12 @@ str
 containsselect
 pattern str.containsselect(X_0:bat[:str], X_1:bat[:oid], X_2:str, 
X_3:bit):bat[:oid]
 STRcontainsselect
-Select all head values of the first input BAT for which the@tail value 
contains the given needle.
+Select all head values of the first input BAT for which the tail value 
contains the given needle.
 str
 containsselect
 pattern str.containsselect(X_0:bat[:str], X_1:bat[:oid], X_2:str, X_3:bit, 
X_4:bit):bat[:oid]
 STRcontainsselect
-Select all head values of the first input BAT for which the@tail value 
contains the given needle + icase.
+Select all head values of the first input BAT for which the tail value 
contains the given needle + icase.
 str
 endswith
 pattern str.endswith(X_0:str, X_1:str):bit
@@ -53107,7 +53107,7 @@ str
 endswithjoin
 pattern str.endswithjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:bit], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:lng, X_7:bit) (X_8:bat[:oid], 
X_9:bat[:oid])
 STRendswithjoin
-Join the string bat L with the suffix bat R@with optional candidate lists SL 
and SR@The result is two aligned bats with oids of matching rows + icase.
+Join the string bat L with the suffix bat R with optional candidate lists SL 
and SR The result is two aligned bats with oids of matching rows + icase.
 str
 endswithjoin
 pattern str.endswithjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:bit], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:lng, X_7:bit):bat[:oid]
@@ -53117,7 +53117,7 @@ str
 endswithjoin
 pattern str.endswithjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bit, X_5:lng, X_6:bit) (X_7:bat[:oid], X_8:bat[:oid])
 STRendswithjoin
-Join the string bat L with the suffix bat R@with optional candidate lists SL 
and SR@The result is two aligned bats with oids of matching rows.
+Join the string bat L with the suffix bat R with optional candidate lists SL 
and SR The result is two aligned bats with oids of matching rows.
 str
 endswithjoin
 pattern str.endswithjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bit, X_5:lng, X_6:bit):bat[:oid]
@@ -53127,12 +53127,12 @@ str
 endswithselect
 pattern str.endswithselect(X_0:bat[:str], X_1:bat[:oid], X_2:str, 
X_3:bit):bat[:oid]
 STRendswithselect
-Select all head values of the first input BAT for which the@tail value end 
with the given suffix.
+Select all head values of the first input BAT for which the tail value end 
with the given suffix.
 str
 endswithselect
 pattern str.endswithselect(X_0:bat[:str], X_1:bat[:oid], X_2:str, X_3:bit, 
X_4:bit):bat[:oid]
 STRendswithselect
-Select all head values of the first input BAT for which the@tail value end 
with the given suffix + icase.
+Select all head values of the first input BAT for which the tail value end 
with the given suffix + icase.
 str
 insert
 command str.insert(X_0:str, X_1:int, X_2:int, X_3:str):str
@@ -53197,12 +53197,12 @@ str
 r_search
 pattern str.r_search(X_0:str, X_1:str):int
 STRrevstr_search
-Reverse search for a substring. Returns@position, -1 if not found.
+Reverse search for a substring. Returns position, -1 if not found.
 str
 r_search
 pattern str.r_search(X_0:str, X_1:str, X_2:bit):int
 STRrevstr_search
-Reverse search for a substring, icase flag. Returns@position, -1 if not found.
+Reverse search for a substring, icase flag. Returns position, -1 if not found.
 str
 repeat
 command str.repeat(X_0:str, X_1:int):str
@@ -53242,12 +53242,12 @@ str
 search
 pattern str.search(X_0:str, X_1:str):int
 STRstr_search
-Search for a substring. Returns@position, -1 if not found.
+Search for a substring. Returns position, -1 if not found.
 str
 search
 pattern str.search(X_0:str, X_1:str, X_2:bit):int
 STRstr_search
-Search for a substring, icase flag. Returns@position, -1 if not found.
+Search for a substring, icase flag. Returns position, -1 if not found.
 str
 space
 command str.space(X_0:int):str
@@ -53257,7 +53257,7 @@ str
 splitpart
 command str.splitpart(X_0:str, X_1:str, X_2:int):str
 STRsplitpart
-Split string on delimiter. Returns@given field (counting from one.)
+Split string on delimiter. Returns given field (counting from one.)
 str
 startswith
 pattern str.startswith(X_0:str, X_1:str):bit
@@ -53272,7 +53272,7 @@ str
 startswithjoin
 pattern str.startswithjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:bit], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:lng, X_7:bit) (X_8:bat[:oid], 
X_9:bat[:oid])
 STRstartswithjoin
-Join the string bat L with the prefix bat R@with optional candidate lists SL 
and SR@The result is two aligned bats with oids of matching rows + icase.
+Join the string bat L with the prefix bat R with optional candidate lists SL 
and SR The result is two aligned bats with oids of matching rows + icase.
 str
 startswithjoin
 pattern str.startswithjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:bit], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:lng, X_7:bit):bat[:oid]
@@ -53282,7 +53282,7 @@ str
 startswithjoin
 pattern str.startswithjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bit, X_5:lng, X_6:bit) (X_7:bat[:oid], X_8:bat[:oid])
 STRstartswithjoin
-Join the string bat L with the prefix bat R@with optional candidate lists SL 
and SR@The result is two aligned bats with oids of matching rows.
+Join the string bat L with the prefix bat R with optional candidate lists SL 
and SR The result is two aligned bats with oids of matching rows.
 str
 startswithjoin
 pattern str.startswithjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bit, X_5:lng, X_6:bit):bat[:oid]
@@ -53292,12 +53292,12 @@ str
 startswithselect
 pattern str.startswithselect(X_0:bat[:str], X_1:bat[:oid], X_2:str, 
X_3:bit):bat[:oid]
 STRstartswithselect
-Select all head values of the first input BAT for which the@tail value starts 
with the given prefix.
+Select all head values of the first input BAT for which the tail value starts 
with the given prefix.
 str
 startswithselect
 pattern str.startswithselect(X_0:bat[:str], X_1:bat[:oid], X_2:str, X_3:bit, 
X_4:bit):bat[:oid]
 STRstartswithselect
-Select all head values of the first input BAT for which the@tail value starts 
with the given prefix + icase.
+Select all head values of the first input BAT for which the tail value starts 
with the given prefix + icase.
 str
 str
 command str.str(X_0:str):str
@@ -53307,7 +53307,7 @@ str
 string
 command str.string(X_0:str, X_1:int):str
 STRTail
-Return the tail s[offset..n]@of a string s[0..n].
+Return the tail s[offset..n] of a string s[0..n].
 str
 string3
 command str.string3(X_0:str, X_1:int, X_2:int):str
@@ -53327,7 +53327,7 @@ str
 substitute
 command str.substitute(X_0:str, X_1:str, X_2:str, X_3:bit):str
 STRSubstitute
-Substitute first occurrence of 'src' by@'dst'.  Iff repeated = true this 
is@repeated while 'src' can be found in the@result string. In order to 
prevent@recursion and result strings of unlimited@size, repeating is only done 
iff src is@not a substring of dst.
+Substitute first occurrence of 'src' by 'dst'.  Iff repeated = true this is 
repeated while 'src' can be found in the result string. In order to prevent 
recursion and result strings of unlimited size, repeating is only done iff src 
is not a substring of dst.
 str
 substring
 command str.substring(X_0:str, X_1:int):str
@@ -53372,7 +53372,7 @@ str
 unicodeAt
 command str.unicodeAt(X_0:str, X_1:int):int
 STRWChrAt
-get a unicode character@(as an int) from a string position.
+get a unicode character (as an int) from a string position.
 streams
 blocked
 unsafe command streams.blocked(X_0:streams):streams
diff --git a/clients/Tests/MAL-signatures.test 
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -26517,22 +26517,22 @@ batstr
 splitpart
 pattern batstr.splitpart(X_0:bat[:str], X_1:bat[:str], X_2:bat[:int]):bat[:str]
 STRbatsplitpart
-Split string on delimiter. Returns@given field (counting from one.)
+Split string on delimiter. Returns given field (counting from one.)
 batstr
 splitpart
 pattern batstr.splitpart(X_0:bat[:str], X_1:bat[:str], X_2:int):bat[:str]
 STRbatsplitpart_fieldcst
-Split string on delimiter. Returns@given field (counting from one.)
+Split string on delimiter. Returns given field (counting from one.)
 batstr
 splitpart
 pattern batstr.splitpart(X_0:bat[:str], X_1:str, X_2:bat[:int]):bat[:str]
 STRbatsplitpart_needlecst
-Split string on delimiter. Returns@given field (counting from one.)
+Split string on delimiter. Returns given field (counting from one.)
 batstr
 splitpart
 pattern batstr.splitpart(X_0:bat[:str], X_1:str, X_2:int):bat[:str]
 STRbatsplitpartcst
-Split string on delimiter. Returns@given field (counting from one.)
+Split string on delimiter. Returns given field (counting from one.)
 batstr
 startswith
 pattern batstr.startswith(X_0:bat[:str], X_1:bat[:str]):bat[:bit]
@@ -26687,12 +26687,12 @@ batstr
 substitute
 pattern batstr.substitute(X_0:bat[:str], X_1:bat[:str], X_2:bat[:str], 
X_3:bat[:bit]):bat[:str]
 STRbatSubstitute
-Substitute first occurrence of 'src' by@'dst'. Iff repeated = true this 
is@repeated while 'src' can be found in the@result string. In order to 
prevent@recursion and result strings of unlimited@size, repeating is only done 
iff src is@not a substring of dst.
+Substitute first occurrence of 'src' by 'dst'. Iff repeated = true this is 
repeated while 'src' can be found in the result string. In order to prevent 
recursion and result strings of unlimited size, repeating is only done iff src 
is not a substring of dst.
 batstr
 substitute
 pattern batstr.substitute(X_0:bat[:str], X_1:str, X_2:str, X_3:bit):bat[:str]
 STRbatSubstitutecst
-Substitute first occurrence of 'src' by@'dst'. Iff repeated = true this 
is@repeated while 'src' can be found in the@result string. In order to 
prevent@recursion and result strings of unlimited@size, repeating is only done 
iff src is@not a substring of dst.
+Substitute first occurrence of 'src' by 'dst'. Iff repeated = true this is 
repeated while 'src' can be found in the result string. In order to prevent 
recursion and result strings of unlimited size, repeating is only done iff src 
is not a substring of dst.
 batstr
 substring
 pattern batstr.substring(X_0:bat[:str], X_1:bat[:int]):bat[:str]
@@ -41127,7 +41127,7 @@ str
 containsjoin
 pattern str.containsjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:bit], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:lng, X_7:bit) (X_8:bat[:oid], 
X_9:bat[:oid])
 STRcontainsjoin
-Join the string bat L with the bat R if L contains the string of R@with 
optional candidate lists SL and SR@The result is two aligned bats with oids of 
matching rows + icase.
+Join the string bat L with the bat R if L contains the string of R with 
optional candidate lists SL and SR The result is two aligned bats with oids of 
matching rows + icase.
 str
 containsjoin
 pattern str.containsjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:bit], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:lng, X_7:bit):bat[:oid]
@@ -41137,7 +41137,7 @@ str
 containsjoin
 pattern str.containsjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bit, X_5:lng, X_6:bit) (X_7:bat[:oid], X_8:bat[:oid])
 STRcontainsjoin
-Join the string bat L with the bat R if L contains the string of R@with 
optional candidate lists SL and SR@The result is two aligned bats with oids of 
matching rows.
+Join the string bat L with the bat R if L contains the string of R with 
optional candidate lists SL and SR The result is two aligned bats with oids of 
matching rows.
 str
 containsjoin
 pattern str.containsjoin(X_0:bat[:str], X_1:bat[:str], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bit, X_5:lng, X_6:bit):bat[:oid]
@@ -41147,12 +41147,12 @@ str
 containsselect
 pattern str.containsselect(X_0:bat[:str], X_1:bat[:oid], X_2:str, 
X_3:bit):bat[:oid]
 STRcontainsselect
-Select all head values of the first input BAT for which the@tail value 
contains the given needle.
+Select all head values of the first input BAT for which the tail value 
contains the given needle.
 str
 containsselect
 pattern str.containsselect(X_0:bat[:str], X_1:bat[:oid], X_2:str, X_3:bit, 
X_4:bit):bat[:oid]
 STRcontainsselect
-Select all head values of the first input BAT for which the@tail value 
contains the given needle + icase.
+Select all head values of the first input BAT for which the tail value 
contains the given needle + icase.
 str
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to