fix(postgresql): keep enum queries on binary protocol

This commit is contained in:
Anubis 2026-08-05 15:29:33 +08:00 committed by GitHub
parent c972dab3d0
commit 7243f5eb06
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 16 additions and 0 deletions

View File

@ -476,6 +476,7 @@ fn pg_type_requires_text_protocol(pg_type: &Type, col_type: PgColType) -> bool {
}
match pg_type.kind() {
Kind::Enum(_) => false,
Kind::Array(element_type) => element_type.oid() >= POSTGRES_FIRST_NORMAL_OBJECT_ID,
Kind::Simple => pg_scalar_type_requires_text_protocol(pg_type.oid(), col_type),
_ => pg_type.oid() >= POSTGRES_FIRST_NORMAL_OBJECT_ID,
@ -4804,6 +4805,21 @@ mod tests {
assert!(pg_type_requires_text_protocol(&dynamic_record_array, PgColType::GenericArray));
}
#[test]
fn postgres_enum_keeps_binary_protocol() {
let enum_type = Type::new(
"withdraw_btc_status".to_string(),
98_765,
Kind::Enum(vec!["pending".to_string(), "completed".to_string()]),
"risk".to_string(),
);
let enum_array =
Type::new("_withdraw_btc_status".to_string(), 98_766, Kind::Array(enum_type.clone()), "risk".to_string());
assert!(!pg_type_requires_text_protocol(&enum_type, PgColType::Other));
assert!(pg_type_requires_text_protocol(&enum_array, PgColType::GenericArray));
}
#[test]
fn postgres_builtin_or_supported_type_keeps_binary_protocol() {
assert!(!pg_scalar_type_requires_text_protocol(POSTGRES_FIRST_NORMAL_OBJECT_ID - 1, PgColType::Other));