mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-03-03 14:52:21 +02:00
Add null support to jsonToKv().
Contributed by Cynthia Shang.
This commit is contained in:
parent
d6dfbfd2f3
commit
56d466ce4b
@ -225,7 +225,28 @@ jsonToKv(const String *json)
|
||||
|
||||
continue;
|
||||
}
|
||||
// Else not sure what it is. Currently nulls will error.
|
||||
// Appears to be a null
|
||||
else if (jsonC[jsonPos] == 'n')
|
||||
{
|
||||
valueBeginPos = jsonPos;
|
||||
|
||||
while (jsonC[jsonPos] != 'l' && jsonPos < strSize(json) - 1)
|
||||
jsonPos++;
|
||||
|
||||
if (jsonC[jsonPos] != 'l')
|
||||
THROW_FMT(JsonFormatError, "expected null delimit but found '%c'", jsonC[jsonPos]);
|
||||
|
||||
jsonPos++;
|
||||
if (jsonPos == strSize(json) || jsonC[jsonPos] != 'l')
|
||||
THROW_FMT(JsonFormatError, "null delimit not found");
|
||||
|
||||
jsonPos++;
|
||||
String *valueStr = strNewN(jsonC + valueBeginPos, jsonPos - valueBeginPos);
|
||||
|
||||
if (strCmpZ(valueStr, "null") != 0)
|
||||
THROW_FMT(JsonFormatError, "expected 'null' but found '%s'", strPtr(valueStr));
|
||||
}
|
||||
// Else not sure what it is.
|
||||
else
|
||||
THROW(JsonFormatError, "unknown value type");
|
||||
|
||||
|
@ -33,6 +33,11 @@ testRun(void)
|
||||
TEST_ERROR(jsonToKv(strNew("{\"key1\":[1}")), JsonFormatError, "expected array delimeter ']' but found '}'");
|
||||
TEST_ERROR(jsonToKv(strNew("{\"key1\":[]}")), JsonFormatError, "unknown array value type");
|
||||
TEST_ERROR(jsonToKv(strNew("{}")), JsonFormatError, "expected '\"' but found '}'");
|
||||
TEST_ERROR(jsonToKv(strNew("{\"key1\":nu")), JsonFormatError, "expected null delimit but found 'u'");
|
||||
TEST_ERROR(jsonToKv(strNew("{\"key1\":nul")), JsonFormatError, "null delimit not found");
|
||||
TEST_ERROR(jsonToKv(strNew("{\"key1\":nult")), JsonFormatError, "null delimit not found");
|
||||
TEST_ERROR(jsonToKv(strNew("{\"key1\":noll")), JsonFormatError, "expected 'null' but found 'noll'");
|
||||
TEST_ERROR(jsonToKv(strNew("{\"key1\":nully}")), JsonFormatError, "expected '}' but found 'y'");
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------------
|
||||
KeyValue *kv = NULL;
|
||||
@ -49,6 +54,9 @@ testRun(void)
|
||||
TEST_ASSIGN(kv, jsonToKv(strNew("{\"key1\":false}")), "boolean false");
|
||||
TEST_RESULT_BOOL(varBool(kvGet(kv, varNewStr(strNew("key1")))), false, " check boolean");
|
||||
|
||||
TEST_ASSIGN(kv, jsonToKv(strNew("{\"key1\":null}")), "single null value");
|
||||
TEST_RESULT_PTR(varStr(kvGet(kv, varNewStr(strNew("key1")))), NULL, " check null");
|
||||
|
||||
TEST_ASSIGN(
|
||||
kv,
|
||||
jsonToKv(
|
||||
@ -78,8 +86,8 @@ testRun(void)
|
||||
strNew(
|
||||
"{\"backup-info-size-delta\":1982702,\"backup-prior\":\"20161219-212741F_20161219-212803I\","
|
||||
"\"backup-reference\":[\"20161219-212741F\",\"20161219-212741F_20161219-212803I\"],"
|
||||
"\"checksum-page-error\":[1],\"backup-timestamp-start\":1482182951}")),
|
||||
"multpile values with array");
|
||||
"\"null-value\":null,\"checksum-page-error\":[1],\"backup-timestamp-start\":1482182951}")),
|
||||
"multpile values with array and null");
|
||||
TEST_RESULT_UINT(varUInt64(kvGet(kv, varNewStr(strNew("backup-info-size-delta")))), 1982702, " check integer");
|
||||
TEST_RESULT_STR(strPtr(varStr(kvGet(kv, varNewStr(strNew("backup-prior"))))), "20161219-212741F_20161219-212803I",
|
||||
" check string");
|
||||
@ -87,6 +95,7 @@ testRun(void)
|
||||
"20161219-212741F", " check string array[0]");
|
||||
TEST_RESULT_STR(strPtr(varStr(varLstGet(varVarLst(kvGet(kv, varNewStr(strNew("backup-reference")))), 1))),
|
||||
"20161219-212741F_20161219-212803I", " check string array[1]");
|
||||
TEST_RESULT_PTR(varStr(kvGet(kv, varNewStr(strNew("null-value")))), NULL, " check null");
|
||||
TEST_RESULT_UINT(varUInt64(varLstGet(varVarLst(kvGet(kv, varNewStr(strNew("checksum-page-error")))), 0)), 1,
|
||||
" check integer array[0]");
|
||||
TEST_RESULT_UINT(varUInt64(kvGet(kv, varNewStr(strNew("backup-timestamp-start")))), 1482182951, " check integer");
|
||||
|
Loading…
x
Reference in New Issue
Block a user