@@ -22,6 +22,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2222 dialects, ` ConnectParams ` round-tripping a whole connection string rather than
2323 one pair, the two parameter-conversion tables, and every ` *_from_raw ` swept
2424 across its entire input domain.
25+ - ` TypeInfoRow::with_preferred ` and ` TypeInfoRow::preferred ` , so a driver can
26+ mark which of several ` SQLGetTypeInfo ` rows sharing a ` DATA_TYPE ` maps most
27+ closely to it.
28+ - ` conformance::type_info_preference_issues ` , behind the ` test-support `
29+ feature, which reports every shared ` DATA_TYPE ` without exactly one preferred
30+ row.
31+
32+ ### Changed
33+
34+ - ` SQLGetTypeInfo ` orders the preferred row first among rows sharing a
35+ ` DATA_TYPE ` , before falling back to ` TYPE_NAME ` , as the spec's "how closely
36+ the data type maps" ordering requires. Previously the alphabetically first
37+ row led, so an application taking the first row for a ` DATA_TYPE ` (Power
38+ Query does, for ` CAST ` targets) could get an unrelated type. A driver that
39+ marks nothing is unaffected.
40+
41+ ### Fixed
42+
43+ - Character data now converts to the ` SQL_C_INTERVAL_* ` C types, as the * SQL to
44+ C: Character* table requires, instead of failing with ` 07006 ` . Text of the form
45+ ` [-]y-m ` converts to the year-month C types and ` [-]d hh:mm:ss[.f] ` to the
46+ day-time ones, with months 0-11 and hours, minutes and seconds in their usual
47+ ranges; anything else is ` 22018 ` . Lost trailing fields (` 01S07 ` ) or an
48+ overflowing leading field (` 22015 ` ) behave as for an interval column, and a
49+ leading field too large to carry at all is ` 22015 ` too; a non-zero fraction
50+ digit past the ninth is ` 01S07 ` . The
51+ accepted shapes follow psqlODBC's ` interval2istruct ` , since the spec leaves
52+ "valid interval value" open for a column value.
53+ - Exact numeric data (` SQL_TINYINT ` to ` SQL_BIGINT ` , ` SQL_DECIMAL ` ,
54+ ` SQL_NUMERIC ` ) now converts to the ` SQL_C_INTERVAL_* ` C types too, as the * SQL
55+ to C: Numeric* table requires, instead of failing with ` 07006 ` . The number
56+ counts the target's leading field (` 5 ` read as ` SQL_C_INTERVAL_DAY ` is five
57+ days), a dropped fraction is ` 01S07 ` and a value too large is ` 22015 ` . That
58+ table defines only the failure case for multi-field targets, so the same rule
59+ applies there: ` 1.5 ` read as ` SQL_C_INTERVAL_DAY_TO_SECOND ` is 1 day 12 hours.
60+ Approximate numerics stay ` 07006 ` , as the table's footnote [ c] requires.
2561
2662## [ 0.1.0] — 2026-08-04
2763
0 commit comments