lidavidm commented on code in PR #1577:
URL: https://github.com/apache/arrow-adbc/pull/1577#discussion_r1509367619
##########
go/adbc/driver/flightsql/utils.go:
##########
@@ -92,19 +93,37 @@ func adbcFromFlightStatusWithDetails(err error, header,
trailer metadata.MD, con
// XXX: must check both headers and trailers because some
implementations
// (like gRPC-Java) will consolidate trailers into headers for failed
RPCs
for key, values := range header {
- switch key {
- case "content-type", "grpc-status-details-bin":
+ switch {
+ case key == "content-type":
+ // Not useful info
continue
+ case key == "grpc-status-details-bin":
+ // gRPC library parses this above via grpcStatus.Proto()
+ continue
+ case strings.HasSuffix(key, "-bin"):
+ for _, value := range values {
+ // that's right, gRPC stuffs binary data into a
"string"
+ details = append(details,
&adbc.BinaryErrorDetail{Name: key, Detail: []byte(value)})
+ }
default:
for _, value := range values {
details = append(details,
&adbc.TextErrorDetail{Name: key, Detail: value})
}
}
Review Comment:
This is different. This is all the headers/trailers so we can reflect
anything the server might send, not just the undocumented and partially-broken
grpc-status-details-bin header that gRPC's Status covers.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]