10#if __has_include("defs.h")
20#include "safe_winsock.h"
21#include <sqlite3/sqlite3.h>
28#if (defined(_MSVC_LANG) && _MSVC_LANG < 202002L) \
29 || (!defined(_MSVC_LANG) && (__cplusplus < 202002L))
30#error "sqlitepp requires c++20"
33#pragma comment(lib, "sqlite3.lib")
47 Query (Database& db,
const std::string&
sql = std::string ());
64 operator sqlite3_stmt* ();
73 std::string
sql ()
const;
76 operator std::string ()
const;
81 Query&
bind (
int par,
const std::string& val);
82 Query&
bind (
const std::string& parname,
const std::string& val);
84 Query&
bind (
const std::string& parname,
int val);
86 Query&
bind (
const std::string& parname,
double val);
88 Query&
bind (
const std::string& parname, sqlite3_int64 val);
89 Query&
bind (
int par,
void* val,
int len);
90 Query&
bind (
const std::string& parname,
void* val,
int len);
92 Query&
bind (
int par,
const SYSTEMTIME& st);
93 Query&
bind (
const std::string& parname,
const SYSTEMTIME& st);
99 int column_int (
const std::string& colname)
const;
102 std::string
column_str (
const std::string& colname)
const;
105 const char*
column_text (
const std::string& colname)
const;
111 sqlite3_int64
column_int64 (
const std::string& name)
const;
114 const void*
column_blob (
const std::string& name)
const;
117 SYSTEMTIME column_time (
int nc)
const;
118 SYSTEMTIME column_time (
const std::string& name)
const;
122 int column_type (
const std::string& colname)
const;
125 int column_size (
const std::string& colname)
const;
127#ifndef SQLITE_OMIT_DECLTYPE
129 std::string
decl_type (
const std::string& colname)
const;
132#ifdef SQLITE_ENABLE_COLUMN_METADATA
134 std::string
table_name (
const std::string& colname)
const;
137 std::string
database_name (
const std::string& colname)
const;
152 friend class Database;
154 void map_columns ()
const;
155 int find_col (
const std::string& colname)
const;
156 erc check_errors (
int rc);
159 std::shared_ptr<sqlite3> dbase;
165 bool operator() (
const std::string& left,
const std::string& right)
const;
168 std::map<std::string, int, Query::iless>
mutable index;
169 bool mutable col_mapped;
181 create = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
187 memory = SQLITE_OPEN_MEMORY | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
219 return db ? db.get () :
nullptr;
238 erc exec (
const std::string& sql);
250 std::string
schema (
int n)
const;
261 sqlite_errors = &fac;
267 return *sqlite_errors;
271 std::shared_ptr<sqlite3> db;
274 static errfac* sqlite_errors;
282 return sqlite3_last_insert_rowid (db.get ());
288 return sqlite3_changes64 (db.get ());
294 return sqlite3_total_changes64 (db.get ());
302inline Query::operator sqlite3_stmt* ()
309 return sqlite3_column_count (stmt);
322inline bool Query::iless::operator() (
const std::string& left,
const std::string& right)
const
325 return _strcmpi (left.c_str (), right.c_str ()) < 0;
327 return strcasecmp (left.c_str (), right.c_str ()) < 0;
334inline Query::operator std::string ()
const
Wrapper for database connection handle.
Definition sqlitepp.h:174
static void Errors(mlib::errfac &fac)
Set error facility for all SQLITEPP errors.
Definition sqlitepp.h:259
erc close()
Close database connection.
Definition sqlitepp.cpp:176
Database()
Default constructor.
Definition sqlitepp.cpp:54
int extended_error()
Return extended result code.
Definition sqlitepp.cpp:236
Database & copy(Database &src)
Copy database content.
Definition sqlitepp.cpp:80
erc exec(const std::string &sql)
Execute multiple SQL sentences.
Definition sqlitepp.cpp:183
openflags
Flags for database opening mode.
Definition sqlitepp.h:178
@ sharedcache
database connection is eligible to use shared cache mode
Definition sqlitepp.h:185
@ nofollow
filename cannot be a symbolic link
Definition sqlitepp.h:188
@ privatecache
database connection does not participate in shared cache mode
Definition sqlitepp.h:186
@ readwrite
Read/write access on existing database.
Definition sqlitepp.h:180
@ readonly
Read-only access.
Definition sqlitepp.h:179
@ ext_result
enables extended result codes
Definition sqlitepp.h:189
@ create
Read/write/create access.
Definition sqlitepp.h:181
@ uri
filename is interpreted as a URI
Definition sqlitepp.h:182
@ fullmutex
database connection opens in the serialized mode
Definition sqlitepp.h:184
@ nomutex
database connection opens in multi-threaded mode
Definition sqlitepp.h:183
@ memory
database opened in memory
Definition sqlitepp.h:187
checked< Query > make_query(const std::string &sql)
Return a Query object containing a prepared statement with the given SQL text.
Definition sqlitepp.cpp:201
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:219
sqlite3_int64 changes()
Return number of records changed by last query.
Definition sqlitepp.h:285
bool connected()
Check if database is opened or not.
Definition sqlitepp.h:202
sqlite3_int64 last_rowid()
Return rowid of last successful insert.
Definition sqlitepp.h:279
erc open(const std::string &name, openflags flags=openflags::create)
Open database connection.
Definition sqlitepp.cpp:161
sqlite3_int64 total_changes()
Return total number of changes since database was opened.
Definition sqlitepp.h:291
sqlite3 * handle() const
Return handle of database connection.
Definition sqlitepp.h:217
std::string filename(const std::string &schema="main") const
Return filename of a database connection.
Definition sqlitepp.cpp:119
bool is_readonly()
Return true if database connection is read-only.
Definition sqlitepp.cpp:147
static const errfac & Errors()
Return error facility used by SQLITEPP.
Definition sqlitepp.h:265
std::string schema(int n) const
Return schema name for a database connection.
Definition sqlitepp.cpp:135
erc flush()
Flush.
Definition sqlitepp.cpp:242
Wrapper for SQL prepared sentences.
Definition sqlitepp.h:41
int column_int(int nc) const
Return column value converted to an integer.
Definition sqlitepp.cpp:825
std::string decl_type(int nc) const
Definition sqlitepp.cpp:636
int column_type(int nc) const
Return data type for a column specified by name or number.
Definition sqlitepp.cpp:593
Query & clear_bindings()
Reset all parameters to NULL values.
Definition sqlitepp.cpp:576
sqlite3_int64 column_int64(int nc) const
Return column value converted to a 64-bit integer.
Definition sqlitepp.cpp:904
std::string column_str(int nc) const
Return column value as an UTF-8 encoded string.
Definition sqlitepp.cpp:841
void clear()
Finalizes the statement and removes the database connection.
Definition sqlitepp.cpp:422
const char * column_text(int nc) const
Return a pointer to a NULL-terminated text with the column content.
Definition sqlitepp.cpp:862
Query()
Default constructor.
Definition sqlitepp.h:297
erc reset()
Reset statement to initial state.
Definition sqlitepp.cpp:412
int columns()
Return number of columns in the result set.
Definition sqlitepp.h:307
std::string column_name(int nc) const
Return column name.
Definition sqlitepp.cpp:788
Query & operator=(Query &&rhs)
Move assignment operator.
Definition sqlitepp.cpp:321
int column_size(int nc) const
Return number of bytes in a column that contains a BLOB or a string.
Definition sqlitepp.cpp:609
const void * column_blob(int nc) const
Return a pointer to a BLOB with the column content.
Definition sqlitepp.cpp:920
Query & sql(const std::string &str)
Assign SQL text to a query.
Definition sqlitepp.cpp:366
std::string table_name(int nc) const
Return originating table name.
Definition sqlitepp.cpp:684
double column_double(int nc) const
Return floating point value of the column.
Definition sqlitepp.cpp:883
erc step()
Evaluate the statement.
Definition sqlitepp.cpp:400
std::string sql() const
Retrieve SQL text.
Definition sqlitepp.cpp:386
std::string database_name(int nc) const
Return originating schema name.
Definition sqlitepp.cpp:740
Query & bind(int par, const std::string &val)
Bind a parameter specified by number to a character string.
Definition sqlitepp.cpp:452
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.