Changeset: 2c575608e448 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2c575608e448
Modified Files:
sql/backends/monet5/sql_statement.c
sql/server/sql_semantic.c
sql/test/emptydb/Tests/check.stable.out.32bit
Branch: default
Log Message:
Merge with Dec2025 branch.
diffs (truncated from 3283 to 300 lines):
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -418,7 +418,7 @@ ATOMformat(allocator *ma, int t, const v
}
return buf;
}
- return ma_strdup(ma, "nil");
+ return "nil";
}
/*
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -2403,6 +2403,8 @@ ma_strndup(allocator *sa, const char *s,
char *
ma_strdup(allocator *sa, const char *s)
{
+ if (strNil(s))
+ return (char *) str_nil;
return ma_strndup(sa, s, strlen(s));
}
diff --git a/gdk/gdk_value.c b/gdk/gdk_value.c
--- a/gdk/gdk_value.c
+++ b/gdk/gdk_value.c
@@ -139,18 +139,11 @@ VALget(ValPtr v)
void
VALclear(ValPtr v)
{
- if (v->allocated && !v->bat && ATOMextern(v->vtype)) {
- if (v->vtype == TYPE_str) {
- if (v->val.sval && v->val.sval != ATOMnilptr(v->vtype)) {
- GDKfree(v->val.sval);
- }
- } else {
- if (v->val.pval && v->val.pval != ATOMnilptr(v->vtype)) {
- GDKfree(v->val.pval);
- }
- }
- }
- VALempty(v);
+ if (v->allocated && !v->bat && ATOMextern(v->vtype)) {
+ assert(v->val.pval != ATOMnilptr(v->vtype));
+ GDKfree(v->val.pval);
+ }
+ VALempty(v);
}
/* Initialize V to an empty value (type void, value nil). See
@@ -187,20 +180,30 @@ VALcopy(allocator *ma, ValPtr d, const V
const char *p = s->val.sval;
d->vtype = TYPE_str;
d->len = strLen(p);
- d->val.sval = ma? ma_alloc(ma, d->len) : GDKmalloc(d->len);
- if (d->val.sval == NULL)
- return NULL;
- memcpy(d->val.sval, p, d->len);
- d->allocated = !ma;
+ if (strNil(p)) {
+ d->val.sval = (char *) str_nil;
+ d->allocated = false;
+ } else {
+ d->val.sval = ma? ma_alloc(ma, d->len) :
GDKmalloc(d->len);
+ if (d->val.sval == NULL)
+ return NULL;
+ memcpy(d->val.sval, p, d->len);
+ d->allocated = !ma;
+ }
} else {
const void *p = s->val.pval;
d->vtype = s->vtype;
d->len = ATOMlen(d->vtype, p);
- d->val.pval = ma? ma_alloc(ma, d->len) : GDKmalloc(d->len);
- if (d->val.pval == NULL)
- return NULL;
- memcpy(d->val.pval, p, d->len);
- d->allocated = !ma;
+ if (ATOMeq(d->vtype, ATOMnilptr(d->vtype), p)) {
+ d->val.pval = (void *) ATOMnilptr(d->vtype);
+ d->allocated = false;
+ } else {
+ d->val.pval = ma? ma_alloc(ma, d->len) :
GDKmalloc(d->len);
+ if (d->val.pval == NULL)
+ return NULL;
+ memcpy(d->val.pval, p, d->len);
+ d->allocated = !ma;
+ }
}
return d;
}
@@ -257,12 +260,17 @@ VALinit(allocator *ma, ValPtr d, int tpe
break;
case TYPE_str:
d->len = strLen(s);
- d->val.sval = ma? ma_alloc(ma, d->len) :
- GDKmalloc(d->len);
- if (d->val.sval == NULL)
- return NULL;
- memcpy(d->val.sval, s, d->len);
- d->allocated = !ma;
+ if (strNil(s)) {
+ d->val.sval = (char *) str_nil;
+ d->allocated = false;
+ } else {
+ d->val.sval = ma? ma_alloc(ma, d->len) :
+ GDKmalloc(d->len);
+ if (d->val.sval == NULL)
+ return NULL;
+ memcpy(d->val.sval, s, d->len);
+ d->allocated = !ma;
+ }
return d;
case TYPE_ptr:
d->val.pval = *(const ptr *) s;
@@ -271,12 +279,17 @@ VALinit(allocator *ma, ValPtr d, int tpe
default:
assert(ATOMextern(ATOMstorage(tpe)));
d->len = ATOMlen(tpe, s);
- d->val.pval = ma? ma_alloc(ma, d->len) :
- GDKmalloc(d->len);
- if (d->val.pval == NULL)
- return NULL;
- memcpy(d->val.pval, s, d->len);
- d->allocated = !ma;
+ if (ATOMeq(tpe, ATOMnilptr(tpe), s)) {
+ d->val.pval = (void *) ATOMnilptr(tpe);
+ d->allocated = false;
+ } else {
+ d->val.pval = ma? ma_alloc(ma, d->len) :
+ GDKmalloc(d->len);
+ if (d->val.pval == NULL)
+ return NULL;
+ memcpy(d->val.pval, s, d->len);
+ d->allocated = !ma;
+ }
return d;
}
d->len = ATOMsize(d->vtype);
@@ -289,9 +302,8 @@ char *
VALformat(allocator *ma, const ValRecord *res)
{
if (res->bat) {
- if (is_bat_nil(res->val.bval)) {
- return ma_strdup(ma, "nil");
- }
+ if (is_bat_nil(res->val.bval))
+ return "nil";
else
return ATOMformat(ma, TYPE_int, (const void *)
&res->val.ival);
} else
diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -2380,8 +2380,7 @@ geoGetType(Client ctx, char **res, int *
{
allocator *ma = ctx->curprg->def->ma;
if (is_int_nil(*info) || is_int_nil(*flag)) {
- if ((*res = ma_strdup(ma, str_nil)) == NULL)
- throw(MAL, "geom.getType", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ *res = (char *) str_nil;
return MAL_SUCCEED;
}
if ((*res = ma_strdup(ma, geom_type2str(*info >> 2, *flag))) == NULL)
@@ -2533,8 +2532,7 @@ wkbAsBinary(Client ctx, char **toStr, wk
int i;
if (is_wkb_nil(*geomWKB)) {
- if ((*toStr = ma_strdup(ma, str_nil)) == NULL)
- throw(MAL, "geom.AsBinary", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ *toStr = (char *) str_nil;
return MAL_SUCCEED;
}
if ((*toStr = ma_alloc(ma, 1 + (*geomWKB)->len * 2)) == NULL)
@@ -2729,8 +2727,7 @@ wkbAsText(Client ctx, char **txt, wkb **
const char sridTxt[] = "SRID:";
if (is_wkb_nil(*geomWKB) || (withSRID && is_int_nil(*withSRID))) {
- if ((*txt = ma_strdup(ma, str_nil)) == NULL)
- throw(MAL, "geom.AsText", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ *txt = (char *) str_nil;
return MAL_SUCCEED;
}
@@ -4305,8 +4302,7 @@ wkbIsValidReason(Client ctx, char **reas
char *GEOSReason = NULL;
if (is_wkb_nil(*geomWKB)) {
- if ((*reason = ma_strdup(ma, str_nil)) == NULL)
- throw(MAL, "geom.IsValidReason", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ *reason = (char *) str_nil;
return MAL_SUCCEED;
}
@@ -4340,8 +4336,7 @@ wkbIsValidDetail(Client ctx, char **out,
GEOSGeom geosGeometry;
if (is_wkb_nil(*geom)) {
- if ((*out = ma_strdup(ma, str_nil)) == NULL)
- throw(MAL, "geom.IsValidReason", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ *out = (char *) str_nil;
return MAL_SUCCEED;
}
diff --git a/monetdb5/mal/mal_exception.c b/monetdb5/mal/mal_exception.c
--- a/monetdb5/mal/mal_exception.c
+++ b/monetdb5/mal/mal_exception.c
@@ -323,7 +323,7 @@ getExceptionPlace(allocator *ma, const c
break;
}
}
- return ma_strdup(ma, "(unknown)");
+ return "(unknown)";
}
/**
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -260,24 +260,24 @@ malCommandCall(Client cntxt, MalStkPtr s
/*
* Copy the constant values onto the stack frame
*/
-#define initStack(A, S, R)
\
- do {
\
- for (int i = (S); i < mb->vtop; i++) { \
- lhs = &stk->stk[i];
\
- if (isVarConstant(mb, i) > 0) { \
- if (!isVarDisabled(mb, i)) { \
- rhs = &getVarConstant(mb, i); \
- if(VALcopy(A, lhs, rhs) == NULL)
\
- R = 0;
\
- }
\
- } else {
\
- lhs->vtype = getVarGDKType(mb, i); \
- lhs->val.pval = 0;
\
- lhs->len = 0;
\
- lhs->bat = isaBatType(getVarType(mb, i));
\
- lhs->allocated = false; \
- }
\
- }
\
+#define initStack(A, S, R)
\
+ do {
\
+ for (int i = (S); i < mb->vtop; i++) {
\
+ lhs = &stk->stk[i];
\
+ if (isVarConstant(mb, i) > 0) {
\
+ if (!isVarDisabled(mb, i)) {
\
+ rhs = &getVarConstant(mb, i);
\
+ if (VALcopy(A, lhs, rhs) == NULL)
\
+ R = 0;
\
+ }
\
+ } else {
\
+ *lhs = (ValRecord) {
\
+ .vtype = getVarGDKType(mb, i),
\
+ .bat = isaBatType(getVarType(mb, i)),
\
+ .allocated = false,
\
+ };
\
+ }
\
+ }
\
} while (0)
static inline bool
diff --git a/monetdb5/mal/mal_type.c b/monetdb5/mal/mal_type.c
--- a/monetdb5/mal/mal_type.c
+++ b/monetdb5/mal/mal_type.c
@@ -42,7 +42,7 @@ getTypeName(allocator *ma, malType tpe)
int k;
if (tpe == TYPE_any)
- return ma_strdup(ma, "any");
+ return "any";
if (isaBatType(tpe)) {
k = getTypeIndex(tpe);
if (k)
diff --git a/monetdb5/modules/atoms/inet.c b/monetdb5/modules/atoms/inet.c
--- a/monetdb5/modules/atoms/inet.c
+++ b/monetdb5/modules/atoms/inet.c
@@ -563,9 +563,7 @@ INEThost(Client ctx, str *retval, const
str ip;
if (is_inet_nil(val)) {
- *retval = ma_strdup(ma, str_nil);
- if (*retval == NULL)
- throw(MAL, "INEThost", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ *retval = (char *) str_nil;
} else {
ip = ma_alloc(ma, sizeof(char) * 16);
if (ip == NULL)
@@ -722,9 +720,7 @@ INETtext(Client ctx, str *retval, const
str ip;
if (is_inet_nil(val)) {
- *retval = ma_strdup(ma, str_nil);
- if (*retval == NULL)
- throw(MAL, "INETtext", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ *retval = (char *) str_nil;
} else {
ip = ma_alloc(ma, sizeof(char) * 20);
if (ip == NULL)
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]