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 
30 #include <list>
31 #include <string>
32 
33 struct sqlite3;
34 struct sqlite3_stmt;
35 
36 namespace fawkes {
37 
38 class Mutex;
39 
41 {
42 public:
44  SQLiteConfiguration(const char *sysconfdir, const char *userconfdir = NULL);
45  virtual ~SQLiteConfiguration();
46 
47  virtual void copy(Configuration *copyconf);
48 
49  virtual void load(const char *filename);
50 
51  virtual bool exists(const char *path);
52  virtual bool is_float(const char *path);
53  virtual bool is_uint(const char *path);
54  virtual bool is_int(const char *path);
55  virtual bool is_bool(const char *path);
56  virtual bool is_string(const char *path);
57  virtual bool is_list(const char *path);
58 
59  virtual bool is_default(const char *path);
60 
61  virtual std::string get_type(const char *path);
62  virtual float get_float(const char *path);
63  virtual unsigned int get_uint(const char *path);
64  virtual int get_int(const char *path);
65  virtual bool get_bool(const char *path);
66  virtual std::string get_string(const char *path);
67  virtual std::vector<float> get_floats(const char *path);
68  virtual std::vector<unsigned int> get_uints(const char *path);
69  virtual std::vector<int> get_ints(const char *path);
70  virtual std::vector<bool> get_bools(const char *path);
71  virtual std::vector<std::string> get_strings(const char *path);
72  virtual ValueIterator * get_value(const char *path);
73  virtual std::string get_comment(const char *path);
74  virtual std::string get_default_comment(const char *path);
75 
76  virtual void set_float(const char *path, float f);
77  virtual void set_uint(const char *path, unsigned int uint);
78  virtual void set_int(const char *path, int i);
79  virtual void set_bool(const char *path, bool b);
80  virtual void set_string(const char *path, std::string &s);
81  virtual void set_string(const char *path, const char *s);
82  virtual void set_floats(const char *path, std::vector<float> &f);
83  virtual void set_uints(const char *path, std::vector<unsigned int> &uint);
84  virtual void set_ints(const char *path, std::vector<int> &i);
85  virtual void set_bools(const char *path, std::vector<bool> &b);
86  virtual void set_strings(const char *path, std::vector<std::string> &s);
87  virtual void set_strings(const char *path, std::vector<const char *> &s);
88  virtual void set_comment(const char *path, std::string &comment);
89  virtual void set_comment(const char *path, const char *comment);
90 
91  virtual void erase(const char *path);
92 
93  virtual void set_default_float(const char *path, float f);
94  virtual void set_default_uint(const char *path, unsigned int uint);
95  virtual void set_default_int(const char *path, int i);
96  virtual void set_default_bool(const char *path, bool b);
97  virtual void set_default_string(const char *path, std::string &s);
98  virtual void set_default_string(const char *path, const char *s);
99  virtual void set_default_comment(const char *path, const char *comment);
100  virtual void set_default_comment(const char *path, std::string &comment);
101 
102  virtual void erase_default(const char *path);
103 
104  /** Transaction type.
105  * See SQLite Documentation for BEGIN TRANSACTION.
106  */
107  typedef enum {
108  TRANSACTION_DEFERRED, /**< Deferred transaction, lock acquired late. */
109  TRANSACTION_IMMEDIATE, /**< Immediately acquire lock, reading remains possible. */
110  TRANSACTION_EXCLUSIVE /**< Immediately acquire lock, no more reading or writing possible. */
112 
114  void transaction_commit();
115  void transaction_rollback();
116 
117 public:
119  {
120  friend SQLiteConfiguration;
121 
122  protected:
123  SQLiteValueIterator(::sqlite3_stmt *stmt, void *p = NULL);
124 
125  public:
126  virtual ~SQLiteValueIterator();
127  virtual bool next();
128  virtual bool valid() const;
129 
130  virtual const char *path() const;
131  virtual const char *type() const;
132 
133  virtual bool is_float() const;
134  virtual bool is_uint() const;
135  virtual bool is_int() const;
136  virtual bool is_bool() const;
137  virtual bool is_string() const;
138  virtual bool is_list() const;
139  virtual size_t get_list_size() const;
140 
141  virtual bool is_default() const;
142 
143  virtual float get_float() const;
144  virtual unsigned int get_uint() const;
145  virtual int get_int() const;
146  virtual bool get_bool() const;
147  virtual std::string get_string() const;
148  virtual std::vector<float> get_floats() const;
149  virtual std::vector<unsigned int> get_uints() const;
150  virtual std::vector<int> get_ints() const;
151  virtual std::vector<bool> get_bools() const;
152  virtual std::vector<std::string> get_strings() const;
153 
154  virtual std::string get_as_string() const;
155 
156  virtual std::string get_comment() const;
157 
158  std::string get_modtype() const;
159  std::string get_oldvalue() const;
160 
161  private:
162  ::sqlite3_stmt *stmt_;
163  void * p_;
164  };
165 
169  ValueIterator *search(const char *path);
170 
171  void lock();
172  bool try_lock();
173  void unlock();
174 
176 
177  void try_dump();
178 
179 private:
180  void init_dbs();
181  ::sqlite3_stmt *get_typed_value(const char *path, const char *type);
182  ::sqlite3_stmt *prepare_update(const char *sql, const char *path);
183  ::sqlite3_stmt *prepare_insert_value(const char *sql, const char *type, const char *path);
184  void execute_insert_or_update(sqlite3_stmt *stmt);
185  void dump(::sqlite3 *tdb, const char *dumpfile);
186  void import(::sqlite3 *tdb, const char *dumpfile);
187  void import_default(const char *default_dump);
188  void attach_default(const char *db_file);
189 
190 private:
191  ::sqlite3 *db;
192  bool opened;
193  Mutex * mutex;
194 
195  char *sysconfdir_;
196  char *userconfdir_;
197  char *host_file_;
198  char *default_file_;
199  char *default_sql_;
200 };
201 
202 } // end namespace fawkes
203 
204 #endif
fawkes::SQLiteConfiguration::iterator
ValueIterator * iterator()
Definition: sqlite.cpp:1868
fawkes::SQLiteConfiguration::modified_iterator
SQLiteValueIterator * modified_iterator()
Iterator for modified values.
Definition: sqlite.cpp:1926
fawkes::SQLiteConfiguration::TRANSACTION_DEFERRED
Deferred transaction, lock acquired late.
Definition: sqlite.h:107
fawkes::SQLiteConfiguration::set_default_int
virtual void set_default_int(const char *path, int i)
Definition: sqlite.cpp:1616
fawkes::SQLiteConfiguration::SQLiteValueIterator::valid
virtual bool valid() const
Check if the current element is valid.
Definition: sqlite.cpp:2028
fawkes::SQLiteConfiguration::get_string
virtual std::string get_string(const char *path)
Definition: sqlite.cpp:1039
fawkes::SQLiteConfiguration::SQLiteConfiguration
SQLiteConfiguration()
Constructor.
Definition: sqlite.cpp:186
fawkes::SQLiteConfiguration::get_bool
virtual bool get_bool(const char *path)
Definition: sqlite.cpp:1021
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_modtype
std::string get_modtype() const
Get modification type.
Definition: sqlite.cpp:2205
fawkes::SQLiteConfiguration::TRANSACTION_EXCLUSIVE
Immediately acquire lock, no more reading or writing possible.
Definition: sqlite.h:109
fawkes::SQLiteConfiguration::is_default
virtual bool is_default(const char *path)
Definition: sqlite.cpp:897
fawkes::SQLiteConfiguration::get_int
virtual int get_int(const char *path)
Definition: sqlite.cpp:1003
fawkes::Mutex
Definition: mutex.h:36
fawkes::SQLiteConfiguration::get_floats
virtual std::vector< float > get_floats(const char *path)
Definition: sqlite.cpp:1059
fawkes::SQLiteConfiguration::is_list
virtual bool is_list(const char *path)
Definition: sqlite.cpp:891
fawkes::SQLiteConfiguration::set_bools
virtual void set_bools(const char *path, std::vector< bool > &b)
Definition: sqlite.cpp:1430
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_oldvalue
std::string get_oldvalue() const
Get old value (as string).
Definition: sqlite.cpp:2219
fawkes::SQLiteConfiguration::SQLiteValueIterator::next
virtual bool next()
Definition: sqlite.cpp:2008
fawkes::SQLiteConfiguration::search
ValueIterator * search(const char *path)
Iterator with search results.
Definition: sqlite.cpp:1950
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_uints
virtual std::vector< unsigned int > get_uints() const
Definition: sqlite.cpp:2156
fawkes::SQLiteConfiguration::get_default_comment
virtual std::string get_default_comment(const char *path)
Definition: sqlite.cpp:832
fawkes::SQLiteConfiguration::SQLiteValueIterator::type
virtual const char * type() const
Type of value.
Definition: sqlite.cpp:2046
fawkes::SQLiteConfiguration::SQLiteValueIterator::is_list
virtual bool is_list() const
Definition: sqlite.cpp:2082
fawkes::SQLiteConfiguration::try_lock
bool try_lock()
Try to lock the config.
Definition: sqlite.cpp:1853
fawkes::SQLiteConfiguration::get_comment
virtual std::string get_comment(const char *path)
Definition: sqlite.cpp:803
fawkes::SQLiteConfiguration::get_uint
virtual unsigned int get_uint(const char *path)
Definition: sqlite.cpp:981
fawkes::SQLiteConfiguration::set_default_bool
virtual void set_default_bool(const char *path, bool b)
Definition: sqlite.cpp:1664
fawkes::SQLiteConfiguration::try_dump
void try_dump()
Try to dump default configuration.
Definition: sqlite.cpp:375
fawkes::SQLiteConfiguration::load
virtual void load(const char *filename)
Definition: sqlite.cpp:563
fawkes::SQLiteConfiguration::SQLiteValueIterator::is_float
virtual bool is_float() const
Definition: sqlite.cpp:2052
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_bools
virtual std::vector< bool > get_bools() const
Definition: sqlite.cpp:2168
fawkes::SQLiteConfiguration::SQLiteValueIterator
Definition: sqlite.h:117
fawkes::SQLiteConfiguration::is_int
virtual bool is_int(const char *path)
Definition: sqlite.cpp:873
fawkes::SQLiteConfiguration::set_default_string
virtual void set_default_string(const char *path, std::string &s)
Definition: sqlite.cpp:1765
fawkes::Configuration::ValueIterator
Definition: config.h:75
fawkes::SQLiteConfiguration::get_uints
virtual std::vector< unsigned int > get_uints(const char *path)
Definition: sqlite.cpp:1065
fawkes::Configuration
Definition: config.h:68
fawkes::SQLiteConfiguration::SQLiteValueIterator::is_default
virtual bool is_default() const
Definition: sqlite.cpp:2094
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_bool
virtual bool get_bool() const
Get bool value.
Definition: sqlite.cpp:2135
fawkes::SQLiteConfiguration::get_bools
virtual std::vector< bool > get_bools(const char *path)
Definition: sqlite.cpp:1077
fawkes::SQLiteConfiguration::get_float
virtual float get_float(const char *path)
Definition: sqlite.cpp:963
fawkes::SQLiteConfiguration::set_default_float
virtual void set_default_float(const char *path, float f)
Definition: sqlite.cpp:1517
fawkes::SQLiteConfiguration::copy
virtual void copy(Configuration *copyconf)
Copy all values from the given configuration.
Definition: sqlite.cpp:718
fawkes::SQLiteConfiguration::transaction_begin
void transaction_begin(transaction_type_t ttype=TRANSACTION_DEFERRED)
Begin SQL Transaction.
Definition: sqlite.cpp:506
fawkes::SQLiteConfiguration::set_strings
virtual void set_strings(const char *path, std::vector< std::string > &s)
Definition: sqlite.cpp:1436
fawkes::SQLiteConfiguration::is_uint
virtual bool is_uint(const char *path)
Definition: sqlite.cpp:867
fawkes::SQLiteConfiguration::set_float
virtual void set_float(const char *path, float f)
Definition: sqlite.cpp:1155
fawkes::SQLiteConfiguration::is_string
virtual bool is_string(const char *path)
Definition: sqlite.cpp:885
fawkes::SQLiteConfiguration::set_default_comment
virtual void set_default_comment(const char *path, const char *comment)
Definition: sqlite.cpp:1771
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_comment
virtual std::string get_comment() const
Get comment.
Definition: sqlite.cpp:2192
fawkes::SQLiteConfiguration::~SQLiteConfiguration
virtual ~SQLiteConfiguration()
Destructor.
Definition: sqlite.cpp:230
fawkes::SQLiteConfiguration::SQLiteValueIterator::SQLiteValueIterator
SQLiteValueIterator(::sqlite3_stmt *stmt, void *p=NULL)
Constructor.
Definition: sqlite.cpp:1985
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_strings
virtual std::vector< std::string > get_strings() const
Definition: sqlite.cpp:2174
fawkes::SQLiteConfiguration::get_type
virtual std::string get_type(const char *path)
Definition: sqlite.cpp:770
fawkes::SQLiteConfiguration::get_ints
virtual std::vector< int > get_ints(const char *path)
Definition: sqlite.cpp:1071
fawkes::SQLiteConfiguration::SQLiteValueIterator::path
virtual const char * path() const
Path of value.
Definition: sqlite.cpp:2037
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_float
virtual float get_float() const
Get float value.
Definition: sqlite.cpp:2103
fawkes
fawkes::SQLiteConfiguration::set_bool
virtual void set_bool(const char *path, bool b)
Definition: sqlite.cpp:1304
fawkes::SQLiteConfiguration::SQLiteValueIterator::is_bool
virtual bool is_bool() const
Definition: sqlite.cpp:2070
fawkes::SQLiteConfiguration::transaction_rollback
void transaction_rollback()
Rollback SQL Transaction.
Definition: sqlite.cpp:535
fawkes::SQLiteConfiguration::exists
virtual bool exists(const char *path)
Definition: sqlite.cpp:743
fawkes::SQLiteConfiguration::set_int
virtual void set_int(const char *path, int i)
Definition: sqlite.cpp:1254
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_int
virtual int get_int() const
Get int value.
Definition: sqlite.cpp:2126
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_uint
virtual unsigned int get_uint() const
Get unsigned int value.
Definition: sqlite.cpp:2112
fawkes::SQLiteConfiguration::is_bool
virtual bool is_bool(const char *path)
Definition: sqlite.cpp:879
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_list_size
virtual size_t get_list_size() const
Definition: sqlite.cpp:2088
fawkes::SQLiteConfiguration::iterator_hostspecific
ValueIterator * iterator_hostspecific()
Iterator for all host-specific values.
Definition: sqlite.cpp:1908
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_floats
virtual std::vector< float > get_floats() const
Definition: sqlite.cpp:2150
fawkes::SQLiteConfiguration::set_uint
virtual void set_uint(const char *path, unsigned int uint)
Definition: sqlite.cpp:1205
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_ints
virtual std::vector< int > get_ints() const
Definition: sqlite.cpp:2162
fawkes::SQLiteConfiguration::is_float
virtual bool is_float(const char *path)
Definition: sqlite.cpp:861
fawkes::SQLiteConfiguration::set_ints
virtual void set_ints(const char *path, std::vector< int > &i)
Definition: sqlite.cpp:1424
fawkes::SQLiteConfiguration::set_string
virtual void set_string(const char *path, std::string &s)
Definition: sqlite.cpp:1406
fawkes::SQLiteConfiguration::transaction_commit
void transaction_commit()
Commit SQL Transaction.
Definition: sqlite.cpp:523
fawkes::SQLiteConfiguration::iterator_default
ValueIterator * iterator_default()
Iterator for all default values.
Definition: sqlite.cpp:1888
fawkes::SQLiteConfiguration::erase_default
virtual void erase_default(const char *path)
Definition: sqlite.cpp:1813
fawkes::SQLiteConfiguration::get_value
virtual ValueIterator * get_value(const char *path)
Definition: sqlite.cpp:1089
fawkes::SQLiteConfiguration::get_strings
virtual std::vector< std::string > get_strings(const char *path)
Definition: sqlite.cpp:1083
fawkes::SQLiteConfiguration::SQLiteValueIterator::is_string
virtual bool is_string() const
Definition: sqlite.cpp:2076
fawkes::SQLiteConfiguration::unlock
void unlock()
Unlock the config.
Definition: sqlite.cpp:1862
fawkes::SQLiteConfiguration::set_floats
virtual void set_floats(const char *path, std::vector< float > &f)
Definition: sqlite.cpp:1412
fawkes::SQLiteConfiguration::set_uints
virtual void set_uints(const char *path, std::vector< unsigned int > &uint)
Definition: sqlite.cpp:1418
fawkes::SQLiteConfiguration::set_default_uint
virtual void set_default_uint(const char *path, unsigned int uint)
Definition: sqlite.cpp:1567
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_string
virtual std::string get_string() const
Get string value.
Definition: sqlite.cpp:2144
fawkes::SQLiteConfiguration::set_comment
virtual void set_comment(const char *path, std::string &comment)
Definition: sqlite.cpp:1485
fawkes::SQLiteConfiguration::transaction_type_t
transaction_type_t
Transaction type.
Definition: sqlite.h:106
fawkes::SQLiteConfiguration
Definition: sqlite.h:39
fawkes::SQLiteConfiguration::SQLiteValueIterator::is_uint
virtual bool is_uint() const
Definition: sqlite.cpp:2058
fawkes::SQLiteConfiguration::SQLiteValueIterator::get_as_string
virtual std::string get_as_string() const
Get value as string.
Definition: sqlite.cpp:2183
fawkes::SQLiteConfiguration::TRANSACTION_IMMEDIATE
Immediately acquire lock, reading remains possible.
Definition: sqlite.h:108
fawkes::SQLiteConfiguration::SQLiteValueIterator::~SQLiteValueIterator
virtual ~SQLiteValueIterator()
Destructor.
Definition: sqlite.cpp:1992
fawkes::SQLiteConfiguration::lock
void lock()
Lock the config.
Definition: sqlite.cpp:1843
fawkes::SQLiteConfiguration::erase
virtual void erase(const char *path)
Definition: sqlite.cpp:1491
fawkes::SQLiteConfiguration::SQLiteValueIterator::is_int
virtual bool is_int() const
Definition: sqlite.cpp:2064