36 #ifndef MAIN_DATABASE_HPP_ 37 #define MAIN_DATABASE_HPP_ 42 #define MAIN_DATABASE_LOG_MOVING // log the moving of websites from one data directory to another to stdout 47 #include "../Data/Data.hpp" 48 #include "../Helper/CommaLocale.hpp" 49 #include "../Helper/Container.hpp" 50 #include "../Helper/FileSystem.hpp" 51 #include "../Helper/Json.hpp" 52 #include "../Helper/Portability/locale.h" 53 #include "../Helper/Portability/mysqlcppconn.h" 54 #include "../Helper/Strings.hpp" 55 #include "../Helper/Utf8.hpp" 56 #include "../Helper/Versions.hpp" 57 #include "../Struct/ConfigProperties.hpp" 58 #include "../Struct/DatabaseSettings.hpp" 59 #include "../Struct/QueryProperties.hpp" 60 #include "../Struct/TableColumn.hpp" 61 #include "../Struct/TableProperties.hpp" 62 #include "../Struct/TargetTableProperties.hpp" 63 #include "../Struct/ThreadDatabaseEntry.hpp" 64 #include "../Struct/ThreadOptions.hpp" 65 #include "../Struct/ThreadStatus.hpp" 66 #include "../Struct/UrlListProperties.hpp" 67 #include "../Struct/WebsiteProperties.hpp" 68 #include "../Timer/Simple.hpp" 69 #include "../Wrapper/DatabaseLock.hpp" 70 #include "../Wrapper/DatabaseTryLock.hpp" 71 #include "../Wrapper/PreparedSqlStatement.hpp" 73 #include "../_extern/rapidjson/include/rapidjson/document.h" 75 #include <cppconn/driver.h> 76 #include <cppconn/exception.h> 77 #include <cppconn/prepared_statement.h> 78 #include <cppconn/resultset.h> 79 #include <cppconn/statement.h> 80 #include <mysql_connection.h> 97 #include <string_view> 104 #ifdef MAIN_DATABASE_DEBUG_REQUEST_COUNTER 121 using std::string_view_literals::operator
""sv;
391 using IdPairs = std::vector<std::pair<std::uint64_t, std::uint64_t>>;
392 using IdString = std::pair<std::uint64_t, std::string>;
393 using IsRunningCallback = std::function<bool()>;
394 using SqlPreparedStatementPtr = std::unique_ptr<sql::PreparedStatement>;
395 using SqlResultSetPtr = std::unique_ptr<sql::ResultSet>;
396 using SqlStatementPtr = std::unique_ptr<sql::Statement>;
397 using StringString = std::pair<std::string, std::string>;
398 using StringQueueOfStrings = std::pair<std::string, std::queue<std::string>>;
399 using TableNameWriteAccess = std::pair<std::string, bool>;
400 using Queries = std::vector<std::pair<std::string, std::vector<StringString>>>;
413 void setSleepOnError(std::uint64_t seconds);
414 void setTimeOut(std::uint64_t milliseconds);
421 [[nodiscard]]
const std::string& getDriverVersion()
const;
422 [[nodiscard]]
const std::string& getDataDir()
const;
423 [[nodiscard]] std::uint64_t getMaxAllowedPacketSize()
const;
424 [[nodiscard]] std::uint64_t getConnectionId()
const;
431 void initializeSql();
439 void log(
const std::string& logEntry);
440 void log(
const std::string& logModule,
const std::string& logEntry);
441 [[nodiscard]] std::uint64_t getNumberOfLogEntries(
const std::string& logModule);
442 void clearLogs(
const std::string& logModule);
448 [[nodiscard]] std::vector<ThreadDatabaseEntry> getThreads();
450 [[nodiscard]] std::uint64_t getThreadRunTime(std::uint64_t threadId);
451 [[nodiscard]] std::uint64_t getThreadPauseTime(std::uint64_t threadId);
452 void setThreadStatus(
453 std::uint64_t threadId,
455 const std::string& threadStatusMessage
457 void setThreadStatus(std::uint64_t threadId,
const std::string& threadStatusMessage);
458 void setThreadRunTime(std::uint64_t threadId, std::uint64_t threadRunTime);
459 void setThreadPauseTime(std::uint64_t threadId, std::uint64_t threadPauseTime);
460 void deleteThread(std::uint64_t threadId);
467 [[nodiscard]] std::string getWebsiteDomain(std::uint64_t
id);
468 [[nodiscard]] std::string getWebsiteNamespace(std::uint64_t websiteId);
469 [[nodiscard]] std::uint64_t getWebsiteFromUrlList(std::uint64_t listId);
470 [[nodiscard]] IdString getWebsiteNamespaceFromUrlList(std::uint64_t listId);
471 [[nodiscard]] IdString getWebsiteNamespaceFromConfig(std::uint64_t configId);
472 [[nodiscard]] IdString getWebsiteNamespaceFromTargetTable(
473 const std::string& type,
474 std::uint64_t tableId
476 [[nodiscard]]
bool isWebsiteNamespace(
const std::string& nameSpace);
477 [[nodiscard]] std::string duplicateWebsiteNamespace(
const std::string& websiteNamespace);
478 [[nodiscard]] std::string getWebsiteDataDirectory(std::uint64_t websiteId);
479 [[nodiscard]] std::uint64_t getChangedUrlsByWebsiteUpdate(
480 std::uint64_t websiteId,
483 [[nodiscard]] std::uint64_t getLostUrlsByWebsiteUpdate(
484 std::uint64_t websiteId,
487 void updateWebsite(std::uint64_t websiteId,
const WebsiteProperties& websiteProperties);
488 void deleteWebsite(std::uint64_t websiteId);
489 std::uint64_t duplicateWebsite(std::uint64_t websiteId,
const Queries& queries);
490 void moveWebsite(std::uint64_t websiteId,
const WebsiteProperties& websiteProperties);
496 std::uint64_t addUrlList(std::uint64_t websiteId,
const UrlListProperties& listProperties);
497 [[nodiscard]] std::queue<IdString> getUrlLists(std::uint64_t websiteId);
498 std::size_t mergeUrls(std::uint64_t listId, std::queue<std::string>& urls);
499 [[nodiscard]] std::queue<std::string> getUrls(std::uint64_t listId);
500 [[nodiscard]] std::queue<IdString> getUrlsWithIds(std::uint64_t listId);
501 [[nodiscard]] std::string getUrlListNamespace(std::uint64_t listId);
502 [[nodiscard]] IdString getUrlListNamespaceFromTargetTable(
503 const std::string& type,
504 std::uint64_t tableId
506 [[nodiscard]]
bool isUrlListNamespace(std::uint64_t websiteId,
const std::string& nameSpace);
507 void updateUrlList(std::uint64_t listId,
const UrlListProperties& listProperties);
508 void deleteUrlList(std::uint64_t listId);
509 std::size_t deleteUrls(std::uint64_t listId, std::queue<uint64_t>& urlIds);
510 void resetParsingStatus(std::uint64_t listId);
511 void resetExtractingStatus(std::uint64_t listId);
512 void resetAnalyzingStatus(std::uint64_t listId);
518 std::uint64_t addQuery(std::uint64_t websiteId,
const QueryProperties& queryProperties);
519 void getQueryProperties(std::uint64_t queryId,
QueryProperties& queryPropertiesTo);
520 void updateQuery(std::uint64_t queryId,
const QueryProperties& queryProperties);
521 void moveQuery(std::uint64_t queryId, std::uint64_t toWebsiteId);
522 void deleteQuery(std::uint64_t queryId);
523 std::uint64_t duplicateQuery(std::uint64_t queryId);
529 std::uint64_t addConfiguration(
530 std::uint64_t websiteId,
533 [[nodiscard]] std::string getConfiguration(std::uint64_t configId);
534 void updateConfiguration(std::uint64_t configId,
const ConfigProperties& configProperties);
535 void deleteConfiguration(std::uint64_t configId);
536 std::uint64_t duplicateConfiguration(std::uint64_t configId);
543 [[nodiscard]] std::queue<IdString> getTargetTables(
544 const std::string& type,
547 [[nodiscard]] std::uint64_t getTargetTableId(
548 const std::string& type,
549 std::uint64_t listId,
550 const std::string& tableName
552 [[nodiscard]] std::string getTargetTableName(std::string_view type, std::uint64_t tableId);
553 void deleteTargetTable(
const std::string& type, std::uint64_t tableId);
559 void checkConnection();
560 [[nodiscard]]
bool isWebsite(std::uint64_t websiteId);
561 [[nodiscard]]
bool isUrlList(std::uint64_t urlListId);
562 [[nodiscard]]
bool isUrlList(std::uint64_t websiteId, std::uint64_t urlListId);
563 [[nodiscard]]
bool isQuery(std::uint64_t queryId);
564 [[nodiscard]]
bool isQuery(std::uint64_t websiteId, std::uint64_t queryId);
565 [[nodiscard]]
bool isCorpus(std::uint64_t firstId,
bool requireArticles,
bool requireDates);
566 [[nodiscard]]
bool isConfiguration(std::uint64_t configId);
567 [[nodiscard]]
bool isConfiguration(std::uint64_t websiteId, std::uint64_t configId);
568 [[nodiscard]]
bool isTargetTable(
569 std::string_view type,
570 std::uint64_t websiteId,
571 std::uint64_t urlListId,
572 std::uint64_t tableID
574 [[nodiscard]]
bool checkDataDir(
const std::string& dir);
587 [[nodiscard]]
bool isTableEmpty(
const std::string& tableName);
588 [[nodiscard]]
bool isTableExists(
const std::string& tableName);
589 [[nodiscard]]
bool isColumnExists(
590 const std::string& tableName,
591 const std::string& columnName
593 [[nodiscard]] std::string getColumnType(
594 const std::string& tableName,
595 const std::string& columnName
597 void readTableAsStrings(
598 const std::string& tableName,
599 std::vector<std::vector<std::string>>& contentsTo,
600 bool includeColumnNames
602 void readColumnAsStrings(
603 const std::string& tableName,
604 const std::string& columnName,
605 const std::string& condition,
606 std::vector<std::string>& contentsTo
608 void lockTables(std::queue<TableNameWriteAccess>& tableLocks);
610 void startTransaction(
const std::string& isolationLevel);
611 void endTransaction(
bool success);
634 #ifdef MAIN_DATABASE_DEBUG_REQUEST_COUNTER 635 static std::uint64_t getRequestCounter() {
636 return Database::requestCounter.load();
674 const std::string& isolationLevel
675 ) : ref(db), active(false), successful(false) {
676 this->ref.startTransaction(isolationLevel);
688 ) : ref(db), active(false), successful(false) {
689 this->ref.startTransaction(
"");
698 this->ref.endTransaction(this->successful);
702 this->active =
false;
716 this->successful =
true;
796 void reserveForPreparedStatements(std::size_t n);
797 void addPreparedStatement(
const std::string& sqlQuery, std::size_t&
id);
798 void clearPreparedStatement(std::size_t&
id);
799 [[nodiscard]] sql::PreparedStatement& getPreparedStatement(std::size_t
id);
805 [[nodiscard]] std::uint64_t getLastInsertedId();
806 void resetAutoIncrement(
const std::string& tableName);
807 static void addDatabaseLock(
808 const std::string& name,
809 const IsRunningCallback& isRunningCallback
811 static bool tryDatabaseLock(
const std::string& name);
812 static void removeDatabaseLock(
const std::string& name);
813 void checkDirectory(
const std::string& dir);
820 void clearTable(
const std::string& tableName);
821 void dropTable(
const std::string& tableName);
822 void addColumn(
const std::string& tableName,
const TableColumn& column);
823 void compressTable(
const std::string& tableName);
824 std::queue<std::string> cloneTable(
825 const std::string& tableName,
826 const std::string& destDir
833 [[nodiscard]]
bool isUrlListCaseSensitive(std::uint64_t listId);
834 void setUrlListCaseSensitive(std::uint64_t listId,
bool isCaseSensitive);
840 static void sqlException(
const std::string&
function,
const sql::SQLException& e);
861 template<
class T,
class... Args>
867 #ifdef MAIN_DATABASE_DEBUG_REQUEST_COUNTER 868 ++Database::requestCounter;
871 result = statement.execute(args...);
875 catch(
const sql::SQLException &e) {
881 #ifdef MAIN_DATABASE_DEBUG_DEADLOCKS 887 std::cout << counter;
890 std::cout << std::flush;
894 std::this_thread::sleep_for(
895 std::chrono::milliseconds(
919 template<
class T,
class... Args>
921 sql::ResultSet * resultPtr{
nullptr};
925 #ifdef MAIN_DATABASE_DEBUG_REQUEST_COUNTER 926 ++Database::requestCounter;
929 resultPtr = statement.executeQuery(args...);
933 catch(
const sql::SQLException &e) {
939 #ifdef MAIN_DATABASE_DEBUG_DEADLOCKS 945 std::cout << counter;
948 std::cout << std::flush;
952 std::this_thread::sleep_for(
953 std::chrono::milliseconds(
977 template<
class T,
class... Args>
983 #ifdef MAIN_DATABASE_DEBUG_REQUEST_COUNTER 984 ++Database::requestCounter;
987 result = statement.executeUpdate(args...);
991 catch(
const sql::SQLException &e) {
997 #ifdef MAIN_DATABASE_DEBUG_DEADLOCKS 1003 std::cout << counter;
1006 std::cout << std::flush;
1010 std::this_thread::sleep_for(
1011 std::chrono::milliseconds(
1035 template<
class T,
class... Args>
1036 static bool sqlExecute(std::unique_ptr<T>& statement, Args... args) {
1037 return sqlExecute(*statement, args...);
1053 template<
class T,
class... Args>
1055 return sqlExecuteQuery(*statement, args...);
1071 template<
class T,
class... Args>
1073 return sqlExecuteUpdate(*statement, args...);
1081 std::uint64_t connectionId{};
1082 std::uint64_t maxAllowedPacketSize{};
1083 std::uint64_t sleepOnError{};
1084 std::string driverVersion;
1085 std::string dataDir;
1086 std::vector<std::string> dirs;
1091 #ifdef MAIN_DATABASE_DEBUG_REQUEST_COUNTER 1092 static std::atomic<std::uint64_t> requestCounter;
1096 static std::mutex lockAccess;
1097 static std::vector<std::string> locks;
1100 std::vector<Wrapper::PreparedSqlStatement> preparedStatements;
1103 void run(
const std::string& sqlFile);
1104 void execute(
const std::string& sqlQuery);
1105 int executeUpdate(
const std::string& sqlQuery);
1106 [[nodiscard]] std::string sqlEscapeString(
const std::string& in);
1111 std::size_t lastId{};
1112 std::size_t setThreadStatus{};
1113 std::size_t setThreadStatusMessage{};
Class for storage engine exceptions.
Definition: Database.hpp:755
constexpr auto sqlMalformedPacket
Malformed packet.
Definition: Database.hpp:327
constexpr auto lockTimeOutSec
Time-out on table lock in seconds.
Definition: Database.hpp:133
constexpr auto sqlInsufficientPrivileges
Insufficient privileges.
Definition: Database.hpp:340
Query properties containing its name, text, type, and result type(s).
Definition: QueryProperties.hpp:39
constexpr auto sqlNumOfLocksExceedsLockTableSize
Number of locks exceeds lock table size.
Definition: Database.hpp:282
constexpr auto sqlServerShutDown
Server shutdown.
Definition: Database.hpp:225
constexpr auto maxColumnsUrlList
Maximum number of columns in all associated tables associated with an URL list.
Definition: Database.hpp:163
Transaction(Main::Database &db)
Constructor starting the transaction using the default isolation level.
Definition: Database.hpp:686
constexpr auto sqlTimeOutWritingPackets
Timeout writing packets.
Definition: Database.hpp:264
Class for insufficient privileges exceptions.
Definition: Database.hpp:758
constexpr auto sqlNetErrorReadingFromMaster
Network error reading from master.
Definition: Database.hpp:270
std::unique_ptr< sql::Connection > connection
Database connection.
Definition: Database.hpp:787
constexpr auto sqlSortAborted
Sort aborted.
Definition: Database.hpp:213
static sql::ResultSet * sqlExecuteQuery(std::unique_ptr< T > &statement, Args... args)
Template function for executing a SQL query by unique pointer and returning the resulting set...
Definition: Database.hpp:1054
virtual ~Transaction()
Destructor committing the transaction on success.
Definition: Database.hpp:695
constexpr auto sqlPacketsOutOfOrder
Packets out of order.
Definition: Database.hpp:249
constexpr auto sqlMoreThanMaxUserConnections
More than the maximum number of user connections.
Definition: Database.hpp:276
constexpr auto sqlNetErrorWritingToMaster
Network error writing to master.
Definition: Database.hpp:273
constexpr auto sqlTooManyConnections
Too many connections.
Definition: Database.hpp:216
constexpr auto numArgsAddUrl
Number of arguments for adding one URL.
Definition: Database.hpp:110
Structure for retrieving multiple table columns of different types.
Definition: Data.hpp:310
constexpr auto sqlArg2
Second argument in a SQL query.
Definition: Database.hpp:97
constexpr auto sqlInvalidConnectionHandle
Invalid connection handle.
Definition: Database.hpp:330
constexpr auto sqlLockWaitTimeOutExceeded
Lock wait timeout exceeded.
Definition: Database.hpp:279
constexpr auto reconnectAfterIdleMs
Idle time in milliseconds after which a re-connect to the database will be enforced.
Definition: Database.hpp:136
Thread status containing its ID, status message, pause state, and progress.
Definition: ThreadStatus.hpp:54
constexpr auto sqlWrongArguments
Wrong arguments.
Definition: Database.hpp:343
Target table properties containing its type, website, URL list, table names, columns, and compression.
Definition: TargetTableProperties.hpp:44
constexpr auto sqlDeadLock
Deadlock.
Definition: Database.hpp:285
constexpr auto sqlClientErrorConnectingToSlave
Client error connecting to slave.
Definition: Database.hpp:318
constexpr auto sqlExtension
File extension for .sql files.
Definition: Database.hpp:130
constexpr auto secToMs
The factor for converting seconds to milliseconds and vice versa.
Definition: Database.hpp:157
Properties of a URL list containing its namespace and name.
Definition: UrlListProperties.hpp:39
#define MAIN_EXCEPTION_CLASS()
Macro used to easily define classes for general exceptions.
Definition: Exception.hpp:50
constexpr auto sqlCannotConnectToServerThroughSocket
Cannot connect to server through socket.
Definition: Database.hpp:297
constexpr auto sqlCannotConnectToServer
Cannot connect to server.
Definition: Database.hpp:300
Structure for getting multiple values of different types from a table column.
Definition: Data.hpp:243
Thread options containing the name of the module run, as well as the IDs of the website, URL list, and configuration used.
Definition: ThreadOptions.hpp:40
constexpr auto sqlQueryExecutionInterrupted
Query execution interrupted.
Definition: Database.hpp:291
Structure for updating multiple values of different types in a table.
Definition: Data.hpp:408
Class for JSON exceptions.
Definition: Json.hpp:136
Class for incorrect path exceptions.
Definition: Database.hpp:752
static std::uint64_t getRequestCounter()
Gets the number of SQL requests performed since the start of the application.
Definition: Database.hpp:514
constexpr auto sqlStorageEngineError
Storage engine error.
Definition: Database.hpp:337
static bool sqlExecute(T &statement, Args... args)
Template function for executing a SQL query.
Definition: Database.hpp:862
constexpr auto sqlErrorReadingPackets
Error reading packets.
Definition: Database.hpp:255
constexpr auto sqlArg8
Eighth argument in a SQL query.
Definition: Database.hpp:148
static sql::Driver * driver
Pointer to the MySQL database driver.
Definition: Database.hpp:790
constexpr auto sqlTimeOutReadingPackets
Timeout reading packets.
Definition: Database.hpp:258
Structure for updating one value in a table.
Definition: Data.hpp:369
constexpr auto sqlCouldNotUncompressPackets
Could not uncompress packets.
Definition: Database.hpp:252
static std::uint64_t getRequestCounter()
Gets the number of SQL requests performed since the start of the application.
Definition: Database.hpp:651
Class handling database access for the command-and-control and its threads.
Definition: Database.hpp:366
constexpr auto sqlConstraint
The MySQL keyword for a constraint, including the trailing space.
Definition: Database.hpp:154
Table properties containing its name, columns, data directory, and compression.
Definition: TableProperties.hpp:42
constexpr auto sqlIncorrectPath
Incorrect path.
Definition: Database.hpp:346
Structure for inserting multiple values of different types into a row.
Definition: Data.hpp:360
constexpr auto sqlUnableToConnectToForeignDataSource
Unable to connect to foreign data source.
Definition: Database.hpp:294
Structure for retrieving one value from a table column.
Definition: Data.hpp:207
Structure for table columns containing its name, type, reference, and indexing.
Definition: TableColumn.hpp:39
constexpr auto sqlBadHandShake
Bad handshake.
Definition: Database.hpp:222
constexpr auto sqlArg6
Sixth argument in a SQL query.
Definition: Database.hpp:109
static int sqlExecuteUpdate(std::unique_ptr< T > &statement, Args... args)
Template function for executing a SQL query by unique pointer and returning the number of affected ro...
Definition: Database.hpp:1072
constexpr auto sqlArg3
Third argument in a SQL query.
Definition: Database.hpp:100
constexpr auto sqlLostConnectionDuringQuery
Lost connection during query.
Definition: Database.hpp:315
Wrapper class providing the database functionality of Module::Database to its child classes...
Definition: Database.hpp:72
constexpr auto sqlNewAbortedConnection
New aborted connection-.
Definition: Database.hpp:267
constexpr auto sqlErrorInServerHandshake
Error in server handshake.
Definition: Database.hpp:312
Database settings containing its host, port, user, password, schema, and compression.
Definition: DatabaseSettings.hpp:48
constexpr auto sqlCannotGetHostName
Cannot get host name.
Definition: Database.hpp:219
Structure for updating multiple values of the same type in a table.
Definition: Data.hpp:390
A simple timer.
Definition: Simple.hpp:53
Information about a thread as stored in the database, containing both the options for and the status ...
Definition: ThreadDatabaseEntry.hpp:40
Class for wrong arguments exceptions.
Definition: Database.hpp:761
static bool sqlExecute(std::unique_ptr< T > &statement, Args... args)
Template function for executing a SQL query by unique pointer.
Definition: Database.hpp:1036
constexpr auto sqlDir
(Sub-)Directory for .sql files.
Definition: Database.hpp:127
constexpr auto sqlForcingCloseOfThread
Forcing close of thread.
Definition: Database.hpp:237
Template class for safe in-scope database locks.
Definition: DatabaseTryLock.hpp:51
constexpr auto sqlNormalShutdown
Normal shutdown.
Definition: Database.hpp:228
constexpr auto nAtOnce500
Five hundred at once.
Definition: Database.hpp:179
constexpr auto nAtOnce10
Process ten values at once.
Definition: Database.hpp:88
Wrapper class for in-scope transactions.
Definition: Database.hpp:659
void success()
Sets the state of the transaction to successful.
Definition: Database.hpp:715
constexpr auto sqlGotSignal
Got signal.
Definition: Database.hpp:231
Structure for retrieving multiple table columns of the same type.
Definition: Data.hpp:284
constexpr auto sqlArg5
Fifth argument in a SQL query.
Definition: Database.hpp:106
Namespace for RAII wrappers and Wrapper::Database.
Definition: Database.hpp:109
constexpr auto sqlSSLConnectionError
SSL connection error.
Definition: Database.hpp:324
constexpr auto maxContentSize
Maximum size of database content (= 1 GiB).
Definition: Database.hpp:75
constexpr auto sqlArg1
First argument in a SQL query.
Definition: Database.hpp:94
static sql::ResultSet * sqlExecuteQuery(T &statement, Args... args)
Template function for executing a SQL query and returning the resulting set.
Definition: Database.hpp:920
constexpr auto sqlArg9
Ninth argument in a SQL query.
Definition: Database.hpp:151
constexpr auto sqlReadErrorFromConnectionPipe
Read error from connection pipe.
Definition: Database.hpp:246
static int sqlExecuteUpdate(T &statement, Args... args)
Template function for executing a SQL query and returning the number of affected rows.
Definition: Database.hpp:978
constexpr auto sqlCannotCreateIPSocket
Cannot create IP socket.
Definition: Database.hpp:240
Structure for retrieving multiple values of the same type from a table column.
Definition: Data.hpp:225
constexpr auto sqlClientErrorConnectingToMaster
Client error connecting to master.
Definition: Database.hpp:321
constexpr auto sqlServerHasGoneAway
Server has gone away.
Definition: Database.hpp:306
Class for database connection exceptions.
Definition: Database.hpp:749
constexpr auto sqlTCPError
TCP error.
Definition: Database.hpp:309
constexpr auto sqlShutDownComplete
Shutdown complete.
Definition: Database.hpp:234
Structure for retrieving the values in a table column.
Definition: Data.hpp:258
constexpr auto sleepOnLockMs
Sleep time in milliseconds before re-attempting to add a database lock.
Definition: Database.hpp:139
constexpr auto sqlUnknownServerHost
Unknown server host.
Definition: Database.hpp:303
constexpr auto sqlArg4
Fourth argument in a SQL query.
Definition: Database.hpp:103
#define MAIN_EXCEPTION_SUBCLASS(NAME)
Macro used to easily define classes for specific exceptions.
Definition: Exception.hpp:65
Transaction(Main::Database &db, const std::string &isolationLevel)
Constructor starting the transaction using the specified isolation level.
Definition: Database.hpp:672
Namespace for the main classes of the program.
Definition: App.cpp:34
Structure for inserting one value into a table.
Definition: Data.hpp:333
constexpr auto sqlServerErrorConnectingToMaster
Server error connecting to master.
Definition: Database.hpp:288
Configuration properties containing its module, name, and JSON string.
Definition: ConfigProperties.hpp:40
constexpr auto sqlAbortedConnection
Aborted connection.
Definition: Database.hpp:243
constexpr auto numUrlListTables
The minimum number of tables per URL list.
Definition: Database.hpp:151
Template class for safe in-scope database locks.
Definition: DatabaseLock.hpp:54
constexpr auto wwwPrefix
"www." prefix to be ignored when checking for a domain.
Definition: Database.hpp:148
constexpr auto nAtOnce100
Process one hundred values at once.
Definition: Database.hpp:91
Structure for inserting multiple values of the same type into a table.
Definition: Data.hpp:348
constexpr auto sqlArg7
Seventh argument in a SQL query.
Definition: Database.hpp:145
constexpr auto sqlErrorWritingPackets
Error writing packets.
Definition: Database.hpp:261
constexpr auto maxContentSizeString
Maximum size of database content as string.
Definition: Database.hpp:78
Website properties containing its domain, namespace, name, and data directory.
Definition: WebsiteProperties.hpp:39
constexpr auto sleepOnDeadLockMs
Time (in ms) to sleep on SQL deadlock.
Definition: Database.hpp:160