From a782ae5a0a234a49730607f7e0e7e899e4450e2c Mon Sep 17 00:00:00 2001 From: Piotr Sarna Date: Fri, 12 May 2023 10:09:18 +0200 Subject: [PATCH] cursor: add is_empty --- core/mvcc/bindings/c/src/lib.rs | 8 +++++++- core/mvcc/mvcc-rs/src/cursor.rs | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core/mvcc/bindings/c/src/lib.rs b/core/mvcc/bindings/c/src/lib.rs index 16254194a..6da877c12 100644 --- a/core/mvcc/bindings/c/src/lib.rs +++ b/core/mvcc/bindings/c/src/lib.rs @@ -156,6 +156,12 @@ pub unsafe extern "C" fn MVCCScanCursorOpen(db: MVCCDatabaseRef) -> MVCCScanCurs let (database, runtime) = (&database.db, &database.runtime); match runtime.block_on(async move { mvcc_rs::cursor::ScanCursor::new(database).await }) { Ok(cursor) => { + if cursor.is_empty() { + tracing::debug!("Cursor is empty"); + return MVCCScanCursorRef { + ptr: std::ptr::null_mut(), + }; + } tracing::debug!("Cursor open: {cursor:?}"); MVCCScanCursorRef { ptr: Box::into_raw(Box::new(ScanCursorContext { cursor, db })), @@ -249,4 +255,4 @@ pub unsafe extern "C" fn MVCCScanCursorPosition(cursor: MVCCScanCursorRef) -> u6 let cursor_ctx = unsafe { &mut *cursor.ptr }; let cursor = &mut cursor_ctx.cursor; cursor.current_row_id().unwrap_or(0) -} \ No newline at end of file +} diff --git a/core/mvcc/mvcc-rs/src/cursor.rs b/core/mvcc/mvcc-rs/src/cursor.rs index 856ce1dbc..7d9455426 100644 --- a/core/mvcc/mvcc-rs/src/cursor.rs +++ b/core/mvcc/mvcc-rs/src/cursor.rs @@ -59,4 +59,8 @@ impl< self.index += 1; self.index < self.row_ids.len() } + + pub fn is_empty(&self) -> bool { + self.index >= self.row_ids.len() + } }