Skip to content

Commit 2e16f51

Browse files
committed
use FromArgs
1 parent a2b194a commit 2e16f51

File tree

1 file changed

+11
-28
lines changed

1 file changed

+11
-28
lines changed

stdlib/src/sqlite.rs

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,6 +1461,12 @@ mod _sqlite {
14611461
statement: Option<PyRef<Statement>>,
14621462
}
14631463

1464+
#[derive(FromArgs)]
1465+
struct FetchManyArgs {
1466+
#[pyarg(any, name = "size", optional)]
1467+
size: Option<c_int>,
1468+
}
1469+
14641470
#[pyclass(with(Constructor, IterNext, Iterable), flags(BASETYPE))]
14651471
impl Cursor {
14661472
fn new(
@@ -1684,38 +1690,15 @@ mod _sqlite {
16841690
#[pymethod]
16851691
fn fetchmany(
16861692
zelf: &Py<Self>,
1687-
mut args: FuncArgs,
1693+
args: FetchManyArgs,
16881694
vm: &VirtualMachine,
16891695
) -> PyResult<Vec<PyObjectRef>> {
1690-
let size_posarg = args.take_positional();
1691-
let size_kwarg = args.take_keyword("size");
1692-
1693-
if !args.args.is_empty() {
1694-
return Err(vm.new_type_error(format!(
1695-
"fetchmany() takes from 0 to 1 positional arguments but {} were given",
1696-
args.args.len() + 1
1697-
)));
1698-
}
1699-
1700-
if let Some((name_str, _)) = args.kwargs.into_iter().next() {
1701-
return Err(vm.new_type_error(format!(
1702-
"fetchmany() got an unexpected keyword argument {name_str}",
1703-
)));
1704-
}
1705-
1706-
let max_rows: c_int = match (size_posarg, size_kwarg) {
1707-
(Some(pos), None) => pos.try_into_value(vm)?,
1708-
(None, Some(kw)) => kw.try_into_value(vm)?,
1709-
(None, None) => zelf.arraysize.load(Ordering::Relaxed),
1710-
(Some(_), Some(_)) => {
1711-
return Err(vm.new_type_error(
1712-
"fetchmany() got multiple values for argument 'size'".to_owned(),
1713-
));
1714-
}
1715-
};
1696+
let max_rows = args
1697+
.size
1698+
.unwrap_or_else(|| zelf.arraysize.load(Ordering::Relaxed));
17161699

17171700
let mut list = vec![];
1718-
while let PyIterReturn::Return(row) = Self::next(zelf, vm)? {
1701+
while let PyIterReturn::Return(row) = Cursor::next(zelf, vm)? {
17191702
list.push(row);
17201703
if max_rows > 0 && list.len() as c_int >= max_rows {
17211704
break;

0 commit comments

Comments
 (0)