#include "sqlite3_query_result.h" #include "./sqlite/sqlite3.h" #include "core/print_string.h" #include "core/ustring.h" #include <cstdio> bool Sqlite3QueryResult::next_row() { return ++current_row < rows.size(); } String Sqlite3QueryResult::get_cell(const int index) { return rows[current_row]->cells[index].data; } bool Sqlite3QueryResult::is_cell_null(const int index) { return rows[current_row]->cells[index].null; } int Sqlite3QueryResult::get_last_insert_rowid() { return sqlite3_last_insert_rowid(_connection); } String Sqlite3QueryResult::get_error_message() { return String(err_msg); } void Sqlite3QueryResult::query(const String &query, sqlite3 *conn) { _connection = conn; CharString q = query.utf8(); if (sqlite3_exec(conn, q.get_data(), Sqlite3QueryResult::run_query_finished, this, &err_msg) != SQLITE_OK) { ERR_PRINT("SQLite3Database::query error: "); ERR_PRINT("Query: " + query); ERR_PRINT("Error: " + String(err_msg)); sqlite3_free(err_msg); } } int Sqlite3QueryResult::run_query_finished(void *data, int argc, char **argv, char **col_names) { Sqlite3QueryResult *res = reinterpret_cast<Sqlite3QueryResult *>(data); //res->col_names = col_names; Sqlite3QueryResultRow *r = memnew(Sqlite3QueryResultRow); for (int i = 0; i < argc; ++i) { Cell c; if (argv[i]) { c.data = argv[i]; } else { c.null = true; } r->cells.push_back(c); } res->rows.push_back(r); return 0; } Sqlite3QueryResult::Sqlite3QueryResult() { err_msg = nullptr; current_row = -1; } Sqlite3QueryResult::~Sqlite3QueryResult() { for (int i = 0; i < rows.size(); ++i) { memdelete(rows[i]); } }