Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,9 @@ async fn execute(cursor: &Cursor, sql: String, parameters: Option<&PyTuple>) ->
Some(parameters) => {
let mut params = vec![];
for param in parameters.iter() {
let param = if let Ok(value) = param.extract::<i32>() {
let param = if param.is_none() {
libsql_core::Value::Null
} else if let Ok(value) = param.extract::<i32>() {
libsql_core::Value::Integer(value as i64)
} else if let Ok(value) = param.extract::<f64>() {
libsql_core::Value::Real(value)
Expand Down
10 changes: 10 additions & 0 deletions tests/test_suite.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,16 @@ def test_params(provider):
res = cur.execute("SELECT * FROM users")
assert (1, "[email protected]") == res.fetchone()

def test_none_param(provider):
conn = connect(provider, ":memory:")
cur = conn.cursor()
cur.execute("CREATE TABLE users (id INTEGER, email TEXT)")
cur.execute("INSERT INTO users VALUES (?, ?)", (1, None))
cur.execute("INSERT INTO users VALUES (?, ?)", (1, "[email protected]"))
res = cur.execute("SELECT * FROM users ORDER BY id")
results = res.fetchall()
assert results[0] == (1, None)
assert results[1] == (2, "[email protected]")

@pytest.mark.parametrize("provider", ["libsql", "sqlite"])
def test_fetchmany(provider):
Expand Down
Loading