Skip to content

Commit 2bdd16a

Browse files
committed
Fix #54
1 parent f256ea7 commit 2bdd16a

2 files changed

Lines changed: 23 additions & 12 deletions

File tree

src/lib.rs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -440,22 +440,19 @@ fn stmt_is_dml(sql: &str) -> bool {
440440
fn convert_row(py: Python, row: libsql_core::Row, column_count: i32) -> PyResult<&PyTuple> {
441441
let mut elements: Vec<Py<PyAny>> = vec![];
442442
for col_idx in 0..column_count {
443-
let col_type = row.column_type(col_idx).map_err(to_py_err)?;
444-
let value = match col_type {
445-
libsql::ValueType::Integer => {
446-
let value = row.get::<i32>(col_idx).map_err(to_py_err)?;
443+
let libsql_value = row.get_value(col_idx).map_err(to_py_err)?;
444+
let value = match libsql_value {
445+
libsql_core::Value::Integer(v) => {
446+
let value = v as i32;
447447
value.into_py(py)
448448
}
449-
libsql::ValueType::Real => {
450-
let value = row.get::<f64>(col_idx).map_err(to_py_err)?;
449+
libsql_core::Value::Real(v) => v.into_py(py),
450+
libsql_core::Value::Text(v) => v.into_py(py),
451+
libsql_core::Value::Blob(v) => {
452+
let value = v.as_slice();
451453
value.into_py(py)
452454
}
453-
libsql::ValueType::Blob => todo!("blobs not supported"),
454-
libsql::ValueType::Text => {
455-
let value = row.get::<String>(col_idx).map_err(to_py_err)?;
456-
value.into_py(py)
457-
}
458-
libsql::ValueType::Null => py.None(),
455+
libsql_core::Value::Null => py.None(),
459456
};
460457
elements.push(value);
461458
}

tests/test_suite.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,21 @@ def test_in_transaction(provider):
159159
cur.execute("INSERT INTO users VALUES (?, ?)", (2, 'bob@example.com'))
160160
assert conn.in_transaction == True
161161

162+
@pytest.mark.parametrize("provider", ["libsql-remote", "libsql", "sqlite"])
163+
def test_fetch_expression(provider):
164+
dbname = "/tmp/test.db" if provider == "libsql-remote" else ":memory:"
165+
conn = connect(provider, dbname)
166+
cur = conn.cursor()
167+
cur.execute("DROP TABLE IF EXISTS users")
168+
cur.execute("CREATE TABLE users (id INTEGER, email TEXT)")
169+
cur.execute("INSERT INTO users VALUES (1, 'alice@example.com')")
170+
res = cur.execute("SELECT QUOTE(email) FROM users")
171+
assert [("'alice@example.com'",)] == res.fetchall()
172+
173+
162174
def connect(provider, database, isolation_level='DEFERRED'):
175+
if provider == "libsql-remote":
176+
return libsql_experimental.connect(database, sync_url="http://localhost:8080", auth_token="")
163177
if provider == "libsql":
164178
return libsql_experimental.connect(database, isolation_level = isolation_level)
165179
if provider == "sqlite":

0 commit comments

Comments
 (0)