]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/store/db/test_pg_driver.cpp
Code deduplication
[stg.git] / projects / stargazer / plugins / store / db / test_pg_driver.cpp
1 #include <iostream>
2 #include <string>
3 #include <sstream>
4
5 #include <dlfcn.h>
6
7 #include "base_db.h"
8
9 int main(int argc, char ** argv)
10 {
11     BASE_DB * db;
12
13     void * lh = dlopen("./pg_driver.so", RTLD_NOW | RTLD_GLOBAL);
14
15     if (lh == NULL) {
16         std::cout << "Error loading shared object file pg_driver.so. Reason: '" << dlerror() << "'" << std::endl;
17         return EXIT_FAILURE;
18     }
19
20     CreateDriverFn CreateDriver = reinterpret_cast<CreateDriverFn>(dlsym(lh, "CreateDriver"));
21     if (CreateDriver == NULL) {
22         std::cout << "Error getting symbol 'CreateDriver' address. Reason: '" << dlerror() << "'" << std::endl;
23         dlclose(lh);
24         return EXIT_FAILURE;
25     }
26     DestroyDriverFn DestroyDriver = reinterpret_cast<DestroyDriverFn>(dlsym(lh, "DestroyDriver"));
27     if (DestroyDriver == NULL) {
28         std::cout << "Error getting symbol 'DestroyDriver' address. Reason: '" << dlerror() << "'" << std::endl;
29         dlclose(lh);
30         return EXIT_FAILURE;
31     }
32
33     db = CreateDriver();
34
35     db->SetHost("localhost");
36     db->SetDatabase("stargazer");
37     db->SetUser("stg");
38     db->SetPassword("123456");
39
40     if (db->Connect()) {
41         std::cout << "Error connecting db. Reason: '" << db->GetErrorMsg() << "'" << std::endl;
42         DestroyDriver(db);
43         dlclose(lh);
44         return EXIT_FAILURE;
45     }
46
47     std::stringstream query;
48     query << "SELECT * FROM information_schema.tables";
49
50     if (db->Query(query.str())) {
51         std::cout << "Error querying db. Reason: '" << db->GetErrorMsg() << "'" << std::endl;
52         db->Disconnect();
53         DestroyDriver(db);
54         dlclose(lh);
55         return EXIT_FAILURE;
56     }
57
58     std::cout << "Tuples: " << db->GetTuples() << std::endl;
59     std::cout << "Columns: " << db->GetColumns() << std::endl;
60     BASE_DB::COLUMNS cols;
61     BASE_DB::COLUMNS::iterator it;
62     cols = db->GetColumnsNames();
63     std::cout << "Cols count: " << cols.size() << std::endl;
64     std::cout << "Columns names:" << std::endl;
65     for (it = cols.begin(); it != cols.end(); ++it)
66         std::cout << *it << " ";
67     std::cout << std::endl;
68
69     for (int i = 0; i < db->GetTuples(); ++i) {
70         BASE_DB::TUPLE tuple(db->GetTuple(i));
71         BASE_DB::TUPLE::iterator it;
72         for (it = tuple.begin(); it != tuple.end(); ++it)
73             std::cout << it->second << " ";
74         std::cout << std::endl;
75     }
76
77     query.str("");
78     query << "create table test ( id bigserial, message text )";
79     if (db->Query(query.str())) {
80         std::cout << "Error querying db. Reason: '" << db->GetErrorMsg() << "'" << std::endl;
81         db->Disconnect();
82         DestroyDriver(db);
83         dlclose(lh);
84         return EXIT_FAILURE;
85     }
86
87     query.str("");
88     query << "insert into test (message) values ('abc');";
89     query << "insert into test (message) values ('def');";
90     query << "insert into test (message) values ('zxc');";
91     if (db->Query(query.str())) {
92         std::cout << "Error querying db. Reason: '" << db->GetErrorMsg() << "'" << std::endl;
93         db->Disconnect();
94         DestroyDriver(db);
95         dlclose(lh);
96         return EXIT_FAILURE;
97     }
98
99     query.str("");
100     query << "SELECT * FROM test";
101     if (db->Query(query.str())) {
102         std::cout << "Error querying db. Reason: '" << db->GetErrorMsg() << "'" << std::endl;
103         db->Disconnect();
104         DestroyDriver(db);
105         dlclose(lh);
106         return EXIT_FAILURE;
107     }
108     std::cout << "Tuples: " << db->GetTuples() << std::endl;
109     std::cout << "Columns: " << db->GetColumns() << std::endl;
110     cols = db->GetColumnsNames();
111     std::cout << "Cols count: " << cols.size() << std::endl;
112     std::cout << "Columns names:" << std::endl;
113     for (it = cols.begin(); it != cols.end(); ++it)
114         std::cout << *it << " ";
115     std::cout << std::endl;
116
117     for (int i = 0; i < db->GetTuples(); ++i) {
118         BASE_DB::TUPLE tuple(db->GetTuple(i));
119         BASE_DB::TUPLE::iterator it;
120         for (it = tuple.begin(); it != tuple.end(); ++it)
121             std::cout << it->second << " ";
122         std::cout << std::endl;
123     }
124
125     query.str("");
126     query << "drop table test";
127     if (db->Query(query.str())) {
128         std::cout << "Error querying db. Reason: '" << db->GetErrorMsg() << "'" << std::endl;
129         db->Disconnect();
130         DestroyDriver(db);
131         dlclose(lh);
132         return EXIT_FAILURE;
133     }
134
135     if (db->Disconnect()) {
136         std::cout << "Error connecting db. Reason: '" << db->GetErrorMsg() << "'" << std::endl;
137         DestroyDriver(db);
138         dlclose(lh);
139         return EXIT_FAILURE;
140     }
141
142     DestroyDriver(db);
143
144     dlclose(lh);
145
146     return EXIT_SUCCESS;
147 }