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