GH-48707: [C++][FlightRPC] Use IRD precision/scale defaults with ARD override in SQLGetData #48708
+100
−4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Rationale for this change
arrow/cpp/src/arrow/flight/sql/odbc/odbc_impl/odbc_statement.cc
Lines 746 to 748 in 8fc54a3
This was introduced by ed36107
The
GetDatafunction was using hardcoded precision (38) and scale (0) values instead of retrieving them from the IRD (Implementation Row Descriptor). This fix ensures that precision/scale are properly retrieved from the IRD as defaults, and can be overridden by ARD (Application Row Descriptor) values when specified, following ODBC specification behavior.What changes are included in this PR?
ODBCStatement::GetData()to use IRD precision/scale as defaults instead of hardcoded valuesSQL_ARD_TYPEorSQL_C_DEFAULTis usedAre these changes tested?
Yes. Added two tests in
statement_test.cc:TestGetDataPrecisionScaleUsesIRDAsDefault: Verifies IRD precision/scale are used as defaultsTestGetDataPrecisionScaleUsesARDWhenSet: Verifies ARD precision/scale override IRD when setAre there any user-facing changes?
I think it's fair to say a no. This is an internal fix that ensures correct ODBC behavior.