@@ -399,15 +399,28 @@ namespace sqlite {
399
399
);
400
400
}
401
401
402
+ enum class Flags {
403
+ OPEN_READONLY = SQLITE_OPEN_READONLY,
404
+ OPEN_READWRITE = SQLITE_OPEN_READWRITE,
405
+ OPEN_CREATE = SQLITE_OPEN_CREATE,
406
+ OPEN_NOMUTEX = SQLITE_OPEN_NOMUTEX,
407
+ OPEN_FULLMUTEX = SQLITE_OPEN_FULLMUTEX,
408
+ OPEN_SHAREDCACHE = SQLITE_OPEN_SHAREDCACHE,
409
+ OPEN_PRIVATECACH = SQLITE_OPEN_PRIVATECACHE,
410
+ OPEN_URI = SQLITE_OPEN_URI
411
+ };
412
+ Flags operator |(const Flags& a, const Flags& b) {
413
+ return static_cast <Flags>(static_cast <int >(a) | static_cast <int >(b));
414
+ };
402
415
enum class Encoding {
403
- ANY = SQLITE_ANY,
404
- UTF8 = SQLITE_UTF8,
405
- UTF16 = SQLITE_UTF16
416
+ ANY = SQLITE_ANY,
417
+ UTF8 = SQLITE_UTF8,
418
+ UTF16 = SQLITE_UTF16
406
419
};
407
420
struct sqlite_config {
408
- int flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE ;
409
- const char *gVfs = nullptr ;
410
- Encoding encoding = Encoding::ANY;
421
+ Flags flags = Flags::OPEN_READWRITE | Flags::OPEN_CREATE ;
422
+ const char *zVfs = nullptr ;
423
+ Encoding encoding = Encoding::ANY;
411
424
};
412
425
413
426
class database {
@@ -417,21 +430,21 @@ namespace sqlite {
417
430
public:
418
431
database (const std::string &db_name, const sqlite_config &config = {}): _db(nullptr ) {
419
432
sqlite3* tmp = nullptr ;
420
- auto ret = sqlite3_open_v2 (db_name.data (), &tmp, config.flags , config.gVfs );
433
+ auto ret = sqlite3_open_v2 (db_name.data (), &tmp, static_cast < int >( config.flags ) , config.zVfs );
421
434
_db = std::shared_ptr<sqlite3>(tmp, [=](sqlite3* ptr) { sqlite3_close_v2 (ptr); }); // this will close the connection eventually when no longer needed.
422
435
if (ret != SQLITE_OK) exceptions::throw_sqlite_error (ret);
423
436
if (config.encoding == Encoding::UTF16)
424
- *this << R"( PRAGMA encoding = "UTF-16";)" ;
437
+ *this << R"( PRAGMA encoding = "UTF-16";)" ;
425
438
}
426
439
427
440
database (const std::u16string &db_name, const sqlite_config &config = {}): _db(nullptr ) {
428
- auto db_name_utf8 = std::wstring_convert<std::codecvt_utf8_utf16<char16_t >, char16_t >().to_bytes (db_name);
441
+ auto db_name_utf8 = std::wstring_convert<std::codecvt_utf8_utf16<char16_t >, char16_t >().to_bytes (db_name);
429
442
sqlite3* tmp = nullptr ;
430
- auto ret = sqlite3_open_v2 (db_name_utf8.data (), &tmp, config.flags , config.gVfs );
443
+ auto ret = sqlite3_open_v2 (db_name_utf8.data (), &tmp, static_cast < int >( config.flags ) , config.zVfs );
431
444
_db = std::shared_ptr<sqlite3>(tmp, [=](sqlite3* ptr) { sqlite3_close_v2 (ptr); }); // this will close the connection eventually when no longer needed.
432
445
if (ret != SQLITE_OK) exceptions::throw_sqlite_error (ret);
433
446
if (config.encoding != Encoding::UTF8)
434
- *this << R"( PRAGMA encoding = "UTF-16";)" ;
447
+ *this << R"( PRAGMA encoding = "UTF-16";)" ;
435
448
}
436
449
437
450
database (std::shared_ptr<sqlite3> db):
0 commit comments