10#if __has_include("defs.h")
21#include "safe_winsock.h"
22#include <sqlite3/sqlite3.h>
29#if (defined(_MSVC_LANG) && _MSVC_LANG < 202002L) \
30 || (!defined(_MSVC_LANG) && (__cplusplus < 202002L))
31#error "sqlitepp requires c++20"
34#pragma comment(lib, "sqlite3.lib")
48 Query (Database& db,
const std::string&
sql = std::string ());
65 operator sqlite3_stmt* ();
74 std::string
sql ()
const;
77 operator std::string ()
const;
82 Query&
bind (
int par,
const std::string& val);
83 Query&
bind (
const std::string& parname,
const std::string& val);
85 Query&
bind (
const std::string& parname,
int val);
87 Query&
bind (
const std::string& parname,
double val);
89 Query&
bind (
const std::string& parname, sqlite3_int64 val);
90 Query&
bind (
int par,
void* val,
int len);
91 Query&
bind (
const std::string& parname,
void* val,
int len);
93 Query&
bind (
int par,
const SYSTEMTIME& st);
94 Query&
bind (
const std::string& parname,
const SYSTEMTIME& st);
100 int column_int (
const std::string& colname)
const;
103 std::string
column_str (
const std::string& colname)
const;
106 const char*
column_text (
const std::string& colname)
const;
112 sqlite3_int64
column_int64 (
const std::string& name)
const;
115 const void*
column_blob (
const std::string& name)
const;
118 SYSTEMTIME column_time (
int nc)
const;
119 SYSTEMTIME column_time (
const std::string& name)
const;
123 int column_type (
const std::string& colname)
const;
126 int column_size (
const std::string& colname)
const;
128#ifndef SQLITE_OMIT_DECLTYPE
130 std::string
decl_type (
const std::string& colname)
const;
133#ifdef SQLITE_ENABLE_COLUMN_METADATA
135 std::string
table_name (
const std::string& colname)
const;
138 std::string
database_name (
const std::string& colname)
const;
153 friend class Database;
155 void map_columns ()
const;
156 int find_col (
const std::string& colname)
const;
157 erc check_errors (
int rc);
160 std::shared_ptr<sqlite3> dbase;
166 bool operator() (
const std::string& left,
const std::string& right)
const;
169 std::map<std::string, int, Query::iless>
mutable index;
170 bool mutable col_mapped;
182 create = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
188 memory = SQLITE_OPEN_MEMORY | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
220 return db ? db.get () :
nullptr;
239 erc exec (
const std::string& sql);
248 std::filesystem::path
path (
const std::string&
schema =
"main")
const;
251 std::string
schema (
int n)
const;
262 sqlite_errors = &fac;
268 return *sqlite_errors;
272 std::shared_ptr<sqlite3> db;
275 static errfac* sqlite_errors;
283 return sqlite3_last_insert_rowid (db.get ());
289 return sqlite3_changes64 (db.get ());
295 return sqlite3_total_changes64 (db.get ());
303inline Query::operator sqlite3_stmt* ()
310 return sqlite3_column_count (stmt);
323inline bool Query::iless::operator() (
const std::string& left,
const std::string& right)
const
326 return _strcmpi (left.c_str (), right.c_str ()) < 0;
328 return strcasecmp (left.c_str (), right.c_str ()) < 0;
335inline Query::operator std::string ()
const
Wrapper for database connection handle.
Definition sqlitepp.h:175
static void Errors(mlib::errfac &fac)
Set error facility for all SQLITEPP errors.
Definition sqlitepp.h:260
erc close()
Close database connection.
Definition sqlitepp.cpp:177
Database()
Default constructor.
Definition sqlitepp.cpp:54
int extended_error()
Return extended result code.
Definition sqlitepp.cpp:237
Database & copy(Database &src)
Copy database content.
Definition sqlitepp.cpp:80
erc exec(const std::string &sql)
Execute multiple SQL sentences.
Definition sqlitepp.cpp:184
openflags
Flags for database opening mode.
Definition sqlitepp.h:179
@ sharedcache
database connection is eligible to use shared cache mode
Definition sqlitepp.h:186
@ nofollow
filename cannot be a symbolic link
Definition sqlitepp.h:189
@ privatecache
database connection does not participate in shared cache mode
Definition sqlitepp.h:187
@ readwrite
Read/write access on existing database.
Definition sqlitepp.h:181
@ readonly
Read-only access.
Definition sqlitepp.h:180
@ ext_result
enables extended result codes
Definition sqlitepp.h:190
@ create
Read/write/create access.
Definition sqlitepp.h:182
@ uri
filename is interpreted as a URI
Definition sqlitepp.h:183
@ fullmutex
database connection opens in the serialized mode
Definition sqlitepp.h:185
@ nomutex
database connection opens in multi-threaded mode
Definition sqlitepp.h:184
@ memory
database opened in memory
Definition sqlitepp.h:188
checked< Query > make_query(const std::string &sql)
Return a Query object containing a prepared statement with the given SQL text.
Definition sqlitepp.cpp:202
checked< Query > make_query_multiple(std::string &sql)
Return a Query object containing the first prepared statement of the given SQL text.
Definition sqlitepp.cpp:220
sqlite3_int64 changes()
Return number of records changed by last query.
Definition sqlitepp.h:286
bool connected()
Check if database is opened or not.
Definition sqlitepp.h:203
sqlite3_int64 last_rowid()
Return rowid of last successful insert.
Definition sqlitepp.h:280
std::filesystem::path path(const std::string &schema="main") const
Return file path of a database connection.
Definition sqlitepp.cpp:120
sqlite3_int64 total_changes()
Return total number of changes since database was opened.
Definition sqlitepp.h:292
sqlite3 * handle() const
Return handle of database connection.
Definition sqlitepp.h:218
erc open(const std::filesystem::path &name, openflags flags=openflags::create)
Open database connection.
Definition sqlitepp.cpp:162
bool is_readonly()
Return true if database connection is read-only.
Definition sqlitepp.cpp:148
static const errfac & Errors()
Return error facility used by SQLITEPP.
Definition sqlitepp.h:266
std::string schema(int n) const
Return schema name for a database connection.
Definition sqlitepp.cpp:136
erc flush()
Flush.
Definition sqlitepp.cpp:243
Wrapper for SQL prepared sentences.
Definition sqlitepp.h:42
int column_int(int nc) const
Return column value converted to an integer.
Definition sqlitepp.cpp:826
std::string decl_type(int nc) const
Definition sqlitepp.cpp:637
int column_type(int nc) const
Return data type for a column specified by name or number.
Definition sqlitepp.cpp:594
Query & clear_bindings()
Reset all parameters to NULL values.
Definition sqlitepp.cpp:577
sqlite3_int64 column_int64(int nc) const
Return column value converted to a 64-bit integer.
Definition sqlitepp.cpp:905
std::string column_str(int nc) const
Return column value as an UTF-8 encoded string.
Definition sqlitepp.cpp:842
void clear()
Finalizes the statement and removes the database connection.
Definition sqlitepp.cpp:423
const char * column_text(int nc) const
Return a pointer to a NULL-terminated text with the column content.
Definition sqlitepp.cpp:863
Query()
Default constructor.
Definition sqlitepp.h:298
erc reset()
Reset statement to initial state.
Definition sqlitepp.cpp:413
int columns()
Return number of columns in the result set.
Definition sqlitepp.h:308
std::string column_name(int nc) const
Return column name.
Definition sqlitepp.cpp:789
Query & operator=(Query &&rhs)
Move assignment operator.
Definition sqlitepp.cpp:322
int column_size(int nc) const
Return number of bytes in a column that contains a BLOB or a string.
Definition sqlitepp.cpp:610
const void * column_blob(int nc) const
Return a pointer to a BLOB with the column content.
Definition sqlitepp.cpp:921
Query & sql(const std::string &str)
Assign SQL text to a query.
Definition sqlitepp.cpp:367
std::string table_name(int nc) const
Return originating table name.
Definition sqlitepp.cpp:685
double column_double(int nc) const
Return floating point value of the column.
Definition sqlitepp.cpp:884
erc step()
Evaluate the statement.
Definition sqlitepp.cpp:401
std::string sql() const
Retrieve SQL text.
Definition sqlitepp.cpp:387
std::string database_name(int nc) const
Return originating schema name.
Definition sqlitepp.cpp:741
Query & bind(int par, const std::string &val)
Bind a parameter specified by number to a character string.
Definition sqlitepp.cpp:453
Provides a mechanism similar to expected for creating objects associated with error codes.
Definition errorcode.h:203
objects returned as a function result or thrown directly.
Definition errorcode.h:73
An error facility routes a group of errors handled in a similar manner.
Definition errorcode.h:141
Definition of mlib::erc and mlib::errfac classes.
sock::mflags operator|(sock::mflags f1, sock::mflags f2)
Bitwise OR operator for send message flags.
Definition sock.h:691