LiteSQL  0.3.10
persistent.hpp
Go to the documentation of this file.
1 /* LiteSQL
2  *
3  * The list of contributors at http://litesql.sf.net/
4  *
5  * See LICENSE for copyright information. */
6 
7 #ifndef litesql_persistent_hpp
8 #define litesql_persistent_hpp
9 
10 #include <memory>
11 #include <string>
12 #include <vector>
13 #include <functional>
14 #include <map>
15 #include "litesql/utils.hpp"
16 #include "litesql/database.hpp"
17 #include "litesql/cursor.hpp"
18 #include "litesql/expr.hpp"
19 #include "litesql/selectquery.hpp"
20 #include "litesql/relation.hpp"
21 #include "litesql/operations.hpp"
22 
27 namespace litesql {
28 
33 class Persistent {
34 protected:
35  typedef std::map<std::string, std::vector<pair<FieldType, std::string> > > Updates;
37  std::string insert(Record& tables,
38  Records& fieldRecs,
39  Records& values,
40  const std::string& sequence);
41  void update(const Updates& updates);
42  template <class T>
43  void updateField(litesql::Persistent::Updates& updates,
44  const std::string& table,
45  litesql::Field<T> fld) {
46  if (fld.modified()) {
47  updates[table].push_back(make_pair(fld.fieldType(),
48  litesql::convert<const T&, std::string>(fld.value())));
49  fld.setModified(false);
50  }
51  }
52  void prepareUpdate(Updates& updates, const std::string& table);
53  void deleteFromTable(const std::string& table, const std::string& id);
57  const Database *db;
60  bool inDatabase;
64  int oldKey;
65 public:
67  const Database & getDatabase() const {
68  return *db;
69  }
71  bool isInDatabase() const {
72  return inDatabase;
73  }
75  const Persistent & operator=(const Persistent & p);
77  Persistent(const Persistent & p)
78  : db(p.db), inDatabase(p.inDatabase), oldKey(p.oldKey) {}
79  Persistent(const Database & _db, const Record & row)
80  : db(&_db), inDatabase(true), oldKey(0) {
81  if (row.size() > 0)
82  oldKey = atoi(row[0]);
83  }
85  Persistent(const Database & _db)
86  : db(&_db), inDatabase(false), oldKey(0) {}
87  virtual void onDelete() {}
89  virtual ~Persistent() {}
92  static Split getTablesFromFieldTypes(const std::vector<FieldType> & fdatas);
93 
96 // virtual void getTables(Split & tables) const =0 ;
97 };
98 
99 }
100 #endif
Definition: backend.hpp:14
holds field value
Definition: field.hpp:73
An abstract base class of persistents objects.
Definition: persistent.hpp:33
int oldKey
used to keep track of ID changes.
Definition: persistent.hpp:64
const Persistent & operator=(const Persistent &p)
copies values and keeps fields unchanged
Definition: persistent.cpp:14
Contains class Cursor.
int atoi(const std::string &s)
string version of atoi
includes string.hpp and split.hpp
A base class of databases.
Definition: database.hpp:37
Contains Expr-class hierarchy and operator overloadings for them.
select<T>, intersect<T>, union_<T>, except<T>
Persistent(const Database &_db)
creates empty Persistent
Definition: persistent.hpp:85
static Split getTablesFromFieldTypes(const std::vector< FieldType > &fdatas)
selectObjectQuery uses this to list tables used by Persistent
bool inDatabase
flag that indicates that object is stored in some database.
Definition: persistent.hpp:60
std::string insert(Record &tables, Records &fieldRecs, Records &values, const std::string &sequence)
executed when object is created into database
Definition: persistent.cpp:23
Persistent(const Persistent &p)
copies values and registers Field-objects to fields
Definition: persistent.hpp:77
SQL data row wrapper.
Definition: types.hpp:19
See Using Relations.
bool isInDatabase() const
returns true if object is in database
Definition: persistent.hpp:71
splits and joins strings.
Definition: split.hpp:15
virtual ~Persistent()
empty
Definition: persistent.hpp:89
Database-class.
std::vector< Record > Records
shortcut
Definition: types.hpp:26
contains SelectQuery-class.
const Database & getDatabase() const
returns reference to Database the object is in
Definition: persistent.hpp:67
const Database * db
pointer to current Database Persistent is assigned to.
Definition: persistent.hpp:57

SourceForge.net Logo