VSQLite++
0.3
Toggle main menu visibility
Loading...
Searching...
No Matches
include
sqlite
statement_cache.hpp
Go to the documentation of this file.
1
/*##############################################################################
2
VSQLite++ - virtuosic bytes SQLite3 C++ wrapper
3
4
Copyright (c) 2006-2024 Vinzenz Feenstra
5
and contributors
6
All rights reserved.
7
8
Redistribution and use in source and binary forms, with or without modification,
9
are permitted provided that the following conditions are met:
10
11
* Redistributions of source code must retain the above copyright notice,
12
this list of conditions and the following disclaimer.
13
* Redistributions in binary form must reproduce the above copyright notice,
14
this list of conditions and the following disclaimer in the documentation
15
and/or other materials provided with the distribution.
16
* Neither the name of virtuosic bytes nor the names of its contributors may
17
be used to endorse or promote products derived from this software without
18
specific prior written permission.
19
20
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
POSSIBILITY OF SUCH DAMAGE.
31
32
##############################################################################*/
33
#ifndef GUARD_SQLITE_STATEMENT_CACHE_HPP_INCLUDED
34
#define GUARD_SQLITE_STATEMENT_CACHE_HPP_INCLUDED
35
36
#include <cstddef>
37
#include <list>
38
#include <memory>
39
#include <mutex>
40
#include <string>
41
#include <string_view>
42
#include <unordered_map>
43
44
struct
sqlite3;
45
struct
sqlite3_stmt;
46
54
namespace
sqlite
{
55
inline
namespace
v2
{
56
struct
connection
;
57
59
struct
statement_cache_config
{
60
std::size_t
capacity
= 32;
61
bool
enabled
=
true
;
62
};
63
65
class
statement_cache
{
66
public
:
67
explicit
statement_cache
(
statement_cache_config
cfg = {});
68
69
sqlite3_stmt *
acquire
(sqlite3 *db, std::string_view sql);
70
void
release
(std::string_view sql, sqlite3_stmt *stmt);
71
void
clear
(sqlite3 *db);
72
void
reset
(
statement_cache_config
cfg);
73
statement_cache_config
config
() const noexcept {
74
return
config_
;
75
}
76
77
private
:
78
struct
entry
{
79
std::string
sql
;
80
sqlite3_stmt *
stmt
=
nullptr
;
81
};
82
83
using
lru_list
= std::list<entry>;
84
using
iterator
= lru_list::iterator;
85
86
statement_cache_config
config_
;
87
lru_list
lru_
;
88
std::unordered_map<std::string, iterator>
map_
;
89
mutable
std::mutex
mutex_
;
90
};
91
}
// namespace v2
92
}
// namespace sqlite
93
94
#endif
// GUARD_SQLITE_STATEMENT_CACHE_HPP_INCLUDED
sqlite::statement_cache
Tracks prepared statements by SQL text and hands them out on demand.
Definition
statement_cache.hpp:65
sqlite::v2::statement_cache::config
statement_cache_config config() const noexcept
Definition
statement_cache.hpp:73
sqlite::v2::statement_cache::lru_list
std::list< entry > lru_list
Definition
statement_cache.hpp:83
sqlite::v2::statement_cache::config_
statement_cache_config config_
Definition
statement_cache.hpp:86
sqlite::v2::statement_cache::release
void release(std::string_view sql, sqlite3_stmt *stmt)
sqlite::v2::statement_cache::map_
std::unordered_map< std::string, iterator > map_
Definition
statement_cache.hpp:88
sqlite::v2::statement_cache::acquire
sqlite3_stmt * acquire(sqlite3 *db, std::string_view sql)
sqlite::v2::statement_cache::clear
void clear(sqlite3 *db)
sqlite::v2::statement_cache::lru_
lru_list lru_
Definition
statement_cache.hpp:87
sqlite::v2::statement_cache::iterator
lru_list::iterator iterator
Definition
statement_cache.hpp:84
sqlite::v2::statement_cache::mutex_
std::mutex mutex_
Definition
statement_cache.hpp:89
sqlite::v2::statement_cache::reset
void reset(statement_cache_config cfg)
sqlite::v2::statement_cache::statement_cache
statement_cache(statement_cache_config cfg={})
sqlite::v2
Definition
backup.hpp:18
sqlite
Definition
backup.hpp:17
sqlite::v2::connection
connection is used to open, close, attach and detach a database. Further it has to be passed to all c...
Definition
connection.hpp:64
sqlite::v2::statement_cache::entry
Definition
statement_cache.hpp:78
sqlite::v2::statement_cache::entry::sql
std::string sql
Definition
statement_cache.hpp:79
sqlite::v2::statement_cache::entry::stmt
sqlite3_stmt * stmt
Definition
statement_cache.hpp:80
sqlite::statement_cache_config
Configuration knobs for the built-in LRU statement cache.
Definition
statement_cache.hpp:59
sqlite::v2::statement_cache_config::enabled
bool enabled
Disable caching without destroying existing entries.
Definition
statement_cache.hpp:61
sqlite::v2::statement_cache_config::capacity
std::size_t capacity
Maximum cached statements.
Definition
statement_cache.hpp:60
Generated by
1.17.0