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_and_query'), '') IS NOT NULL
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'), '')
)
ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_reasoning_effort'), '')
END IS NOT NULL
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'), '')
END IS NOT NULL
OR ("usage".request_metadata->>'client_requested_stream') IN ('true', 'false')
@@ -138,7 +138,7 @@ SELECT
NULLIF(BTRIM("usage".request_metadata->>'request_path_and_query'), ''),
'provider_reasoning_effort',
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'), '')
)
@@ -146,7 +146,7 @@ SELECT
END,
'provider_service_tier',
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'), '')
END,
'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_and_query'), '') IS NOT NULL
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'), '')
)
ELSE NULLIF(BTRIM("usage".request_metadata->>'provider_reasoning_effort'), '')
END IS NOT NULL
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'), '')
END IS NOT NULL
OR ("usage".request_metadata->>'client_requested_stream') IN ('true', 'false')
@@ -138,7 +138,7 @@ SELECT
NULLIF(BTRIM("usage".request_metadata->>'request_path_and_query'), ''),
'provider_reasoning_effort',
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'), '')
)
@@ -146,7 +146,7 @@ SELECT
END,
'provider_service_tier',
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'), '')
END,
'client_requested_stream',
@@ -707,6 +707,8 @@ fn usage_sql_uses_json_null_placeholders_for_usage_payload_columns() {
super::LIST_RECENT_USAGE_AUDITS_PREFIX,
] {
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("request_metadata->>'client_ip'"));
assert!(sql.contains("'user_agent'"));