~aleteoryx/muditaos

ref: sign_test muditaos/module-db/Database/Database.hpp -rw-r--r-- 1.8 KiB
a217eeb3 — Dawid Wojtas [BH-2024] Fix lack of alarm directory after updating software 1 year, 5 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "sqlite3.h"
#include "QueryResult.hpp"

#include <memory>
#include <stdexcept>
#include <filesystem>

class DatabaseInitialisationError : public std::runtime_error
{
  public:
    using std::runtime_error::runtime_error;
};

class Database
{
  public:
    explicit Database(const char *name, bool readOnly = false);
    virtual ~Database();

    std::unique_ptr<QueryResult> query(const char *format, ...);

    bool execute(const char *format, ...);

    // Must be invoked prior creating any database object in order to initialize database OS layer
    static bool initialize();

    // Must be invoked before closing system in order to properly close OS layer
    static bool deinitialize();

    bool storeIntoFile(const std::filesystem::path &syncPath);

    uint32_t getLastInsertRowId();
    void pragmaQuery(const std::string &pragmaStatement);

    auto pragmaQueryForValue(const std::string &pragmaStatement, const std::int32_t value) -> bool;

    [[nodiscard]] bool isInitialized() const noexcept
    {
        return isInitialized_;
    }

    [[nodiscard]] std::string getName() const
    {
        return dbName;
    }

  private:
    static constexpr std::uint32_t maxQueryLen = (8 * 1024);

    void initQueryStatementBuffer();
    void clearQueryStatementBuffer();

    void populateDbAppId();

    /*
     * Arguments:
     *
     *   usrPtr - Pointer to user data
     *    count - The number of columns in the result set
     *     data - The row's data
     *  columns - The column names
     */
    static int queryCallback(void *usrPtr, int count, char **data, char **columns);

  protected:
    sqlite3 *dbConnection;
    std::string dbName;
    char *queryStatementBuffer;
    bool isInitialized_;
};