From 7c05149bcf8df07c620ea8cdc49dd716cd79bf44 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Wed, 24 Jan 2024 17:56:09 +0200 Subject: [PATCH] core: Optimize read_value() for strings --- core/sqlite3_ondisk.rs | 3 +-- core/types.rs | 7 +++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/core/sqlite3_ondisk.rs b/core/sqlite3_ondisk.rs index 2aba6643b..d1226375c 100644 --- a/core/sqlite3_ondisk.rs +++ b/core/sqlite3_ondisk.rs @@ -401,8 +401,7 @@ pub fn read_value(buf: &[u8], serial_type: SerialType) -> Result<(Value, usize)> if buf.len() < n { return Err(anyhow!("Invalid String value")); } - let value = String::from_utf8(buf[0..n].to_vec())?; - Ok((Value::Text(value), n)) + Ok((Value::Text(buf[0..n].to_vec()), n)) } } } diff --git a/core/types.rs b/core/types.rs index b4f64fb7a..cf8126d51 100644 --- a/core/types.rs +++ b/core/types.rs @@ -5,7 +5,7 @@ pub enum Value { Null, Integer(i64), Float(f64), - Text(String), + Text(Vec), Blob(Vec), } @@ -27,7 +27,10 @@ impl FromValue for i64 { impl FromValue for String { fn from_value(value: &Value) -> Result { match value { - Value::Text(s) => Ok(s.clone()), + Value::Text(s) => { + let s = std::str::from_utf8(s)?; + Ok(s.to_string()) + }, _ => anyhow::bail!("Expected text value"), } }