Changeset: 7d829a67bc49 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7d829a67bc49
Modified Files:
        sql/storage/store.c
Branch: default
Log Message:

Do less copying


diffs (99 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -541,36 +541,18 @@ load_range_partition(sql_trans *tr, sql_
 
        rs = store->table_api.rids_select(tr, find_sql_column(ranges, 
"table_id"), &pt->member, &pt->member, NULL);
        if ((rid = store->table_api.rids_next(rs)) != oid_nil) {
-               ValRecord vmin, vmax;
-               ptr ok, cbat;
+               ptr cbat;
                str v;
 
-               vmin = vmax = (ValRecord) {.vtype = TYPE_void,};
-
+               pt->with_nills = (bit) store->table_api.column_find_bte(tr, 
find_sql_column(ranges, "with_nulls"), rid);
                v = store->table_api.column_find_string_start(tr, 
find_sql_column(ranges, "minimum"), rid, &cbat);
-               ok = VALinit(&vmin, TYPE_str, v);
+               pt->part.range.minvalue = SA_STRDUP(tr->sa, v);
+               pt->part.range.minlength = strLen(v);
                store->table_api.column_find_string_end(cbat);
-               if (ok) {
-                       v = store->table_api.column_find_string_start(tr, 
find_sql_column(ranges, "maximum"), rid, &cbat); 
-                       ok = VALinit(&vmax, TYPE_str, v);
-                       store->table_api.column_find_string_end(cbat);
-               }
-               if (ok) {
-                       pt->with_nills = (bit) 
store->table_api.column_find_bte(tr, find_sql_column(ranges, "with_nulls"), 
rid);
-
-                       pt->part.range.minvalue = SA_NEW_ARRAY(tr->sa, char, 
vmin.len);
-                       pt->part.range.maxvalue = SA_NEW_ARRAY(tr->sa, char, 
vmax.len);
-                       memcpy(pt->part.range.minvalue, VALget(&vmin), 
vmin.len);
-                       memcpy(pt->part.range.maxvalue, VALget(&vmax), 
vmax.len);
-                       pt->part.range.minlength = vmin.len;
-                       pt->part.range.maxlength = vmax.len;
-               }
-               VALclear(&vmin);
-               VALclear(&vmax);
-               if (!ok) {
-                       store->table_api.rids_destroy(rs);
-                       return -1;
-               }
+               v = store->table_api.column_find_string_start(tr, 
find_sql_column(ranges, "maximum"), rid, &cbat);
+               pt->part.range.maxvalue = SA_STRDUP(tr->sa, v);
+               pt->part.range.maxlength = strLen(v);
+               store->table_api.column_find_string_end(cbat);
        }
        store->table_api.rids_destroy(rs);
        return 0;
@@ -584,7 +566,6 @@ load_value_partition(sql_trans *tr, sql_
        list *vals = NULL;
        oid rid;
        rids *rs = store->table_api.rids_select(tr, find_sql_column(values, 
"table_id"), &pt->member, &pt->member, NULL);
-       int i = 0;
 
        vals = SA_LIST(tr->sa, (fdestroy) &part_value_destroy);
        if (!vals) {
@@ -593,33 +574,19 @@ load_value_partition(sql_trans *tr, sql_
        }
 
        for (rid = store->table_api.rids_next(rs); !is_oid_nil(rid); rid = 
store->table_api.rids_next(rs)) {
-               sql_part_value* nextv;
-               ValRecord vvalue;
-               ptr ok, cbat;
+               ptr cbat;
                str v;
 
-               vvalue = (ValRecord) {.vtype = TYPE_void,};
                v = store->table_api.column_find_string_start(tr, 
find_sql_column(values, "value"), rid, &cbat);
-               ok = VALinit(&vvalue, TYPE_str, v);
+               if (strNil(v)) { /* check for null value */
+                       pt->with_nills = true;
+               } else {
+                       sql_part_value *nextv = SA_ZNEW(tr->sa, sql_part_value);
+                       nextv->value = SA_STRDUP(tr->sa, v);
+                       nextv->length = strLen(v);
+                       list_append(vals, nextv);
+               }
                store->table_api.column_find_string_end(cbat);
-               if (ok) {
-                       if (VALisnil(&vvalue)) { /* check for null value */
-                               pt->with_nills = true;
-                       } else {
-                               nextv = SA_ZNEW(tr->sa, sql_part_value);
-                               nextv->value = SA_NEW_ARRAY(tr->sa, char, 
vvalue.len);
-                               memcpy(nextv->value, VALget(&vvalue), 
vvalue.len);
-                               nextv->length = vvalue.len;
-                               list_append(vals, nextv);
-                       }
-               }
-               VALclear(&vvalue);
-               if (!ok) {
-                       store->table_api.rids_destroy(rs);
-                       list_destroy2(vals, tr->store);
-                       return -i - 1;
-               }
-               i++;
        }
        store->table_api.rids_destroy(rs);
        pt->part.values = vals;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to