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]

Reply via email to