1 2 /* 3 This file is a "bridge" interface between cassandra+Thrift and MariaDB. 4 5 It is #included by both sides, so it must itself include neither (including 6 both together causes compile errors due to conflicts). 7 */ 8 9 struct st_mysql_lex_string; 10 typedef struct st_mysql_lex_string LEX_STRING; 11 12 /* We need to define this here so that ha_cassandra.cc also has access to it */ 13 typedef enum 14 { 15 ONE = 1-1, 16 QUORUM = 2-1, 17 LOCAL_QUORUM = 3-1, 18 EACH_QUORUM = 4-1, 19 ALL = 5-1, 20 ANY = 6-1, 21 TWO = 7-1, 22 THREE = 8-1, 23 } enum_cassandra_consistency_level; 24 25 26 class Column_name_enumerator 27 { 28 public: 29 virtual const char* get_next_name()=0; ~Column_name_enumerator()30 virtual ~Column_name_enumerator(){} 31 }; 32 33 /* 34 Interface to one cassandra column family, i.e. one 'table' 35 */ 36 class Cassandra_se_interface 37 { 38 public: Cassandra_se_interface()39 Cassandra_se_interface() { err_buffer[0]=0; } 40 ~Cassandra_se_interface()41 virtual ~Cassandra_se_interface(){}; 42 /* Init */ 43 virtual bool connect(const char *host, int port, const char *keyspace)=0; 44 virtual void set_column_family(const char *cfname) = 0; 45 46 /* Settings */ 47 virtual void set_consistency_levels(unsigned long read_cons_level, unsigned long write_cons_level)=0; 48 virtual void set_n_retries(uint retries_arg)=0; 49 50 /* Check underlying DDL */ 51 virtual bool setup_ddl_checks()=0; 52 virtual void first_ddl_column()=0; 53 virtual bool next_ddl_column(char **name, int *name_len, char **value, 54 int *value_len)=0; 55 virtual void get_rowkey_type(char **name, char **type)=0; 56 virtual size_t get_ddl_size()=0; 57 virtual const char* get_default_validator()=0; 58 59 /* Writes */ 60 virtual void clear_insert_buffer()=0; 61 virtual void add_row_deletion(const char *key, int key_len, 62 Column_name_enumerator *col_names, 63 LEX_STRING *names, uint nnames)=0; 64 virtual void start_row_insert(const char *key, int key_len)=0; 65 virtual void add_insert_delete_column(const char *name, int name_len)= 0; 66 virtual void add_insert_column(const char *name, int name_len, 67 const char *value, 68 int value_len)=0; 69 virtual bool do_insert()=0; 70 71 /* Reads */ 72 virtual bool get_slice(char *key, size_t key_len, bool *found)=0 ; 73 virtual bool get_next_read_column(char **name, int *name_len, 74 char **value, int *value_len)=0; 75 virtual void get_read_rowkey(char **value, int *value_len)=0; 76 77 /* Reads, multi-row scans */ 78 int read_batch_size; 79 virtual bool get_range_slices(bool last_key_as_start_key)=0; 80 virtual void finish_reading_range_slices()=0; 81 virtual bool get_next_range_slice_row(bool *eof)=0; 82 83 /* Reads, MRR scans */ 84 virtual void new_lookup_keys()=0; 85 virtual int add_lookup_key(const char *key, size_t key_len)=0; 86 virtual bool multiget_slice()=0; 87 virtual bool get_next_multiget_row()=0; 88 89 /* read_set setup */ 90 virtual void clear_read_columns()=0; 91 virtual void clear_read_all_columns()=0; 92 virtual void add_read_column(const char *name)=0; 93 94 virtual bool truncate()=0; 95 virtual bool remove_row()=0; 96 97 /* Passing error messages up to ha_cassandra */ 98 char err_buffer[512]; error_str()99 const char *error_str() { return err_buffer; } 100 void print_error(const char *format, ...); 101 }; 102 103 104 /* A structure with global counters */ 105 class Cassandra_status_vars 106 { 107 public: 108 unsigned long row_inserts; 109 unsigned long row_insert_batches; 110 111 unsigned long multiget_reads; 112 unsigned long multiget_keys_scanned; 113 unsigned long multiget_rows_read; 114 115 unsigned long timeout_exceptions; 116 unsigned long unavailable_exceptions; 117 unsigned long network_exceptions; 118 }; 119 120 121 extern Cassandra_status_vars cassandra_counters; 122 123 124 Cassandra_se_interface *create_cassandra_se(); 125 126