Skip to content

Commit 397c429

Browse files
authored
Merge pull request #75 from tursodatabase/none-type-support
feat: accept None as a param type
2 parents 16a6b1b + d01208d commit 397c429

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,9 @@ async fn execute(cursor: &Cursor, sql: String, parameters: Option<&PyTuple>) ->
496496
Some(parameters) => {
497497
let mut params = vec![];
498498
for param in parameters.iter() {
499-
let param = if let Ok(value) = param.extract::<i32>() {
499+
let param = if param.is_none() {
500+
libsql_core::Value::Null
501+
} else if let Ok(value) = param.extract::<i32>() {
500502
libsql_core::Value::Integer(value as i64)
501503
} else if let Ok(value) = param.extract::<f64>() {
502504
libsql_core::Value::Real(value)

tests/test_suite.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,17 @@ def test_params(provider):
238238
res = cur.execute("SELECT * FROM users")
239239
assert (1, "[email protected]") == res.fetchone()
240240

241+
@pytest.mark.parametrize("provider", ["libsql", "sqlite"])
242+
def test_none_param(provider):
243+
conn = connect(provider, ":memory:")
244+
cur = conn.cursor()
245+
cur.execute("CREATE TABLE users (id INTEGER, email TEXT)")
246+
cur.execute("INSERT INTO users VALUES (?, ?)", (1, None))
247+
cur.execute("INSERT INTO users VALUES (?, ?)", (2, "[email protected]"))
248+
res = cur.execute("SELECT * FROM users ORDER BY id")
249+
results = res.fetchall()
250+
assert results[0] == (1, None)
251+
assert results[1] == (2, "[email protected]")
241252

242253
@pytest.mark.parametrize("provider", ["libsql", "sqlite"])
243254
def test_fetchmany(provider):

0 commit comments

Comments
 (0)