mirror of
https://github.com/Relintai/rcpp_framework.git
synced 2024-11-14 04:57:21 +01:00
Implemented a QueryResult object for mysql. messagepage now queries the db too.
This commit is contained in:
parent
b063237399
commit
b99cbf0164
@ -134,6 +134,7 @@ env_base.Append(CXX=["-o3"])
|
|||||||
|
|
||||||
env = env_base.Clone()
|
env = env_base.Clone()
|
||||||
Export("env")
|
Export("env")
|
||||||
|
SConscript("core/SCsub")
|
||||||
|
|
||||||
for d in database_list:
|
for d in database_list:
|
||||||
tmppath = "./database/" + d
|
tmppath = "./database/" + d
|
||||||
@ -189,8 +190,6 @@ for m in module_list:
|
|||||||
sys.path.remove(tmppath)
|
sys.path.remove(tmppath)
|
||||||
sys.modules.pop("detect")
|
sys.modules.pop("detect")
|
||||||
|
|
||||||
SConscript("core/SCsub")
|
|
||||||
|
|
||||||
env.prg_sources = [ "rdn_application.cpp" ]
|
env.prg_sources = [ "rdn_application.cpp" ]
|
||||||
libapp = env.add_library("application", env.prg_sources)
|
libapp = env.add_library("application", env.prg_sources)
|
||||||
env.Prepend(LIBS=[libapp])
|
env.Prepend(LIBS=[libapp])
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
#include "database.h"
|
#include "database.h"
|
||||||
|
|
||||||
|
#include "query_builder.h"
|
||||||
|
#include "table_builder.h"
|
||||||
|
#include "query_result.h"
|
||||||
|
|
||||||
void Database::connect(const std::string &connection_str) {
|
void Database::connect(const std::string &connection_str) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Database::query(const std::string &query) {
|
QueryResult *Database::query(const std::string &query) {
|
||||||
|
}
|
||||||
|
void Database::query_run(const std::string &query) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryBuilder *Database::get_query_builder() {
|
QueryBuilder *Database::get_query_builder() {
|
||||||
|
@ -4,21 +4,14 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include "query_builder.h"
|
|
||||||
#include "table_builder.h"
|
|
||||||
|
|
||||||
enum QueryErrorCode {
|
enum QueryErrorCode {
|
||||||
OK,
|
OK,
|
||||||
ERROR
|
ERROR
|
||||||
};
|
};
|
||||||
|
|
||||||
class QueryResult {
|
class QueryBuilder;
|
||||||
public:
|
class TableBuilder;
|
||||||
//rows
|
class QueryResult;
|
||||||
//next_row()
|
|
||||||
//get_int(int index)
|
|
||||||
//get_string(int column) etc
|
|
||||||
};
|
|
||||||
|
|
||||||
class Database {
|
class Database {
|
||||||
public:
|
public:
|
||||||
@ -36,7 +29,8 @@ public:
|
|||||||
//virtual void where(""); etc
|
//virtual void where(""); etc
|
||||||
|
|
||||||
virtual void connect(const std::string &connection_str);
|
virtual void connect(const std::string &connection_str);
|
||||||
virtual void query(const std::string &query);
|
virtual QueryResult *query(const std::string &query);
|
||||||
|
virtual void query_run(const std::string &query);
|
||||||
|
|
||||||
virtual QueryBuilder *get_query_builder();
|
virtual QueryBuilder *get_query_builder();
|
||||||
virtual TableBuilder *get_table_builder();
|
virtual TableBuilder *get_table_builder();
|
||||||
|
15
core/query_result.cpp
Normal file
15
core/query_result.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include "query_result.h"
|
||||||
|
|
||||||
|
bool QueryResult::next_row() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *QueryResult::get_cell(const int index) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryResult::QueryResult() {
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryResult::~QueryResult() {
|
||||||
|
}
|
13
core/query_result.h
Normal file
13
core/query_result.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#ifndef QUERY_RESULT_H
|
||||||
|
#define QUERY_RESULT_H
|
||||||
|
|
||||||
|
class QueryResult {
|
||||||
|
public:
|
||||||
|
virtual bool next_row();
|
||||||
|
virtual const char*get_cell(const int index);
|
||||||
|
|
||||||
|
QueryResult();
|
||||||
|
virtual ~QueryResult();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include "mysql_query_builder.h"
|
#include "mysql_query_builder.h"
|
||||||
#include "mysql_table_builder.h"
|
#include "mysql_table_builder.h"
|
||||||
|
#include "mysql_query_result.h"
|
||||||
|
|
||||||
void MysqlDatabase::connect(const std::string &connection_str) {
|
void MysqlDatabase::connect(const std::string &connection_str) {
|
||||||
mysql = mysql_init(mysql);
|
mysql = mysql_init(mysql);
|
||||||
@ -24,11 +25,38 @@ void MysqlDatabase::connect(const std::string &connection_str) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MysqlDatabase::query(const std::string &query) {
|
QueryResult *MysqlDatabase::query(const std::string &query) {
|
||||||
|
if (!mysql)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
//printf("%s\n", query.c_str());
|
||||||
|
|
||||||
|
int error = mysql_real_query(mysql, query.c_str(), query.length());
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
const char *merr = mysql_error(mysql);
|
||||||
|
|
||||||
|
printf("MySQL error: %s\n", merr);
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
MYSQL_RES *result = mysql_use_result(mysql);
|
||||||
|
|
||||||
|
MysqlQueryResult *res = new MysqlQueryResult();
|
||||||
|
|
||||||
|
res->result = result;
|
||||||
|
//res->next_row();
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MysqlDatabase::query_run(const std::string &query) {
|
||||||
if (!mysql)
|
if (!mysql)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
printf("%s\n", query.c_str());
|
//printf("%s\n", query.c_str());
|
||||||
|
|
||||||
int error = mysql_real_query(mysql, query.c_str(), query.length());
|
int error = mysql_real_query(mysql, query.c_str(), query.length());
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
@ -38,6 +66,10 @@ void MysqlDatabase::query(const std::string &query) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//printf("query OK\n");
|
||||||
|
//printf("----------------\n");
|
||||||
|
|
||||||
|
/*
|
||||||
printf("----------------\n");
|
printf("----------------\n");
|
||||||
|
|
||||||
MYSQL_RES *result = mysql_use_result(mysql);
|
MYSQL_RES *result = mysql_use_result(mysql);
|
||||||
@ -52,9 +84,9 @@ void MysqlDatabase::query(const std::string &query) {
|
|||||||
printf("----------------\n");
|
printf("----------------\n");
|
||||||
|
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QueryBuilder *MysqlDatabase::get_query_builder() {
|
QueryBuilder *MysqlDatabase::get_query_builder() {
|
||||||
return new MysqlQueryBuilder();
|
return new MysqlQueryBuilder();
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,8 @@
|
|||||||
class MysqlDatabase : public Database {
|
class MysqlDatabase : public Database {
|
||||||
public:
|
public:
|
||||||
void connect(const std::string &connection_str);
|
void connect(const std::string &connection_str);
|
||||||
void query(const std::string &query);
|
QueryResult *query(const std::string &query);
|
||||||
|
void query_run(const std::string &query);
|
||||||
|
|
||||||
QueryBuilder *get_query_builder();
|
QueryBuilder *get_query_builder();
|
||||||
TableBuilder *get_table_builder();
|
TableBuilder *get_table_builder();
|
||||||
|
@ -24,6 +24,8 @@ QueryBuilder *MysqlQueryBuilder::limit(const int min, const int max) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QueryBuilder *MysqlQueryBuilder::insert(const std::string &table_name, const std::string ¶ms_str) {
|
QueryBuilder *MysqlQueryBuilder::insert(const std::string &table_name, const std::string ¶ms_str) {
|
||||||
|
query_result += " INSERT INTO " + table_name + " VALUES( " + params_str + " );";
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
27
database/mysql/mysql_query_result.cpp
Normal file
27
database/mysql/mysql_query_result.cpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#include "mysql_query_result.h"
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
bool MysqlQueryResult::next_row() {
|
||||||
|
current_row = mysql_fetch_row(result);
|
||||||
|
|
||||||
|
//null if no result
|
||||||
|
return current_row;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* MysqlQueryResult::get_cell(const int index) {
|
||||||
|
if (!current_row)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
return current_row[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
MysqlQueryResult::MysqlQueryResult() : QueryResult() {
|
||||||
|
result = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
MysqlQueryResult::~MysqlQueryResult() {
|
||||||
|
if(result) {
|
||||||
|
mysql_free_result(result);
|
||||||
|
}
|
||||||
|
}
|
20
database/mysql/mysql_query_result.h
Normal file
20
database/mysql/mysql_query_result.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef MYSQL_QUERY_RESULT_H
|
||||||
|
#define MYSQL_QUERY_RESULT_H
|
||||||
|
|
||||||
|
#include "core/query_result.h"
|
||||||
|
|
||||||
|
#include <mysql.h>
|
||||||
|
|
||||||
|
class MysqlQueryResult : public QueryResult {
|
||||||
|
public:
|
||||||
|
bool next_row();
|
||||||
|
const char* get_cell(const int index);
|
||||||
|
|
||||||
|
MysqlQueryResult();
|
||||||
|
~MysqlQueryResult();
|
||||||
|
|
||||||
|
MYSQL_ROW current_row;
|
||||||
|
MYSQL_RES *result;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
1
main.cpp
1
main.cpp
@ -51,6 +51,7 @@ int main(int argc, char **argv) {
|
|||||||
if (!migrate) {
|
if (!migrate) {
|
||||||
server->main_loop();
|
server->main_loop();
|
||||||
} else {
|
} else {
|
||||||
|
printf("Running migrations.\n");
|
||||||
app->migrate();
|
app->migrate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,28 +3,37 @@
|
|||||||
#include "core/database.h"
|
#include "core/database.h"
|
||||||
|
|
||||||
#include "core/query_builder.h"
|
#include "core/query_builder.h"
|
||||||
|
#include "core/table_builder.h"
|
||||||
|
#include "core/query_result.h"
|
||||||
|
|
||||||
void MessagePage::index(Request *request) {
|
void MessagePage::index(Request *request) {
|
||||||
QueryBuilder *b = db->get_query_builder();
|
QueryBuilder *b = db->get_query_builder();
|
||||||
|
|
||||||
b->select("*")->from("tutorials_tbl")->finalize();
|
b->select("text")->from("message_page")->finalize();
|
||||||
|
|
||||||
db->query(b->query_result);
|
QueryResult *res = db->query(b->query_result);
|
||||||
|
|
||||||
|
std::vector<std::string> msgs;
|
||||||
|
|
||||||
|
if (res) {
|
||||||
|
while (res->next_row()) {
|
||||||
|
msgs.push_back(res->get_cell(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete res;
|
||||||
delete b;
|
delete b;
|
||||||
|
|
||||||
/*
|
|
||||||
db->query("show databases;");
|
|
||||||
db->query("show tables;");
|
|
||||||
db->query("SELECT * FROM tutorials_tbl;");
|
|
||||||
*/
|
|
||||||
|
|
||||||
std::string r = "<html><body>";
|
std::string r = "<html><body>";
|
||||||
|
|
||||||
for (uint32_t i = 0; i < messages.size(); ++i) {
|
for (uint32_t i = 0; i < messages.size(); ++i) {
|
||||||
r += "<p>" + messages[i] + "</p><br>";
|
r += "<p>" + messages[i] + "</p><br>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < msgs.size(); ++i) {
|
||||||
|
r += "<p>" + msgs[i] + "</p><br>";
|
||||||
|
}
|
||||||
|
|
||||||
r += "</html></body>";
|
r += "</html></body>";
|
||||||
|
|
||||||
request->response->setBody(r);
|
request->response->setBody(r);
|
||||||
@ -34,10 +43,27 @@ void MessagePage::index(Request *request) {
|
|||||||
void MessagePage::migrate() {
|
void MessagePage::migrate() {
|
||||||
TableBuilder *t = db->get_table_builder();
|
TableBuilder *t = db->get_table_builder();
|
||||||
|
|
||||||
t->create_table("message_page")->integer("id")->auto_increment()->primary_key()->next_row()->varchar("dd", 30)->finalize();
|
t->create_table("message_page")->integer("id")->auto_increment()->primary_key()->next_row()->varchar("text", 30)->finalize();
|
||||||
|
|
||||||
|
printf("%s\n", t->result.c_str());
|
||||||
|
|
||||||
db->query(t->result);
|
db->query(t->result);
|
||||||
|
|
||||||
|
QueryBuilder *b = db->get_query_builder();
|
||||||
|
|
||||||
|
b->insert("message_page", "default, 'aaewdwd'");
|
||||||
|
|
||||||
|
printf("%s\n", b->query_result.c_str());
|
||||||
|
|
||||||
|
db->query_run(b->query_result);
|
||||||
|
|
||||||
|
b->query_result.clear();
|
||||||
|
b->insert("message_page", "default, 'qqqqq'");
|
||||||
|
|
||||||
|
printf("%s\n", b->query_result.c_str());
|
||||||
|
|
||||||
|
db->query_run(b->query_result);
|
||||||
|
|
||||||
delete t;
|
delete t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user