Skip to content

Commit 15f1619

Browse files
authored
Merge 'Kill unwrap() calls in extensions' from Pekka Enberg
As preparation for #3992 that actually enforces no unwraps, remove them from extensions. Reviewed-by: Preston Thorpe <[email protected]> Closes #4000
2 parents d2fc528 + 227c979 commit 15f1619

File tree

8 files changed

+29
-14
lines changed

8 files changed

+29
-14
lines changed

extensions/core/src/vfs_modules.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ pub trait VfsExtension: Default + Send + Sync {
2828
}
2929
fn generate_random_number(&self) -> i64 {
3030
let mut buf = [0u8; 8];
31-
getrandom::fill(&mut buf).unwrap();
31+
getrandom::fill(&mut buf).expect("failed to generate random bytes");
3232
i64::from_ne_bytes(buf)
3333
}
3434
fn get_current_time(&self) -> String {

extensions/core/src/vtabs.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,8 @@ impl IndexInfo {
299299
let idx_str_len = self.idx_str.as_ref().map(|s| s.len()).unwrap_or(0);
300300
let c_idx_str = self
301301
.idx_str
302-
.map(|s| std::ffi::CString::new(s).unwrap().into_raw())
302+
.and_then(|s| std::ffi::CString::new(s).ok())
303+
.map(|s| s.into_raw())
303304
.unwrap_or(std::ptr::null_mut());
304305
ExtIndexInfo {
305306
code: ResultCode::OK,
@@ -711,7 +712,11 @@ impl Stmt {
711712
let slice = unsafe { std::slice::from_raw_parts(col_names, count_value as usize) };
712713
for x in slice {
713714
let name = unsafe { CStr::from_ptr(*x) };
714-
names.push(name.to_str().unwrap().to_string());
715+
names.push(
716+
name.to_str()
717+
.expect("column name should be valid UTF-8")
718+
.to_string(),
719+
);
715720
}
716721
unsafe { free_column_names(col_names, count_value) };
717722
names

extensions/crypto/src/crypto.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,12 @@ pub fn md5(data: &Value) -> Result<Vec<u8>, Error> {
7070
pub fn encode(data: &Value, format: &Value) -> Result<Value, Error> {
7171
match (data.value_type(), format.value_type()) {
7272
(ValueType::Error, _) | (ValueType::Null, _) => Err(Error::InvalidType),
73-
(_, ValueType::Text) => match format.to_text().unwrap().to_lowercase().as_str() {
73+
(_, ValueType::Text) => match format
74+
.to_text()
75+
.ok_or(Error::InvalidType)?
76+
.to_lowercase()
77+
.as_str()
78+
{
7479
"base32" => Ok(Value::from_text(BASE32.encode(data.as_bytes().as_ref()))),
7580
"base64" => Ok(Value::from_text(BASE64.encode(data.as_bytes().as_ref()))),
7681
"hex" => Ok(Value::from_text(HEXLOWER.encode(data.as_bytes().as_ref()))),

extensions/csv/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ impl VTabModule for CsvVTabModule {
223223
schema = Some(sql);
224224
}
225225

226-
Ok((schema.unwrap(), table))
226+
Ok((schema.ok_or(ResultCode::Error)?, table))
227227
}
228228
}
229229

extensions/fuzzy/src/caver.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ fn replace(src: &str, old: &str, new: &str) -> String {
4747
result.push_str(new);
4848
idx += old.len();
4949
} else {
50-
let ch = src[idx..].chars().next().unwrap();
50+
let ch = src[idx..]
51+
.chars()
52+
.next()
53+
.expect("string slice should have at least one character");
5154
result.push(ch);
5255
idx += ch.len_utf8();
5356
}

extensions/fuzzy/src/phonetic.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ pub fn phonetic_hash(z_in: &[u8]) -> Option<Vec<u8>> {
9090
c = b'?';
9191
}
9292

93-
if z_out.is_empty() || c != *z_out.last().unwrap() {
93+
if z_out.last() != Some(&c) {
9494
z_out.push(c);
9595
}
9696

extensions/percentile/src/lib.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ impl AggFunc for Median {
2525
}
2626

2727
let mut sorted = state;
28-
sorted.sort_by(|a, b| a.partial_cmp(b).unwrap());
28+
sorted.sort_by(|a, b| a.total_cmp(b));
2929

3030
let len = sorted.len();
3131
if len % 2 == 1 {
@@ -82,8 +82,8 @@ impl AggFunc for Percentile {
8282
return Ok(Value::from_float(values[0]));
8383
}
8484

85-
let p = p_value.unwrap();
86-
values.sort_by(|a, b| a.partial_cmp(b).unwrap());
85+
let p = p_value.ok_or("percentile value must be provided")?;
86+
values.sort_by(|a, b| a.total_cmp(b));
8787
let n = values.len() as f64;
8888
let index = p * (n - 1.0) / 100.0;
8989
let lower = index.floor() as usize;
@@ -144,8 +144,8 @@ impl AggFunc for PercentileCont {
144144
return Ok(Value::from_float(values[0]));
145145
}
146146

147-
let p = p_value.unwrap();
148-
values.sort_by(|a, b| a.partial_cmp(b).unwrap());
147+
let p = p_value.ok_or("percentile value must be provided")?;
148+
values.sort_by(|a, b| a.total_cmp(b));
149149
let n = values.len() as f64;
150150
let index = p * (n - 1.0);
151151
let lower = index.floor() as usize;
@@ -184,8 +184,8 @@ impl AggFunc for PercentileDisc {
184184
return Err(err);
185185
}
186186

187-
let p = p_value.unwrap();
188-
values.sort_by(|a, b| a.partial_cmp(b).unwrap());
187+
let p = p_value.ok_or("percentile value must be provided")?;
188+
values.sort_by(|a, b| a.total_cmp(b));
189189
let n = values.len() as f64;
190190
let index = (p * (n - 1.0)).floor() as usize;
191191
Ok(Value::from_float(values[index]))

extensions/tests/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![allow(clippy::unwrap_used)]
2+
13
use std::cell::RefCell;
24
use std::collections::{BTreeMap, VecDeque};
35
use std::fs::{File, OpenOptions};

0 commit comments

Comments
 (0)