implemented prepared statement for postgres and sqlite
This commit is contained in:
@@ -29,7 +29,7 @@ public:
|
||||
bool is_open() override;
|
||||
|
||||
std::unique_ptr<sql::query_result_impl> fetch(const std::string &stmt) override;
|
||||
void prepare(const std::string &stmt) override;
|
||||
std::unique_ptr<sql::statement_impl> prepare(sql::query_context query) override;
|
||||
|
||||
size_t execute(const std::string &stmt) override;
|
||||
|
||||
@@ -50,7 +50,7 @@ private:
|
||||
fetch_context fetch_internal(const std::string &stmt);
|
||||
|
||||
private:
|
||||
sqlite3 *sqlite_db_{};
|
||||
sqlite3 *db_{};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
#ifndef QUERY_SQLITE_PARAMETER_BINDER_H
|
||||
#define QUERY_SQLITE_PARAMETER_BINDER_H
|
||||
|
||||
#include "matador/sql/parameter_binder.hpp"
|
||||
|
||||
#include <sqlite3.h>
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace matador::backends::sqlite {
|
||||
|
||||
class sqlite_parameter_binder final : public sql::parameter_binder
|
||||
{
|
||||
public:
|
||||
explicit sqlite_parameter_binder(sqlite3 *db, sqlite3_stmt *stmt);
|
||||
|
||||
void bind(size_t pos, char i) override;
|
||||
void bind(size_t pos, short i) override;
|
||||
void bind(size_t pos, int i) override;
|
||||
void bind(size_t pos, long i) override;
|
||||
void bind(size_t pos, long long int i) override;
|
||||
void bind(size_t pos, unsigned char i) override;
|
||||
void bind(size_t pos, unsigned short i) override;
|
||||
void bind(size_t pos, unsigned int i) override;
|
||||
void bind(size_t pos, unsigned long i) override;
|
||||
void bind(size_t pos, unsigned long long int i) override;
|
||||
void bind(size_t pos, bool b) override;
|
||||
void bind(size_t pos, float d) override;
|
||||
void bind(size_t pos, double d) override;
|
||||
void bind(size_t pos, const char *string) override;
|
||||
void bind(size_t pos, const char *str, size_t size) override;
|
||||
void bind(size_t pos, const std::string &str) override;
|
||||
void bind(size_t pos, const std::string &str, size_t size) override;
|
||||
|
||||
private:
|
||||
sqlite3 *db_{nullptr};
|
||||
sqlite3_stmt *stmt_{nullptr};
|
||||
|
||||
std::vector<std::shared_ptr<std::string> > host_strings_;
|
||||
};
|
||||
}
|
||||
|
||||
#endif //QUERY_SQLITE_PARAMETER_BINDER_H
|
||||
@@ -0,0 +1,42 @@
|
||||
#ifndef QUERY_SQLITE_PREPARED_RESULT_READER_HPP
|
||||
#define QUERY_SQLITE_PREPARED_RESULT_READER_HPP
|
||||
|
||||
#include "matador/sql/query_result_reader.hpp"
|
||||
|
||||
#include <sqlite3.h>
|
||||
|
||||
namespace matador::backends::sqlite {
|
||||
|
||||
class sqlite_prepared_result_reader final : public sql::query_result_reader
|
||||
{
|
||||
public:
|
||||
sqlite_prepared_result_reader(sqlite3 *db, sqlite3_stmt *stmt);
|
||||
|
||||
[[nodiscard]] size_t column_count() const override;
|
||||
[[nodiscard]] const char *column(size_t index) const override;
|
||||
bool fetch() override;
|
||||
|
||||
void read_value(const char *id, size_t index, char &value) override;
|
||||
void read_value(const char *id, size_t index, short &value) override;
|
||||
void read_value(const char *id, size_t index, int &value) override;
|
||||
void read_value(const char *id, size_t index, long &value) override;
|
||||
void read_value(const char *id, size_t index, long long int &value) override;
|
||||
void read_value(const char *id, size_t index, unsigned char &value) override;
|
||||
void read_value(const char *id, size_t index, unsigned short &value) override;
|
||||
void read_value(const char *id, size_t index, unsigned int &value) override;
|
||||
void read_value(const char *id, size_t index, unsigned long &value) override;
|
||||
void read_value(const char *id, size_t index, unsigned long long int &value) override;
|
||||
void read_value(const char *id, size_t index, bool &value) override;
|
||||
void read_value(const char *id, size_t index, float &value) override;
|
||||
void read_value(const char *id, size_t index, double &value) override;
|
||||
void read_value(const char *id, size_t index, char *value, size_t s) override;
|
||||
void read_value(const char *id, size_t index, std::string &value) override;
|
||||
void read_value(const char *id, size_t index, std::string &value, size_t s) override;
|
||||
void read_value(const char *id, size_t index, sql::any_type &value, sql::data_type_t type, size_t size) override;
|
||||
|
||||
private:
|
||||
sqlite3 *db_{nullptr};
|
||||
sqlite3_stmt *stmt_{nullptr};
|
||||
};
|
||||
}
|
||||
#endif //QUERY_SQLITE_PREPARED_RESULT_READER_HPP
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
namespace matador::backends::sqlite {
|
||||
|
||||
class sqlite_result_reader : public sql::query_result_reader
|
||||
class sqlite_result_reader final : public sql::query_result_reader
|
||||
{
|
||||
public:
|
||||
using columns = std::vector<char*>;
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
#ifndef QUERY_SQLITE_STATEMENT_HPP
|
||||
#define QUERY_SQLITE_STATEMENT_HPP
|
||||
|
||||
#include "matador/sql/statement_impl.hpp"
|
||||
|
||||
#include "sqlite_parameter_binder.h"
|
||||
|
||||
namespace matador::backends::sqlite {
|
||||
|
||||
class sqlite_statement final : public sql::statement_impl
|
||||
{
|
||||
public:
|
||||
sqlite_statement(sqlite3 *db, sqlite3_stmt *stmt, const sql::query_context &query);
|
||||
~sqlite_statement();
|
||||
|
||||
size_t execute() override;
|
||||
std::unique_ptr<sql::query_result_impl> fetch() override;
|
||||
void reset() override;
|
||||
protected:
|
||||
sql::parameter_binder& binder() override;
|
||||
|
||||
private:
|
||||
sqlite3 *db_{nullptr};
|
||||
sqlite3_stmt *stmt_{nullptr};
|
||||
|
||||
sqlite_parameter_binder binder_;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif //QUERY_SQLITE_STATEMENT_HPP
|
||||
Reference in New Issue
Block a user