mirror of
https://github.com/postgres/postgres.git
synced 2025-05-30 00:02:11 -04:00
Handle JSON scalar types in key provider options
Treat null as missing value, error out on boolean and make no change for number or string.
This commit is contained in:
parent
fe50a21b31
commit
4807e46b0b
@ -204,10 +204,16 @@ ERROR: key provider options must be an object
|
||||
-- Creating key providers fails if an external value object doesn't have all required keys
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {}}');
|
||||
ERROR: external value must contain "type" in field "path"
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": null}}');
|
||||
ERROR: external value must contain "type" in field "path"
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": "remote"}}');
|
||||
ERROR: external remote value must contain "url" in field "path"
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": "remote", "url": null}}');
|
||||
ERROR: external remote value must contain "url" in field "path"
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": "file"}}');
|
||||
ERROR: external file value must contain "path" in field "path"
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": "file", "path": null}}');
|
||||
ERROR: external file value must contain "path" in field "path"
|
||||
-- Creating key providers fails if values are array instead of scalar
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": ["array"]}');
|
||||
ERROR: unexpected array in field "path"
|
||||
@ -215,6 +221,13 @@ SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": [
|
||||
ERROR: unexpected array in field "path"
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": "file", "path": ["array"]}}');
|
||||
ERROR: unexpected array in field "path"
|
||||
-- Creating key providers fails if values are boolean
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": true}');
|
||||
ERROR: unexpected boolean in field "path"
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": true}}');
|
||||
ERROR: unexpected boolean in field "path"
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": "file", "path": true}}');
|
||||
ERROR: unexpected boolean in field "path"
|
||||
-- Modifying key providers fails if any required parameter is NULL
|
||||
SELECT pg_tde_change_database_key_provider(NULL, 'file-keyring', '{}');
|
||||
ERROR: provider type cannot be null
|
||||
@ -245,10 +258,16 @@ ERROR: key provider options must be an object
|
||||
-- Modifying key providers fails if an external value object doesn't have all required keys
|
||||
SELECT pg_tde_change_database_key_provider('file', 'file-provider', '{"path": {}}');
|
||||
ERROR: external value must contain "type" in field "path"
|
||||
SELECT pg_tde_change_database_key_provider('file', 'provider', '{"path": {"type": null}}');
|
||||
ERROR: key provider "provider" does not exists
|
||||
SELECT pg_tde_change_database_key_provider('file', 'file-provider', '{"path": {"type": "remote"}}');
|
||||
ERROR: external remote value must contain "url" in field "path"
|
||||
SELECT pg_tde_change_database_key_provider('file', 'provider', '{"path": {"type": "remote", "url": null}}');
|
||||
ERROR: key provider "provider" does not exists
|
||||
SELECT pg_tde_change_database_key_provider('file', 'file-provider', '{"path": {"type": "file"}}');
|
||||
ERROR: external file value must contain "path" in field "path"
|
||||
SELECT pg_tde_change_database_key_provider('file', 'provider', '{"path": {"type": "file", "path": null}}');
|
||||
ERROR: key provider "provider" does not exists
|
||||
-- Modifying key providers fails if values are array instead of scalar
|
||||
SELECT pg_tde_change_database_key_provider('file', 'file-provider', '{"path": ["array"]}');
|
||||
ERROR: unexpected array in field "path"
|
||||
@ -256,6 +275,13 @@ SELECT pg_tde_change_database_key_provider('file', 'file-provider', '{"path": {"
|
||||
ERROR: unexpected array in field "path"
|
||||
SELECT pg_tde_change_database_key_provider('file', 'file-provider', '{"path": {"type": "file", "path": ["array"]}}');
|
||||
ERROR: unexpected array in field "path"
|
||||
-- Modifying key providers fails if values are boolean
|
||||
SELECT pg_tde_change_database_key_provider('file', 'provider', '{"path": true}');
|
||||
ERROR: key provider "provider" does not exists
|
||||
SELECT pg_tde_change_database_key_provider('file', 'provider', '{"path": {"type": true}}');
|
||||
ERROR: key provider "provider" does not exists
|
||||
SELECT pg_tde_change_database_key_provider('file', 'provider', '{"path": {"type": "file", "path": true}}');
|
||||
ERROR: key provider "provider" does not exists
|
||||
-- Deleting key providers fails if key name is NULL
|
||||
SELECT pg_tde_delete_database_key_provider(NULL);
|
||||
ERROR: provider_name cannot be null
|
||||
|
@ -83,14 +83,22 @@ SELECT pg_tde_add_database_key_provider('file', 'provider', 'null');
|
||||
|
||||
-- Creating key providers fails if an external value object doesn't have all required keys
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {}}');
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": null}}');
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": "remote"}}');
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": "remote", "url": null}}');
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": "file"}}');
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": "file", "path": null}}');
|
||||
|
||||
-- Creating key providers fails if values are array instead of scalar
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": ["array"]}');
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": ["array"]}}');
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": "file", "path": ["array"]}}');
|
||||
|
||||
-- Creating key providers fails if values are boolean
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": true}');
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": true}}');
|
||||
SELECT pg_tde_add_database_key_provider('file', 'provider', '{"path": {"type": "file", "path": true}}');
|
||||
|
||||
-- Modifying key providers fails if any required parameter is NULL
|
||||
SELECT pg_tde_change_database_key_provider(NULL, 'file-keyring', '{}');
|
||||
SELECT pg_tde_change_database_key_provider('file', NULL, '{}');
|
||||
@ -111,14 +119,22 @@ SELECT pg_tde_change_database_key_provider('file', 'file-provider', 'null');
|
||||
|
||||
-- Modifying key providers fails if an external value object doesn't have all required keys
|
||||
SELECT pg_tde_change_database_key_provider('file', 'file-provider', '{"path": {}}');
|
||||
SELECT pg_tde_change_database_key_provider('file', 'provider', '{"path": {"type": null}}');
|
||||
SELECT pg_tde_change_database_key_provider('file', 'file-provider', '{"path": {"type": "remote"}}');
|
||||
SELECT pg_tde_change_database_key_provider('file', 'provider', '{"path": {"type": "remote", "url": null}}');
|
||||
SELECT pg_tde_change_database_key_provider('file', 'file-provider', '{"path": {"type": "file"}}');
|
||||
SELECT pg_tde_change_database_key_provider('file', 'provider', '{"path": {"type": "file", "path": null}}');
|
||||
|
||||
-- Modifying key providers fails if values are array instead of scalar
|
||||
SELECT pg_tde_change_database_key_provider('file', 'file-provider', '{"path": ["array"]}');
|
||||
SELECT pg_tde_change_database_key_provider('file', 'file-provider', '{"path": {"type": ["array"]}}');
|
||||
SELECT pg_tde_change_database_key_provider('file', 'file-provider', '{"path": {"type": "file", "path": ["array"]}}');
|
||||
|
||||
-- Modifying key providers fails if values are boolean
|
||||
SELECT pg_tde_change_database_key_provider('file', 'provider', '{"path": true}');
|
||||
SELECT pg_tde_change_database_key_provider('file', 'provider', '{"path": {"type": true}}');
|
||||
SELECT pg_tde_change_database_key_provider('file', 'provider', '{"path": {"type": "file", "path": true}}');
|
||||
|
||||
-- Deleting key providers fails if key name is NULL
|
||||
SELECT pg_tde_delete_database_key_provider(NULL);
|
||||
SELECT pg_tde_delete_global_key_provider(NULL);
|
||||
|
@ -431,6 +431,7 @@ json_kring_scalar(void *state, char *token, JsonTokenType tokentype)
|
||||
{
|
||||
JsonKeyringState *parse = state;
|
||||
JsonKeyringField *field = NULL;
|
||||
char *value;
|
||||
|
||||
switch (parse->state)
|
||||
{
|
||||
@ -447,7 +448,29 @@ json_kring_scalar(void *state, char *token, JsonTokenType tokentype)
|
||||
break;
|
||||
}
|
||||
|
||||
return json_kring_assign_scalar(parse, *field, token);
|
||||
switch (tokentype)
|
||||
{
|
||||
case JSON_TOKEN_STRING:
|
||||
case JSON_TOKEN_NUMBER:
|
||||
value = token;
|
||||
break;
|
||||
case JSON_TOKEN_TRUE:
|
||||
case JSON_TOKEN_FALSE:
|
||||
ereport(ERROR,
|
||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||
errmsg("unexpected boolean in field \"%s\"", JK_FIELD_NAMES[parse->top_level_field]));
|
||||
break;
|
||||
case JSON_TOKEN_NULL:
|
||||
value = NULL;
|
||||
pfree(token);
|
||||
break;
|
||||
default:
|
||||
ereport(ERROR,
|
||||
errmsg("invalid token type"));
|
||||
break;
|
||||
}
|
||||
|
||||
return json_kring_assign_scalar(parse, *field, value);
|
||||
}
|
||||
|
||||
static JsonParseErrorType
|
||||
|
Loading…
x
Reference in New Issue
Block a user