48#define INDEX_READY 0x00
49#define INDEX_LOAD_NEEDED 0x01
50#define INDEX_LOAD_ERROR 0x02
52#define INDEX_API_INTERNAL 0x01
53#define INDEX_API_EXTERNAL 0x02
54#define INDEX_API_INLINE 0x04
55#define INDEX_API_COMPLETE 0x08
56#define INDEX_API_RANGE_QUERIES 0x10
62 char descriptor_file[DB_MAX_FILENAME_LENGTH];
65 struct index_api *api;
71typedef struct index index_t;
73struct index_iterator {
75 attribute_value_t min_value;
76 attribute_value_t max_value;
77 tuple_id_t next_item_no;
78 tuple_id_t found_items;
80typedef struct index_iterator index_iterator_t;
85 db_result_t (*create)(index_t *);
86 db_result_t (*destroy)(index_t *);
87 db_result_t (*load)(index_t *);
88 db_result_t (*release)(index_t *);
89 db_result_t (*insert)(index_t *, attribute_value_t *, tuple_id_t);
90 db_result_t (*
delete)(index_t *, attribute_value_t *);
91 tuple_id_t (*get_next)(index_iterator_t *);
94typedef struct index_api index_api_t;
96extern index_api_t index_inline;
97extern index_api_t index_maxheap;
98extern index_api_t index_memhash;
100void index_init(
void);
101db_result_t index_create(index_type_t, relation_t *, attribute_t *);
102db_result_t index_destroy(index_t *);
103db_result_t index_load(relation_t *, attribute_t *);
104db_result_t index_release(index_t *);
105db_result_t index_insert(index_t *, attribute_value_t *, tuple_id_t);
106db_result_t index_delete(index_t *, attribute_value_t *);
107db_result_t index_get_iterator(index_iterator_t *, index_t *,
108 attribute_value_t *, attribute_value_t *);
109tuple_id_t index_get_next(index_iterator_t *);
110int index_exists(attribute_t *);