1 #ifndef NDBMEMCACHE_TABLESPEC_H
2 #define NDBMEMCACHE_TABLESPEC_H
3
4 #ifndef __cplusplus
5 #error "This file is for C++ only"
6 #endif
7
8 #include "config.h"
9
10 /** @class TableSpec
11 * @brief In-memory representation of a containers record from the
12 * configuration.
13 */
14 class TableSpec {
15 public:
16 /* Public Constructors */
17 TableSpec(int nkeys, int nvals);
18 TableSpec(const char *db, const char *tab, int nkeys, int nvals);
19 TableSpec(const char *sqltabname, const char *keycols, const char *valcols);
20 TableSpec(const TableSpec &);
21
22 /* Other Public Methods */
23 ~TableSpec();
24 void setTable(const char *db, const char *table);
25 void setKeyColumns(const char *col1, ...);
26 void setValueColumns(const char *col1, ...);
27
28 /* Public instance variables */
29 const char *schema_name;
30 const char *table_name;
31 const char *math_column;
32 const char *flags_column;
33 const char *cas_column;
34 const char *exp_column;
35 const char **const key_columns;
36 const char **const value_columns;
37 int nkeycols;
38 int nvaluecols;
39 uint32_t static_flags;
40
41 private:
42 /* private instance variables */
43 struct {
44 unsigned none : 1;
45 unsigned schema_name : 1;
46 unsigned table_name : 1;
47 unsigned first_key : 1;
48 unsigned all_key_cols : 1;
49 unsigned first_val : 1;
50 unsigned all_val_cols : 1;
51 unsigned special_cols : 1;
52 } must_free;
53
54 /* private class methods */
55 static int build_column_list(const char **const &array, const char *list);
56 };
57
58 /* Inline functions */
59
TableSpec(int nkeys,int nvals)60 inline TableSpec::TableSpec(int nkeys, int nvals)
61 : nkeycols(nkeys),
62 nvaluecols(nvals),
63 schema_name(0),
64 table_name(0),
65 math_column(0),
66 flags_column(0),
67 cas_column(0),
68 exp_column(0),
69 static_flags(0),
70 key_columns(new const char *[nkeys]),
71 value_columns(new const char *[nvals]) {
72 must_free.none = 1;
73 };
74
TableSpec(const char * db,const char * tab,int nkeys,int nvals)75 inline TableSpec::TableSpec(const char *db, const char *tab, int nkeys,
76 int nvals)
77 : schema_name(db),
78 table_name(tab),
79 nkeycols(nkeys),
80 nvaluecols(nvals),
81 static_flags(0),
82 math_column(0),
83 flags_column(0),
84 cas_column(0),
85 exp_column(0),
86 key_columns(new const char *[nkeys]),
87 value_columns(new const char *[nvals]) {
88 must_free.none = 1;
89 };
90
setTable(const char * db,const char * table)91 inline void TableSpec::setTable(const char *db, const char *table) {
92 schema_name = db;
93 table_name = table;
94 }
95
96 #endif
97