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