ocpp 0.24.1
A C++ implementation of the Open Charge Point Protocol
sqlite_statement.hpp
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2020 - 2023 Pionix GmbH and Contributors to EVerest
3
4#ifndef SQLITE_STATEMENT_HPP
5#define SQLITE_STATEMENT_HPP
6
7#include <sqlite3.h>
8
9#include <everest/logging.hpp>
10#include <ocpp/common/types.hpp>
11
12namespace ocpp::common {
13
15enum class SQLiteString {
16 Static,
17 Transient
18};
19
23public:
24 virtual ~SQLiteStatementInterface() = default;
25
26 virtual int step() = 0;
27 virtual int reset() = 0;
28 virtual int changes() = 0;
29
30 virtual int bind_text(const int idx, const std::string& val, SQLiteString lifetime = SQLiteString::Static) = 0;
31 virtual int bind_text(const std::string& param, const std::string& val,
32 SQLiteString lifetime = SQLiteString::Static) = 0;
33 virtual int bind_int(const int idx, const int val) = 0;
34 virtual int bind_int(const std::string& param, const int val) = 0;
35 virtual int bind_datetime(const int idx, const ocpp::DateTime val) = 0;
36 virtual int bind_datetime(const std::string& param, const ocpp::DateTime val) = 0;
37 virtual int bind_double(const int idx, const double val) = 0;
38 virtual int bind_double(const std::string& param, const double val) = 0;
39 virtual int bind_null(const int idx) = 0;
40 virtual int bind_null(const std::string& param) = 0;
41
42 virtual int get_number_of_rows() = 0;
43 virtual int column_type(const int idx) = 0;
44 virtual std::string column_text(const int idx) = 0;
45 virtual std::optional<std::string> column_text_nullable(const int idx) = 0;
46 virtual int column_int(const int idx) = 0;
47 virtual ocpp::DateTime column_datetime(const int idx) = 0;
48 virtual double column_double(const int idx) = 0;
49};
50
53private:
54 sqlite3_stmt* stmt;
55 sqlite3* db;
56
57public:
58 SQLiteStatement(sqlite3* db, const std::string& query);
60
61 int step() override;
62 int reset() override;
63 int changes() override;
64
65 int bind_text(const int idx, const std::string& val, SQLiteString lifetime = SQLiteString::Static) override;
66 int bind_text(const std::string& param, const std::string& val,
67 SQLiteString lifetime = SQLiteString::Static) override;
68 int bind_int(const int idx, const int val) override;
69 int bind_int(const std::string& param, const int val) override;
70 int bind_datetime(const int idx, const ocpp::DateTime val) override;
71 int bind_datetime(const std::string& param, const ocpp::DateTime val) override;
72 int bind_double(const int idx, const double val) override;
73 int bind_double(const std::string& param, const double val) override;
74 int bind_null(const int idx) override;
75 int bind_null(const std::string& param) override;
76
77 int get_number_of_rows() override;
78 int column_type(const int idx) override;
79 std::string column_text(const int idx) override;
80 std::optional<std::string> column_text_nullable(const int idx) override;
81 int column_int(const int idx) override;
82 ocpp::DateTime column_datetime(const int idx) override;
83 double column_double(const int idx) override;
84};
85
86} // namespace ocpp::common
87
88#endif // DEVICE_MODEL_STORAGE_SQLITE_HPP
Contains a DateTime implementation that can parse and create RFC 3339 compatible strings.
Definition: types.hpp:109
Interface for SQLiteStatement wrapper class that handles finalization, step, binding and column acces...
Definition: sqlite_statement.hpp:22
RAII wrapper class that handles finalization, step, binding and column access of sqlite3_stmt.
Definition: sqlite_statement.hpp:52