8#if __has_include("defs.h")
18#include "safe_winsock.h"
19#include <sqlite3/sqlite3.h>
26#if (defined(_MSVC_LANG) && _MSVC_LANG < 202002L) \
27 || (!defined(_MSVC_LANG) && (__cplusplus < 202002L))
28#error "sqlitepp requires c++20"
31#pragma comment(lib, "sqlite3.lib")
46 create = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
47 uri = SQLITE_OPEN_URI,
52 memory = SQLITE_OPEN_MEMORY | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
84 return db ? db.get () :
nullptr;
103 erc exec (
const std::string& sql);
106 checked<Query>
make_query (
const std::string& sql);
115 std::string
schema (
int n)
const;
126 sqlite_errors = &fac;
132 return *sqlite_errors;
136 std::shared_ptr<sqlite3> db;
139 static errfac* sqlite_errors;
145 friend class Database;
152 Query (Database& db,
const std::string&
sql = std::string ());
169 operator sqlite3_stmt* ();
175 Query&
sql (
const std::string& str);
178 std::string
sql ()
const;
181 operator std::string ()
const;
186 Query&
bind (
int par,
const std::string& val);
187 Query&
bind (
const std::string& parname,
const std::string& val);
189 Query&
bind (
const std::string& parname,
int val);
191 Query&
bind (
const std::string& parname,
double val);
192 Query&
bind (
int par, sqlite3_int64 val);
193 Query&
bind (
const std::string& parname, sqlite3_int64 val);
194 Query&
bind (
int par,
void* val,
int len);
195 Query&
bind (
const std::string& parname,
void* val,
int len);
197 Query&
bind (
int par,
const SYSTEMTIME& st);
198 Query&
bind (
const std::string& parname,
const SYSTEMTIME& st);
204 int column_int (
const std::string& colname)
const;
207 std::string
column_str (
const std::string& colname)
const;
210 const char*
column_text (
const std::string& colname)
const;
216 sqlite3_int64
column_int64 (
const std::string& name)
const;
219 const void*
column_blob (
const std::string& name)
const;
222 SYSTEMTIME column_time (
int nc)
const;
223 SYSTEMTIME column_time (
const std::string& name)
const;
227 int column_type (
const std::string& colname)
const;
230 int column_size (
const std::string& colname)
const;
232#ifndef SQLITE_OMIT_DECLTYPE
234 std::string
decl_type (
const std::string& colname)
const;
237#ifdef SQLITE_ENABLE_COLUMN_METADATA
239 std::string
table_name (
const std::string& colname)
const;
242 std::string
database_name (
const std::string& colname)
const;
257 void map_columns ()
const;
258 int find_col (
const std::string& colname)
const;
259 erc check_errors (
int rc);
268 bool operator() (
const std::string& left,
const std::string& right)
const;
271 std::map<std::string, int, Query::iless>
mutable index;
272 bool mutable col_mapped;
279 return sqlite3_last_insert_rowid (db.get ());
285 return sqlite3_changes64 (db.get ());
291 return sqlite3_total_changes64 (db.get ());
299inline Query::operator sqlite3_stmt* ()
306 return sqlite3_column_count (stmt);
319inline bool Query::iless::operator() (
const std::string& left,
const std::string& right)
const
322 return _strcmpi (left.c_str (), right.c_str ()) < 0;
324 return strcasecmp (left.c_str (), right.c_str ()) < 0;
331inline Query::operator std::string ()
const
Wrapper for database connection handle.
Definition sqlitepp.h:39
static void Errors(mlib::errfac &fac)
Set error facility for all SQLITEPP errors.
Definition sqlitepp.h:124
erc close()
Close database connection.
Definition sqlitepp.cpp:172
Database()
Default constructor.
Definition sqlitepp.cpp:50
int extended_error()
Return extended result code.
Definition sqlitepp.cpp:232
Database & copy(Database &src)
Copy database content.
Definition sqlitepp.cpp:76
erc exec(const std::string &sql)
Execute multiple SQL sentences.
Definition sqlitepp.cpp:179
openflags
Flags for database opening mode.
Definition sqlitepp.h:43
@ sharedcache
database connection is eligible to use shared cache mode
Definition sqlitepp.h:50
@ nofollow
filename cannot be a symbolic link
Definition sqlitepp.h:53
@ privatecache
database connection does not participate in shared cache mode
Definition sqlitepp.h:51
@ readwrite
Read/write access on existing database.
Definition sqlitepp.h:45
@ readonly
Read-only access.
Definition sqlitepp.h:44
@ ext_result
enables extended result codes
Definition sqlitepp.h:54
@ create
Read/write/create access.
Definition sqlitepp.h:46
@ uri
filename is interpreted as a URI
Definition sqlitepp.h:47
@ fullmutex
database connection opens in the serialized mode
Definition sqlitepp.h:49
@ nomutex
database connection opens in multi-threaded mode
Definition sqlitepp.h:48
@ memory
database opened in memory
Definition sqlitepp.h:52
checked< Query > make_query(const std::string &sql)
Return a Query object containing a prepared statement with the given SQL text.
Definition sqlitepp.cpp:197
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:215
sqlite3_int64 changes()
Return number of records changed by last query.
Definition sqlitepp.h:282
bool connected()
Check if database is opened or not.
Definition sqlitepp.h:67
sqlite3_int64 last_rowid()
Return rowid of last successful insert.
Definition sqlitepp.h:276
erc open(const std::string &name, openflags flags=openflags::create)
Open database connection.
Definition sqlitepp.cpp:157
sqlite3_int64 total_changes()
Return total number of changes since database was opened.
Definition sqlitepp.h:288
sqlite3 * handle() const
Return handle of database connection.
Definition sqlitepp.h:82
std::string filename(const std::string &schema="main") const
Return filename of a database connection.
Definition sqlitepp.cpp:115
bool is_readonly()
Return true if database connection is read-only.
Definition sqlitepp.cpp:143
static const errfac & Errors()
Return error facility used by SQLITEPP.
Definition sqlitepp.h:130
std::string schema(int n) const
Return schema name for a database connection.
Definition sqlitepp.cpp:131
erc flush()
Flush.
Definition sqlitepp.cpp:238
Wrapper for SQL prepared sentences.
Definition sqlitepp.h:144
int column_int(int nc) const
Return column value converted to an integer.
Definition sqlitepp.cpp:821
std::string decl_type(int nc) const
Definition sqlitepp.cpp:632
int column_type(int nc) const
Return data type for a column specified by name or number.
Definition sqlitepp.cpp:589
Query & clear_bindings()
Reset all parameters to NULL values.
Definition sqlitepp.cpp:572
sqlite3_int64 column_int64(int nc) const
Return column value converted to a 64-bit integer.
Definition sqlitepp.cpp:900
std::string column_str(int nc) const
Return column value as an UTF-8 encoded string.
Definition sqlitepp.cpp:837
void clear()
Finalizes the statement and removes the database connection.
Definition sqlitepp.cpp:418
const char * column_text(int nc) const
Return a pointer to a NULL-terminated text with the column content.
Definition sqlitepp.cpp:858
Query()
Default constructor.
Definition sqlitepp.h:294
erc reset()
Reset statement to initial state.
Definition sqlitepp.cpp:408
int columns()
Return number of columns in the result set.
Definition sqlitepp.h:304
std::string column_name(int nc) const
Return column name.
Definition sqlitepp.cpp:784
Query & operator=(Query &&rhs)
Move assignment operator.
Definition sqlitepp.cpp:317
int column_size(int nc) const
Return number of bytes in a column that contains a BLOB or a string.
Definition sqlitepp.cpp:605
const void * column_blob(int nc) const
Return a pointer to a BLOB with the column content.
Definition sqlitepp.cpp:916
Query & sql(const std::string &str)
Assign SQL text to a query.
Definition sqlitepp.cpp:362
std::string table_name(int nc) const
Return originating table name.
Definition sqlitepp.cpp:680
double column_double(int nc) const
Return floating point value of the column.
Definition sqlitepp.cpp:879
erc step()
Evaluate the statement.
Definition sqlitepp.cpp:396
std::string sql() const
Retrieve SQL text.
Definition sqlitepp.cpp:382
std::string database_name(int nc) const
Return originating schema name.
Definition sqlitepp.cpp:736
Query & bind(int par, const std::string &val)
Bind a parameter specified by number to a character string.
Definition sqlitepp.cpp:448
objects returned as a function result or thrown directly.
Definition errorcode.h:68
An error facility routes a group of errors handled in a similar manner.
Definition errorcode.h:136
Definition of erc and erfac classes.