11#pragma once
22
3+ #include < cassert>
34#include < string>
45#include < functional>
56#include < stdexcept>
@@ -213,7 +214,7 @@ namespace sqlite {
213214 std::is_floating_point<Type>::value
214215 || std::is_integral<Type>::value
215216 || std::is_same<sqlite_int64, Type>::value
216- > { };
217+ > { };
217218
218219
219220 template <typename T> friend database_binder& operator <<(database_binder& db, const T& val);
@@ -297,6 +298,10 @@ namespace sqlite {
297298 }
298299 };
299300
301+ struct sqlite_config {
302+ std::string key{};
303+ };
304+
300305 class database {
301306 private:
302307 std::shared_ptr<sqlite3> _db;
@@ -318,6 +323,18 @@ namespace sqlite {
318323 database (std::shared_ptr<sqlite3> db):
319324 _db (db) {}
320325
326+ database (const std::string &db_name, const sqlite_config &config):
327+ database (std::u16string(db_name.begin(), db_name.end()), config) {}
328+
329+ database (const std::u16string &db_name, const sqlite_config &config): database(db_name) {
330+ #ifdef SQLITE_HAS_CODEC
331+ if (!config.key .empty ()) set_key (config.key );
332+ #else
333+ assert (config.key .empty () && " Encryption supported is disabled." );
334+ (void )config; // Suppress unused warning
335+ #endif
336+ }
337+
321338 database_binder operator <<(const std::string& sql) {
322339 return database_binder (_db, sql);
323340 }
@@ -341,13 +358,6 @@ namespace sqlite {
341358 }
342359
343360#ifdef SQLITE_HAS_CODEC
344- database (const std::string &db_name, const std::string &key): database(db_name) {
345- set_key (key);
346- }
347- database (const std::u16string &db_name, const std::string &key): database(db_name) {
348- set_key (key);
349- }
350-
351361 void set_key (const std::string &key) {
352362 if (auto ret = sqlite3_key (_db.get (), key.data (), key.size ()))
353363 exceptions::throw_sqlite_error (ret);
0 commit comments