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]