mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-01-30 05:39:12 +02:00
Refactor postgres/client module with inline getters/setters.
Extend the pattern introduced in 79a2d02 to the postgres/client module.
This commit is contained in:
parent
afe77e76e0
commit
dd96c29f96
@ -16,13 +16,8 @@ Object type
|
||||
***********************************************************************************************************************************/
|
||||
struct PgClient
|
||||
{
|
||||
const String *host;
|
||||
unsigned int port;
|
||||
const String *database;
|
||||
const String *user;
|
||||
TimeMSec queryTimeout;
|
||||
|
||||
PGconn *connection;
|
||||
PgClientPub pub; // Publicly accessible variables
|
||||
PGconn *connection; // Pg connection
|
||||
};
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
@ -46,14 +41,14 @@ pgClientFreeResource(THIS_VOID)
|
||||
|
||||
/**********************************************************************************************************************************/
|
||||
PgClient *
|
||||
pgClientNew(const String *host, const unsigned int port, const String *database, const String *user, const TimeMSec queryTimeout)
|
||||
pgClientNew(const String *host, const unsigned int port, const String *database, const String *user, const TimeMSec timeout)
|
||||
{
|
||||
FUNCTION_LOG_BEGIN(logLevelDebug);
|
||||
FUNCTION_LOG_PARAM(STRING, host);
|
||||
FUNCTION_LOG_PARAM(UINT, port);
|
||||
FUNCTION_LOG_PARAM(STRING, database);
|
||||
FUNCTION_LOG_PARAM(STRING, user);
|
||||
FUNCTION_LOG_PARAM(TIME_MSEC, queryTimeout);
|
||||
FUNCTION_LOG_PARAM(TIME_MSEC, timeout);
|
||||
FUNCTION_LOG_END();
|
||||
|
||||
ASSERT(port >= 1 && port <= 65535);
|
||||
@ -67,11 +62,14 @@ pgClientNew(const String *host, const unsigned int port, const String *database,
|
||||
|
||||
*this = (PgClient)
|
||||
{
|
||||
.host = strDup(host),
|
||||
.port = port,
|
||||
.database = strDup(database),
|
||||
.user = strDup(user),
|
||||
.queryTimeout = queryTimeout,
|
||||
.pub =
|
||||
{
|
||||
.host = strDup(host),
|
||||
.port = port,
|
||||
.database = strDup(database),
|
||||
.user = strDup(user),
|
||||
.timeout = timeout,
|
||||
},
|
||||
};
|
||||
}
|
||||
OBJ_NEW_END();
|
||||
@ -134,15 +132,16 @@ pgClientOpen(PgClient *this)
|
||||
MEM_CONTEXT_TEMP_BEGIN()
|
||||
{
|
||||
// Base connection string
|
||||
String *connInfo = strCatFmt(strNew(), "dbname=%s port=%u", strZ(pgClientEscape(this->database)), this->port);
|
||||
String *connInfo = strCatFmt(
|
||||
strNew(), "dbname=%s port=%u", strZ(pgClientEscape(pgClientDatabase(this))), pgClientPort(this));
|
||||
|
||||
// Add user if specified
|
||||
if (this->user != NULL)
|
||||
strCatFmt(connInfo, " user=%s", strZ(pgClientEscape(this->user)));
|
||||
if (pgClientUser(this) != NULL)
|
||||
strCatFmt(connInfo, " user=%s", strZ(pgClientEscape(pgClientUser(this))));
|
||||
|
||||
// Add host if specified
|
||||
if (this->host != NULL)
|
||||
strCatFmt(connInfo, " host=%s", strZ(pgClientEscape(this->host)));
|
||||
if (pgClientHost(this) != NULL)
|
||||
strCatFmt(connInfo, " host=%s", strZ(pgClientEscape(pgClientHost(this))));
|
||||
|
||||
// Make the connection
|
||||
this->connection = PQconnectdb(strZ(connInfo));
|
||||
@ -192,7 +191,7 @@ pgClientQuery(PgClient *this, const String *query)
|
||||
}
|
||||
|
||||
// Wait for a result
|
||||
Wait *wait = waitNew(this->queryTimeout);
|
||||
Wait *wait = waitNew(pgClientTimeout(this));
|
||||
bool busy = false;
|
||||
|
||||
do
|
||||
@ -232,7 +231,7 @@ pgClientQuery(PgClient *this, const String *query)
|
||||
{
|
||||
// Throw timeout error if cancelled
|
||||
if (busy)
|
||||
THROW_FMT(DbQueryError, "query '%s' timed out after %" PRIu64 "ms", strZ(query), this->queryTimeout);
|
||||
THROW_FMT(DbQueryError, "query '%s' timed out after %" PRIu64 "ms", strZ(query), pgClientTimeout(this));
|
||||
|
||||
// If this was a command that returned no results then we are done
|
||||
ExecStatusType resultStatus = PQresultStatus(pgResult);
|
||||
@ -357,6 +356,6 @@ String *
|
||||
pgClientToLog(const PgClient *this)
|
||||
{
|
||||
return strNewFmt(
|
||||
"{host: %s, port: %u, database: %s, user: %s, queryTimeout %" PRIu64 "}", strZ(strToLog(this->host)), this->port,
|
||||
strZ(strToLog(this->database)), strZ(strToLog(this->user)), this->queryTimeout);
|
||||
"{host: %s, port: %u, database: %s, user: %s, queryTimeout %" PRIu64 "}", strZ(strToLog(pgClientHost(this))),
|
||||
pgClientPort(this), strZ(strToLog(pgClientDatabase(this))), strZ(strToLog(pgClientUser(this))), pgClientTimeout(this));
|
||||
}
|
||||
|
@ -22,7 +22,54 @@ typedef struct PgClient PgClient;
|
||||
Constructors
|
||||
***********************************************************************************************************************************/
|
||||
PgClient *pgClientNew(
|
||||
const String *host, const unsigned int port, const String *database, const String *user, const TimeMSec queryTimeout);
|
||||
const String *host, const unsigned int port, const String *database, const String *user, const TimeMSec timeout);
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Getters/Setters
|
||||
***********************************************************************************************************************************/
|
||||
typedef struct PgClientPub
|
||||
{
|
||||
const String *host; // Pg host
|
||||
unsigned int port; // Pg port
|
||||
const String *database; // Pg database
|
||||
const String *user; // Pg user
|
||||
TimeMSec timeout; // Timeout for statements/queries
|
||||
} PgClientPub;
|
||||
|
||||
// Pg host
|
||||
__attribute__((always_inline)) static inline const String *
|
||||
pgClientHost(const PgClient *const this)
|
||||
{
|
||||
return THIS_PUB(PgClient)->host;
|
||||
}
|
||||
|
||||
// Pg port
|
||||
__attribute__((always_inline)) static inline unsigned int
|
||||
pgClientPort(const PgClient *const this)
|
||||
{
|
||||
return THIS_PUB(PgClient)->port;
|
||||
}
|
||||
|
||||
// Pg database
|
||||
__attribute__((always_inline)) static inline const String *
|
||||
pgClientDatabase(const PgClient *const this)
|
||||
{
|
||||
return THIS_PUB(PgClient)->database;
|
||||
}
|
||||
|
||||
// Pg user
|
||||
__attribute__((always_inline)) static inline const String *
|
||||
pgClientUser(const PgClient *const this)
|
||||
{
|
||||
return THIS_PUB(PgClient)->user;
|
||||
}
|
||||
|
||||
// Timeout for statements/queries
|
||||
__attribute__((always_inline)) static inline TimeMSec
|
||||
pgClientTimeout(const PgClient *const this)
|
||||
{
|
||||
return THIS_PUB(PgClient)->timeout;
|
||||
}
|
||||
|
||||
/***********************************************************************************************************************************
|
||||
Functions
|
||||
|
Loading…
x
Reference in New Issue
Block a user