LiteSQL 0.3.10
datasource.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
9#ifndef litesql_datasource_hpp
10#define litesql_datasource_hpp
11#include <set>
12#include <string>
13#include "litesql/database.hpp"
15#include "litesql/expr.hpp"
16namespace litesql {
17using namespace std;
21SelectQuery selectObjectQuery(const std::vector<FieldType>& fdatas,
22 const Expr & e=Expr());
23
26template <class T>
28 std::vector<FieldType> fdatas;
29 T::getFieldTypes(fdatas);
30 return selectObjectQuery(fdatas, e);
31}
32
33template <class T>
35private:
37 const Database & db;
39 SelectQuery sel;
40public:
43 DataSource(const Database & db_, const Expr& e = Expr())
44 : db(db_), sel(selectObjectQuery<T>(e)) {
45 }
46
48 DataSource(const Database & db_, const SelectQuery& sel_)
49 : db(db_), sel(sel_) {
50 }
51
53 const Database & getDatabase() const {
54 return db;
55 }
56
58 SelectQuery idq(sel);
59 idq.clearResults();
60 idq.result(T::Id.fullName());
61 return idq;
62 }
63
64 size_t count() const {
65 SelectQuery cq(sel);
66 cq.clearResults();
67 cq.limit(0).offset(0);
68 cq.result("count(*)");
69 return atoi(db.query(cq)[0][0]);
70 }
71
73 return sel;
74 }
75
76 Cursor<T> cursor() const {
77 return db.template cursor<T>(sel);
78 }
79
81 T one() const {
82 return *cursor();
83 }
84
85 std::vector<T> all() const {
86 // \TODO a cursor is not appropriate here, because we fetch all results of the query
87 return cursor().dump();
88 }
89
93 DataSource& orderBy(FieldType f, bool asc=true) {
94 sel.orderBy(f.fullName(), asc);
95 return *this;
96 }
97
103 sel.source(id.table());
104 sel.where(id == T::Id);
105 sel.orderBy(f.fullName(), asc);
106 return *this;
107 }
108};
109
110}
111#endif
used to iterate results of SQL statement, creates objects of type T from retrieved records.
Definition cursor.hpp:22
size_t count() const
returns number of objects in result set
Definition datasource.hpp:64
const Database & getDatabase() const
returns database reference
Definition datasource.hpp:53
SelectQuery objectQuery() const
returns SelectQuery which selects objects
Definition datasource.hpp:72
DataSource & orderByRelation(FieldType id, FieldType f, bool asc=true)
modifies SelectQuery to order result set by external table
Definition datasource.hpp:102
Cursor< T > cursor() const
returns cursor for query
Definition datasource.hpp:76
DataSource(const Database &db_, const SelectQuery &sel_)
Definition datasource.hpp:48
DataSource(const Database &db_, const Expr &e=Expr())
Definition datasource.hpp:43
SelectQuery idQuery() const
returns SelectQuery which selects ID-numbers of objects
Definition datasource.hpp:57
std::vector< T > all() const
returns all objects in result set.
Definition datasource.hpp:85
T one() const
returns first object in result set.
Definition datasource.hpp:81
DataSource & orderBy(FieldType f, bool asc=true)
modifies SelectQuery to order result set
Definition datasource.hpp:93
A base class of databases.
Definition database.hpp:37
A base class for expression in WHERE - clause.
Definition expr.hpp:19
Definition field.hpp:24
a class that helps creating SELECT-SQL statements.
Definition selectquery.hpp:18
Database-class.
SelectQuery selectObjectQuery(const std::vector< FieldType > &fdatas, const Expr &e=Expr())
returns SelectQuery which selects objects of type T
Definition datasource.cpp:10
Contains Expr-class hierarchy and operator overloadings for them.
contains SelectQuery-class.
int atoi(const std::string &s)
string version of atoi

SourceForge.net Logo