You've already forked pgbackrest
mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-07-13 01:00:23 +02:00
varNewKv() accepts a KeyValue object rather than creating one.
This allows for more flexibility about when the Variant is created.
This commit is contained in:
@ -33,6 +33,10 @@
|
|||||||
<p>Add <code>unsigned int</code> <code>Variant</code> type and update code to use it.</p>
|
<p>Add <code>unsigned int</code> <code>Variant</code> type and update code to use it.</p>
|
||||||
</release-item>
|
</release-item>
|
||||||
|
|
||||||
|
<release-item>
|
||||||
|
<p><code>varNewKv()</code> accepts a <code>KeyValue</code> object rather than creating one.</p>
|
||||||
|
</release-item>
|
||||||
|
|
||||||
<release-item>
|
<release-item>
|
||||||
<p>Refactor <code>Ini</code> interface to expose <code>String</code> values instead of <code>Variant</code>.</p>
|
<p>Refactor <code>Ini</code> interface to expose <code>String</code> values instead of <code>Variant</code>.</p>
|
||||||
</release-item>
|
</release-item>
|
||||||
|
@ -119,7 +119,7 @@ archiveDbList(const String *stanza, const InfoPgData *pgData, VariantList *archi
|
|||||||
String *archivePath = strNewFmt(STORAGE_PATH_ARCHIVE "/%s/%s", strPtr(stanza), strPtr(archiveId));
|
String *archivePath = strNewFmt(STORAGE_PATH_ARCHIVE "/%s/%s", strPtr(stanza), strPtr(archiveId));
|
||||||
String *archiveStart = NULL;
|
String *archiveStart = NULL;
|
||||||
String *archiveStop = NULL;
|
String *archiveStop = NULL;
|
||||||
Variant *archiveInfo = varNewKv();
|
Variant *archiveInfo = varNewKv(kvNew());
|
||||||
|
|
||||||
// Get a list of WAL directories in the archive repo from oldest to newest, if any exist
|
// Get a list of WAL directories in the archive repo from oldest to newest, if any exist
|
||||||
StringList *walDir = storageListP(storageRepo(), archivePath, .expression = WAL_SEGMENT_DIR_REGEXP_STR);
|
StringList *walDir = storageListP(storageRepo(), archivePath, .expression = WAL_SEGMENT_DIR_REGEXP_STR);
|
||||||
@ -206,7 +206,7 @@ backupList(VariantList *backupSection, InfoBackup *info)
|
|||||||
// Get the backup data
|
// Get the backup data
|
||||||
InfoBackupData backupData = infoBackupData(info, keyIdx);
|
InfoBackupData backupData = infoBackupData(info, keyIdx);
|
||||||
|
|
||||||
Variant *backupInfo = varNewKv();
|
Variant *backupInfo = varNewKv(kvNew());
|
||||||
|
|
||||||
// main keys
|
// main keys
|
||||||
kvPut(varKv(backupInfo), BACKUP_KEY_LABEL_VAR, VARSTR(backupData.backupLabel));
|
kvPut(varKv(backupInfo), BACKUP_KEY_LABEL_VAR, VARSTR(backupData.backupLabel));
|
||||||
@ -297,7 +297,7 @@ stanzaInfoList(const String *stanza, StringList *stanzaList)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create the stanzaInfo and section variables
|
// Create the stanzaInfo and section variables
|
||||||
Variant *stanzaInfo = varNewKv();
|
Variant *stanzaInfo = varNewKv(kvNew());
|
||||||
VariantList *dbSection = varLstNew();
|
VariantList *dbSection = varLstNew();
|
||||||
VariantList *backupSection = varLstNew();
|
VariantList *backupSection = varLstNew();
|
||||||
VariantList *archiveSection = varLstNew();
|
VariantList *archiveSection = varLstNew();
|
||||||
@ -345,7 +345,7 @@ stanzaInfoList(const String *stanza, StringList *stanzaList)
|
|||||||
for (unsigned int pgIdx = infoPgDataTotal(infoBackupPg(info)) - 1; (int)pgIdx >= 0; pgIdx--)
|
for (unsigned int pgIdx = infoPgDataTotal(infoBackupPg(info)) - 1; (int)pgIdx >= 0; pgIdx--)
|
||||||
{
|
{
|
||||||
InfoPgData pgData = infoPgData(infoBackupPg(info), pgIdx);
|
InfoPgData pgData = infoPgData(infoBackupPg(info), pgIdx);
|
||||||
Variant *pgInfo = varNewKv();
|
Variant *pgInfo = varNewKv(kvNew());
|
||||||
|
|
||||||
kvPut(varKv(pgInfo), DB_KEY_ID_VAR, VARUINT(pgData.id));
|
kvPut(varKv(pgInfo), DB_KEY_ID_VAR, VARUINT(pgData.id));
|
||||||
kvPut(varKv(pgInfo), DB_KEY_SYSTEM_ID_VAR, VARUINT64(pgData.systemId));
|
kvPut(varKv(pgInfo), DB_KEY_SYSTEM_ID_VAR, VARUINT64(pgData.systemId));
|
||||||
@ -386,7 +386,7 @@ stanzaInfoList(const String *stanza, StringList *stanzaList)
|
|||||||
// If looking for a specific stanza and it was not found, set minimum info and the status
|
// If looking for a specific stanza and it was not found, set minimum info and the status
|
||||||
if (stanza != NULL && !stanzaFound)
|
if (stanza != NULL && !stanzaFound)
|
||||||
{
|
{
|
||||||
Variant *stanzaInfo = varNewKv();
|
Variant *stanzaInfo = varNewKv(kvNew());
|
||||||
|
|
||||||
kvPut(varKv(stanzaInfo), STANZA_KEY_NAME_VAR, VARSTR(stanza));
|
kvPut(varKv(stanzaInfo), STANZA_KEY_NAME_VAR, VARSTR(stanza));
|
||||||
|
|
||||||
|
@ -266,7 +266,7 @@ jsonToVarInternal(const char *json, unsigned int *jsonPos)
|
|||||||
MEM_CONTEXT_TEMP_BEGIN()
|
MEM_CONTEXT_TEMP_BEGIN()
|
||||||
{
|
{
|
||||||
memContextSwitch(MEM_CONTEXT_OLD());
|
memContextSwitch(MEM_CONTEXT_OLD());
|
||||||
result = varNewKv();
|
result = varNewKv(kvNew());
|
||||||
memContextSwitch(MEM_CONTEXT_TEMP());
|
memContextSwitch(MEM_CONTEXT_TEMP());
|
||||||
|
|
||||||
// Move position to the first key/value in the object
|
// Move position to the first key/value in the object
|
||||||
|
@ -293,10 +293,8 @@ kvPutKv(KeyValue *this, const Variant *key)
|
|||||||
|
|
||||||
MEM_CONTEXT_BEGIN(this->memContext)
|
MEM_CONTEXT_BEGIN(this->memContext)
|
||||||
{
|
{
|
||||||
Variant *keyValue = varNewKv();
|
result = kvNew();
|
||||||
result = varKv(keyValue);
|
kvPutInternal(this, key, varNewKv(result));
|
||||||
|
|
||||||
kvPutInternal(this, key, keyValue);
|
|
||||||
}
|
}
|
||||||
MEM_CONTEXT_END();
|
MEM_CONTEXT_END();
|
||||||
|
|
||||||
|
@ -967,17 +967,23 @@ varUInt64Force(const Variant *this)
|
|||||||
|
|
||||||
/***********************************************************************************************************************************
|
/***********************************************************************************************************************************
|
||||||
New key/value variant
|
New key/value variant
|
||||||
|
|
||||||
|
Note that the kv is not duped because it this a heavy-weight operation. It is merely moved into the same MemContext as the Variant.
|
||||||
***********************************************************************************************************************************/
|
***********************************************************************************************************************************/
|
||||||
Variant *
|
Variant *
|
||||||
varNewKv(void)
|
varNewKv(KeyValue *data)
|
||||||
{
|
{
|
||||||
FUNCTION_TEST_VOID();
|
FUNCTION_TEST_BEGIN();
|
||||||
|
FUNCTION_TEST_PARAM(KEY_VALUE, data);
|
||||||
|
FUNCTION_TEST_END();
|
||||||
|
|
||||||
// Allocate memory for the variant and set the type and data
|
// Allocate memory for the variant and set the type and data
|
||||||
VariantKeyValue *this = memNew(sizeof(VariantKeyValue));
|
VariantKeyValue *this = memNew(sizeof(VariantKeyValue));
|
||||||
this->memContext = memContextCurrent();
|
this->memContext = memContextCurrent();
|
||||||
this->type = varTypeKeyValue;
|
this->type = varTypeKeyValue;
|
||||||
this->data = kvNew();
|
|
||||||
|
if (data != NULL)
|
||||||
|
this->data = kvMove(data, memContextCurrent());
|
||||||
|
|
||||||
FUNCTION_TEST_RETURN((Variant *)this);
|
FUNCTION_TEST_RETURN((Variant *)this);
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ Variant *varNewInt64(int64_t data);
|
|||||||
int64_t varInt64(const Variant *this);
|
int64_t varInt64(const Variant *this);
|
||||||
int64_t varInt64Force(const Variant *this);
|
int64_t varInt64Force(const Variant *this);
|
||||||
|
|
||||||
Variant *varNewKv(void);
|
Variant *varNewKv(KeyValue *data);
|
||||||
KeyValue *varKv(const Variant *this);
|
KeyValue *varKv(const Variant *this);
|
||||||
|
|
||||||
Variant *varNewStr(const String *data);
|
Variant *varNewStr(const String *data);
|
||||||
|
@ -964,7 +964,7 @@ configParse(unsigned int argListSize, const char *argList[], bool resetLogLevel)
|
|||||||
}
|
}
|
||||||
else if (optionDefType == cfgDefOptTypeHash)
|
else if (optionDefType == cfgDefOptTypeHash)
|
||||||
{
|
{
|
||||||
Variant *value = varNewKv();
|
Variant *value = varNewKv(kvNew());
|
||||||
KeyValue *keyValue = varKv(value);
|
KeyValue *keyValue = varKv(value);
|
||||||
|
|
||||||
for (unsigned int listIdx = 0; listIdx < strLstSize(parseOption->valueList); listIdx++)
|
for (unsigned int listIdx = 0; listIdx < strLstSize(parseOption->valueList); listIdx++)
|
||||||
|
@ -28,7 +28,7 @@ perlOptionJson(void)
|
|||||||
if (!cfgOptionValid(optionId))
|
if (!cfgOptionValid(optionId))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Variant *optionVar = varNewKv();
|
Variant *optionVar = varNewKv(kvNew());
|
||||||
|
|
||||||
// Add valid
|
// Add valid
|
||||||
kvPut(varKv(optionVar), VARSTRDEF("valid"), BOOL_TRUE_VAR);
|
kvPut(varKv(optionVar), VARSTRDEF("valid"), BOOL_TRUE_VAR);
|
||||||
@ -83,7 +83,7 @@ perlOptionJson(void)
|
|||||||
|
|
||||||
case cfgDefOptTypeHash:
|
case cfgDefOptTypeHash:
|
||||||
{
|
{
|
||||||
valueVar = varNewKv();
|
valueVar = varNewKv(kvNew());
|
||||||
|
|
||||||
const KeyValue *valueKv = cfgOptionKv(optionId);
|
const KeyValue *valueKv = cfgOptionKv(optionId);
|
||||||
const VariantList *keyList = kvKeyList(valueKv);
|
const VariantList *keyList = kvKeyList(valueKv);
|
||||||
@ -96,7 +96,7 @@ perlOptionJson(void)
|
|||||||
|
|
||||||
case cfgDefOptTypeList:
|
case cfgDefOptTypeList:
|
||||||
{
|
{
|
||||||
valueVar = varNewKv();
|
valueVar = varNewKv(kvNew());
|
||||||
|
|
||||||
const VariantList *valueList = cfgOptionLst(optionId);
|
const VariantList *valueList = cfgOptionLst(optionId);
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ testRun(void)
|
|||||||
cfgOptionSet(cfgOptDbInclude, cfgSourceParam, varNewVarLst(varLstNewStrLst(list)));
|
cfgOptionSet(cfgOptDbInclude, cfgSourceParam, varNewVarLst(varLstNewStrLst(list)));
|
||||||
|
|
||||||
cfgOptionValidSet(cfgOptRecoveryOption, true);
|
cfgOptionValidSet(cfgOptRecoveryOption, true);
|
||||||
Variant *recoveryVar = varNewKv();
|
Variant *recoveryVar = varNewKv(kvNew());
|
||||||
KeyValue *recoveryKv = varKv(recoveryVar);
|
KeyValue *recoveryKv = varKv(recoveryVar);
|
||||||
kvPut(recoveryKv, varNewStr(strNew("standby_mode")), varNewStr(strNew("on")));
|
kvPut(recoveryKv, varNewStr(strNew("standby_mode")), varNewStr(strNew("on")));
|
||||||
kvPut(recoveryKv, varNewStr(strNew("primary_conn_info")), varNewStr(strNew("blah")));
|
kvPut(recoveryKv, varNewStr(strNew("primary_conn_info")), varNewStr(strNew("blah")));
|
||||||
|
@ -787,7 +787,7 @@ testRun(void)
|
|||||||
// These tests cover branches not covered in other tests
|
// These tests cover branches not covered in other tests
|
||||||
KeyValue *stanzaInfo = kvNew();
|
KeyValue *stanzaInfo = kvNew();
|
||||||
VariantList *dbSection = varLstNew();
|
VariantList *dbSection = varLstNew();
|
||||||
Variant *pgInfo = varNewKv();
|
Variant *pgInfo = varNewKv(kvNew());
|
||||||
kvPut(varKv(pgInfo), DB_KEY_ID_VAR, varNewUInt(1));
|
kvPut(varKv(pgInfo), DB_KEY_ID_VAR, varNewUInt(1));
|
||||||
kvPut(varKv(pgInfo), DB_KEY_SYSTEM_ID_VAR, varNewUInt64(6625633699176220261));
|
kvPut(varKv(pgInfo), DB_KEY_SYSTEM_ID_VAR, varNewUInt64(6625633699176220261));
|
||||||
kvPut(varKv(pgInfo), DB_KEY_VERSION_VAR, VARSTR(pgVersionToStr(90500)));
|
kvPut(varKv(pgInfo), DB_KEY_VERSION_VAR, VARSTR(pgVersionToStr(90500)));
|
||||||
@ -798,7 +798,7 @@ testRun(void)
|
|||||||
kvPut(stanzaInfo, STANZA_KEY_DB_VAR, varNewVarLst(dbSection));
|
kvPut(stanzaInfo, STANZA_KEY_DB_VAR, varNewVarLst(dbSection));
|
||||||
|
|
||||||
VariantList *backupSection = varLstNew();
|
VariantList *backupSection = varLstNew();
|
||||||
Variant *backupInfo = varNewKv();
|
Variant *backupInfo = varNewKv(kvNew());
|
||||||
|
|
||||||
kvPut(varKv(backupInfo), BACKUP_KEY_LABEL_VAR, VARSTRDEF("20181119-152138F"));
|
kvPut(varKv(backupInfo), BACKUP_KEY_LABEL_VAR, VARSTRDEF("20181119-152138F"));
|
||||||
kvPut(varKv(backupInfo), BACKUP_KEY_TYPE_VAR, VARSTRDEF("full"));
|
kvPut(varKv(backupInfo), BACKUP_KEY_TYPE_VAR, VARSTRDEF("full"));
|
||||||
|
@ -100,7 +100,7 @@ testRun(void)
|
|||||||
kvPut(keyValue, varNewStrZ("checknull"), (Variant *)NULL);
|
kvPut(keyValue, varNewStrZ("checknull"), (Variant *)NULL);
|
||||||
|
|
||||||
VariantList *dbList = varLstNew();
|
VariantList *dbList = varLstNew();
|
||||||
Variant *dbInfo = varNewKv();
|
Variant *dbInfo = varNewKv(kvNew());
|
||||||
kvPut(varKv(dbInfo), varNewStr(strNew("id")), varNewInt(1));
|
kvPut(varKv(dbInfo), varNewStr(strNew("id")), varNewInt(1));
|
||||||
kvPut(varKv(dbInfo), varNewStr(strNew("version")), varNewStr(strNew("9.4")));
|
kvPut(varKv(dbInfo), varNewStr(strNew("version")), varNewStr(strNew("9.4")));
|
||||||
varLstAdd(dbList, dbInfo);
|
varLstAdd(dbList, dbInfo);
|
||||||
@ -153,7 +153,7 @@ testRun(void)
|
|||||||
String *json = NULL;
|
String *json = NULL;
|
||||||
Variant *keyValue = NULL;
|
Variant *keyValue = NULL;
|
||||||
|
|
||||||
TEST_ASSIGN(keyValue, varNewKv(), "build new kv");
|
TEST_ASSIGN(keyValue, varNewKv(kvNew()), "build new kv");
|
||||||
kvPut(varKv(keyValue), varNewStrZ("backup-info-size-delta"), varNewInt(1982702));
|
kvPut(varKv(keyValue), varNewStrZ("backup-info-size-delta"), varNewInt(1982702));
|
||||||
kvPut(varKv(keyValue), varNewStrZ("backup-prior"), varNewStrZ("20161219-212741F_20161219-212803I"));
|
kvPut(varKv(keyValue), varNewStrZ("backup-prior"), varNewStrZ("20161219-212741F_20161219-212803I"));
|
||||||
|
|
||||||
|
@ -265,7 +265,10 @@ testRun(void)
|
|||||||
// -------------------------------------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
Variant *keyValue = NULL;
|
Variant *keyValue = NULL;
|
||||||
|
|
||||||
TEST_ASSIGN(keyValue, varNewKv(), "new");
|
TEST_ASSIGN(keyValue, varNewKv(NULL), "new null");
|
||||||
|
TEST_RESULT_PTR(varKv(keyValue), NULL, " kv is null");
|
||||||
|
|
||||||
|
TEST_ASSIGN(keyValue, varNewKv(kvNew()), "new");
|
||||||
TEST_RESULT_PTR(kvPut(varKv(keyValue), VARINT(44), VARINT(55)), varKv(keyValue), " put int/int");
|
TEST_RESULT_PTR(kvPut(varKv(keyValue), VARINT(44), VARINT(55)), varKv(keyValue), " put int/int");
|
||||||
TEST_RESULT_INT(varInt(kvGet(varKv(keyValue), VARINT(44))), 55, " get int/int");
|
TEST_RESULT_INT(varInt(kvGet(varKv(keyValue), VARINT(44))), 55, " get int/int");
|
||||||
TEST_RESULT_PTR(varKv(NULL), NULL, "get null kv");
|
TEST_RESULT_PTR(varKv(NULL), NULL, "get null kv");
|
||||||
@ -280,7 +283,7 @@ testRun(void)
|
|||||||
varFree(keyValueDup);
|
varFree(keyValueDup);
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
TEST_ERROR(varEq(varNewKv(), varNewKv()), AssertError, "unable to test equality for KeyValue");
|
TEST_ERROR(varEq(varNewKv(kvNew()), varNewKv(kvNew())), AssertError, "unable to test equality for KeyValue");
|
||||||
}
|
}
|
||||||
|
|
||||||
// *****************************************************************************************************************************
|
// *****************************************************************************************************************************
|
||||||
@ -326,7 +329,7 @@ testRun(void)
|
|||||||
TEST_RESULT_STR(strPtr(varStrForce(varNewBool(false))), "false", "force bool to string");
|
TEST_RESULT_STR(strPtr(varStrForce(varNewBool(false))), "false", "force bool to string");
|
||||||
TEST_RESULT_STR(strPtr(varStrForce(VARUINT64(18446744073709551615U))), "18446744073709551615", "force uint64 to string");
|
TEST_RESULT_STR(strPtr(varStrForce(VARUINT64(18446744073709551615U))), "18446744073709551615", "force uint64 to string");
|
||||||
|
|
||||||
TEST_ERROR(varStrForce(varNewKv()), FormatError, "unable to force KeyValue to String");
|
TEST_ERROR(varStrForce(varNewKv(kvNew())), FormatError, "unable to force KeyValue to String");
|
||||||
|
|
||||||
// -------------------------------------------------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------------------------------------------------
|
||||||
string = varNewStrZ("not-an-int");
|
string = varNewStrZ("not-an-int");
|
||||||
@ -395,7 +398,7 @@ testRun(void)
|
|||||||
{
|
{
|
||||||
TEST_RESULT_STR(strPtr(varToLog(varNewStrZ("testme"))), "{\"testme\"}", "format String");
|
TEST_RESULT_STR(strPtr(varToLog(varNewStrZ("testme"))), "{\"testme\"}", "format String");
|
||||||
TEST_RESULT_STR(strPtr(varToLog(varNewBool(false))), "{false}", "format bool");
|
TEST_RESULT_STR(strPtr(varToLog(varNewBool(false))), "{false}", "format bool");
|
||||||
TEST_RESULT_STR(strPtr(varToLog(varNewKv())), "{KeyValue}", "format KeyValue");
|
TEST_RESULT_STR(strPtr(varToLog(varNewKv(kvNew()))), "{KeyValue}", "format KeyValue");
|
||||||
TEST_RESULT_STR(strPtr(varToLog(varNewVarLst(varLstNew()))), "{VariantList}", "format VariantList");
|
TEST_RESULT_STR(strPtr(varToLog(varNewVarLst(varLstNew()))), "{VariantList}", "format VariantList");
|
||||||
TEST_RESULT_STR(strPtr(varToLog(NULL)), "null", "format null");
|
TEST_RESULT_STR(strPtr(varToLog(NULL)), "null", "format null");
|
||||||
}
|
}
|
||||||
|
@ -162,7 +162,7 @@ testRun(void)
|
|||||||
TEST_ERROR(
|
TEST_ERROR(
|
||||||
cfgOptionSet(cfgOptRecoveryOption, cfgSourceParam, varNewDbl(1.1)), AssertError,
|
cfgOptionSet(cfgOptRecoveryOption, cfgSourceParam, varNewDbl(1.1)), AssertError,
|
||||||
"option 'recovery-option' must be set with KeyValue variant");
|
"option 'recovery-option' must be set with KeyValue variant");
|
||||||
TEST_RESULT_VOID(cfgOptionSet(cfgOptRecoveryOption, cfgSourceConfig, varNewKv()), "set recovery-option");
|
TEST_RESULT_VOID(cfgOptionSet(cfgOptRecoveryOption, cfgSourceConfig, varNewKv(kvNew())), "set recovery-option");
|
||||||
TEST_RESULT_INT(varLstSize(kvKeyList(cfgOptionKv(cfgOptRecoveryOption))), 0, "recovery-option is set");
|
TEST_RESULT_INT(varLstSize(kvKeyList(cfgOptionKv(cfgOptRecoveryOption))), 0, "recovery-option is set");
|
||||||
TEST_ERROR(
|
TEST_ERROR(
|
||||||
cfgOptionLst(cfgOptRecoveryOption), AssertError,
|
cfgOptionLst(cfgOptRecoveryOption), AssertError,
|
||||||
|
@ -86,7 +86,7 @@ testRun(void)
|
|||||||
|
|
||||||
cfgOptionValidSet(cfgOptRecoveryOption, true);
|
cfgOptionValidSet(cfgOptRecoveryOption, true);
|
||||||
|
|
||||||
Variant *recoveryVar = varNewKv();
|
Variant *recoveryVar = varNewKv(kvNew());
|
||||||
KeyValue *recoveryKv = varKv(recoveryVar);
|
KeyValue *recoveryKv = varKv(recoveryVar);
|
||||||
kvPut(recoveryKv, varNewStr(strNew("standby_mode")), varNewStr(strNew("on")));
|
kvPut(recoveryKv, varNewStr(strNew("standby_mode")), varNewStr(strNew("on")));
|
||||||
kvPut(recoveryKv, varNewStr(strNew("primary_conn_info")), varNewStr(strNew("blah")));
|
kvPut(recoveryKv, varNewStr(strNew("primary_conn_info")), varNewStr(strNew("blah")));
|
||||||
|
Reference in New Issue
Block a user