* \param desc Pointer to the table description.
*
* \return Positive on success, negative on errors. Possible errors include: \p
* \param desc Pointer to the table description.
*
* \return Positive on success, negative on errors. Possible errors include: \p
- * E_BAD_TABLE_DESC, \p E_BAD_DB_DIR, \p E_BAD_BASENAME, \p E_NO_COMPARE_FUNC, \p
+ * E_BAD_TABLE_DESC, \p E_BAD_DB_DIR, \p E_BAD_NAME, \p E_NO_COMPARE_FUNC, \p
* E_NO_COLUMN_NAME, \p E_DUPLICATE_COL_NAME, \p E_MKDIR, any errors returned
* by para_open().
*/
* E_NO_COLUMN_NAME, \p E_DUPLICATE_COL_NAME, \p E_MKDIR, any errors returned
* by para_open().
*/
* of storage type \p OSL_MAPPED_STORAGE.
*
* \return Positive on success, negative on errors. Possible errors include:
* of storage type \p OSL_MAPPED_STORAGE.
*
* \return Positive on success, negative on errors. Possible errors include:
- return -E_BAD_ID;
- ret = get_index_entry(t, row_num, col_num, &index_entry);
+ return -E_BAD_ROW_NUM;
+ ret = get_cell_index(t, row_num, col_num, &cell_index);
- ret = get_mapped_object(t, col_num, this_row->id,
+ ret = get_mapped_object(t, col_num, this_row->num,
row->volatile_objects = volatile_objs;
FOR_EACH_RBTREE_COLUMN(i, t, cd) {
if (cd->storage_type == OSL_MAPPED_STORAGE) {
struct osl_object obj;
row->volatile_objects = volatile_objs;
FOR_EACH_RBTREE_COLUMN(i, t, cd) {
if (cd->storage_type == OSL_MAPPED_STORAGE) {
struct osl_object obj;
- ret = get_mapped_object(t, i, id, &obj);
+ ret = get_mapped_object(t, i, row_num, &obj);
if (ret < 0)
goto err;
ret = insert_rbtree(t, i, row, &obj);
if (ret < 0)
goto err;
ret = insert_rbtree(t, i, row, &obj);
- char *index_entry;
- int i, ret = get_index_entry_start(t, row_num, &index_entry);
+ char *row_index;
+ int i, ret = get_row_index(t, row_num, &row_index);
- char *index_entry;
- int i, ret = get_index_entry_start(t, row_num, &index_entry);
+ char *row_index;
+ int ret = get_row_index(t, row_num, &row_index);
- for (i = 0; i < t->index_entry_size; i++)
- index_entry[i] = 0xff;
+ PARA_INFO_LOG("marking row %d as invalid\n", row_num);
+ memset(row_index, 0xff, t->row_index_size);
-// PARA_DEBUG_LOG("appending %u bytes\n", t->index_entry_size);
- ret = append_file(filename, NULL, 0, new_index_entry,
- t->index_entry_size, NULL);
+ ret = append_file(filename, NULL, 0, row_index,
+ t->row_index_size, NULL);
char *dirname, *filename = disk_storage_path(t, col_num, ds_name);
int ret = unlink(filename);
char *dirname, *filename = disk_storage_path(t, col_num, ds_name);
int ret = unlink(filename);
rb_parents = para_malloc(t->num_rbtrees * sizeof(struct rn_node*));
rb_links = para_malloc(t->num_rbtrees * sizeof(struct rn_node**));
if (t->num_mapped_columns)
rb_parents = para_malloc(t->num_rbtrees * sizeof(struct rn_node*));
rb_links = para_malloc(t->num_rbtrees * sizeof(struct rn_node**));
if (t->num_mapped_columns)
/* pass 1: sanity checks */
// PARA_DEBUG_LOG("sanity tests: %p:%p\n", objects[0].data,
// objects[1].data);
/* pass 1: sanity checks */
// PARA_DEBUG_LOG("sanity tests: %p:%p\n", objects[0].data,
// objects[1].data);
ret = append_map_file(t, i, objects + i, &new_size);
if (ret < 0)
goto rollback;
ret = append_map_file(t, i, objects + i, &new_size);
if (ret < 0)
goto rollback;
- update_index_entry(new_index_entry, col, new_size,
+ update_cell_index(new_row_index, col, new_size,
if (ret < 0)
goto rollback;
ret = map_table(t, MAP_TBL_FL_VERIFY_INDEX);
if (ret < 0) { /* truncate index and rollback changes */
char *filename = index_filename(t->desc);
if (ret < 0)
goto rollback;
ret = map_table(t, MAP_TBL_FL_VERIFY_INDEX);
if (ret < 0) { /* truncate index and rollback changes */
char *filename = index_filename(t->desc);
/* ignore error and return previous error value */
map_table(t, MAP_TBL_FL_VERIFY_INDEX);
out:
/* ignore error and return previous error value */
map_table(t, MAP_TBL_FL_VERIFY_INDEX);
out:
if (cd->storage_type == OSL_DISK_STORAGE)
return -E_BAD_STORAGE_TYPE;
if (cd->storage_type == OSL_MAPPED_STORAGE)
if (cd->storage_type == OSL_DISK_STORAGE)
return -E_BAD_STORAGE_TYPE;
if (cd->storage_type == OSL_MAPPED_STORAGE)
- return get_mapped_object(t, col_num, r->id, object);
+ return get_mapped_object(t, col_num, r->num, object);
-static int mark_mapped_object_invalid(const struct osl_table *t, uint32_t id,
- unsigned col_num)
+static int mark_mapped_object_invalid(const struct osl_table *t,
+ uint32_t row_num, unsigned col_num)
- int ret = get_mapped_object(t, col_num, id, &obj);
+ int ret = get_mapped_object(t, col_num, row_num, &obj);
continue;
}
if (st == OSL_NO_STORAGE)
free(r->volatile_objects[col->volatile_num].data);
}
if (t->num_mapped_columns) {
continue;
}
if (st == OSL_NO_STORAGE)
free(r->volatile_objects[col->volatile_num].data);
}
if (t->num_mapped_columns) {
return -E_BAD_TABLE;
col = &t->columns[col_num];
cd = get_column_description(t->desc, col_num);
return -E_BAD_TABLE;
col = &t->columns[col_num];
cd = get_column_description(t->desc, col_num);
if (cd->storage_flags & OSL_RBTREE) {
if (search_rbtree(obj, t, col_num, NULL, NULL) > 0)
return -E_RB_KEY_EXISTS;
}
if (cd->storage_flags & OSL_FIXED_SIZE) {
if (obj->size != cd->data_size)
if (cd->storage_flags & OSL_RBTREE) {
if (search_rbtree(obj, t, col_num, NULL, NULL) > 0)
return -E_RB_KEY_EXISTS;
}
if (cd->storage_flags & OSL_FIXED_SIZE) {
if (obj->size != cd->data_size)
}
remove_rb_node(t, col_num, r);
if (cd->storage_type == OSL_NO_STORAGE) { /* TODO: If fixed size, reuse object? */
}
remove_rb_node(t, col_num, r);
if (cd->storage_type == OSL_NO_STORAGE) { /* TODO: If fixed size, reuse object? */
- ret = get_mapped_object(t, col_num, r->id, &old_obj);
+ ret = get_mapped_object(t, col_num, r->num, &old_obj);
memcpy(old_obj.data, obj->data, cd->data_size);
else { /* TODO: if the size doesn't change, use old space */
uint32_t new_data_map_size;
memcpy(old_obj.data, obj->data, cd->data_size);
else { /* TODO: if the size doesn't change, use old space */
uint32_t new_data_map_size;
- update_index_entry(index_entry, col, new_data_map_size,
+ update_cell_index(row_index, col, new_data_map_size,