Skip to content

Commit 55f96dc

Browse files
committed
FIX
1 parent 0e781a8 commit 55f96dc

File tree

3 files changed

+19
-26
lines changed

3 files changed

+19
-26
lines changed

perf/perf-better-sqlite3.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@ group('Statement', () => {
1313
bench('get()', () => {
1414
stmt.get(1);
1515
});
16-
bench('get() / raw', () => {
16+
bench('get() [raw]', () => {
1717
stmt.raw().get(1);
1818
});
19+
bench('get() [pluck]', () => {
20+
stmt.pluck().get(1);
21+
});
1922
});
2023

2124
await run({

perf/perf-libsql.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@ group('Statement', () => {
1313
bench('get()', () => {
1414
stmt.get(1);
1515
});
16-
bench('get() / raw', () => {
16+
bench('get() [raw]', () => {
1717
stmt.raw().get(1);
1818
});
19+
bench('get() [pluck]', () => {
20+
stmt.pluck().get(1);
21+
});
1922
});
2023

2124
await run({

src/lib.rs

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,37 +1100,24 @@ fn map_row_raw(
11001100
safe_ints: bool,
11011101
pluck: bool,
11021102
) -> Result<napi::JsUnknown> {
1103+
if pluck {
1104+
let value = match row.get_value(0) {
1105+
Ok(v) => convert_value_to_js(env, &v, safe_ints)?,
1106+
Err(_) => env.get_null()?.into_unknown(),
1107+
};
1108+
return Ok(value);
1109+
}
11031110
let column_count = column_names.len();
1104-
let mut js_array = env.create_array(column_count as u32)?;
1111+
let mut arr = env.create_array(column_count as u32)?;
11051112
for idx in 0..column_count {
11061113
let value = match row.get_value(idx as i32) {
11071114
Ok(v) => v,
11081115
Err(e) => return Err(napi::Error::from_reason(e.to_string())),
11091116
};
1110-
let js_value = match value {
1111-
libsql::Value::Null => env.get_null()?.into_unknown(),
1112-
libsql::Value::Integer(v) => {
1113-
if safe_ints {
1114-
env.create_bigint_from_i64(v)?.into_unknown()?
1115-
} else {
1116-
env.create_double(v as f64)?.into_unknown()
1117-
}
1118-
}
1119-
libsql::Value::Real(v) => env.create_double(v)?.into_unknown(),
1120-
libsql::Value::Text(v) => env.create_string(&v)?.into_unknown(),
1121-
libsql::Value::Blob(v) => env.create_buffer_with_data(v.clone())?.into_unknown(),
1122-
};
1123-
js_array.set(idx as u32, js_value)?;
1124-
}
1125-
if pluck {
1126-
let result = match js_array.get::<JsUnknown>(0)? {
1127-
Some(value) => value.into_unknown(),
1128-
None => env.get_null()?.into_unknown(),
1129-
};
1130-
Ok(result)
1131-
} else {
1132-
Ok(js_array.coerce_to_object()?.into_unknown())
1117+
let js_value = convert_value_to_js(env, &value, safe_ints)?;
1118+
arr.set(idx as u32, js_value)?;
11331119
}
1120+
Ok(arr.coerce_to_object()?.into_unknown())
11341121
}
11351122

11361123
static LOGGER_INIT: OnceCell<()> = OnceCell::new();

0 commit comments

Comments
 (0)