enable indices in Rust SDK

This commit is contained in:
Nikita Sivukhin
2025-08-13 16:28:45 +04:00
parent 70581aca5b
commit 0f1d954319
2 changed files with 39 additions and 10 deletions

View File

@@ -108,27 +108,19 @@ impl Builder {
io,
self.path.as_str(),
self.enable_mvcc,
indexes_enabled(),
true,
)?;
Ok(Database { inner: db })
}
path => {
let io: Arc<dyn turso_core::IO> = Arc::new(turso_core::PlatformIO::new()?);
let db =
turso_core::Database::open_file(io, path, self.enable_mvcc, indexes_enabled())?;
let db = turso_core::Database::open_file(io, path, self.enable_mvcc, true)?;
Ok(Database { inner: db })
}
}
}
}
fn indexes_enabled() -> bool {
#[cfg(feature = "experimental_indexes")]
return true;
#[cfg(not(feature = "experimental_indexes"))]
return false;
}
/// A database.
///
/// The `Database` object points to a database and allows you to connect to it

View File

@@ -297,3 +297,40 @@ async fn test_row_get_conversion_error() {
let result: Result<u32, _> = row.get(0);
assert!(matches!(result, Err(Error::ConversionFailure(_))));
}
#[tokio::test]
async fn test_index() {
let db = Builder::new_local(":memory:").build().await.unwrap();
let conn = db.connect().unwrap();
conn.execute("CREATE TABLE users (name TEXT PRIMARY KEY, email TEXT)", ())
.await
.unwrap();
conn.execute("CREATE INDEX email_idx ON users(email)", ())
.await
.unwrap();
conn.execute(
"INSERT INTO users VALUES ('alice', 'a@b.c'), ('bob', 'b@d.e')",
(),
)
.await
.unwrap();
let mut rows = conn
.query("SELECT * FROM users WHERE email = 'a@b.c'", ())
.await
.unwrap();
let row = rows.next().await.unwrap().unwrap();
assert!(row.get::<String>(0).unwrap() == "alice".to_string());
assert!(row.get::<String>(1).unwrap() == "a@b.c".to_string());
assert!(rows.next().await.unwrap().is_none());
let mut rows = conn
.query("SELECT * FROM users WHERE email = 'b@d.e'", ())
.await
.unwrap();
let row = rows.next().await.unwrap().unwrap();
assert!(row.get::<String>(0).unwrap() == "bob".to_string());
assert!(row.get::<String>(1).unwrap() == "b@d.e".to_string());
assert!(rows.next().await.unwrap().is_none());
}