mirror of
https://github.com/Relintai/rcpp_framework.git
synced 2025-05-06 17:51:36 +02:00
Lost of work on the query/table builders.
This commit is contained in:
parent
e7c1cd5741
commit
2c5293f959
@ -37,10 +37,32 @@ QueryBuilder *QueryBuilder::from(const std::string ¶ms) {
|
|||||||
QueryBuilder *QueryBuilder::insert(const std::string &table_name) {
|
QueryBuilder *QueryBuilder::insert(const std::string &table_name) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
QueryBuilder *QueryBuilder::insert(const std::string &table_name, const std::string &columns) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
QueryBuilder *QueryBuilder::values(const std::string ¶ms_str) {
|
QueryBuilder *QueryBuilder::values(const std::string ¶ms_str) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QueryBuilder *QueryBuilder::val() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder *QueryBuilder::val(const std::string ¶m) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder *QueryBuilder::val(const char *param) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder *QueryBuilder::val(const int param) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
QueryBuilder *QueryBuilder::val(const bool param) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
QueryBuilder *QueryBuilder::eselect(const std::string ¶ms) {
|
QueryBuilder *QueryBuilder::eselect(const std::string ¶ms) {
|
||||||
select(escape(params));
|
select(escape(params));
|
||||||
|
|
||||||
@ -67,6 +89,12 @@ QueryBuilder *QueryBuilder::evalues(const std::string ¶ms_str) {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QueryBuilder *QueryBuilder::eval(const std::string ¶m) {
|
||||||
|
val(escape(param));
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
QueryBuilder *QueryBuilder::limit(const int num) {
|
QueryBuilder *QueryBuilder::limit(const int num) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@ -75,6 +103,10 @@ QueryBuilder *QueryBuilder::offset(const int num) {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QueryBuilder *QueryBuilder::select_last_insert_id() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
std::string QueryBuilder::escape(const std::string ¶ms) {
|
std::string QueryBuilder::escape(const std::string ¶ms) {
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
@ -108,6 +140,10 @@ std::string QueryBuilder::get_result() {
|
|||||||
return query_result;
|
return query_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QueryBuilder::print() {
|
||||||
|
printf("%s\n", query_result.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
QueryBuilder::QueryBuilder() {
|
QueryBuilder::QueryBuilder() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,17 +20,26 @@ public:
|
|||||||
virtual QueryBuilder *where(const std::string ¶ms);
|
virtual QueryBuilder *where(const std::string ¶ms);
|
||||||
virtual QueryBuilder *from(const std::string ¶ms);
|
virtual QueryBuilder *from(const std::string ¶ms);
|
||||||
virtual QueryBuilder *insert(const std::string &table_name);
|
virtual QueryBuilder *insert(const std::string &table_name);
|
||||||
|
virtual QueryBuilder *insert(const std::string &table_name, const std::string &columns);
|
||||||
virtual QueryBuilder *values(const std::string ¶ms_str);
|
virtual QueryBuilder *values(const std::string ¶ms_str);
|
||||||
|
virtual QueryBuilder *val();
|
||||||
|
virtual QueryBuilder *val(const std::string ¶m);
|
||||||
|
virtual QueryBuilder *val(const char *param);
|
||||||
|
virtual QueryBuilder *val(const int param);
|
||||||
|
virtual QueryBuilder *val(const bool param);
|
||||||
|
|
||||||
virtual QueryBuilder *eselect(const std::string ¶ms);
|
virtual QueryBuilder *eselect(const std::string ¶ms);
|
||||||
virtual QueryBuilder *ewhere(const std::string ¶ms);
|
virtual QueryBuilder *ewhere(const std::string ¶ms);
|
||||||
virtual QueryBuilder *efrom(const std::string ¶ms);
|
virtual QueryBuilder *efrom(const std::string ¶ms);
|
||||||
virtual QueryBuilder *einsert(const std::string &table_name);
|
virtual QueryBuilder *einsert(const std::string &table_name);
|
||||||
virtual QueryBuilder *evalues(const std::string ¶ms_str);
|
virtual QueryBuilder *evalues(const std::string ¶ms_str);
|
||||||
|
virtual QueryBuilder *eval(const std::string ¶m);
|
||||||
|
|
||||||
virtual QueryBuilder *limit(const int num);
|
virtual QueryBuilder *limit(const int num);
|
||||||
virtual QueryBuilder *offset(const int num);
|
virtual QueryBuilder *offset(const int num);
|
||||||
|
|
||||||
|
virtual QueryBuilder *select_last_insert_id();
|
||||||
|
|
||||||
virtual std::string escape(const std::string ¶ms);
|
virtual std::string escape(const std::string ¶ms);
|
||||||
|
|
||||||
virtual QueryBuilder *prepare();
|
virtual QueryBuilder *prepare();
|
||||||
@ -45,6 +54,8 @@ public:
|
|||||||
|
|
||||||
std::string get_result();
|
std::string get_result();
|
||||||
|
|
||||||
|
void print();
|
||||||
|
|
||||||
QueryBuilder();
|
QueryBuilder();
|
||||||
virtual ~QueryBuilder();
|
virtual ~QueryBuilder();
|
||||||
|
|
||||||
|
@ -8,6 +8,10 @@ const char *QueryResult::get_cell(const int index) {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int QueryResult::get_last_insert_rowid() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
QueryResult::QueryResult() {
|
QueryResult::QueryResult() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ class QueryResult {
|
|||||||
public:
|
public:
|
||||||
virtual bool next_row();
|
virtual bool next_row();
|
||||||
virtual const char*get_cell(const int index);
|
virtual const char*get_cell(const int index);
|
||||||
|
virtual int get_last_insert_rowid();
|
||||||
|
|
||||||
QueryResult();
|
QueryResult();
|
||||||
virtual ~QueryResult();
|
virtual ~QueryResult();
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
#include "sqlite3_database.h"
|
#include "sqlite3_database.h"
|
||||||
#include "sqlite3_query_result.h"
|
#include "sqlite3_query_result.h"
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
QueryBuilder *SQLite3QueryBuilder::select() {
|
QueryBuilder *SQLite3QueryBuilder::select() {
|
||||||
query_result += "SELECT ";
|
query_result += "SELECT ";
|
||||||
|
|
||||||
@ -29,6 +31,7 @@ QueryBuilder *SQLite3QueryBuilder::values() {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
QueryBuilder *SQLite3QueryBuilder::cvalues() {
|
QueryBuilder *SQLite3QueryBuilder::cvalues() {
|
||||||
|
query_result[query_result.size() - 2] = ' ';
|
||||||
query_result += ") ";
|
query_result += ") ";
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
@ -57,13 +60,53 @@ QueryBuilder *SQLite3QueryBuilder::insert(const std::string &table_name) {
|
|||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
QueryBuilder *SQLite3QueryBuilder::insert(const std::string &table_name, const std::string &columns) {
|
||||||
|
query_result += "INSERT INTO " + table_name + "(" + columns + ") ";
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
QueryBuilder *SQLite3QueryBuilder::values(const std::string ¶ms_str) {
|
QueryBuilder *SQLite3QueryBuilder::values(const std::string ¶ms_str) {
|
||||||
query_result += "VALUES(" + params_str + ") ";
|
query_result += "VALUES(" + params_str + ") ";
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QueryBuilder *SQLite3QueryBuilder::val() {
|
||||||
|
//query_result += "DEFAULT, ";
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder *SQLite3QueryBuilder::val(const std::string ¶m) {
|
||||||
|
query_result += "'" + param + "', ";
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder *SQLite3QueryBuilder::val(const char *param) {
|
||||||
|
query_result += "'" + std::string(param) + "', ";
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryBuilder *SQLite3QueryBuilder::val(const int param) {
|
||||||
|
//todo add a better way
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << param;
|
||||||
|
|
||||||
|
query_result += ss.str() + ", ";
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
QueryBuilder *SQLite3QueryBuilder::val(const bool param) {
|
||||||
|
if (param)
|
||||||
|
query_result += "1, ";
|
||||||
|
else
|
||||||
|
query_result += "0, ";
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
std::string SQLite3QueryBuilder::escape(const std::string ¶ms) {
|
std::string SQLite3QueryBuilder::escape(const std::string ¶ms) {
|
||||||
if (!_db) {
|
if (!_db) {
|
||||||
printf("SQLite3QueryBuilder::escape !db!\n");
|
printf("SQLite3QueryBuilder::escape !db!\n");
|
||||||
@ -93,8 +136,6 @@ void SQLite3QueryBuilder::end_command() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QueryResult *SQLite3QueryBuilder::run() {
|
QueryResult *SQLite3QueryBuilder::run() {
|
||||||
end_command();
|
|
||||||
|
|
||||||
if (!_db) {
|
if (!_db) {
|
||||||
printf("SQLite3QueryBuilder::run !db!\n");
|
printf("SQLite3QueryBuilder::run !db!\n");
|
||||||
|
|
||||||
@ -105,8 +146,6 @@ QueryResult *SQLite3QueryBuilder::run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SQLite3QueryBuilder::run_query() {
|
void SQLite3QueryBuilder::run_query() {
|
||||||
end_command();
|
|
||||||
|
|
||||||
if (!_db) {
|
if (!_db) {
|
||||||
printf("SQLite3QueryBuilder::run_query !db!\n");
|
printf("SQLite3QueryBuilder::run_query !db!\n");
|
||||||
|
|
||||||
@ -128,6 +167,10 @@ QueryBuilder *SQLite3QueryBuilder::offset(const int num) {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QueryBuilder *SQLite3QueryBuilder::select_last_insert_id() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
SQLite3QueryBuilder::SQLite3QueryBuilder() {
|
SQLite3QueryBuilder::SQLite3QueryBuilder() {
|
||||||
}
|
}
|
||||||
SQLite3QueryBuilder::~SQLite3QueryBuilder() {
|
SQLite3QueryBuilder::~SQLite3QueryBuilder() {
|
||||||
|
@ -21,11 +21,19 @@ public:
|
|||||||
QueryBuilder *where(const std::string ¶ms);
|
QueryBuilder *where(const std::string ¶ms);
|
||||||
QueryBuilder *from(const std::string ¶ms);
|
QueryBuilder *from(const std::string ¶ms);
|
||||||
QueryBuilder *insert(const std::string &table_name);
|
QueryBuilder *insert(const std::string &table_name);
|
||||||
|
QueryBuilder *insert(const std::string &table_name, const std::string &columns);
|
||||||
QueryBuilder *values(const std::string ¶ms_str);
|
QueryBuilder *values(const std::string ¶ms_str);
|
||||||
|
QueryBuilder *val();
|
||||||
|
QueryBuilder *val(const std::string ¶m);
|
||||||
|
QueryBuilder *val(const char *param);
|
||||||
|
QueryBuilder *val(const int param);
|
||||||
|
QueryBuilder *val(const bool param);
|
||||||
|
|
||||||
QueryBuilder *limit(const int num);
|
QueryBuilder *limit(const int num);
|
||||||
QueryBuilder *offset(const int num);
|
QueryBuilder *offset(const int num);
|
||||||
|
|
||||||
|
QueryBuilder *select_last_insert_id();
|
||||||
|
|
||||||
std::string escape(const std::string ¶ms);
|
std::string escape(const std::string ¶ms);
|
||||||
|
|
||||||
QueryBuilder *prepare();
|
QueryBuilder *prepare();
|
||||||
|
@ -10,7 +10,13 @@ const char* Sqlite3QueryResult::get_cell(const int index) {
|
|||||||
return rows[current_row]->cells[index].c_str();
|
return rows[current_row]->cells[index].c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Sqlite3QueryResult::get_last_insert_rowid() {
|
||||||
|
return sqlite3_last_insert_rowid(_connection);
|
||||||
|
}
|
||||||
|
|
||||||
void Sqlite3QueryResult::query(const std::string &query, sqlite3 *conn) {
|
void Sqlite3QueryResult::query(const std::string &query, sqlite3 *conn) {
|
||||||
|
_connection = conn;
|
||||||
|
|
||||||
if (sqlite3_exec(conn, query.c_str(), Sqlite3QueryResult::run_query_finished, this, &err_msg) != SQLITE_OK) {
|
if (sqlite3_exec(conn, query.c_str(), Sqlite3QueryResult::run_query_finished, this, &err_msg) != SQLITE_OK) {
|
||||||
printf("SQLite3Database::query error: \nQuery: %s \n Error:\n %s\n", query.c_str(), err_msg);
|
printf("SQLite3Database::query error: \nQuery: %s \n Error:\n %s\n", query.c_str(), err_msg);
|
||||||
sqlite3_free(err_msg);
|
sqlite3_free(err_msg);
|
||||||
@ -25,7 +31,12 @@ int Sqlite3QueryResult::run_query_finished(void *data, int argc, char **argv, ch
|
|||||||
Sqlite3QueryResultRow *r = new Sqlite3QueryResultRow();
|
Sqlite3QueryResultRow *r = new Sqlite3QueryResultRow();
|
||||||
|
|
||||||
for (int i = 0; i < argc; ++i) {
|
for (int i = 0; i < argc; ++i) {
|
||||||
|
if (argv[i]) {
|
||||||
r->cells.push_back(argv[i]);
|
r->cells.push_back(argv[i]);
|
||||||
|
} else {
|
||||||
|
//todo mark nulls in cells
|
||||||
|
r->cells.push_back("NULL");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res->rows.push_back(r);
|
res->rows.push_back(r);
|
||||||
@ -33,7 +44,8 @@ int Sqlite3QueryResult::run_query_finished(void *data, int argc, char **argv, ch
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Sqlite3QueryResult::Sqlite3QueryResult() : QueryResult() {
|
Sqlite3QueryResult::Sqlite3QueryResult() :
|
||||||
|
QueryResult() {
|
||||||
err_msg = nullptr;
|
err_msg = nullptr;
|
||||||
current_row = -1;
|
current_row = -1;
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ class Sqlite3QueryResult : public QueryResult {
|
|||||||
public:
|
public:
|
||||||
bool next_row();
|
bool next_row();
|
||||||
const char* get_cell(const int index);
|
const char* get_cell(const int index);
|
||||||
|
int get_last_insert_rowid();
|
||||||
|
|
||||||
void query(const std::string &query, sqlite3 *conn);
|
void query(const std::string &query, sqlite3 *conn);
|
||||||
|
|
||||||
@ -30,6 +31,8 @@ public:
|
|||||||
char **col_names;
|
char **col_names;
|
||||||
std::vector<Sqlite3QueryResultRow *> rows;
|
std::vector<Sqlite3QueryResultRow *> rows;
|
||||||
int current_row;
|
int current_row;
|
||||||
|
|
||||||
|
sqlite3 *_connection;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -39,7 +39,7 @@ TableBuilder *SQLite3TableBuilder::null() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TableBuilder *SQLite3TableBuilder::auto_increment() {
|
TableBuilder *SQLite3TableBuilder::auto_increment() {
|
||||||
result += "AUTO_INCREMENT ";
|
//result += "AUTO_INCREMENT ";
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user