fix: cast usage provider body before jsonb type checks

This commit is contained in:
fawney19
2026-05-27 15:48:12 +08:00
parent 8606455355
commit d77a572dc7
3 changed files with 10 additions and 8 deletions
@@ -115,14 +115,14 @@ SELECT
OR NULLIF(BTRIM("usage".request_metadata->>'request_path'), '') IS NOT NULL OR NULLIF(BTRIM("usage".request_metadata->>'request_path'), '') IS NOT NULL
OR NULLIF(BTRIM("usage".request_metadata->>'request_path_and_query'), '') IS NOT NULL OR NULLIF(BTRIM("usage".request_metadata->>'request_path_and_query'), '') IS NOT NULL
OR CASE OR CASE
WHEN jsonb_typeof("usage".provider_request_body) = 'object' THEN COALESCE( WHEN jsonb_typeof("usage".provider_request_body::jsonb) = 'object' THEN COALESCE(
NULLIF(BTRIM("usage".provider_request_body->>'reasoning_effort'), ''), NULLIF(BTRIM("usage".provider_request_body->>'reasoning_effort'), ''),
NULLIF(BTRIM("usage".provider_request_body->'reasoning'->>'effort'), '') NULLIF(BTRIM("usage".provider_request_body->'reasoning'->>'effort'), '')
) )
ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_reasoning_effort'), '') ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_reasoning_effort'), '')
END IS NOT NULL END IS NOT NULL
OR CASE OR CASE
WHEN jsonb_typeof("usage".provider_request_body) = 'object' THEN NULLIF(BTRIM("usage".provider_request_body->>'service_tier'), '') WHEN jsonb_typeof("usage".provider_request_body::jsonb) = 'object' THEN NULLIF(BTRIM("usage".provider_request_body->>'service_tier'), '')
ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_service_tier'), '') ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_service_tier'), '')
END IS NOT NULL END IS NOT NULL
OR ("usage".request_metadata->>'client_requested_stream') IN ('true', 'false') OR ("usage".request_metadata->>'client_requested_stream') IN ('true', 'false')
@@ -138,7 +138,7 @@ SELECT
NULLIF(BTRIM("usage".request_metadata->>'request_path_and_query'), ''), NULLIF(BTRIM("usage".request_metadata->>'request_path_and_query'), ''),
'provider_reasoning_effort', 'provider_reasoning_effort',
CASE CASE
WHEN jsonb_typeof("usage".provider_request_body) = 'object' THEN COALESCE( WHEN jsonb_typeof("usage".provider_request_body::jsonb) = 'object' THEN COALESCE(
NULLIF(BTRIM("usage".provider_request_body->>'reasoning_effort'), ''), NULLIF(BTRIM("usage".provider_request_body->>'reasoning_effort'), ''),
NULLIF(BTRIM("usage".provider_request_body->'reasoning'->>'effort'), '') NULLIF(BTRIM("usage".provider_request_body->'reasoning'->>'effort'), '')
) )
@@ -146,7 +146,7 @@ SELECT
END, END,
'provider_service_tier', 'provider_service_tier',
CASE CASE
WHEN jsonb_typeof("usage".provider_request_body) = 'object' THEN NULLIF(BTRIM("usage".provider_request_body->>'service_tier'), '') WHEN jsonb_typeof("usage".provider_request_body::jsonb) = 'object' THEN NULLIF(BTRIM("usage".provider_request_body->>'service_tier'), '')
ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_service_tier'), '') ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_service_tier'), '')
END, END,
'client_requested_stream', 'client_requested_stream',
@@ -115,14 +115,14 @@ SELECT
OR NULLIF(BTRIM("usage".request_metadata->>'request_path'), '') IS NOT NULL OR NULLIF(BTRIM("usage".request_metadata->>'request_path'), '') IS NOT NULL
OR NULLIF(BTRIM("usage".request_metadata->>'request_path_and_query'), '') IS NOT NULL OR NULLIF(BTRIM("usage".request_metadata->>'request_path_and_query'), '') IS NOT NULL
OR CASE OR CASE
WHEN jsonb_typeof("usage".provider_request_body) = 'object' THEN COALESCE( WHEN jsonb_typeof("usage".provider_request_body::jsonb) = 'object' THEN COALESCE(
NULLIF(BTRIM("usage".provider_request_body->>'reasoning_effort'), ''), NULLIF(BTRIM("usage".provider_request_body->>'reasoning_effort'), ''),
NULLIF(BTRIM("usage".provider_request_body->'reasoning'->>'effort'), '') NULLIF(BTRIM("usage".provider_request_body->'reasoning'->>'effort'), '')
) )
ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_reasoning_effort'), '') ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_reasoning_effort'), '')
END IS NOT NULL END IS NOT NULL
OR CASE OR CASE
WHEN jsonb_typeof("usage".provider_request_body) = 'object' THEN NULLIF(BTRIM("usage".provider_request_body->>'service_tier'), '') WHEN jsonb_typeof("usage".provider_request_body::jsonb) = 'object' THEN NULLIF(BTRIM("usage".provider_request_body->>'service_tier'), '')
ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_service_tier'), '') ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_service_tier'), '')
END IS NOT NULL END IS NOT NULL
OR ("usage".request_metadata->>'client_requested_stream') IN ('true', 'false') OR ("usage".request_metadata->>'client_requested_stream') IN ('true', 'false')
@@ -138,7 +138,7 @@ SELECT
NULLIF(BTRIM("usage".request_metadata->>'request_path_and_query'), ''), NULLIF(BTRIM("usage".request_metadata->>'request_path_and_query'), ''),
'provider_reasoning_effort', 'provider_reasoning_effort',
CASE CASE
WHEN jsonb_typeof("usage".provider_request_body) = 'object' THEN COALESCE( WHEN jsonb_typeof("usage".provider_request_body::jsonb) = 'object' THEN COALESCE(
NULLIF(BTRIM("usage".provider_request_body->>'reasoning_effort'), ''), NULLIF(BTRIM("usage".provider_request_body->>'reasoning_effort'), ''),
NULLIF(BTRIM("usage".provider_request_body->'reasoning'->>'effort'), '') NULLIF(BTRIM("usage".provider_request_body->'reasoning'->>'effort'), '')
) )
@@ -146,7 +146,7 @@ SELECT
END, END,
'provider_service_tier', 'provider_service_tier',
CASE CASE
WHEN jsonb_typeof("usage".provider_request_body) = 'object' THEN NULLIF(BTRIM("usage".provider_request_body->>'service_tier'), '') WHEN jsonb_typeof("usage".provider_request_body::jsonb) = 'object' THEN NULLIF(BTRIM("usage".provider_request_body->>'service_tier'), '')
ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_service_tier'), '') ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_service_tier'), '')
END, END,
'client_requested_stream', 'client_requested_stream',
@@ -707,6 +707,8 @@ fn usage_sql_uses_json_null_placeholders_for_usage_payload_columns() {
super::LIST_RECENT_USAGE_AUDITS_PREFIX, super::LIST_RECENT_USAGE_AUDITS_PREFIX,
] { ] {
assert!(sql.contains("jsonb_strip_nulls(jsonb_build_object(")); assert!(sql.contains("jsonb_strip_nulls(jsonb_build_object("));
assert!(sql.contains("jsonb_typeof(\"usage\".provider_request_body::jsonb)"));
assert!(!sql.contains("jsonb_typeof(\"usage\".provider_request_body)"));
assert!(sql.contains("'client_ip'")); assert!(sql.contains("'client_ip'"));
assert!(sql.contains("request_metadata->>'client_ip'")); assert!(sql.contains("request_metadata->>'client_ip'"));
assert!(sql.contains("'user_agent'")); assert!(sql.contains("'user_agent'"));