Changeset: a1de0072a2df for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a1de0072a2df
Branch: default
Log Message:

Merge with Dec2025 branch.


diffs (293 lines):

diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c
--- a/clients/mapiclient/mhelp.c
+++ b/clients/mapiclient/mhelp.c
@@ -49,11 +49,11 @@ SQLhelp sqlhelp1[] = {
        // major commands
        {"ALTER MERGE TABLE",
         "",
-        "ALTER TABLE [ IF EXISTS ] qname ADD TABLE qname [ AS PARTITION 
partition_spec ]\n"
-        "ALTER TABLE [ IF EXISTS ] qname DROP TABLE qname [ RESTRICT | CASCADE 
]\n"
-        "ALTER TABLE [ IF EXISTS ] qname SET TABLE qname AS PARTITION 
partition_spec",
+        "ALTER TABLE [ IF EXISTS ] qname ADD  TABLE qname [ AS PARTITION 
partition_spec ]\n"
+        "ALTER TABLE [ IF EXISTS ] qname SET  TABLE qname   AS PARTITION 
partition_spec\n"
+        "ALTER TABLE [ IF EXISTS ] qname DROP TABLE qname [ RESTRICT | CASCADE 
]",
         "qname,partition_spec",
-        "See also 
https://www.monetdb.org/documentation/admin-guide/distributed-query-processing/"},
+        "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/merge-tables/"},
        {"ALTER SCHEMA",
         "",
         "ALTER SCHEMA [ IF EXISTS ] ident RENAME TO ident",
@@ -61,16 +61,22 @@ SQLhelp sqlhelp1[] = {
         "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/schema-definitions/"},
        {"ALTER SEQUENCE",
         "",
-        "ALTER SEQUENCE [ IF EXISTS ] qname [AS seq_int_datatype] [RESTART 
[WITH {bigint|subquery}] ] [INCREMENT BY bigint]\n"
-        "  [MINVALUE bigint | NO MINVALUE] [MAXVALUE bigint | NO MAXVALUE] 
[CACHE bigint] [[NO] CYCLE]",
+        "ALTER SEQUENCE [ IF EXISTS ] qname [AS seq_int_datatype]\n"
+        "  [RESTART [WITH {bigint|subquery}] ]\n"
+        "  [INCREMENT BY bigint]\n"
+        "  [MINVALUE bigint | NO MINVALUE]\n"
+        "  [MAXVALUE bigint | NO MAXVALUE]\n"
+        "  [CACHE bigint]\n"
+        "  [[NO] CYCLE]",
         "seq_int_datatype",
-        "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/data-types/serial-types/"},
+        "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/sequence-definition/"},
        {"ALTER TABLE",
         "",
         "ALTER TABLE [ IF EXISTS ] qname ADD [ COLUMN ] column_def\n"
         "ALTER TABLE [ IF EXISTS ] qname ADD [ CONSTRAINT ident ] 
table_constraint\n"
+        "ALTER TABLE [ IF EXISTS ] qname ALTER [ COLUMN ] ident data_type\n"
+        "ALTER TABLE [ IF EXISTS ] qname ALTER [ COLUMN ] ident SET [NOT] 
NULL\n"
         "ALTER TABLE [ IF EXISTS ] qname ALTER [ COLUMN ] ident SET DEFAULT 
value\n"
-        "ALTER TABLE [ IF EXISTS ] qname ALTER [ COLUMN ] ident SET [NOT] 
NULL\n"
         "ALTER TABLE [ IF EXISTS ] qname ALTER [ COLUMN ] ident DROP DEFAULT\n"
         "ALTER TABLE [ IF EXISTS ] qname ALTER [ COLUMN ] ident SET STORAGE 
{string | NULL}\n"
         "ALTER TABLE [ IF EXISTS ] qname DROP [ COLUMN ] ident [ RESTRICT | 
CASCADE ]\n"
@@ -221,10 +227,15 @@ SQLhelp sqlhelp1[] = {
         "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/schema-definitions/"},
        {"CREATE SEQUENCE",
         "Define a new integer number sequence generator",
-        "CREATE SEQUENCE [ IF NOT EXISTS ] qname [AS seq_int_datatype] [START 
WITH bigint] [INCREMENT BY bigint]\n"
-        "  [MINVALUE bigint | NO MINVALUE] [MAXVALUE bigint | NO MAXVALUE] 
[CACHE bigint] [[NO] CYCLE]",
+        "CREATE SEQUENCE [ IF NOT EXISTS ] qname [AS seq_int_datatype]\n"
+        "  [START WITH bigint]\n"
+        "  [INCREMENT BY bigint]\n"
+        "  [MINVALUE bigint | NO MINVALUE]\n"
+        "  [MAXVALUE bigint | NO MAXVALUE]\n"
+        "  [CACHE bigint]\n"
+        "  [[NO] CYCLE]",
         "seq_int_datatype",
