Changeset: f228e694b747 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f228e694b747
Modified Files:
        sql/server/rel_statistics.c
Branch: properties
Log Message:

Fixed min/max for strings from storage


diffs (45 lines):

diff --git a/sql/server/rel_statistics.c b/sql/server/rel_statistics.c
--- a/sql/server/rel_statistics.c
+++ b/sql/server/rel_statistics.c
@@ -204,6 +204,27 @@ rel_propagate_column_ref_statistics(mvc 
        return ne;
 }
 
+static atom *
+atom_from_valptr( sql_allocator *sa, sql_subtype *tpe, ValPtr pt)
+{
+       atom *a = SA_ZNEW(sa, atom);
+
+       a->tpe = *tpe;
+       a->data.vtype = tpe->type->localtype;
+       if (ATOMstorage(a->data.vtype) == TYPE_str) {
+               if (VALisnil(pt)) {
+                       VALset(&a->data, a->data.vtype, (ptr) 
ATOMnilptr(a->data.vtype));
+               } else {
+                       a->data.val.sval = sa_strdup(sa, pt->val.sval);
+                       a->data.len = strlen(a->data.val.sval);
+               }
+       } else {
+               VALcopy(&a->data, pt);
+       }
+       a->isnull = VALisnil(&a->data);
+       return a;
+}
+
 static sql_exp *
 rel_basetable_get_statistics(visitor *v, sql_rel *rel, sql_exp *e, int depth)
 {
@@ -220,11 +241,11 @@ rel_basetable_get_statistics(visitor *v,
                if (EC_NUMBER(c->type.type->eclass) || 
EC_VARCHAR(c->type.type->eclass) || EC_TEMP_NOFRAC(c->type.type->eclass) || 
c->type.type->eclass == EC_DATE) {
                        if ((max = mvc_has_max_value(sql, c))) {
                                prop *p = e->p = prop_create(sql->sa, PROP_MAX, 
e->p);
-                               p->value = atom_general_ptr(sql->sa, &c->type, 
max);
+                               p->value = atom_from_valptr(sql->sa, &c->type, 
max);
                        }
                        if ((min = mvc_has_min_value(sql, c))) {
                                prop *p = e->p = prop_create(sql->sa, PROP_MIN, 
e->p);
-                               p->value = atom_general_ptr(sql->sa, &c->type, 
min);
+                               p->value = atom_from_valptr(sql->sa, &c->type, 
min);
                        }
                }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to