diff --git a/doc/xml/release.xml b/doc/xml/release.xml index d88e55660..7e817cf30 100644 --- a/doc/xml/release.xml +++ b/doc/xml/release.xml @@ -33,6 +33,10 @@

Add unsigned int Variant type and update code to use it.

+ +

varNewKv() accepts a KeyValue object rather than creating one.

+
+

Refactor Ini interface to expose String values instead of Variant.

diff --git a/src/command/info/info.c b/src/command/info/info.c index de6f8a6f1..f9b560749 100644 --- a/src/command/info/info.c +++ b/src/command/info/info.c @@ -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 *archiveStart = 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 StringList *walDir = storageListP(storageRepo(), archivePath, .expression = WAL_SEGMENT_DIR_REGEXP_STR); @@ -206,7 +206,7 @@ backupList(VariantList *backupSection, InfoBackup *info) // Get the backup data InfoBackupData backupData = infoBackupData(info, keyIdx); - Variant *backupInfo = varNewKv(); + Variant *backupInfo = varNewKv(kvNew()); // main keys 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 - Variant *stanzaInfo = varNewKv(); + Variant *stanzaInfo = varNewKv(kvNew()); VariantList *dbSection = varLstNew(); VariantList *backupSection = 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--) { 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_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 (stanza != NULL && !stanzaFound) { - Variant *stanzaInfo = varNewKv(); + Variant *stanzaInfo = varNewKv(kvNew()); kvPut(varKv(stanzaInfo), STANZA_KEY_NAME_VAR, VARSTR(stanza)); diff --git a/src/common/type/json.c b/src/common/type/json.c index eda3f8872..a07f72034 100644 --- a/src/common/type/json.c +++ b/src/common/type/json.c @@ -266,7 +266,7 @@ jsonToVarInternal(const char *json, unsigned int *jsonPos) MEM_CONTEXT_TEMP_BEGIN() { memContextSwitch(MEM_CONTEXT_OLD()); - result = varNewKv(); + result = varNewKv(kvNew()); memContextSwitch(MEM_CONTEXT_TEMP()); // Move position to the first key/value in the object diff --git a/src/common/type/keyValue.c b/src/common/type/keyValue.c index 456ca21fe..9296f922e 100644 --- a/src/common/type/keyValue.c +++ b/src/common/type/keyValue.c @@ -293,10 +293,8 @@ kvPutKv(KeyValue *this, const Variant *key) MEM_CONTEXT_BEGIN(this->memContext) { - Variant *keyValue = varNewKv(); - result = varKv(keyValue); - - kvPutInternal(this, key, keyValue); + result = kvNew(); + kvPutInternal(this, key, varNewKv(result)); } MEM_CONTEXT_END(); diff --git a/src/common/type/variant.c b/src/common/type/variant.c index 763a38128..74b2f3035 100644 --- a/src/common/type/variant.c +++ b/src/common/type/variant.c @@ -967,17 +967,23 @@ varUInt64Force(const Variant *this) /*********************************************************************************************************************************** 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 * -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 VariantKeyValue *this = memNew(sizeof(VariantKeyValue)); this->memContext = memContextCurrent(); this->type = varTypeKeyValue; - this->data = kvNew(); + + if (data != NULL) + this->data = kvMove(data, memContextCurrent()); FUNCTION_TEST_RETURN((Variant *)this); } diff --git a/src/common/type/variant.h b/src/common/type/variant.h index 6dcc32783..534d044ad 100644 --- a/src/common/type/variant.h +++ b/src/common/type/variant.h @@ -64,7 +64,7 @@ Variant *varNewInt64(int64_t data); int64_t varInt64(const Variant *this); int64_t varInt64Force(const Variant *this); -Variant *varNewKv(void); +Variant *varNewKv(KeyValue *data); KeyValue *varKv(const Variant *this); Variant *varNewStr(const String *data); diff --git a/src/config/parse.c b/src/config/parse.c index 523382f46..fcffc8071 100644 --- a/src/config/parse.c +++ b/src/config/parse.c @@ -964,7 +964,7 @@ configParse(unsigned int argListSize, const char *argList[], bool resetLogLevel) } else if (optionDefType == cfgDefOptTypeHash) { - Variant *value = varNewKv(); + Variant *value = varNewKv(kvNew()); KeyValue *keyValue = varKv(value); for (unsigned int listIdx = 0; listIdx < strLstSize(parseOption->valueList); listIdx++) diff --git a/src/perl/config.c b/src/perl/config.c index 140953891..2d76d064d 100644 --- a/src/perl/config.c +++ b/src/perl/config.c @@ -28,7 +28,7 @@ perlOptionJson(void) if (!cfgOptionValid(optionId)) continue; - Variant *optionVar = varNewKv(); + Variant *optionVar = varNewKv(kvNew()); // Add valid kvPut(varKv(optionVar), VARSTRDEF("valid"), BOOL_TRUE_VAR); @@ -83,7 +83,7 @@ perlOptionJson(void) case cfgDefOptTypeHash: { - valueVar = varNewKv(); + valueVar = varNewKv(kvNew()); const KeyValue *valueKv = cfgOptionKv(optionId); const VariantList *keyList = kvKeyList(valueKv); @@ -96,7 +96,7 @@ perlOptionJson(void) case cfgDefOptTypeList: { - valueVar = varNewKv(); + valueVar = varNewKv(kvNew()); const VariantList *valueList = cfgOptionLst(optionId); diff --git a/test/src/module/command/commandTest.c b/test/src/module/command/commandTest.c index a9ab998fe..fdb3dc606 100644 --- a/test/src/module/command/commandTest.c +++ b/test/src/module/command/commandTest.c @@ -70,7 +70,7 @@ testRun(void) cfgOptionSet(cfgOptDbInclude, cfgSourceParam, varNewVarLst(varLstNewStrLst(list))); cfgOptionValidSet(cfgOptRecoveryOption, true); - Variant *recoveryVar = varNewKv(); + Variant *recoveryVar = varNewKv(kvNew()); KeyValue *recoveryKv = varKv(recoveryVar); kvPut(recoveryKv, varNewStr(strNew("standby_mode")), varNewStr(strNew("on"))); kvPut(recoveryKv, varNewStr(strNew("primary_conn_info")), varNewStr(strNew("blah"))); diff --git a/test/src/module/command/infoTest.c b/test/src/module/command/infoTest.c index dcf958f1e..fed04a6d3 100644 --- a/test/src/module/command/infoTest.c +++ b/test/src/module/command/infoTest.c @@ -787,7 +787,7 @@ testRun(void) // These tests cover branches not covered in other tests KeyValue *stanzaInfo = kvNew(); VariantList *dbSection = varLstNew(); - Variant *pgInfo = varNewKv(); + Variant *pgInfo = varNewKv(kvNew()); kvPut(varKv(pgInfo), DB_KEY_ID_VAR, varNewUInt(1)); kvPut(varKv(pgInfo), DB_KEY_SYSTEM_ID_VAR, varNewUInt64(6625633699176220261)); kvPut(varKv(pgInfo), DB_KEY_VERSION_VAR, VARSTR(pgVersionToStr(90500))); @@ -798,7 +798,7 @@ testRun(void) kvPut(stanzaInfo, STANZA_KEY_DB_VAR, varNewVarLst(dbSection)); 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_TYPE_VAR, VARSTRDEF("full")); diff --git a/test/src/module/common/typeJsonTest.c b/test/src/module/common/typeJsonTest.c index ecef2da69..3b6d13d0d 100644 --- a/test/src/module/common/typeJsonTest.c +++ b/test/src/module/common/typeJsonTest.c @@ -100,7 +100,7 @@ testRun(void) kvPut(keyValue, varNewStrZ("checknull"), (Variant *)NULL); VariantList *dbList = varLstNew(); - Variant *dbInfo = varNewKv(); + Variant *dbInfo = varNewKv(kvNew()); kvPut(varKv(dbInfo), varNewStr(strNew("id")), varNewInt(1)); kvPut(varKv(dbInfo), varNewStr(strNew("version")), varNewStr(strNew("9.4"))); varLstAdd(dbList, dbInfo); @@ -153,7 +153,7 @@ testRun(void) String *json = 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-prior"), varNewStrZ("20161219-212741F_20161219-212803I")); diff --git a/test/src/module/common/typeVariantTest.c b/test/src/module/common/typeVariantTest.c index 61b9f478e..40f107040 100644 --- a/test/src/module/common/typeVariantTest.c +++ b/test/src/module/common/typeVariantTest.c @@ -265,7 +265,10 @@ testRun(void) // ------------------------------------------------------------------------------------------------------------------------- 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_INT(varInt(kvGet(varKv(keyValue), VARINT(44))), 55, " get int/int"); TEST_RESULT_PTR(varKv(NULL), NULL, "get null kv"); @@ -280,7 +283,7 @@ testRun(void) 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(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"); @@ -395,7 +398,7 @@ testRun(void) { 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(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(NULL)), "null", "format null"); } diff --git a/test/src/module/config/configTest.c b/test/src/module/config/configTest.c index 1195e1379..1eae2d6f2 100644 --- a/test/src/module/config/configTest.c +++ b/test/src/module/config/configTest.c @@ -162,7 +162,7 @@ testRun(void) TEST_ERROR( cfgOptionSet(cfgOptRecoveryOption, cfgSourceParam, varNewDbl(1.1)), AssertError, "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_ERROR( cfgOptionLst(cfgOptRecoveryOption), AssertError, diff --git a/test/src/module/perl/configTest.c b/test/src/module/perl/configTest.c index b83880719..0e2e605e5 100644 --- a/test/src/module/perl/configTest.c +++ b/test/src/module/perl/configTest.c @@ -86,7 +86,7 @@ testRun(void) cfgOptionValidSet(cfgOptRecoveryOption, true); - Variant *recoveryVar = varNewKv(); + Variant *recoveryVar = varNewKv(kvNew()); KeyValue *recoveryKv = varKv(recoveryVar); kvPut(recoveryKv, varNewStr(strNew("standby_mode")), varNewStr(strNew("on"))); kvPut(recoveryKv, varNewStr(strNew("primary_conn_info")), varNewStr(strNew("blah")));