From ed19f477621d5e7f64a984e62c8355f22d1bbf37 Mon Sep 17 00:00:00 2001 From: jussisaurio Date: Sat, 5 Oct 2024 16:05:20 +0300 Subject: [PATCH] fix --- core/storage/btree.rs | 14 +++++++------- testing/where.test | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/core/storage/btree.rs b/core/storage/btree.rs index 348839803..0052f1c84 100644 --- a/core/storage/btree.rs +++ b/core/storage/btree.rs @@ -328,7 +328,7 @@ impl BTreeCursor { Ok(CursorResult::Ok((None, None))) } - fn move_to_table_leaf(&mut self, rowid: u64, cmp: SeekOp) -> Result> { + fn move_to_table_leaf(&mut self, key: u64, cmp: SeekOp) -> Result> { self.move_to_root(); loop { @@ -362,8 +362,8 @@ impl BTreeCursor { }) => { mem_page.advance(); let comparison = match cmp { - SeekOp::GT => *_rowid > rowid, - SeekOp::GE => *_rowid >= rowid, + SeekOp::GT => key <= *_rowid, + SeekOp::GE => key < *_rowid, }; if comparison { let mem_page = @@ -388,10 +388,10 @@ impl BTreeCursor { } if !found_cell { - let parent = mem_page.clone(); + let parent = mem_page.parent.clone(); match page.rightmost_pointer() { Some(right_most_pointer) => { - let mem_page = MemPage::new(Some(parent), right_most_pointer as usize, 0); + let mem_page = MemPage::new(parent, right_most_pointer as usize, 0); self.page.replace(Some(Rc::new(mem_page))); continue; } @@ -597,10 +597,10 @@ impl BTreeCursor { } if !found_cell { - let parent = mem_page.clone(); + let parent = mem_page.parent.clone(); match page.rightmost_pointer() { Some(right_most_pointer) => { - let mem_page = MemPage::new(Some(parent), right_most_pointer as usize, 0); + let mem_page = MemPage::new(parent, right_most_pointer as usize, 0); self.page.replace(Some(Rc::new(mem_page))); continue; } diff --git a/testing/where.test b/testing/where.test index fb4e2c10f..53ec71fdf 100755 --- a/testing/where.test +++ b/testing/where.test @@ -268,3 +268,21 @@ do_execsql_test where-complex-parentheses { select id, name from products where ((id = 5 and name = 'sweatshirt') or (id = 1 and name = 'hat')) and (name = 'sweatshirt' or name = 'hat') ORDER BY id; } {1|hat 5|sweatshirt} + +# regression test for primary key index behavior +do_execsql_test where_id_index_seek_test { + select id from users where id > 9995; +} {9996 +9997 +9998 +9999 +10000} + +# regression test for secondary index (users.age) behavior +do_execsql_test where_id_index_seek_test { + select id,age from users where age >= 100 limit 5; +} {186|100 +198|100 +301|100 +364|100 +460|100}