Arachne 1.0
Arachne - the perpetual stitcher of Wikidata entities.
Loading...
Searching...
No Matches
arachne::penelope::anonymous_namespace{inbox.cpp}::database Class Referencefinal

Public Member Functions

 database (const fs::path &path, const bool writable)
 database (const database &)=delete
databaseoperator= (const database &)=delete
 database (database &&)=delete
databaseoperator= (database &&)=delete
 ~database ()
void execute (const std::string_view sql)
sqlite3 * native () const noexcept
 database (const fs::path &path, const bool writable)
 database (const database &)=delete
databaseoperator= (const database &)=delete
 database (database &&)=delete
databaseoperator= (database &&)=delete
 ~database ()
void execute (const std::string_view sql)
sqlite3 * native () const noexcept

Private Attributes

sqlite3 * value_ { nullptr }

Detailed Description

Definition at line 348 of file inbox.cpp.

Constructor & Destructor Documentation

◆ database() [1/6]

arachne::penelope::anonymous_namespace{inbox.cpp}::database::database ( const fs::path & path,
const bool writable )
inline

Definition at line 350 of file inbox.cpp.

350 {
351 const std::string native = path.string();
352 const int flags = writable
353 ? SQLITE_OPEN_READWRITE | SQLITE_OPEN_FULLMUTEX
354 : SQLITE_OPEN_READONLY | SQLITE_OPEN_FULLMUTEX;
355 if (sqlite3_open_v2(native.c_str(), &value_, flags, nullptr)
356 != SQLITE_OK) {
357 const std::string message = sqlite_message(value_, "open database");
358 if (value_ != nullptr) {
359 sqlite3_close(value_);
360 value_ = nullptr;
361 }
362 throw database_error(message);
363 }
364 sqlite3_extended_result_codes(value_, 1);
365 sqlite3_busy_timeout(value_, 10'000);
366 execute("PRAGMA foreign_keys = ON");
367 statement version(value_, "PRAGMA user_version");
368 if (!version.step() || version.integer(0) != current_product_schema) {
369 throw database_error(
370 "product database must use schema version 5"
371 );
372 }
374 }
void require_current_product_structure(sqlite3 *const sql)
Definition inbox.cpp:184
std::string sqlite_message(sqlite3 *const value, const std::string_view operation)
Definition inbox.cpp:56

References arachne::penelope::anonymous_namespace{inbox.cpp}::current_product_schema, arachne::penelope::anonymous_namespace{inbox.cpp}::statement::integer(), arachne::penelope::anonymous_namespace{inbox.cpp}::require_current_product_structure(), arachne::penelope::anonymous_namespace{inbox.cpp}::statement::step(), and value_.

Referenced by arachne::penelope::rebuild_product_merge_hints(), and arachne::penelope::anonymous_namespace{inbox.cpp}::run_inbox().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ database() [2/6]

arachne::penelope::anonymous_namespace{inbox.cpp}::database::database ( const database & )
delete

◆ database() [3/6]

arachne::penelope::anonymous_namespace{inbox.cpp}::database::database ( database && )
delete

◆ ~database() [1/2]

arachne::penelope::anonymous_namespace{inbox.cpp}::database::~database ( )
inline

Definition at line 381 of file inbox.cpp.

381 {
382 if (value_ != nullptr) {
383 sqlite3_close(value_);
384 }
385 }

References value_.

◆ database() [4/6]

arachne::penelope::anonymous_namespace{inbox.cpp}::database::database ( const fs::path & path,
const bool writable )
inline

Definition at line 350 of file inbox.cpp.

350 {
351 const std::string native = path.string();
352 const int flags = writable
353 ? SQLITE_OPEN_READWRITE | SQLITE_OPEN_FULLMUTEX
354 : SQLITE_OPEN_READONLY | SQLITE_OPEN_FULLMUTEX;
355 if (sqlite3_open_v2(native.c_str(), &value_, flags, nullptr)
356 != SQLITE_OK) {
357 const std::string message = sqlite_message(value_, "open database");
358 if (value_ != nullptr) {
359 sqlite3_close(value_);
360 value_ = nullptr;
361 }
362 throw database_error(message);
363 }
364 sqlite3_extended_result_codes(value_, 1);
365 sqlite3_busy_timeout(value_, 10'000);
366 execute("PRAGMA foreign_keys = ON");
367 statement version(value_, "PRAGMA user_version");
368 if (!version.step() || version.integer(0) != current_product_schema) {
369 throw database_error(
370 "product database must use schema version 5"
371 );
372 }
374 }

◆ database() [5/6]

arachne::penelope::anonymous_namespace{inbox.cpp}::database::database ( const database & )
delete

◆ database() [6/6]

arachne::penelope::anonymous_namespace{inbox.cpp}::database::database ( database && )
delete

◆ ~database() [2/2]

arachne::penelope::anonymous_namespace{inbox.cpp}::database::~database ( )
inline

Definition at line 381 of file inbox.cpp.

381 {
382 if (value_ != nullptr) {
383 sqlite3_close(value_);
384 }
385 }

Member Function Documentation

◆ execute() [1/2]

void arachne::penelope::anonymous_namespace{inbox.cpp}::database::execute ( const std::string_view sql)
inline

Definition at line 387 of file inbox.cpp.

387 {
388 char* error = nullptr;
389 const int status = sqlite3_exec(
390 value_, std::string(sql).c_str(), nullptr, nullptr, &error
391 );
392 if (status != SQLITE_OK) {
393 std::string message = error == nullptr
394 ? sqlite_message(value_, "execute SQL")
395 : std::string(error);
396 sqlite3_free(error);
397 throw database_error(message);
398 }
399 }

References value_.

◆ execute() [2/2]

void arachne::penelope::anonymous_namespace{inbox.cpp}::database::execute ( const std::string_view sql)
inline

Definition at line 387 of file inbox.cpp.

387 {
388 char* error = nullptr;
389 const int status = sqlite3_exec(
390 value_, std::string(sql).c_str(), nullptr, nullptr, &error
391 );
392 if (status != SQLITE_OK) {
393 std::string message = error == nullptr
394 ? sqlite_message(value_, "execute SQL")
395 : std::string(error);
396 sqlite3_free(error);
397 throw database_error(message);
398 }
399 }

◆ native() [1/2]

sqlite3 * arachne::penelope::anonymous_namespace{inbox.cpp}::database::native ( ) const
inlinenodiscardnoexcept

◆ native() [2/2]

sqlite3 * arachne::penelope::anonymous_namespace{inbox.cpp}::database::native ( ) const
inlinenodiscardnoexcept

Definition at line 401 of file inbox.cpp.

401{ return value_; }

◆ operator=() [1/4]

database & arachne::penelope::anonymous_namespace{inbox.cpp}::database::operator= ( const database & )
delete

◆ operator=() [2/4]

database & arachne::penelope::anonymous_namespace{inbox.cpp}::database::operator= ( const database & )
delete

◆ operator=() [3/4]

database & arachne::penelope::anonymous_namespace{inbox.cpp}::database::operator= ( database && )
delete

◆ operator=() [4/4]

database & arachne::penelope::anonymous_namespace{inbox.cpp}::database::operator= ( database && )
delete

Member Data Documentation

◆ value_

sqlite3 * arachne::penelope::anonymous_namespace{inbox.cpp}::database::value_ { nullptr }
private

Definition at line 404 of file inbox.cpp.

404{ nullptr };

Referenced by database(), execute(), native(), and ~database().


The documentation for this class was generated from the following file: