@@ -399,7 +399,15 @@ namespace sqlite {
399399 );
400400 }
401401
402+ enum class Encoding {
403+ AUTO = SQLITE_ANY,
404+ UTF8 = SQLITE_UTF8,
405+ UTF16 = SQLITE_UTF16
406+ };
402407 struct sqlite_config {
408+ int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
409+ const char *gVfs = nullptr ;
410+ Encoding encoding = Encoding::AUTO;
403411 };
404412
405413 class database {
@@ -426,12 +434,23 @@ namespace sqlite {
426434 database (std::shared_ptr<sqlite3> db):
427435 _db (db) {}
428436
429- database (const std::string &db_name, const sqlite_config &config): database(db_name) {
430- (void )config; // Suppress unused warning
437+ database (const std::string &db_name, const sqlite_config &config): _db(nullptr ) {
438+ sqlite3* tmp = nullptr ;
439+ auto ret = sqlite3_open_v2 (db_name.data (), &tmp, config.flags , config.gVfs );
440+ _db = std::shared_ptr<sqlite3>(tmp, [=](sqlite3* ptr) { sqlite3_close_v2 (ptr); }); // this will close the connection eventually when no longer needed.
441+ if (ret != SQLITE_OK) exceptions::throw_sqlite_error (ret);
442+ if (config.encoding == Encoding::UTF16)
443+ *this << R"( PRAGMA encoding = "UTF-16";)" ;
431444 }
432445
433- database (const std::u16string &db_name, const sqlite_config &config): database(db_name) {
434- (void )config; // Suppress unused warning
446+ database (const std::u16string &db_name, const sqlite_config &config): _db(nullptr ) {
447+ auto db_name_utf8 = std::wstring_convert<std::codecvt_utf8_utf16<char16_t >, char16_t >().to_bytes (db_name);
448+ sqlite3* tmp = nullptr ;
449+ auto ret = sqlite3_open_v2 (db_name_utf8.data (), &tmp, config.flags , config.gVfs );
450+ _db = std::shared_ptr<sqlite3>(tmp, [=](sqlite3* ptr) { sqlite3_close_v2 (ptr); }); // this will close the connection eventually when no longer needed.
451+ if (ret != SQLITE_OK) exceptions::throw_sqlite_error (ret);
452+ if (config.encoding != Encoding::UTF8)
453+ *this << R"( PRAGMA encoding = "UTF-16";)" ;
435454 }
436455
437456 database_binder operator <<(const std::string& sql) {
0 commit comments