Skip to content

Commit

Permalink
ResultSetMetadata::col_octet_length returns Option
Browse files Browse the repository at this point in the history
  • Loading branch information
pacman82 committed Nov 24, 2023
1 parent 46524b5 commit 438d8fa
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 28 deletions.
3 changes: 2 additions & 1 deletion Changelog.md
Expand Up @@ -2,7 +2,8 @@

## 4.0.0 (next)

* `ResultSetMetadata::col_display_size` now returns `Option<NonZeroUsize>`, instead of `isize`.
* `ResultSetMetadata::col_display_size` now returns `Option<NonZeroUsize>` instead of `isize`.
* `ResultSetMetadata::col_octet_length` now returns `Option<NonZeroUsize>`, instead of `isize`.
* `ResultSetMetadata::utf8_display_sizes` now iterates over `Option<NonZeroUsize>`, instead of `usize`.
* `DataType` now stores the length of variadic types as `Option<NonZeroUsize`> insteaf of `usize`.
* `DataType::display_size` now returns `Option<NonZeroUSize>` instead of `Option<usize>`.
Expand Down
41 changes: 14 additions & 27 deletions odbc-api/src/result_set_metadata.rs
Expand Up @@ -53,13 +53,15 @@ pub trait ResultSetMetadata: AsStatementRef {
stmt.is_unsigned_column(column_number).into_result(&stmt)
}

/// Returns the size in bytes of the columns. For variable sized types the maximum size is
/// returned, excluding a terminating zero.
/// Size in bytes of the columns. For variable sized types this is the maximum size, excluding a
/// terminating zero.
///
/// `column_number`: Index of the column, starting at 1.
fn col_octet_length(&mut self, column_number: u16) -> Result<isize, Error> {
fn col_octet_length(&mut self, column_number: u16) -> Result<Option<NonZeroUsize>, Error> {
let stmt = self.as_stmt_ref();
stmt.col_octet_length(column_number).into_result(&stmt)
stmt.col_octet_length(column_number)
.into_result(&stmt)
.map(|signed| NonZeroUsize::new(signed.max(0) as usize))
}

/// Maximum number of characters required to display data from the column. If the driver is
Expand Down Expand Up @@ -121,43 +123,28 @@ pub trait ResultSetMetadata: AsStatementRef {
let dt = match kind {
SqlDataType::UNKNOWN_TYPE => DataType::Unknown,
SqlDataType::EXT_VAR_BINARY => DataType::Varbinary {
length: NonZeroUsize::new(self.col_octet_length(column_number)?.try_into().unwrap()),
length: self.col_octet_length(column_number)?,
},
SqlDataType::EXT_LONG_VAR_BINARY => DataType::LongVarbinary {
length: NonZeroUsize::new(self.col_octet_length(column_number)?.try_into().unwrap()),
length: self.col_octet_length(column_number)?,
},
SqlDataType::EXT_BINARY => DataType::Binary {
length: NonZeroUsize::new(self.col_octet_length(column_number)?.try_into().unwrap()),
length: self.col_octet_length(column_number)?,
},
SqlDataType::EXT_W_VARCHAR => DataType::WVarchar {
length: NonZeroUsize::new(self
.col_display_size(column_number)?
.map(NonZeroUsize::get)
.unwrap_or(0)),
length: self.col_display_size(column_number)?,
},
SqlDataType::EXT_W_CHAR => DataType::WChar {
length: NonZeroUsize::new(self
.col_display_size(column_number)?
.map(NonZeroUsize::get)
.unwrap_or(0)),
length: self.col_display_size(column_number)?,
},
SqlDataType::EXT_LONG_VARCHAR => DataType::LongVarchar {
length: NonZeroUsize::new(self
.col_display_size(column_number)?
.map(NonZeroUsize::get)
.unwrap_or(0)),
length: self.col_display_size(column_number)?,
},
SqlDataType::CHAR => DataType::Char {
length: NonZeroUsize::new(self
.col_display_size(column_number)?
.map(NonZeroUsize::get)
.unwrap_or(0)),
length: self.col_display_size(column_number)?,
},
SqlDataType::VARCHAR => DataType::Varchar {
length: NonZeroUsize::new(self
.col_display_size(column_number)?
.map(NonZeroUsize::get)
.unwrap_or(0)),
length: self.col_display_size(column_number)?,
},
SqlDataType::NUMERIC => DataType::Numeric {
precision: self.col_precision(column_number)?.try_into().unwrap(),
Expand Down

0 comments on commit 438d8fa

Please sign in to comment.