From 5acc000a11084a1fe2c4abe2c14443bc60ac2d13 Mon Sep 17 00:00:00 2001 From: Sander Hautvast Date: Sun, 30 Oct 2022 15:21:58 +0100 Subject: [PATCH] bugfix varint of 0 --- src/lib.rs | 9 +++++---- src/record.rs | 3 +++ src/varint.rs | 8 ++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index ea3e264..f6bfc2a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -20,10 +20,11 @@ mod tests { fn test_build() -> Result<(), Error> { let mut builder = DatabaseBuilder::new(); builder.schema("foo", "create table foo(bar varchar(10))"); - let mut record = Record::new(1); - record.add_value(values::string("helloworld")); - builder.add_record(record); - + for i in 0..100 { + let mut record = Record::new(i); + record.add_value(values::string("helloworld")); + builder.add_record(record); + } let database: Database = builder.into(); let file = File::create("foo.db")?; let writer = BufWriter::new(file); diff --git a/src/record.rs b/src/record.rs index bf10b35..e980e5c 100644 --- a/src/record.rs +++ b/src/record.rs @@ -9,6 +9,7 @@ pub struct Record { } impl Record { + /// Users have to supply the rowid. In the java version this can be done automatically pub fn new(rowid: u64) -> Self { Self { rowid, @@ -78,5 +79,7 @@ mod tests { fn test() { let mut record = Record::new(1); record.add_value(string("hello")); + let bytes: Vec = record.into(); + assert_eq!(bytes, vec![7, 1, 2, 23, 104, 101, 108, 108, 111]); } } diff --git a/src/varint.rs b/src/varint.rs index 33aa569..9107d25 100644 --- a/src/varint.rs +++ b/src/varint.rs @@ -11,6 +11,9 @@ pub fn write(value: u64) -> Vec { } result } else { + if v == 0 { + return vec![0]; + } let mut result = Vec::new(); while v != 0 { result.push(((v & 0x7f) | 0x80) as u8); @@ -39,4 +42,9 @@ mod tests { fn test_write1() { assert_eq!(vec![1], write(0x01)); } + + #[test] + fn test_write0() { + assert_eq!(vec![0], write(0)); + } }