/* the size of the index header without column descriptions */
t->index_header_size = IDX_COLUMN_DESCRIPTIONS;
FOR_EACH_COLUMN(i, t->desc, cd) {
- struct osl_column *col = t->columns + i;
if (cd->storage_flags & OSL_RBTREE) {
if (!cd->compare_function)
return -E_OSL_NO_COMPARE_FUNC;
if (ret < 0)
goto err;
t->index_header_size += index_column_description_size(cd->name);
- column_name_hash(cd->name, col->name_hash);
ret = -E_OSL_DUPLICATE_COL_NAME;
for (j = i + 1; j < t->desc->num_columns; j++) {
const char *name2 = get_column_description(t->desc,
if (ret < 0)
goto out;
}
+ column_name_hash(cd->name, t->columns[i].name_hash);
ret = -E_OSL_NOMEM;
filename = column_filename(t, i);
if (!filename)
}
mark_table_dirty(t);
num_rows = table_num_rows(t);
- if (!num_rows)
- return num_rows;
/* map data files */
- FOR_EACH_MAPPED_COLUMN(i, t, cd) {
- ret = map_column(t, i);
- if (ret < 0)
- goto err;
+ FOR_EACH_COLUMN(i, t->desc, cd) {
+ if (cd->storage_type == OSL_NO_STORAGE)
+ continue;
+ column_name_hash(cd->name, t->columns[i].name_hash);
+ if (num_rows > 0 && cd->storage_type == OSL_MAPPED_STORAGE) {
+ ret = map_column(t, i);
+ if (ret < 0)
+ goto err;
+ }
}
return num_rows;
err: /* unmap what is already mapped */