Skip to content

Commit 1cafa5b

Browse files
authored
Merge pull request #56 from sveltespot/fix_issue_54
Fix #54
2 parents f256ea7 + ab4bc1a commit 1cafa5b

2 files changed

Lines changed: 33 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: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,31 @@ 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+
try:
166+
conn = connect(provider, dbname)
167+
except Exception as e:
168+
pytest.skip(str(e))
169+
cur = conn.cursor()
170+
cur.execute("DROP TABLE IF EXISTS users")
171+
cur.execute("CREATE TABLE users (id INTEGER, email TEXT)")
172+
cur.execute("INSERT INTO users VALUES (1, 'alice@example.com')")
173+
res = cur.execute("SELECT QUOTE(email) FROM users")
174+
assert [("'alice@example.com'",)] == res.fetchall()
175+
176+
162177
def connect(provider, database, isolation_level='DEFERRED'):
178+
if provider == "libsql-remote":
179+
from urllib import request
180+
try:
181+
res = request.urlopen("http://localhost:8080/v2")
182+
except Exception as _:
183+
raise Exception("libsql-remote server is not running")
184+
if res.getcode() != 200:
185+
raise Exception("libsql-remote server is not running")
186+
return libsql_experimental.connect(database, sync_url="http://localhost:8080", auth_token="")
163187
if provider == "libsql":
164188
return libsql_experimental.connect(database, isolation_level = isolation_level)
165189
if provider == "sqlite":

0 commit comments

Comments
 (0)