Skip to content

Commit a37ea2e

Browse files
committed
test(store-turso): reproduce case-folded index omission
1 parent a44ded0 commit a37ea2e

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

crates/temper-store-turso/src/migrations/schema_verify.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,49 @@ fn schema_query_error(context: &str, error: libsql::Error) -> PersistenceError {
225225
"Turso schema introspection failed while attempting to {context}: {error} ({error:?})"
226226
))
227227
}
228+
229+
#[cfg(test)]
230+
mod tests {
231+
use std::collections::BTreeMap;
232+
233+
use libsql::Builder;
234+
235+
use super::{SchemaSnapshot, verify_index_extensions};
236+
237+
#[tokio::test]
238+
async fn case_folded_index_owner_is_inventoried() {
239+
let directory = tempfile::tempdir().expect("temporary database directory");
240+
let database = Builder::new_local(directory.path().join("case-folded-index-owner.db"))
241+
.build()
242+
.await
243+
.expect("build temporary database");
244+
let connection = database.connect().expect("connect temporary database");
245+
connection
246+
.execute("CREATE TABLE EVENTS(payload TEXT NOT NULL)", ())
247+
.await
248+
.expect("create differently cased table owner");
249+
connection
250+
.execute(
251+
"CREATE INDEX events_case_folded_expression
252+
ON EVENTS(json_extract(payload, 'invalid-path'))",
253+
(),
254+
)
255+
.await
256+
.expect("create expression index with differently cased owner");
257+
let expected = SchemaSnapshot {
258+
tables: BTreeMap::new(),
259+
indexes: BTreeMap::new(),
260+
triggers: BTreeMap::new(),
261+
};
262+
263+
let error = verify_index_extensions(&connection, "events", &expected)
264+
.await
265+
.expect_err("SQLite-equivalent index owners must be inventoried");
266+
assert!(
267+
error
268+
.to_string()
269+
.contains("events_case_folded_expression"),
270+
"{error}"
271+
);
272+
}
273+
}

0 commit comments

Comments
 (0)