alamb commented on code in PR #14167: URL: https://github.com/apache/datafusion/pull/14167#discussion_r1921063517
########## datafusion/common/src/scalar/mod.rs: ########## @@ -2849,6 +2849,50 @@ impl ScalarValue { ScalarValue::from(value).cast_to(target_type) } + /// Returns the Some(`&str`) representation of `ScalarValue` of logical string type + /// + /// Returns `None` if this `ScalarValue` is not a logical string type or the + /// `ScalarValue` represents the `NULL` value. + /// + /// Note you can use [`Option::flatten`] to check for non null logical + /// strings. + /// + /// For example, [`ScalarValue::Utf8`], [`ScalarValue::LargeUtf8`], and + /// [`ScalarValue::Dictionary`] with a logical string value and store + /// strings and can be accessed as `&str` using this method. + /// + /// # Example: logical strings + /// ``` + /// # use datafusion_common::ScalarValue; + /// /// non strings return None + /// let scalar = ScalarValue::from(42); + /// assert_eq!(scalar.try_as_str(), None); + /// // Non null logical string returns Some(Some(&str)) + /// let scalar = ScalarValue::from("hello"); + /// assert_eq!(scalar.try_as_str(), Some(Some("hello"))); + /// // Null logical string returns Some(None) + /// let scalar = ScalarValue::Utf8(None); + /// assert_eq!(scalar.try_as_str(), Some(None)); + /// ``` + /// + /// # Example: use [`Option::flatten`] to check for non-null logical strings + /// ``` + /// # use datafusion_common::ScalarValue; + /// // Non null logical string returns Some(Some(&str)) + /// let scalar = ScalarValue::from("hello"); + /// assert_eq!(scalar.try_as_str().flatten(), Some("hello")); + /// ``` + pub fn try_as_str(&self) -> Option<Option<&str>> { Review Comment: Thank you for the review @wiedld `DataFusionError` always has an owned String in it, so returning an `Result` is actually quite slow as it needs to allocate some memory and copy stuff around. Thus I think this API should return an `Option` -- 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: github-unsubscr...@datafusion.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org For additional commands, e-mail: github-h...@datafusion.apache.org