File tree Expand file tree Collapse file tree 2 files changed +31
-0
lines changed Expand file tree Collapse file tree 2 files changed +31
-0
lines changed Original file line number Diff line number Diff line change @@ -1238,6 +1238,32 @@ mod test {
1238
1238
}
1239
1239
Ok ( ( ) )
1240
1240
}
1241
+
1242
+ #[ test]
1243
+ fn test_rows_and_then_with_custom_error ( ) -> Result < ( ) > {
1244
+ let db = checked_memory_handle ( ) ;
1245
+ db. execute_batch ( "CREATE TABLE test (value INTEGER)" ) ?;
1246
+ db. execute_batch ( "INSERT INTO test VALUES (1), (3), (5)" ) ?;
1247
+
1248
+ let mut stmt = db. prepare ( "SELECT value FROM test ORDER BY value" ) ?;
1249
+ let rows = stmt. query ( [ ] ) ?;
1250
+
1251
+ // Use and_then to apply custom validation with custom error type
1252
+ let results: Vec < i32 > = rows
1253
+ . and_then ( |row| -> CustomResult < i32 > {
1254
+ let val: i32 = row. get ( 0 ) ?; // duckdb::Error automatically converted via From trait
1255
+ if val > 10 {
1256
+ Err ( CustomError :: SomeError ) // Custom application-specific error
1257
+ } else {
1258
+ Ok ( val)
1259
+ }
1260
+ } )
1261
+ . collect :: < CustomResult < Vec < _ > > > ( )
1262
+ . unwrap ( ) ;
1263
+
1264
+ assert_eq ! ( results, vec![ 1 , 3 , 5 ] ) ;
1265
+ Ok ( ( ) )
1266
+ }
1241
1267
}
1242
1268
1243
1269
#[ test]
Original file line number Diff line number Diff line change @@ -58,6 +58,11 @@ impl<'stmt> Rows<'stmt> {
58
58
59
59
/// Map over this `Rows`, converting it to a [`Map`], which
60
60
/// implements `FallibleIterator`.
61
+ ///
62
+ /// **Note:** This method requires the closure to return `duckdb::Result<B>`.
63
+ /// If you need to use custom error types, consider using [`and_then`](Self::and_then)
64
+ /// instead, which allows any error type that implements `From<duckdb::Error>`.
65
+ ///
61
66
/// ```rust,no_run
62
67
/// use fallible_iterator::FallibleIterator;
63
68
/// # use duckdb::{Result, Statement};
You can’t perform that action at this time.
0 commit comments