-        "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/data-types/serial-types/"},
+        "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/sequence-definition/"},
        {"CREATE TABLE",
         "Create a new table",
         "CREATE TABLE [ IF NOT EXISTS ] qname table_source [STORAGE ident 
string]\n"
@@ -243,7 +254,7 @@ SQLhelp sqlhelp1[] = {
         "Add user defined type to the type system ",
         "CREATE TYPE [ IF NOT EXISTS ] qname EXTERNAL NAME ident",
         NULL,
-        NULL},
+        "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/data-types/udf-types/"},
        {"CREATE UNLOGGED TABLE",
         "Create a new unlogged table",
         "CREATE UNLOGGED TABLE [ IF NOT EXISTS ] qname table_source [STORAGE 
ident string]\n"
@@ -410,19 +421,17 @@ SQLhelp sqlhelp1[] = {
         NULL,
         "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/data-manipulation/prepare-statement/"},
        {"EXPLAIN",
-        "Display logical or physical execution plan for the SQL statement.",
-        "EXPLAIN [BEFORE|AFTER] [step] [SHOW DETAILS] statement\n"
-        "\twhere step is LOGICAL UNNEST | LOGICAL REWRITE [posint] [posint] | 
PHYSICAL",
+        "Display logical or physical execution plan for an SQL statement.",
+        "EXPLAIN [ [BEFORE|AFTER] {LOGICAL UNNEST | LOGICAL REWRITE [posint] 
[posint] | PHYSICAL} ]\n"
+        "        [SHOW DETAILS] sql-statement",
         NULL,
-        "Plain EXPLAIN defaults to logical plan.\n"
-        "Use LOGICAL UNNEST|LOGICAL REWRITE|PHYSICAL to specify compilation 
step to show.\n"
-        "Use BEFORE|AFTER to specify moment of compilation step to output.\n"
-        "The default is AFTER.\n"
+        "Plain EXPLAIN sql-statement returns the logical plan.\n"
+        "Use LOGICAL UNNEST or LOGICAL REWRITE or PHYSICAL to specify the 
compilation step to show.\n"
+        "Optionally add BEFORE or AFTER to specify moment of compilation step 
to output. The default is AFTER.\n"
         "Two positive numbers can be passed to LOGICAL REWRITE to stop at 
specific\n"
         "rewriter index or rewrite loop cycle, respectively.\n"
         "If only one positive number is passed to LOGICAL REWRITE, rewrite 
stop cycle defaults to 0.\n"
-        "SHOW DETAILS displays column properties, rewriter number of changes\n"
-        "and time spent.\n"
+        "SHOW DETAILS displays column properties, rewriter number of changes 
and time spent.\n"
         "See also 
https://www.monetdb.org/documentation/admin-guide/debugging-features/explain-sql-stmt/"},
        {"EXTRACT",
         "Built-in function",
@@ -669,7 +678,7 @@ SQLhelp sqlhelp2[] = {
         " { VARCHAR | CHARACTER VARYING } '(' nonzero ')' |\n"
         " { CHAR | CHARACTER [ LARGE OBJECT ] | CLOB | TEXT | STRING | JSON | 
URL } [ '(' nonzero ')' ] |\n"
         " { BINARY LARGE OBJECT | BLOB } [ '(' nonzero ')' ] |\n"
-        " UUID | INET | datetime_type | interval_type | geometry_type",
+        " UUID | INET | INET4 | INET6 | datetime_type | interval_type | 
geometry_type",
         "datetime_type,interval_type,geometry_type",
         "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/data-types/"},
        {"default_char_set",
diff --git a/monetdb5/mal/mal_namespace.c b/monetdb5/mal/mal_namespace.c
--- a/monetdb5/mal/mal_namespace.c
+++ b/monetdb5/mal/mal_namespace.c
@@ -19,35 +19,19 @@
 #include "mal_exception.h"
 #include "mal_private.h"
 
-#define MAXIDENTIFIERS 4096
-#define HASHMASK  4095
+#define HASHSIZE       (1 << 12)               /* power of two */
+#define HASHMASK       (HASHSIZE - 1)
 
 MT_Lock mal_namespaceLock = MT_LOCK_INITIALIZER(mal_namespaceLock);
 
-/* taken from gdk_atoms */
-__attribute__((__pure__))
-static inline size_t
-nme_hash(const char *key, size_t len)
-{
-       size_t y = 0;
-
-       for (size_t i = 0; i < len && key[i]; i++) {
-               y += key[i];
-               y += (y << 10);
-               y ^= (y >> 6);
-       }
-       y += (y << 3);
-       y ^= (y >> 11);
-       y += (y << 15);
-       return y & HASHMASK;
-}
+#define nme_hash(key)  ((size_t) (strHash(key) & HASHMASK))
 
 typedef struct NAME {
        struct NAME *next;
        char nme[IDLENGTH + 1];
 } *NamePtr;
 
-static NamePtr hash[MAXIDENTIFIERS];
+static NamePtr hash[HASHSIZE];
 
 static struct namespace {
        struct namespace *next;
@@ -63,19 +47,17 @@ static struct fixnamespace {
        int count;
        struct fixname data[1024];
 } fixnamespace;
-static struct fixname *fixhash[4096];
+static struct fixname *fixhash[HASHSIZE];
 
 static void
 fixName(const char *name)
 {
-       size_t key = nme_hash(name, 1024 /* something large */);
-       MT_lock_set(&mal_namespaceLock);
+       size_t key = nme_hash(name);
        struct fixname **n;
        for (n = &fixhash[key]; *n; n = &(*n)->next) {
                if ((*n)->name == name || strcmp((*n)->name, name) == 0) {
                        /* name is already there; this can happen when
                         * reinitializing */
-                       MT_lock_unset(&mal_namespaceLock);
                        return;
                }
        }
@@ -85,7 +67,6 @@ fixName(const char *name)
                .name = name,
        };
        *n = new;
-       MT_lock_unset(&mal_namespaceLock);
 }
 
 #define NAME_DEFINE(NAME) const char NAME##Ref[] = #NAME
@@ -102,6 +83,7 @@ const char plusRef[] = "+";
 void
 initNamespace(void)
 {
+       MT_lock_set(&mal_namespaceLock);
        FOREACH_NAME(NAME_FIX);
        fixName(divRef);
        fixName(eqRef);
@@ -109,6 +91,7 @@ initNamespace(void)
        fixName(modRef);
        fixName(mulRef);
        fixName(plusRef);
+       MT_lock_unset(&mal_namespaceLock);
 }
 
 void
@@ -133,27 +116,23 @@ mal_namespace_reset(void)
 }
 
 static const char *
