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 configuration.
12 */
13 class TableSpec {
14
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
59 /* Inline functions */
60
TableSpec(int nkeys,int nvals)61 inline TableSpec::TableSpec(int nkeys, int nvals) :
62 nkeycols(nkeys),
63 nvaluecols(nvals),
64 schema_name(0), table_name(0),
65 math_column(0), flags_column(0),
66 cas_column(0), exp_column(0), static_flags(0),
67 key_columns(new const char *[nkeys]),
68 value_columns(new const char *[nvals]) {
69 must_free.none = 1;
70 };
71
72
TableSpec(const char * db,const char * tab,int nkeys,int nvals)73 inline TableSpec::TableSpec(const char *db, const char *tab,
74 int nkeys, int nvals) :
75 schema_name(db),
76 table_name(tab),
77 nkeycols(nkeys),
78 nvaluecols(nvals), static_flags(0),
79 math_column(0), flags_column(0),
80 cas_column(0), exp_column(0),
81 key_columns(new const char *[nkeys]),
82 value_columns(new const char *[nvals]) {
83 must_free.none = 1;
84 };
85
setTable(const char * db,const char * table)86 inline void TableSpec::setTable(const char *db, const char *table) {
87 schema_name = db;
88 table_name = table;
89 }
90
91
92 #endif
93
94
95