cartel_sqlite/engine/api/
batches.rs1use crate::{row, runtime};
2use std::{marker, mem, ops, slice};
3
4pub(crate) type Arena<'owner> = &'owner mut runtime::raw::Span;
5
6const _: () = assert!(mem::size_of::<Arena<'static>>() == mem::size_of::<usize>());
7
8pub struct Rows<'arena, R: row::raw::Decode + 'arena> {
10 rows: &'arena [R::Borrowed<'arena>],
11 row: marker::PhantomData<fn() -> R>,
12}
13
14impl<'arena, R: row::raw::Decode + 'arena> Rows<'arena, R> {
15 pub(crate) const fn new(rows: &'arena [R::Borrowed<'arena>]) -> Self {
16 Self {
17 rows,
18 row: marker::PhantomData,
19 }
20 }
21
22 pub fn as_slice(&self) -> &'arena [R::Borrowed<'arena>] {
23 self.rows
24 }
25
26 pub fn len(&self) -> usize {
27 self.rows.len()
28 }
29
30 pub fn is_empty(&self) -> bool {
31 self.rows.is_empty()
32 }
33
34 pub fn iter(&self) -> slice::Iter<'arena, R::Borrowed<'arena>> {
35 self.rows.iter()
36 }
37}
38
39impl<'arena, R: row::raw::Decode + 'arena> ops::Deref for Rows<'arena, R> {
40 type Target = [R::Borrowed<'arena>];
41
42 fn deref(&self) -> &Self::Target {
43 self.rows
44 }
45}