-findName(const char *nme, size_t len, bool allocate)
+findName(const char *nme, bool allocate)
 {
        NamePtr *n, m;
        size_t key;
 
-       assert(len == 0 || nme != NULL);
-       if (len == 0 || nme == NULL)
+       if (nme == NULL)
                return NULL;
-       if (len > IDLENGTH) {
-               len = IDLENGTH;
-       }
-       key = nme_hash(nme, len);
+       key = nme_hash(nme);
        MT_lock_set(&mal_namespaceLock);
        for (struct fixname *p = fixhash[key]; p; p = p->next) {
-               if (p->name == nme || (strncmp(p->name, nme, len) == 0 && 
p->name[len] == 0)) {
+               if (p->name == nme || (strcmp(p->name, nme) == 0)) {
                        MT_lock_unset(&mal_namespaceLock);
                        return p->name;
                }
        }
        for (n = &hash[key]; *n; n = &(*n)->next) {
-               if (strncmp(nme, (*n)->nme, len) == 0 && (*n)->nme[len] == 0) {
+               if (strcmp(nme, (*n)->nme) == 0) {
                        MT_lock_unset(&mal_namespaceLock);
                        return (*n)->nme;
                }
@@ -175,8 +154,7 @@ findName(const char *nme, size_t len, bo
        }
        m = &namespace->data[namespace->count++];
        assert(m->nme != nme);
-       strncpy(m->nme, nme, len);
-       m->nme[len] = 0;
+       strcpy_len(m->nme, nme, sizeof(m->nme));
        m->next = *n;
        *n = m;
        MT_lock_unset(&mal_namespaceLock);
@@ -187,26 +165,34 @@ const char *
 getName(const char *nme)
 {
        if (nme != NULL)
-               nme = findName(nme, strlen(nme), false);
+               nme = findName(nme, false);
        return nme;
 }
 
 const char *
 getNameLen(const char *nme, size_t len)
 {
-       return findName(nme, len, false);
+       char name[IDLENGTH + 1];
+       if (len > IDLENGTH)
+               len = IDLENGTH;
+       strcpy_len(name, nme, len + 1);
+       return findName(name, false);
 }
 
 const char *
 putName(const char *nme)
 {
        if (nme != NULL)
-               nme = findName(nme, strlen(nme), true);
+               nme = findName(nme, true);
        return nme;
 }
 
 const char *
 putNameLen(const char *nme, size_t len)
 {
-       return findName(nme, len, true);
+       char name[IDLENGTH + 1];
+       if (len > IDLENGTH)
+               len = IDLENGTH;
+       strcpy_len(name, nme, len + 1);
+       return findName(name, true);
 }
diff --git a/monetdb5/mal/mal_prelude.c b/monetdb5/mal/mal_prelude.c
--- a/monetdb5/mal/mal_prelude.c
+++ b/monetdb5/mal/mal_prelude.c
@@ -306,7 +306,7 @@ melFunction(bool command, const char *mo
        fcn = s->name;
        s->allocated = true;
 
-       f = GDKmalloc(sizeof(mel_func) + sizeof(mel_arg [argc]));
+       f = GDKmalloc(sizeof(mel_func) + argc * sizeof(mel_arg));
        if (f == NULL) {
                freeSymbol(s);
                return MEL_ERR;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to