Repository navigation
Expand file tree
/
Copy pathmulti_table_select.cpp
More file actions
91 lines (76 loc) · 3.39 KB
/
Copy pathmulti_table_select.cpp
File metadata and controls
91 lines (76 loc) · 3.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/**
* Example implemented from here http://sqlite.awardspace.info/syntax/sqlitepg05.htm
*/
#include <sqlite_orm/sqlite_orm.h>
#include <string>
#include <iostream>
using std::cout;
using std::endl;
struct ReqEquip {
int reqNumber;
std::string requestor;
std::string auth;
std::string reqDate;
};
struct ReqDetail {
int reqNumber;
int stockNumber;
int quantity;
double itemCost;
};
int main(int, char**) {
using namespace sqlite_orm;
auto storage = make_storage("multi_table_select.sqlite",
make_table("ReqEquip",
make_column("ReqNumber", &ReqEquip::reqNumber, primary_key()),
make_column("Requestor", &ReqEquip::requestor),
make_column("Auth", &ReqEquip::auth),
make_column("ReqDate", &ReqEquip::reqDate)),
make_table("ReqDetail",
make_column("ReqNumber", &ReqDetail::reqNumber),
make_column("StockNumber", &ReqDetail::stockNumber),
make_column("Quantity", &ReqDetail::quantity),
make_column("ItemCost", &ReqDetail::itemCost)));
storage.sync_schema();
storage.remove_all<ReqEquip>();
storage.remove_all<ReqDetail>();
storage.replace(ReqEquip{1000, "Carl Jones", "A. Robinson Mgr", "2007/10/30"});
storage.replace(ReqEquip{1001, "Peter Smith", "A. Robinson Mgr", "2007/11/05"});
storage.replace(ReqEquip{1002, "Carl Jones", "A. Robinson Mgr", "2007/11/06"});
storage.replace(ReqDetail{1000, 51013, 2, 7.52});
storage.replace(ReqDetail{1000, 51002, 4, .75});
storage.replace(ReqDetail{1000, 43512, 4, 1.52});
storage.replace(ReqDetail{1001, 23155, 1, 9.82});
storage.replace(ReqDetail{1001, 43111, 1, 3.69});
storage.replace(ReqDetail{1002, 51001, 1, .75});
storage.replace(ReqDetail{1002, 23155, 1, 9.82});
cout << endl;
// SELECT ReqEquip.ReqNumber, ReqEquip.Requestor, ReqDetail.Quantity, ReqDetail.StockNumber
// FROM ReqEquip, ReqDetail
// WHERE ReqEquip.ReqNumber = ReqDetail.ReqNumber;
auto rows = storage.select(
columns(&ReqEquip::reqNumber, &ReqEquip::requestor, &ReqDetail::quantity, &ReqDetail::stockNumber),
where(c(&ReqEquip::reqNumber) == &ReqDetail::reqNumber));
for (auto& row: rows) {
cout << std::get<0>(row) << '\t';
cout << std::get<1>(row) << '\t';
cout << std::get<2>(row) << '\t';
cout << std::get<3>(row) << '\t';
cout << endl;
}
cout << endl;
// SELECT ReqEquip.ReqNumber, ReqEquip.Requestor, ReqDetail.Quantity, ReqDetail.StockNumber
// FROM ReqEquip, ReqDetail
// WHERE ReqEquip.ReqNumber = ReqDetail.ReqNumber AND ReqEquip.ReqNumber = 1000;
rows = storage.select(
columns(&ReqEquip::reqNumber, &ReqEquip::requestor, &ReqDetail::quantity, &ReqDetail::stockNumber),
where(c(&ReqEquip::reqNumber) == &ReqDetail::reqNumber and c(&ReqEquip::reqNumber) == 1000));
for (auto& row: rows) {
cout << std::get<0>(row) << '\t';
cout << std::get<1>(row) << '\t';
cout << std::get<2>(row) << '\t';
cout << std::get<3>(row) << '\t';
cout << endl;
}
return 0;
}