~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/blitzdb/ha_blitz.h

Started hacking on indexing. Prep Work 1.

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
#include <drizzled/gettext.h>
32
32
#include <mysys/thr_lock.h>
33
33
#include <tchdb.h>
 
34
#include <tcbdb.h>
34
35
 
35
36
#include <string>
36
37
 
37
 
#define BLITZ_DATAFILE_EXT    ".bzd"
38
 
#define BLITZ_INDEX_FILE_EXT  ".bzx"
 
38
#define BLITZ_DATA_EXT        ".bzd"
 
39
#define BLITZ_INDEX_EXT       ".bzx"
39
40
#define BLITZ_SYSTEM_EXT      ".bzs"
40
41
#define BLITZ_MAX_ROW_STACK   2048
 
42
#define BLITZ_MAX_INDEX       1
41
43
#define BLITZ_MAX_KEY_LENGTH  128
42
44
 
43
45
using namespace std;
46
48
const string BLITZ_TABLE_PROTO_COMMENT_KEY = "table_definition_comment";
47
49
 
48
50
static const char *ha_blitz_exts[] = {
49
 
  BLITZ_DATAFILE_EXT,
50
 
  BLITZ_INDEX_FILE_EXT,
 
51
  BLITZ_DATA_EXT,
 
52
  BLITZ_INDEX_EXT,
51
53
  BLITZ_SYSTEM_EXT,
52
54
  NULL
53
55
};
73
75
  void scan_update_end();
74
76
};
75
77
 
76
 
/* Handler that takes care of all I/O to the the data dictionary
 
78
/* Handler that takes care of all I/O to the data dictionary
77
79
   that holds actual rows. */
78
80
class BlitzData {
79
81
private:
80
 
  TCHDB *data_table;          /* Where the actual row data lives */
81
 
  TCHDB *system_table;        /* Keeps track of system info */
82
 
  char *tc_meta_buffer;       /* Tokyo Cabinet's Persistent Meta Buffer */
 
82
  TCHDB *data_table;    /* Where the actual row data lives */
 
83
  TCHDB *system_table;  /* Keeps track of system info */
 
84
  char *tc_meta_buffer; /* Tokyo Cabinet's Persistent Meta Buffer */
83
85
  drizzled::atomic<uint64_t> current_hidden_row_id;
84
86
 
85
87
public:
96
98
  bool write_table_definition(TCHDB *system_table,
97
99
                              drizzled::message::Table &proto);
98
100
 
99
 
  /* DATA DICTIONARY META INFO RELATED */
 
101
  /* DATA DICTIONARY METADATA RELATED */
100
102
  uint64_t nrecords(void);
101
103
 
102
104
  /* DATA DICTIONARY READ RELATED*/
107
109
 
108
110
  /* DATA DICTIONARY WRITE RELATED */
109
111
  uint64_t next_hidden_row_id(void);
110
 
  size_t generate_table_key(char *key_buffer);
111
112
  bool overwrite_row(const char *key, const size_t klen,
112
113
                     const unsigned char *row, const size_t rlen);
113
114
  bool delete_row(const char *key, const size_t klen);
114
115
  bool delete_all_rows(void);
115
116
};
116
117
 
 
118
/* Class that reprensents a BTREE index. Takes care of all I/O
 
119
   to the b+tree index structure */
 
120
class BlitzTree {
 
121
private:
 
122
  TCBDB *btree;
 
123
  std::string filename;
 
124
 
 
125
public:
 
126
  BlitzTree() {}
 
127
  ~BlitzTree() {}
 
128
 
 
129
  /* BTREE INDEX CREATION RELATED */
 
130
  int open(const char *path, int mode);
 
131
  int create(const char *path);
 
132
  int rename(const char *from, const char *to);
 
133
  int close(void);
 
134
  
 
135
  /* BTREE METADATA RELATED */
 
136
  uint64_t records(void); 
 
137
};
 
138
 
117
139
/* Object shared among all worker threads. Try to only add
118
140
   data that will not be updated at runtime or those that
119
141
   do not require locking. */
125
147
  THR_LOCK lock;           /* Shared Drizzle Lock */
126
148
  BlitzLock blitz_lock;    /* Handler level lock for BlitzDB */
127
149
  BlitzData dict;          /* Utility class of BlitzDB */
 
150
  BlitzTree **btrees;      /* Array of BTREE indexes */
128
151
  std::string table_name;  /* Name and Length of the table */
129
152
  uint32_t use_count;      /* Reference counter of this object */
130
153
  bool fixed_length_table; /* Whether the table is fixed length */
184
207
  int critical_section_enter();
185
208
  int critical_section_exit();
186
209
 
187
 
  /* BLITZDB SPECIFIC THREAD SPECIFIC FUNCTIONS */
 
210
  /* BLITZDB THREAD SPECIFIC FUNCTIONS */
188
211
  uint32_t max_row_length(void);
 
212
  size_t generate_table_key(void);
189
213
  size_t pack_row(unsigned char *row_buffer, unsigned char *row_to_pack);
190
214
  bool unpack_row(unsigned char *to, const char *from, const size_t from_len);
191
215
  unsigned char *get_pack_buffer(const size_t size);