Fawkes API  Fawkes Development Version
sqlite.h
1 
2 /***************************************************************************
3  * sqlite.h - Fawkes configuration stored in a SQLite database
4  *
5  * Created: Wed Dec 06 17:20:41 2006
6  * Copyright 2006-2009 Tim Niemueller [www.niemueller.de]
7  *
8  ****************************************************************************/
9 
10 /* This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version. A runtime exception applies to
14  * this software (see LICENSE.GPL_WRE file mentioned below for details).
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Library General Public License for more details.
20  *
21  * Read the full text in the LICENSE.GPL_WRE file in the doc directory.
22  */
23 
24 #ifndef __CONFIG_SQLITE_H_
25 #define __CONFIG_SQLITE_H_
26 
27 #include <config/config.h>
28 #include <utils/system/hostinfo.h>
29 #include <list>
30 #include <string>
31 
32 struct sqlite3;
33 struct sqlite3_stmt;
34 
35 namespace fawkes {
36 
37 class Mutex;
38 
40 {
41  public:
43  SQLiteConfiguration(const char *sysconfdir, const char *userconfdir = NULL);
44  virtual ~SQLiteConfiguration();
45 
46  virtual void copy(Configuration *copyconf);
47 
48  virtual void load(const char *filename);
49 
50  virtual bool exists(const char *path);
51  virtual bool is_float(const char *path);
52  virtual bool is_uint(const char *path);
53  virtual bool is_int(const char *path);
54  virtual bool is_bool(const char *path);
55  virtual bool is_string(const char *path);
56  virtual bool is_list(const char *path);
57 
58  virtual bool is_default(const char *path);
59 
60  virtual std::string get_type(const char *path);
61  virtual float get_float(const char *path);
62  virtual unsigned int get_uint(const char *path);
63  virtual int get_int(const char *path);
64  virtual bool get_bool(const char *path);
65  virtual std::string get_string(const char *path);
66  virtual std::vector<float> get_floats(const char *path);
67  virtual std::vector<unsigned int> get_uints(const char *path);
68  virtual std::vector<int> get_ints(const char *path);
69  virtual std::vector<bool> get_bools(const char *path);
70  virtual std::vector<std::string> get_strings(const char *path);
71  virtual ValueIterator * get_value(const char *path);
72  virtual std::string get_comment(const char *path);
73  virtual std::string get_default_comment(const char *path);
74 
75  virtual void set_float(const char *path, float f);
76  virtual void set_uint(const char *path, unsigned int uint);
77  virtual void set_int(const char *path, int i);
78  virtual void set_bool(const char *path, bool b);
79  virtual void set_string(const char *path, std::string &s);
80  virtual void set_string(const char *path, const char *s);
81  virtual void set_floats(const char *path, std::vector<float> &f);
82  virtual void set_uints(const char *path, std::vector<unsigned int> &uint);
83  virtual void set_ints(const char *path, std::vector<int> &i);
84  virtual void set_bools(const char *path, std::vector<bool> &b);
85  virtual void set_strings(const char *path, std::vector<std::string> &s);
86  virtual void set_strings(const char *path, std::vector<const char *> &s);
87  virtual void set_comment(const char *path, std::string &comment);
88  virtual void set_comment(const char *path, const char *comment);
89 
90  virtual void erase(const char *path);
91 
92  virtual void set_default_float(const char *path, float f);
93  virtual void set_default_uint(const char *path, unsigned int uint);
94  virtual void set_default_int(const char *path, int i);
95  virtual void set_default_bool(const char *path, bool b);
96  virtual void set_default_string(const char *path, std::string &s);
97  virtual void set_default_string(const char *path, const char *s);
98  virtual void set_default_comment(const char *path, const char *comment);
99  virtual void set_default_comment(const char *path, std::string &comment);
100 
101  virtual void erase_default(const char *path);
102 
103  /** Transaction type.
104  * See SQLite Documentation for BEGIN TRANSACTION.
105  */
106  typedef enum {
107  TRANSACTION_DEFERRED, /**< Deferred transaction, lock acquired late. */
108  TRANSACTION_IMMEDIATE, /**< Immediately acquire lock, reading remains possible. */
109  TRANSACTION_EXCLUSIVE /**< Immediately acquire lock, no more reading or writing possible. */
111 
112  void transaction_begin(transaction_type_t ttype = TRANSACTION_DEFERRED);
113  void transaction_commit();
114  void transaction_rollback();
115 
116  public:
118  {
119  friend class SQLiteConfiguration;
120  protected:
121  SQLiteValueIterator(::sqlite3_stmt *stmt, void *p = NULL);
122  public:
123  virtual ~SQLiteValueIterator();
124  virtual bool next();
125  virtual bool valid() const;
126 
127  virtual const char * path() const;
128  virtual const char * type() const;
129 
130  virtual bool is_float() const;
131  virtual bool is_uint() const;
132  virtual bool is_int() const;
133  virtual bool is_bool() const;
134  virtual bool is_string() const;
135  virtual bool is_list() const;
136  virtual size_t get_list_size() const;
137 
138  virtual bool is_default() const;
139 
140  virtual float get_float() const;
141  virtual unsigned int get_uint() const;
142  virtual int get_int() const;
143  virtual bool get_bool() const;
144  virtual std::string get_string() const;
145  virtual std::vector<float> get_floats() const;
146  virtual std::vector<unsigned int> get_uints() const;
147  virtual std::vector<int> get_ints() const;
148  virtual std::vector<bool> get_bools() const;
149  virtual std::vector<std::string> get_strings() const;
150 
151  virtual std::string get_as_string() const;
152 
153  virtual std::string get_comment() const;
154 
155  std::string get_modtype() const;
156  std::string get_oldvalue() const;
157 
158  private:
159  ::sqlite3_stmt *__stmt;
160  void *__p;
161  };
162 
166  ValueIterator * search(const char *path);
167 
168  void lock();
169  bool try_lock();
170  void unlock();
171 
173 
174  void try_dump();
175 
176  private:
177  void init_dbs();
178  ::sqlite3_stmt * get_typed_value(const char *path, const char *type);
179  ::sqlite3_stmt * prepare_update(const char *sql, const char *path);
180  ::sqlite3_stmt * prepare_insert_value(const char *sql, const char *type,
181  const char *path);
182  void execute_insert_or_update(sqlite3_stmt *stmt);
183  void dump(::sqlite3 *tdb, const char *dumpfile);
184  void import(::sqlite3 *tdb, const char *dumpfile);
185  void import_default(const char *default_dump);
186  void attach_default(const char *db_file);
187 
188  private:
189  ::sqlite3 *db;
190  bool opened;
191  Mutex *mutex;
192 
193  char *__sysconfdir;
194  char *__userconfdir;
195  char *__host_file;
196  char *__default_file;
197  char *__default_sql;
198 };
199 
200 } // end namespace fawkes
201 
202 #endif
Deferred transaction, lock acquired late.
Definition: sqlite.h:107
void lock()
Lock the config.
Definition: sqlite.cpp:1869
virtual void erase(const char *path)
Erase the given value from the configuration.
Definition: sqlite.cpp:1517
virtual std::string get_string(const char *path)
Get value from configuration which is of type string.
Definition: sqlite.cpp:1056
virtual bool is_default(const char *path)
Check if a value was read from the default config.
Definition: sqlite.cpp:908
ValueIterator * iterator()
Iterator for all values.
Definition: sqlite.cpp:1896
virtual bool is_list(const char *path)
Check if a value is a list.
Definition: sqlite.cpp:901
virtual int get_int(const char *path)
Get value from configuration which is of type int.
Definition: sqlite.cpp:1019
virtual int get_int() const
Get int value.
Definition: sqlite.cpp:2168
virtual bool is_bool() const
Check if current value is a bool.
Definition: sqlite.cpp:2107
virtual unsigned int get_uint() const
Get unsigned int value.
Definition: sqlite.cpp:2153
SQLite configuration value iterator.
Definition: sqlite.h:117
SQLiteConfiguration()
Constructor.
Definition: sqlite.cpp:205
virtual bool get_bool(const char *path)
Get value from configuration which is of type bool.
Definition: sqlite.cpp:1038
virtual std::vector< std::string > get_strings() const
Get list of values from configuration which is of type string.
Definition: sqlite.cpp:2217
Configuration storage using SQLite.
Definition: sqlite.h:39
virtual std::vector< float > get_floats(const char *path)
Get list of values from configuration which is of type float.
Definition: sqlite.cpp:1078
Fawkes library namespace.
virtual std::vector< int > get_ints() const
Get list of values from configuration which is of type int.
Definition: sqlite.cpp:2205
virtual void set_bools(const char *path, std::vector< bool > &b)
Set new value in configuration of type bool.
Definition: sqlite.cpp:1455
virtual std::string get_default_comment(const char *path)
Get comment of value at given path.
Definition: sqlite.cpp:836
ValueIterator * search(const char *path)
Iterator with search results.
Definition: sqlite.cpp:1980
virtual unsigned int get_uint(const char *path)
Get value from configuration which is of type unsigned int.
Definition: sqlite.cpp:996
virtual void set_default_bool(const char *path, bool b)
Set new default value in configuration of type bool.
Definition: sqlite.cpp:1688
virtual std::vector< float > get_floats() const
Get list of values from configuration which is of type float.
Definition: sqlite.cpp:2193
virtual std::string get_as_string() const
Get value as string.
Definition: sqlite.cpp:2226
bool try_lock()
Try to lock the config.
Definition: sqlite.cpp:1880
virtual size_t get_list_size() const
Get number of elements in list value.
Definition: sqlite.cpp:2127
virtual std::string get_comment(const char *path)
Get comment of value at given path.
Definition: sqlite.cpp:806
virtual bool is_string() const
Check if current value is a string.
Definition: sqlite.cpp:2114
void transaction_begin(transaction_type_t ttype=TRANSACTION_DEFERRED)
Begin SQL Transaction.
Definition: sqlite.cpp:511
virtual void set_default_float(const char *path, float f)
Set new default value in configuration of type float.
Definition: sqlite.cpp:1544
virtual void copy(Configuration *copyconf)
Copy all values from the given configuration.
Definition: sqlite.cpp:718
virtual void set_strings(const char *path, std::vector< std::string > &s)
Set new value in configuration of type string.
Definition: sqlite.cpp:1461
void try_dump()
Try to dump default configuration.
Definition: sqlite.cpp:394
virtual void load(const char *filename)
Load configuration.
Definition: sqlite.cpp:570
virtual std::string get_string() const
Get string value.
Definition: sqlite.cpp:2186
virtual void set_default_string(const char *path, std::string &s)
Set new default value in configuration of type string.
Definition: sqlite.cpp:1788
virtual bool is_int(const char *path)
Check if a value is of type int.
Definition: sqlite.cpp:880
virtual ~SQLiteConfiguration()
Destructor.
Definition: sqlite.cpp:251
virtual std::vector< unsigned int > get_uints(const char *path)
Get list of values from configuration which is of type unsigned int.
Definition: sqlite.cpp:1085
virtual std::vector< bool > get_bools(const char *path)
Get list of values from configuration which is of type bool.
Definition: sqlite.cpp:1098
virtual float get_float(const char *path)
Get value from configuration which is of type float.
Definition: sqlite.cpp:977
virtual std::string get_type(const char *path)
Get type of value at given path.
Definition: sqlite.cpp:772
virtual bool is_uint(const char *path)
Check if a value is of type unsigned int.
Definition: sqlite.cpp:873
virtual bool is_uint() const
Check if current value is a unsigned int.
Definition: sqlite.cpp:2094
virtual void set_float(const char *path, float f)
Set new value in configuration of type float.
Definition: sqlite.cpp:1183
virtual bool is_string(const char *path)
Check if a value is of type string.
Definition: sqlite.cpp:894
Immediately acquire lock, no more reading or writing possible.
Definition: sqlite.h:109
std::string get_oldvalue() const
Get old value (as string).
Definition: sqlite.cpp:2264
virtual bool next()
Check if there is another element and advance to this if possible.
Definition: sqlite.cpp:2041
virtual void set_default_comment(const char *path, const char *comment)
Set new default comment for existing default configuration value.
Definition: sqlite.cpp:1795
virtual void set_int(const char *path, int i)
Set new value in configuration of type int.
Definition: sqlite.cpp:1280
virtual bool is_list() const
Check if a value is a list.
Definition: sqlite.cpp:2120
virtual std::vector< int > get_ints(const char *path)
Get list of values from configuration which is of type int.
Definition: sqlite.cpp:1092
virtual void set_bool(const char *path, bool b)
Set new value in configuration of type bool.
Definition: sqlite.cpp:1329
void transaction_rollback()
Rollback SQL Transaction.
Definition: sqlite.cpp:541
virtual bool is_int() const
Check if current value is a int.
Definition: sqlite.cpp:2100
virtual bool exists(const char *path)
Check if a given value exists.
Definition: sqlite.cpp:744
virtual const char * type() const
Type of value.
Definition: sqlite.cpp:2080
virtual std::vector< bool > get_bools() const
Get list of values from configuration which is of type bool.
Definition: sqlite.cpp:2211
virtual bool is_bool(const char *path)
Check if a value is of type bool.
Definition: sqlite.cpp:887
virtual bool is_float(const char *path)
Check if a value is of type float.
Definition: sqlite.cpp:866
virtual ValueIterator * get_value(const char *path)
Get value from configuration.
Definition: sqlite.cpp:1111
ValueIterator * iterator_default()
Iterator for all default values.
Definition: sqlite.cpp:1917
virtual std::vector< unsigned int > get_uints() const
Get list of values from configuration which is of type unsigned int.
Definition: sqlite.cpp:2199
virtual bool valid() const
Check if the current element is valid.
Definition: sqlite.cpp:2060
std::string get_modtype() const
Get modification type.
Definition: sqlite.cpp:2248
virtual bool is_default() const
Check if current value was read from the default config.
Definition: sqlite.cpp:2133
ValueIterator * iterator_hostspecific()
Iterator for all host-specific values.
Definition: sqlite.cpp:1937
virtual void set_floats(const char *path, std::vector< float > &f)
Set new value in configuration of type float.
Definition: sqlite.cpp:1437
Iterator interface to iterate over config values.
Definition: config.h:72
void unlock()
Unlock the config.
Definition: sqlite.cpp:1889
virtual void set_uint(const char *path, unsigned int uint)
Set new value in configuration of type unsigned int.
Definition: sqlite.cpp:1232
virtual void set_default_uint(const char *path, unsigned int uint)
Set new default value in configuration of type unsigned int.
Definition: sqlite.cpp:1593
virtual void set_string(const char *path, std::string &s)
Set new value in configuration of type string.
Definition: sqlite.cpp:1430
virtual void set_ints(const char *path, std::vector< int > &i)
Set new value in configuration of type int.
Definition: sqlite.cpp:1449
virtual void erase_default(const char *path)
Erase the given default value from the configuration.
Definition: sqlite.cpp:1838
void transaction_commit()
Commit SQL Transaction.
Definition: sqlite.cpp:528
virtual std::vector< std::string > get_strings(const char *path)
Get list of values from configuration which is of type string.
Definition: sqlite.cpp:1104
virtual void set_uints(const char *path, std::vector< unsigned int > &uint)
Set new value in configuration of type unsigned int.
Definition: sqlite.cpp:1443
virtual bool get_bool() const
Get bool value.
Definition: sqlite.cpp:2177
Mutex mutual exclusion lock.
Definition: mutex.h:32
virtual bool is_float() const
Check if current value is a float.
Definition: sqlite.cpp:2087
virtual const char * path() const
Path of value.
Definition: sqlite.cpp:2070
virtual float get_float() const
Get float value.
Definition: sqlite.cpp:2143
Interface for configuration handling.
Definition: config.h:67
virtual void set_comment(const char *path, std::string &comment)
Set new comment for existing value.
Definition: sqlite.cpp:1510
virtual std::string get_comment() const
Get comment.
Definition: sqlite.cpp:2235
SQLiteValueIterator(::sqlite3_stmt *stmt, void *p=NULL)
Constructor.
Definition: sqlite.cpp:2016
Immediately acquire lock, reading remains possible.
Definition: sqlite.h:108
transaction_type_t
Transaction type.
Definition: sqlite.h:106
SQLiteValueIterator * modified_iterator()
Iterator for modified values.
Definition: sqlite.cpp:1955
virtual void set_default_int(const char *path, int i)
Set new default value in configuration of type int.
Definition: sqlite.cpp:1641