We use hash_function() to determine the path of the file/directory
which corresponds to columns of type MAPPED_STORAGE or
DISK_STORAGE. Currently this happens before the index has been
mapped, so we don't know the table version at this point.
Future versions of osl will support multiple hash functions, and the
hash function to use will be determined from the table version. At
this point the modifications of this patch become necessary. At the
moment the patch has no visible effect.
/* the size of the index header without column descriptions */
t->index_header_size = IDX_COLUMN_DESCRIPTIONS;
FOR_EACH_COLUMN(i, t->desc, cd) {
/* 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 (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);
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,
ret = -E_OSL_DUPLICATE_COL_NAME;
for (j = i + 1; j < t->desc->num_columns; j++) {
const char *name2 = get_column_description(t->desc,
+ column_name_hash(cd->name, t->columns[i].name_hash);
ret = -E_OSL_NOMEM;
filename = column_filename(t, i);
if (!filename)
ret = -E_OSL_NOMEM;
filename = column_filename(t, i);
if (!filename)
}
mark_table_dirty(t);
num_rows = table_num_rows(t);
}
mark_table_dirty(t);
num_rows = table_num_rows(t);
- if (!num_rows)
- return num_rows;
- 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 */
}
return num_rows;
err: /* unmap what is already mapped */