mirror of
https://github.com/aljazceru/turso.git
synced 2026-02-23 17:05:36 +01:00
remove unnecessary parameter from integration tests
This commit is contained in:
@@ -23,7 +23,7 @@ mod fuzz_tests {
|
||||
/// [See this issue for more info](https://github.com/tursodatabase/turso/issues/1763)
|
||||
#[test]
|
||||
pub fn fuzz_failure_issue_1763() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
let offending_query = "SELECT ((ceil(pow((((2.0))), (-2.0 - -1.0) / log(0.5)))) - -2.0)";
|
||||
@@ -37,7 +37,7 @@ mod fuzz_tests {
|
||||
|
||||
#[test]
|
||||
pub fn arithmetic_expression_fuzz_ex1() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -56,10 +56,8 @@ mod fuzz_tests {
|
||||
|
||||
#[test]
|
||||
pub fn rowid_seek_fuzz() {
|
||||
let db = TempDatabase::new_with_rusqlite(
|
||||
"CREATE TABLE t (x INTEGER PRIMARY KEY autoincrement)",
|
||||
false,
|
||||
); // INTEGER PRIMARY KEY is a rowid alias, so an index is not created
|
||||
let db =
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE t (x INTEGER PRIMARY KEY autoincrement)"); // INTEGER PRIMARY KEY is a rowid alias, so an index is not created
|
||||
let sqlite_conn = rusqlite::Connection::open(db.path.clone()).unwrap();
|
||||
|
||||
let (mut rng, _seed) = rng_from_time_or_env();
|
||||
@@ -173,7 +171,7 @@ mod fuzz_tests {
|
||||
|
||||
#[test]
|
||||
pub fn index_scan_fuzz() {
|
||||
let db = TempDatabase::new_with_rusqlite("CREATE TABLE t (x PRIMARY KEY)", true);
|
||||
let db = TempDatabase::new_with_rusqlite("CREATE TABLE t (x PRIMARY KEY)");
|
||||
let sqlite_conn = rusqlite::Connection::open(db.path.clone()).unwrap();
|
||||
|
||||
let insert = format!(
|
||||
@@ -234,14 +232,14 @@ mod fuzz_tests {
|
||||
];
|
||||
// Create all different 3-column primary key permutations
|
||||
let dbs = [
|
||||
TempDatabase::new_with_rusqlite(table_defs[0], true),
|
||||
TempDatabase::new_with_rusqlite(table_defs[1], true),
|
||||
TempDatabase::new_with_rusqlite(table_defs[2], true),
|
||||
TempDatabase::new_with_rusqlite(table_defs[3], true),
|
||||
TempDatabase::new_with_rusqlite(table_defs[4], true),
|
||||
TempDatabase::new_with_rusqlite(table_defs[5], true),
|
||||
TempDatabase::new_with_rusqlite(table_defs[6], true),
|
||||
TempDatabase::new_with_rusqlite(table_defs[7], true),
|
||||
TempDatabase::new_with_rusqlite(table_defs[0]),
|
||||
TempDatabase::new_with_rusqlite(table_defs[1]),
|
||||
TempDatabase::new_with_rusqlite(table_defs[2]),
|
||||
TempDatabase::new_with_rusqlite(table_defs[3]),
|
||||
TempDatabase::new_with_rusqlite(table_defs[4]),
|
||||
TempDatabase::new_with_rusqlite(table_defs[5]),
|
||||
TempDatabase::new_with_rusqlite(table_defs[6]),
|
||||
TempDatabase::new_with_rusqlite(table_defs[7]),
|
||||
];
|
||||
let mut pk_tuples = HashSet::new();
|
||||
while pk_tuples.len() < 100000 {
|
||||
@@ -565,7 +563,7 @@ mod fuzz_tests {
|
||||
// Create databases for each variant using rusqlite, then open limbo on the same file.
|
||||
let dbs: Vec<TempDatabase> = table_defs
|
||||
.iter()
|
||||
.map(|ddl| TempDatabase::new_with_rusqlite(ddl, true))
|
||||
.map(|ddl| TempDatabase::new_with_rusqlite(ddl))
|
||||
.collect();
|
||||
|
||||
// Seed data focuses on case and trailing spaces to exercise NOCASE and RTRIM semantics.
|
||||
@@ -664,8 +662,8 @@ mod fuzz_tests {
|
||||
for outer in 0..OUTER_ITERS {
|
||||
println!("fk_deferred_constraints_fuzz {}/{}", outer + 1, OUTER_ITERS);
|
||||
|
||||
let limbo_db = TempDatabase::new_empty(true);
|
||||
let sqlite_db = TempDatabase::new_empty(true);
|
||||
let limbo_db = TempDatabase::new_empty();
|
||||
let sqlite_db = TempDatabase::new_empty();
|
||||
let limbo = limbo_db.connect_limbo();
|
||||
let sqlite = rusqlite::Connection::open(sqlite_db.path.clone()).unwrap();
|
||||
|
||||
@@ -1003,8 +1001,8 @@ mod fuzz_tests {
|
||||
for outer in 0..OUTER_ITERS {
|
||||
println!("fk_single_pk_mutation_fuzz {}/{}", outer + 1, OUTER_ITERS);
|
||||
|
||||
let limbo_db = TempDatabase::new_empty(true);
|
||||
let sqlite_db = TempDatabase::new_empty(true);
|
||||
let limbo_db = TempDatabase::new_empty();
|
||||
let sqlite_db = TempDatabase::new_empty();
|
||||
let limbo = limbo_db.connect_limbo();
|
||||
let sqlite = rusqlite::Connection::open(sqlite_db.path.clone()).unwrap();
|
||||
|
||||
@@ -1314,8 +1312,8 @@ mod fuzz_tests {
|
||||
|
||||
// parent rowid, child textified integers -> MustBeInt coercion path
|
||||
for outer in 0..OUTER_ITERS {
|
||||
let limbo_db = TempDatabase::new_empty(true);
|
||||
let sqlite_db = TempDatabase::new_empty(true);
|
||||
let limbo_db = TempDatabase::new_empty();
|
||||
let sqlite_db = TempDatabase::new_empty();
|
||||
let limbo = limbo_db.connect_limbo();
|
||||
let sqlite = rusqlite::Connection::open(sqlite_db.path.clone()).unwrap();
|
||||
|
||||
@@ -1380,8 +1378,8 @@ mod fuzz_tests {
|
||||
|
||||
// slf-referential rowid FK
|
||||
for outer in 0..OUTER_ITERS {
|
||||
let limbo_db = TempDatabase::new_empty(true);
|
||||
let sqlite_db = TempDatabase::new_empty(true);
|
||||
let limbo_db = TempDatabase::new_empty();
|
||||
let sqlite_db = TempDatabase::new_empty();
|
||||
let limbo = limbo_db.connect_limbo();
|
||||
let sqlite = rusqlite::Connection::open(sqlite_db.path.clone()).unwrap();
|
||||
|
||||
@@ -1443,8 +1441,8 @@ mod fuzz_tests {
|
||||
|
||||
// self-referential UNIQUE(u,v) parent (fast-path for composite)
|
||||
for outer in 0..OUTER_ITERS {
|
||||
let limbo_db = TempDatabase::new_empty(true);
|
||||
let sqlite_db = TempDatabase::new_empty(true);
|
||||
let limbo_db = TempDatabase::new_empty();
|
||||
let sqlite_db = TempDatabase::new_empty();
|
||||
let limbo = limbo_db.connect_limbo();
|
||||
let sqlite = rusqlite::Connection::open(sqlite_db.path.clone()).unwrap();
|
||||
|
||||
@@ -1523,8 +1521,8 @@ mod fuzz_tests {
|
||||
|
||||
// parent TEXT UNIQUE(u,v), child types differ; rely on parent-index affinities
|
||||
for outer in 0..OUTER_ITERS {
|
||||
let limbo_db = TempDatabase::new_empty(true);
|
||||
let sqlite_db = TempDatabase::new_empty(true);
|
||||
let limbo_db = TempDatabase::new_empty();
|
||||
let sqlite_db = TempDatabase::new_empty();
|
||||
let limbo = limbo_db.connect_limbo();
|
||||
let sqlite = rusqlite::Connection::open(sqlite_db.path.clone()).unwrap();
|
||||
|
||||
@@ -1650,8 +1648,8 @@ mod fuzz_tests {
|
||||
OUTER_ITERS
|
||||
);
|
||||
|
||||
let limbo_db = TempDatabase::new_empty(true);
|
||||
let sqlite_db = TempDatabase::new_empty(true);
|
||||
let limbo_db = TempDatabase::new_empty();
|
||||
let sqlite_db = TempDatabase::new_empty();
|
||||
let limbo = limbo_db.connect_limbo();
|
||||
let sqlite = rusqlite::Connection::open(sqlite_db.path.clone()).unwrap();
|
||||
|
||||
@@ -1860,8 +1858,8 @@ mod fuzz_tests {
|
||||
i + 1,
|
||||
OUTER_ITERATIONS
|
||||
);
|
||||
let limbo_db = TempDatabase::new_empty(true);
|
||||
let sqlite_db = TempDatabase::new_empty(true);
|
||||
let limbo_db = TempDatabase::new_empty();
|
||||
let sqlite_db = TempDatabase::new_empty();
|
||||
let num_cols = rng.random_range(1..=10);
|
||||
let mut table_cols = vec!["id INTEGER PRIMARY KEY AUTOINCREMENT".to_string()];
|
||||
table_cols.extend(
|
||||
@@ -2088,8 +2086,8 @@ mod fuzz_tests {
|
||||
);
|
||||
|
||||
// Columns: id (rowid PK), plus a few data columns we can reference in predicates/keys.
|
||||
let limbo_db = TempDatabase::new_empty(true);
|
||||
let sqlite_db = TempDatabase::new_empty(true);
|
||||
let limbo_db = TempDatabase::new_empty();
|
||||
let sqlite_db = TempDatabase::new_empty();
|
||||
let limbo_conn = limbo_db.connect_limbo();
|
||||
let sqlite = rusqlite::Connection::open(sqlite_db.path.clone()).unwrap();
|
||||
|
||||
@@ -2431,7 +2429,7 @@ mod fuzz_tests {
|
||||
const MAX_SELECTS_IN_UNION_EXTRA: usize = 2;
|
||||
const MAX_LIMIT_VALUE: usize = 50;
|
||||
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -2557,7 +2555,7 @@ mod fuzz_tests {
|
||||
let (mut rng, seed) = rng_from_time_or_env();
|
||||
const ITERATIONS: usize = 1000;
|
||||
for i in 0..ITERATIONS {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
let num_cols = rng.random_range(1..=5);
|
||||
let col_names: Vec<String> = (0..num_cols).map(|c| format!("c{c}")).collect();
|
||||
@@ -2719,7 +2717,7 @@ mod fuzz_tests {
|
||||
|
||||
let sql = g.create().concat(" ").push_str("SELECT").push(expr).build();
|
||||
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -2739,7 +2737,7 @@ mod fuzz_tests {
|
||||
#[test]
|
||||
pub fn fuzz_ex() {
|
||||
let _ = env_logger::try_init();
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -2838,7 +2836,7 @@ mod fuzz_tests {
|
||||
|
||||
let sql = g.create().concat(" ").push_str("SELECT").push(expr).build();
|
||||
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -2998,7 +2996,7 @@ mod fuzz_tests {
|
||||
|
||||
let sql = g.create().concat(" ").push_str("SELECT").push(expr).build();
|
||||
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -3367,7 +3365,7 @@ mod fuzz_tests {
|
||||
.push(expr)
|
||||
.build();
|
||||
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -3401,7 +3399,7 @@ mod fuzz_tests {
|
||||
"SELECT * FROM t",
|
||||
],
|
||||
] {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
for query in queries.iter() {
|
||||
@@ -3428,7 +3426,7 @@ mod fuzz_tests {
|
||||
let datatype = datatypes[rng.random_range(0..datatypes.len())];
|
||||
let create_table = format!("CREATE TABLE t (x {datatype})");
|
||||
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -3479,7 +3477,7 @@ mod fuzz_tests {
|
||||
log::info!("affinity_fuzz seed: {seed}");
|
||||
|
||||
for iteration in 0..500 {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -3580,7 +3578,7 @@ mod fuzz_tests {
|
||||
log::info!("seed: {seed}");
|
||||
|
||||
for _ in 0..100 {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -3626,7 +3624,7 @@ mod fuzz_tests {
|
||||
log::info!("seed: {seed}");
|
||||
|
||||
for _ in 0..100 {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -3670,7 +3668,7 @@ mod fuzz_tests {
|
||||
log::info!("seed: {seed}");
|
||||
|
||||
for _ in 0..100 {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -3716,7 +3714,7 @@ mod fuzz_tests {
|
||||
log::info!("seed: {seed}");
|
||||
|
||||
for _ in 0..100 {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -3764,7 +3762,7 @@ mod fuzz_tests {
|
||||
let predicate = predicate_builders(&g, Some(&tables));
|
||||
let expr = build_logical_expr(&g, &builders, Some(&predicate));
|
||||
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
for table in tables.iter() {
|
||||
@@ -3855,7 +3853,7 @@ mod fuzz_tests {
|
||||
|
||||
#[test]
|
||||
pub fn fuzz_distinct() {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let limbo_conn = db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
@@ -4174,7 +4172,7 @@ mod fuzz_tests {
|
||||
let db_path = tempfile::NamedTempFile::new()?;
|
||||
|
||||
{
|
||||
let db = TempDatabase::new_with_existent(db_path.path(), true);
|
||||
let db = TempDatabase::new_with_existent(db_path.path());
|
||||
|
||||
let prev_pending_byte = TempDatabase::get_pending_byte();
|
||||
tracing::debug!(prev_pending_byte);
|
||||
|
||||
@@ -79,8 +79,8 @@ pub fn rowid_alias_differential_fuzz() {
|
||||
};
|
||||
|
||||
// Create two Limbo databases with indexes enabled
|
||||
let db_with_alias = TempDatabase::new_empty(true);
|
||||
let db_without_alias = TempDatabase::new_empty(true);
|
||||
let db_with_alias = TempDatabase::new_empty();
|
||||
let db_without_alias = TempDatabase::new_empty();
|
||||
|
||||
// Connect to both databases
|
||||
let conn_with_alias = db_with_alias.connect_limbo();
|
||||
|
||||
@@ -17,15 +17,15 @@ unsafe impl Send for TempDatabase {}
|
||||
|
||||
#[allow(dead_code, clippy::arc_with_non_send_sync)]
|
||||
impl TempDatabase {
|
||||
pub fn new_empty(enable_indexes: bool) -> Self {
|
||||
Self::new(&format!("test-{}.db", rng().next_u32()), enable_indexes)
|
||||
pub fn new_empty() -> Self {
|
||||
Self::new(&format!("test-{}.db", rng().next_u32()))
|
||||
}
|
||||
|
||||
pub fn new(db_name: &str, enable_indexes: bool) -> Self {
|
||||
pub fn new(db_name: &str) -> Self {
|
||||
let mut path = TempDir::new().unwrap().keep();
|
||||
path.push(db_name);
|
||||
|
||||
Self::new_with_existent(&path, enable_indexes)
|
||||
Self::new_with_existent(&path)
|
||||
}
|
||||
|
||||
pub fn new_with_opts(db_name: &str, opts: turso_core::DatabaseOpts) -> Self {
|
||||
@@ -47,12 +47,8 @@ impl TempDatabase {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_with_existent(db_path: &Path, enable_indexes: bool) -> Self {
|
||||
Self::new_with_existent_with_flags(
|
||||
db_path,
|
||||
turso_core::OpenFlags::default(),
|
||||
enable_indexes,
|
||||
)
|
||||
pub fn new_with_existent(db_path: &Path) -> Self {
|
||||
Self::new_with_existent_with_flags(db_path, turso_core::OpenFlags::default())
|
||||
}
|
||||
|
||||
pub fn new_with_existent_with_opts(db_path: &Path, opts: turso_core::DatabaseOpts) -> Self {
|
||||
@@ -72,18 +68,14 @@ impl TempDatabase {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_with_existent_with_flags(
|
||||
db_path: &Path,
|
||||
flags: turso_core::OpenFlags,
|
||||
enable_indexes: bool,
|
||||
) -> Self {
|
||||
pub fn new_with_existent_with_flags(db_path: &Path, flags: turso_core::OpenFlags) -> Self {
|
||||
let io: Arc<dyn IO + Send> = Arc::new(turso_core::PlatformIO::new().unwrap());
|
||||
let db = Database::open_file_with_flags(
|
||||
io.clone(),
|
||||
db_path.to_str().unwrap(),
|
||||
flags,
|
||||
turso_core::DatabaseOpts::new()
|
||||
.with_indexes(enable_indexes)
|
||||
.with_indexes(true)
|
||||
.with_encryption(true),
|
||||
None,
|
||||
)
|
||||
@@ -95,7 +87,7 @@ impl TempDatabase {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_with_rusqlite(table_sql: &str, enable_indexes: bool) -> Self {
|
||||
pub fn new_with_rusqlite(table_sql: &str) -> Self {
|
||||
let mut path = TempDir::new().unwrap().keep();
|
||||
path.push("test.db");
|
||||
{
|
||||
@@ -110,7 +102,9 @@ impl TempDatabase {
|
||||
io.clone(),
|
||||
path.to_str().unwrap(),
|
||||
turso_core::OpenFlags::default(),
|
||||
turso_core::DatabaseOpts::new().with_indexes(enable_indexes),
|
||||
turso_core::DatabaseOpts::new()
|
||||
.with_indexes(true)
|
||||
.with_index_method(true),
|
||||
None,
|
||||
)
|
||||
.unwrap();
|
||||
@@ -439,7 +433,6 @@ mod tests {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"create table test (foo integer, bar integer, baz integer);",
|
||||
false,
|
||||
);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
@@ -477,11 +470,8 @@ mod tests {
|
||||
fn test_limbo_open_read_only() -> anyhow::Result<()> {
|
||||
let path = TempDir::new().unwrap().keep().join("temp_read_only");
|
||||
{
|
||||
let db = TempDatabase::new_with_existent_with_flags(
|
||||
&path,
|
||||
turso_core::OpenFlags::default(),
|
||||
false,
|
||||
);
|
||||
let db =
|
||||
TempDatabase::new_with_existent_with_flags(&path, turso_core::OpenFlags::default());
|
||||
let conn = db.connect_limbo();
|
||||
let ret = limbo_exec_rows(&db, &conn, "CREATE table t (a)");
|
||||
assert!(ret.is_empty(), "{ret:?}");
|
||||
@@ -493,7 +483,6 @@ mod tests {
|
||||
let db = TempDatabase::new_with_existent_with_flags(
|
||||
&path,
|
||||
turso_core::OpenFlags::default() | turso_core::OpenFlags::ReadOnly,
|
||||
false,
|
||||
);
|
||||
let conn = db.connect_limbo();
|
||||
let ret = limbo_exec_rows(&db, &conn, "SELECT * from t");
|
||||
@@ -509,7 +498,7 @@ mod tests {
|
||||
fn test_unique_index_ordering() -> anyhow::Result<()> {
|
||||
use rand::Rng;
|
||||
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
|
||||
let _ = limbo_exec_rows(&db, &conn, "CREATE TABLE t (x INTEGER UNIQUE)");
|
||||
@@ -550,7 +539,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_large_unique_blobs() -> anyhow::Result<()> {
|
||||
let path = TempDir::new().unwrap().keep().join("temp_read_only");
|
||||
let db = TempDatabase::new_with_existent(&path, true);
|
||||
let db = TempDatabase::new_with_existent(&path);
|
||||
let conn = db.connect_limbo();
|
||||
|
||||
let _ = limbo_exec_rows(&db, &conn, "CREATE TABLE t (x BLOB UNIQUE)");
|
||||
@@ -580,7 +569,7 @@ mod tests {
|
||||
.unwrap()
|
||||
.keep()
|
||||
.join("temp_transaction_isolation");
|
||||
let db = TempDatabase::new_with_existent(&path, true);
|
||||
let db = TempDatabase::new_with_existent(&path);
|
||||
|
||||
// Create two separate connections
|
||||
let conn1 = db.connect_limbo();
|
||||
@@ -611,7 +600,7 @@ mod tests {
|
||||
.unwrap()
|
||||
.keep()
|
||||
.join("temp_transaction_isolation");
|
||||
let db = TempDatabase::new_with_existent(&path, true);
|
||||
let db = TempDatabase::new_with_existent(&path);
|
||||
|
||||
// Create two separate connections
|
||||
let conn1 = db.connect_limbo();
|
||||
@@ -648,7 +637,7 @@ mod tests {
|
||||
.unwrap()
|
||||
.keep()
|
||||
.join("temp_transaction_isolation");
|
||||
let db = TempDatabase::new_with_existent(&path, true);
|
||||
let db = TempDatabase::new_with_existent(&path);
|
||||
|
||||
let conn = db.connect_limbo();
|
||||
|
||||
@@ -667,7 +656,7 @@ mod tests {
|
||||
let _ = limbo_exec_rows(&db, &conn, "INSERT INTO t VALUES (69)");
|
||||
|
||||
// Reopen the database
|
||||
let db = TempDatabase::new_with_existent(&path, true);
|
||||
let db = TempDatabase::new_with_existent(&path);
|
||||
let conn = db.connect_limbo();
|
||||
|
||||
// Should only see the last committed value
|
||||
@@ -688,7 +677,7 @@ mod tests {
|
||||
.unwrap()
|
||||
.keep()
|
||||
.join("temp_transaction_isolation");
|
||||
let db = TempDatabase::new_with_existent(&path, true);
|
||||
let db = TempDatabase::new_with_existent(&path);
|
||||
|
||||
let conn = db.connect_limbo();
|
||||
|
||||
@@ -703,7 +692,7 @@ mod tests {
|
||||
do_flush(&conn, &db)?;
|
||||
|
||||
// Reopen the database without committing
|
||||
let db = TempDatabase::new_with_existent(&path, true);
|
||||
let db = TempDatabase::new_with_existent(&path);
|
||||
let conn = db.connect_limbo();
|
||||
|
||||
// Should see no rows since transaction was never committed
|
||||
|
||||
@@ -16,7 +16,7 @@ fn replace_column_with_null(rows: Vec<Vec<Value>>, column: usize) -> Vec<Vec<Val
|
||||
|
||||
#[test]
|
||||
fn test_cdc_simple_id() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
conn.execute("CREATE TABLE t (x INTEGER PRIMARY KEY, y)")
|
||||
.unwrap();
|
||||
@@ -78,7 +78,7 @@ fn record<const N: usize>(values: [Value; N]) -> Vec<u8> {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_simple_before() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
conn.execute("CREATE TABLE t (x INTEGER PRIMARY KEY, y)")
|
||||
.unwrap();
|
||||
@@ -149,7 +149,7 @@ fn test_cdc_simple_before() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_simple_after() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
conn.execute("CREATE TABLE t (x INTEGER PRIMARY KEY, y)")
|
||||
.unwrap();
|
||||
@@ -220,7 +220,7 @@ fn test_cdc_simple_after() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_simple_full() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
conn.execute("CREATE TABLE t (x INTEGER PRIMARY KEY, y)")
|
||||
.unwrap();
|
||||
@@ -296,7 +296,7 @@ fn test_cdc_simple_full() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_crud() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
conn.execute("CREATE TABLE t (x INTEGER PRIMARY KEY, y)")
|
||||
.unwrap();
|
||||
@@ -417,7 +417,7 @@ fn test_cdc_crud() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_failed_op() {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
conn.execute("CREATE TABLE t (x INTEGER PRIMARY KEY, y UNIQUE)")
|
||||
.unwrap();
|
||||
@@ -491,7 +491,7 @@ fn test_cdc_failed_op() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_uncaptured_connection() {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn1 = db.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t (x INTEGER PRIMARY KEY, y UNIQUE)")
|
||||
@@ -571,7 +571,7 @@ fn test_cdc_uncaptured_connection() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_custom_table() {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn1 = db.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t (x INTEGER PRIMARY KEY, y UNIQUE)")
|
||||
@@ -620,7 +620,7 @@ fn test_cdc_custom_table() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_ignore_changes_in_cdc_table() {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn1 = db.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t (x INTEGER PRIMARY KEY, y UNIQUE)")
|
||||
@@ -660,7 +660,7 @@ fn test_cdc_ignore_changes_in_cdc_table() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_transaction() {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn1 = db.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t (x INTEGER PRIMARY KEY, y UNIQUE)")
|
||||
@@ -743,7 +743,7 @@ fn test_cdc_transaction() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_independent_connections() {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn1 = db.connect_limbo();
|
||||
let conn2 = db.connect_limbo();
|
||||
conn1
|
||||
@@ -799,7 +799,7 @@ fn test_cdc_independent_connections() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_independent_connections_different_cdc_not_ignore() {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn1 = db.connect_limbo();
|
||||
let conn2 = db.connect_limbo();
|
||||
conn1
|
||||
@@ -889,7 +889,7 @@ fn test_cdc_independent_connections_different_cdc_not_ignore() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_table_columns() {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
conn.execute("CREATE TABLE t (a INTEGER PRIMARY KEY, b, c UNIQUE)")
|
||||
.unwrap();
|
||||
@@ -905,7 +905,7 @@ fn test_cdc_table_columns() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_bin_record() {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
let record = record([
|
||||
Value::Null,
|
||||
@@ -934,7 +934,7 @@ fn test_cdc_bin_record() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_schema_changes() {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
conn.execute("PRAGMA unstable_capture_data_changes_conn('full')")
|
||||
.unwrap();
|
||||
@@ -1056,7 +1056,7 @@ fn test_cdc_schema_changes() {
|
||||
|
||||
#[test]
|
||||
fn test_cdc_schema_changes_alter_table() {
|
||||
let db = TempDatabase::new_empty(true);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
conn.execute("PRAGMA unstable_capture_data_changes_conn('full')")
|
||||
.unwrap();
|
||||
|
||||
@@ -6,7 +6,6 @@ fn test_last_insert_rowid_basic() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"CREATE TABLE test_rowid (id INTEGER PRIMARY KEY, val TEXT);",
|
||||
false,
|
||||
);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
@@ -91,7 +90,7 @@ fn test_last_insert_rowid_basic() -> anyhow::Result<()> {
|
||||
fn test_integer_primary_key() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db =
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE test_rowid (id INTEGER PRIMARY KEY);", false);
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE test_rowid (id INTEGER PRIMARY KEY);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
for query in &[
|
||||
|
||||
@@ -5,7 +5,7 @@ use turso_core::LimboError;
|
||||
fn sum_errors_on_integer_overflow() {
|
||||
let _ = env_logger::try_init();
|
||||
|
||||
let tmp_db = TempDatabase::new_empty(false);
|
||||
let tmp_db = TempDatabase::new_empty();
|
||||
let conn = tmp_db.connect_limbo();
|
||||
let sqlite_conn = rusqlite::Connection::open_in_memory().unwrap();
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ use crate::common::{limbo_exec_rows, rng_from_time, TempDatabase};
|
||||
|
||||
#[test]
|
||||
fn test_wal_frame_count() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
assert_eq!(conn.wal_state().unwrap().max_frame, 0);
|
||||
conn.execute("CREATE TABLE t(x INTEGER PRIMARY KEY, y)")
|
||||
@@ -29,9 +29,9 @@ fn test_wal_frame_count() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_frame_transfer_no_schema_changes() {
|
||||
let db1 = TempDatabase::new_empty(false);
|
||||
let db1 = TempDatabase::new_empty();
|
||||
let conn1 = db1.connect_limbo();
|
||||
let db2 = TempDatabase::new_empty(false);
|
||||
let db2 = TempDatabase::new_empty();
|
||||
let conn2 = db2.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t(x INTEGER PRIMARY KEY, y)")
|
||||
@@ -68,9 +68,9 @@ fn test_wal_frame_transfer_no_schema_changes() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_frame_transfer_various_schema_changes() {
|
||||
let db1 = TempDatabase::new_empty(false);
|
||||
let db1 = TempDatabase::new_empty();
|
||||
let conn1 = db1.connect_limbo();
|
||||
let db2 = TempDatabase::new_empty(false);
|
||||
let db2 = TempDatabase::new_empty();
|
||||
let conn2 = db2.connect_limbo();
|
||||
let conn3 = db2.connect_limbo();
|
||||
conn1
|
||||
@@ -127,9 +127,9 @@ fn test_wal_frame_transfer_various_schema_changes() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_frame_transfer_schema_changes() {
|
||||
let db1 = TempDatabase::new_empty(false);
|
||||
let db1 = TempDatabase::new_empty();
|
||||
let conn1 = db1.connect_limbo();
|
||||
let db2 = TempDatabase::new_empty(false);
|
||||
let db2 = TempDatabase::new_empty();
|
||||
let conn2 = db2.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t(x INTEGER PRIMARY KEY, y)")
|
||||
@@ -166,9 +166,9 @@ fn test_wal_frame_transfer_schema_changes() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_frame_transfer_no_schema_changes_rollback() {
|
||||
let db1 = TempDatabase::new_empty(false);
|
||||
let db1 = TempDatabase::new_empty();
|
||||
let conn1 = db1.connect_limbo();
|
||||
let db2 = TempDatabase::new_empty(false);
|
||||
let db2 = TempDatabase::new_empty();
|
||||
let conn2 = db2.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t(x INTEGER PRIMARY KEY, y)")
|
||||
@@ -205,9 +205,9 @@ fn test_wal_frame_transfer_no_schema_changes_rollback() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_frame_transfer_schema_changes_rollback() {
|
||||
let db1 = TempDatabase::new_empty(false);
|
||||
let db1 = TempDatabase::new_empty();
|
||||
let conn1 = db1.connect_limbo();
|
||||
let db2 = TempDatabase::new_empty(false);
|
||||
let db2 = TempDatabase::new_empty();
|
||||
let conn2 = db2.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t(x INTEGER PRIMARY KEY, y)")
|
||||
@@ -240,9 +240,9 @@ fn test_wal_frame_transfer_schema_changes_rollback() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_frame_conflict() {
|
||||
let db1 = TempDatabase::new_empty(false);
|
||||
let db1 = TempDatabase::new_empty();
|
||||
let conn1 = db1.connect_limbo();
|
||||
let db2 = TempDatabase::new_empty(false);
|
||||
let db2 = TempDatabase::new_empty();
|
||||
let conn2 = db2.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t(x INTEGER PRIMARY KEY, y)")
|
||||
@@ -259,9 +259,9 @@ fn test_wal_frame_conflict() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_frame_far_away_write() {
|
||||
let db1 = TempDatabase::new_empty(false);
|
||||
let db1 = TempDatabase::new_empty();
|
||||
let conn1 = db1.connect_limbo();
|
||||
let db2 = TempDatabase::new_empty(false);
|
||||
let db2 = TempDatabase::new_empty();
|
||||
let conn2 = db2.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t(x INTEGER PRIMARY KEY, y)")
|
||||
@@ -287,9 +287,9 @@ fn test_wal_frame_far_away_write() {
|
||||
fn test_wal_frame_api_no_schema_changes_fuzz() {
|
||||
let (mut rng, _) = rng_from_time();
|
||||
for _ in 0..4 {
|
||||
let db1 = TempDatabase::new_empty(false);
|
||||
let db1 = TempDatabase::new_empty();
|
||||
let conn1 = db1.connect_limbo();
|
||||
let db2 = TempDatabase::new_empty(false);
|
||||
let db2 = TempDatabase::new_empty();
|
||||
let conn2 = db2.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t(x INTEGER PRIMARY KEY, y)")
|
||||
@@ -342,7 +342,7 @@ fn test_wal_frame_api_no_schema_changes_fuzz() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_api_changed_pages() {
|
||||
let db1 = TempDatabase::new_empty(false);
|
||||
let db1 = TempDatabase::new_empty();
|
||||
let conn1 = db1.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t(x INTEGER PRIMARY KEY, y)")
|
||||
@@ -421,7 +421,7 @@ fn revert_to(conn: &Arc<turso_core::Connection>, frame_watermark: u64) -> turso_
|
||||
|
||||
#[test]
|
||||
fn test_wal_api_revert_pages() {
|
||||
let db1 = TempDatabase::new_empty(false);
|
||||
let db1 = TempDatabase::new_empty();
|
||||
let conn1 = db1.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t(x INTEGER PRIMARY KEY, y)")
|
||||
@@ -465,7 +465,7 @@ fn test_wal_api_revert_pages() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_upper_bound_passive() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let writer = db.connect_limbo();
|
||||
|
||||
writer
|
||||
@@ -499,7 +499,7 @@ fn test_wal_upper_bound_passive() {
|
||||
|
||||
let db_path_copy = format!("{}-{}-copy", db.path.to_str().unwrap(), watermark);
|
||||
std::fs::copy(&db.path, db_path_copy.clone()).unwrap();
|
||||
let db_copy = TempDatabase::new_with_existent(&PathBuf::from(db_path_copy), false);
|
||||
let db_copy = TempDatabase::new_with_existent(&PathBuf::from(db_path_copy));
|
||||
let conn = db_copy.connect_limbo();
|
||||
let mut stmt = conn.prepare("select * from test").unwrap();
|
||||
let mut rows: Vec<Vec<turso_core::types::Value>> = Vec::new();
|
||||
@@ -520,7 +520,7 @@ fn test_wal_upper_bound_passive() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_upper_bound_truncate() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let writer = db.connect_limbo();
|
||||
|
||||
writer
|
||||
@@ -548,7 +548,7 @@ fn test_wal_upper_bound_truncate() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_state_checkpoint_seq() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let writer = db.connect_limbo();
|
||||
|
||||
writer
|
||||
@@ -586,7 +586,7 @@ fn test_wal_state_checkpoint_seq() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_checkpoint_no_work() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let writer = db.connect_limbo();
|
||||
let reader = db.connect_limbo();
|
||||
|
||||
@@ -631,7 +631,7 @@ fn test_wal_checkpoint_no_work() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_revert_change_db_size() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let writer = db.connect_limbo();
|
||||
|
||||
writer.execute("create table t(x, y)").unwrap();
|
||||
@@ -678,7 +678,7 @@ fn test_wal_revert_change_db_size() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_api_exec_commit() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let writer = db.connect_limbo();
|
||||
|
||||
writer
|
||||
@@ -725,7 +725,7 @@ fn test_wal_api_exec_commit() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_api_exec_rollback() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let writer = db.connect_limbo();
|
||||
|
||||
writer
|
||||
@@ -760,7 +760,7 @@ fn test_wal_api_exec_rollback() {
|
||||
|
||||
#[test]
|
||||
fn test_wal_api_insert_exec_mix() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
|
||||
conn.execute("create table a(x, y)").unwrap();
|
||||
@@ -928,9 +928,9 @@ fn test_db_share_same_file() {
|
||||
#[test]
|
||||
fn test_wal_api_simulate_spilled_frames() {
|
||||
let (mut rng, _) = rng_from_time();
|
||||
let db1 = TempDatabase::new_empty(false);
|
||||
let db1 = TempDatabase::new_empty();
|
||||
let conn1 = db1.connect_limbo();
|
||||
let db2 = TempDatabase::new_empty(false);
|
||||
let db2 = TempDatabase::new_empty();
|
||||
let conn2 = db2.connect_limbo();
|
||||
conn1
|
||||
.execute("CREATE TABLE t(x INTEGER PRIMARY KEY, y)")
|
||||
|
||||
@@ -3,7 +3,7 @@ use turso_core::{StepResult, Value};
|
||||
|
||||
#[test]
|
||||
fn test_pragma_module_list_returns_list() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
|
||||
let mut module_list = conn.query("PRAGMA module_list;").unwrap();
|
||||
@@ -21,7 +21,7 @@ fn test_pragma_module_list_returns_list() {
|
||||
|
||||
#[test]
|
||||
fn test_pragma_module_list_generate_series() {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
let conn = db.connect_limbo();
|
||||
|
||||
let mut rows = conn
|
||||
@@ -61,7 +61,7 @@ fn test_pragma_module_list_generate_series() {
|
||||
#[test]
|
||||
fn test_pragma_page_sizes_without_writes_persists() {
|
||||
for test_page_size in [512, 1024, 2048, 4096, 8192, 16384, 32768, 65536] {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
{
|
||||
let conn = db.connect_limbo();
|
||||
let pragma_query = format!("PRAGMA page_size={test_page_size}");
|
||||
@@ -81,7 +81,7 @@ fn test_pragma_page_sizes_without_writes_persists() {
|
||||
assert_eq!(*page_size, test_page_size);
|
||||
|
||||
// Reopen database and verify page size
|
||||
let db = TempDatabase::new_with_existent(&db.path, false);
|
||||
let db = TempDatabase::new_with_existent(&db.path);
|
||||
let conn = db.connect_limbo();
|
||||
let mut rows = conn.query("PRAGMA page_size").unwrap().unwrap();
|
||||
let StepResult::Row = rows.step().unwrap() else {
|
||||
@@ -98,7 +98,7 @@ fn test_pragma_page_sizes_without_writes_persists() {
|
||||
#[test]
|
||||
fn test_pragma_page_sizes_with_writes_persists() {
|
||||
for test_page_size in [512, 1024, 2048, 4096, 8192, 16384, 32768, 65536] {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
let db = TempDatabase::new_empty();
|
||||
{
|
||||
{
|
||||
let conn = db.connect_limbo();
|
||||
@@ -153,7 +153,7 @@ fn test_pragma_page_sizes_with_writes_persists() {
|
||||
}
|
||||
|
||||
// Drop the db and reopen it, and verify the same
|
||||
let db = TempDatabase::new_with_existent(&db.path, false);
|
||||
let db = TempDatabase::new_with_existent(&db.path);
|
||||
let conn = db.connect_limbo();
|
||||
let mut page_size = conn.pragma_query("page_size").unwrap();
|
||||
let mut page_size = page_size.pop().unwrap();
|
||||
|
||||
@@ -9,7 +9,7 @@ const ENABLE_ENCRYPTION: bool = true;
|
||||
fn test_per_page_encryption() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let db_name = format!("test-{}.db", rng().next_u32());
|
||||
let tmp_db = TempDatabase::new(&db_name, false);
|
||||
let tmp_db = TempDatabase::new(&db_name);
|
||||
let db_path = tmp_db.path.clone();
|
||||
|
||||
{
|
||||
@@ -199,7 +199,7 @@ fn test_per_page_encryption() -> anyhow::Result<()> {
|
||||
fn test_non_4k_page_size_encryption() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let db_name = format!("test-8k-{}.db", rng().next_u32());
|
||||
let tmp_db = TempDatabase::new(&db_name, false);
|
||||
let tmp_db = TempDatabase::new(&db_name);
|
||||
let db_path = tmp_db.path.clone();
|
||||
|
||||
{
|
||||
@@ -261,7 +261,7 @@ fn test_non_4k_page_size_encryption() -> anyhow::Result<()> {
|
||||
fn test_corruption_turso_magic_bytes() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let db_name = format!("test-corruption-magic-{}.db", rng().next_u32());
|
||||
let tmp_db = TempDatabase::new(&db_name, false);
|
||||
let tmp_db = TempDatabase::new(&db_name);
|
||||
let db_path = tmp_db.path.clone();
|
||||
|
||||
{
|
||||
@@ -331,7 +331,7 @@ fn test_corruption_turso_magic_bytes() -> anyhow::Result<()> {
|
||||
fn test_corruption_associated_data_bytes() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let db_name = format!("test-corruption-ad-{}.db", rng().next_u32());
|
||||
let tmp_db = TempDatabase::new(&db_name, false);
|
||||
let tmp_db = TempDatabase::new(&db_name);
|
||||
let db_path = tmp_db.path.clone();
|
||||
|
||||
{
|
||||
@@ -365,7 +365,7 @@ fn test_corruption_associated_data_bytes() -> anyhow::Result<()> {
|
||||
corrupt_pos,
|
||||
rng().next_u32()
|
||||
);
|
||||
let test_tmp_db = TempDatabase::new(&test_db_name, false);
|
||||
let test_tmp_db = TempDatabase::new(&test_db_name);
|
||||
let test_db_path = test_tmp_db.path.clone();
|
||||
std::fs::copy(&db_path, &test_db_path)?;
|
||||
|
||||
@@ -509,7 +509,7 @@ fn test_turso_header_structure() -> anyhow::Result<()> {
|
||||
|
||||
for (cipher_name, expected_id, description, hexkey) in test_cases {
|
||||
let db_name = format!("test-header-{}-{}.db", cipher_name, rng().next_u32());
|
||||
let tmp_db = TempDatabase::new(&db_name, false);
|
||||
let tmp_db = TempDatabase::new(&db_name);
|
||||
let db_path = tmp_db.path.clone();
|
||||
|
||||
{
|
||||
|
||||
@@ -448,7 +448,6 @@ fn test_btree() {
|
||||
for attempt in 0..16 {
|
||||
let db = TempDatabase::new_with_rusqlite(
|
||||
"create table test (k INTEGER PRIMARY KEY, b BLOB);",
|
||||
false,
|
||||
);
|
||||
log::info!(
|
||||
"depth: {}, attempt: {}, path: {:?}",
|
||||
|
||||
@@ -3,7 +3,7 @@ use crate::common::TempDatabase;
|
||||
#[test]
|
||||
fn test_fail_drop_indexed_column() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a, b);", true);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a, b);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
conn.execute("CREATE INDEX i ON t (a)")?;
|
||||
@@ -15,7 +15,7 @@ fn test_fail_drop_indexed_column() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_fail_drop_unique_column() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a UNIQUE, b);", true);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a UNIQUE, b);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
let res = conn.execute("ALTER TABLE t DROP COLUMN a");
|
||||
@@ -26,7 +26,7 @@ fn test_fail_drop_unique_column() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_fail_drop_compound_unique_column() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a, b, UNIQUE(a, b));", true);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a, b, UNIQUE(a, b));");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
let res = conn.execute("ALTER TABLE t DROP COLUMN a");
|
||||
@@ -40,7 +40,7 @@ fn test_fail_drop_compound_unique_column() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_fail_drop_primary_key_column() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a PRIMARY KEY, b);", true);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a PRIMARY KEY, b);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
let res = conn.execute("ALTER TABLE t DROP COLUMN a");
|
||||
@@ -54,7 +54,7 @@ fn test_fail_drop_primary_key_column() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_fail_drop_compound_primary_key_column() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a, b, PRIMARY KEY(a, b));", true);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a, b, PRIMARY KEY(a, b));");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
let res = conn.execute("ALTER TABLE t DROP COLUMN a");
|
||||
@@ -68,7 +68,7 @@ fn test_fail_drop_compound_primary_key_column() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_fail_drop_partial_index_column() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a, b);", true);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a, b);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
conn.execute("CREATE INDEX i ON t (b) WHERE a > 0")?;
|
||||
@@ -83,7 +83,7 @@ fn test_fail_drop_partial_index_column() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_fail_drop_view_column() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a, b);", true);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a, b);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
conn.execute("CREATE VIEW v AS SELECT a, b FROM t")?;
|
||||
@@ -99,7 +99,7 @@ fn test_fail_drop_view_column() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_fail_rename_view_column() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a, b);", true);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (a, b);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
conn.execute("CREATE VIEW v AS SELECT a, b FROM t")?;
|
||||
@@ -116,7 +116,6 @@ fn test_allow_drop_unreferenced_columns() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"CREATE TABLE t (pk INTEGER PRIMARY KEY, indexed INTEGER, viewed INTEGER, partial INTEGER, compound1 INTEGER, compound2 INTEGER, unused1 INTEGER, unused2 INTEGER, unused3 INTEGER);",
|
||||
true
|
||||
);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ use crate::common::{maybe_setup_tracing, TempDatabase};
|
||||
|
||||
#[test]
|
||||
fn test_schema_reprepare() {
|
||||
let tmp_db = TempDatabase::new_empty(false);
|
||||
let tmp_db = TempDatabase::new_empty();
|
||||
let conn1 = tmp_db.connect_limbo();
|
||||
conn1.execute("CREATE TABLE t(x, y, z)").unwrap();
|
||||
conn1
|
||||
@@ -55,7 +55,7 @@ fn test_create_multiple_connections() -> anyhow::Result<()> {
|
||||
maybe_setup_tracing();
|
||||
let tries = 1;
|
||||
for _ in 0..tries {
|
||||
let tmp_db = Arc::new(TempDatabase::new_empty(false));
|
||||
let tmp_db = Arc::new(TempDatabase::new_empty());
|
||||
{
|
||||
let conn = tmp_db.connect_limbo();
|
||||
conn.execute("CREATE TABLE t (x)").unwrap();
|
||||
@@ -134,7 +134,7 @@ fn test_create_multiple_connections() -> anyhow::Result<()> {
|
||||
fn test_reader_writer() -> anyhow::Result<()> {
|
||||
let tries = 10;
|
||||
for _ in 0..tries {
|
||||
let tmp_db = Arc::new(TempDatabase::new_empty(false));
|
||||
let tmp_db = Arc::new(TempDatabase::new_empty());
|
||||
{
|
||||
let conn = tmp_db.connect_limbo();
|
||||
conn.execute("CREATE TABLE t (x)").unwrap();
|
||||
@@ -206,7 +206,7 @@ fn test_reader_writer() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_schema_reprepare_write() {
|
||||
maybe_setup_tracing();
|
||||
let tmp_db = TempDatabase::new_empty(false);
|
||||
let tmp_db = TempDatabase::new_empty();
|
||||
let conn1 = tmp_db.connect_limbo();
|
||||
conn1.execute("CREATE TABLE t(x, y, z)").unwrap();
|
||||
let conn2 = tmp_db.connect_limbo();
|
||||
@@ -253,7 +253,7 @@ fn advance(stmt: &mut Statement) -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_interleaved_transactions() -> anyhow::Result<()> {
|
||||
maybe_setup_tracing();
|
||||
let tmp_db = TempDatabase::new_empty(true);
|
||||
let tmp_db = TempDatabase::new_empty();
|
||||
{
|
||||
let bootstrap_conn = tmp_db.connect_limbo();
|
||||
bootstrap_conn.execute("CREATE TABLE table_0 (id INTEGER,col_1 REAL,col_2 INTEGER,col_3 REAL,col_4 TEXT,col_5 REAL,col_6 TEXT)")?;
|
||||
|
||||
@@ -3,7 +3,7 @@ use turso_core::{LimboError, StepResult, Value};
|
||||
|
||||
#[test]
|
||||
fn test_statement_reset_bind() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("create table test (i integer);", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("create table test (i integer);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
let mut stmt = conn.prepare("select ?")?;
|
||||
@@ -47,7 +47,7 @@ fn test_statement_reset_bind() -> anyhow::Result<()> {
|
||||
|
||||
#[test]
|
||||
fn test_statement_bind() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("create table test (i integer);", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("create table test (i integer);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
let mut stmt = conn.prepare("select ?, ?1, :named, ?3, ?4")?;
|
||||
@@ -112,7 +112,6 @@ fn test_insert_parameter_remap() -> anyhow::Result<()> {
|
||||
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"create table test (a integer, b integer, c integer, d integer);",
|
||||
false,
|
||||
);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
@@ -177,7 +176,6 @@ fn test_insert_parameter_remap_all_params() -> anyhow::Result<()> {
|
||||
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"create table test (a integer, b integer, c integer, d integer);",
|
||||
false,
|
||||
);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
let mut ins = conn.prepare("insert into test (d, a, c, b) values (?, ?, ?, ?);")?;
|
||||
@@ -245,7 +243,6 @@ fn test_insert_parameter_multiple_remap_backwards() -> anyhow::Result<()> {
|
||||
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"create table test (a integer, b integer, c integer, d integer);",
|
||||
false,
|
||||
);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
let mut ins = conn.prepare("insert into test (d,c,b,a) values (?, ?, ?, ?);")?;
|
||||
@@ -312,7 +309,6 @@ fn test_insert_parameter_multiple_no_remap() -> anyhow::Result<()> {
|
||||
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"create table test (a integer, b integer, c integer, d integer);",
|
||||
false,
|
||||
);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
let mut ins = conn.prepare("insert into test (a,b,c,d) values (?, ?, ?, ?);")?;
|
||||
@@ -379,7 +375,6 @@ fn test_insert_parameter_multiple_row() -> anyhow::Result<()> {
|
||||
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"create table test (a integer, b integer, c integer, d integer);",
|
||||
false,
|
||||
);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
let mut ins = conn.prepare("insert into test (b,a,d,c) values (?, ?, ?, ?), (?, ?, ?, ?);")?;
|
||||
@@ -445,7 +440,7 @@ fn test_insert_parameter_multiple_row() -> anyhow::Result<()> {
|
||||
|
||||
#[test]
|
||||
fn test_bind_parameters_update_query() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("create table test (a integer, b text);", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("create table test (a integer, b text);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
let mut ins = conn.prepare("insert into test (a, b) values (3, 'test1');")?;
|
||||
loop {
|
||||
@@ -489,7 +484,6 @@ fn test_bind_parameters_update_query() -> anyhow::Result<()> {
|
||||
fn test_bind_parameters_update_query_multiple_where() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"create table test (a integer, b text, c integer, d integer);",
|
||||
false,
|
||||
);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
let mut ins = conn.prepare("insert into test (a, b, c, d) values (3, 'test1', 4, 5);")?;
|
||||
@@ -535,10 +529,8 @@ fn test_bind_parameters_update_query_multiple_where() -> anyhow::Result<()> {
|
||||
|
||||
#[test]
|
||||
fn test_bind_parameters_update_rowid_alias() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT);",
|
||||
false,
|
||||
);
|
||||
let tmp_db =
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
let mut ins = conn.prepare("insert into test (id, name) values (1, 'test');")?;
|
||||
loop {
|
||||
@@ -596,7 +588,6 @@ fn test_bind_parameters_update_rowid_alias() -> anyhow::Result<()> {
|
||||
fn test_bind_parameters_update_rowid_alias_seek_rowid() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT, age integer);",
|
||||
false,
|
||||
);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
conn.execute("insert into test (id, name, age) values (1, 'test', 4);")?;
|
||||
@@ -664,7 +655,6 @@ fn test_bind_parameters_update_rowid_alias_seek_rowid() -> anyhow::Result<()> {
|
||||
fn test_bind_parameters_delete_rowid_alias_seek_out_of_order() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT, age integer);",
|
||||
false,
|
||||
);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
conn.execute("insert into test (id, name, age) values (1, 'correct', 4);")?;
|
||||
@@ -706,10 +696,8 @@ fn test_bind_parameters_delete_rowid_alias_seek_out_of_order() -> anyhow::Result
|
||||
|
||||
#[test]
|
||||
fn test_cte_alias() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT);",
|
||||
false,
|
||||
);
|
||||
let tmp_db =
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
conn.execute("INSERT INTO test (id, name) VALUES (1, 'Limbo');")?;
|
||||
conn.execute("INSERT INTO test (id, name) VALUES (2, 'Turso');")?;
|
||||
@@ -753,7 +741,7 @@ fn test_cte_alias() -> anyhow::Result<()> {
|
||||
|
||||
#[test]
|
||||
fn test_avg_agg() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("create table t (x, y);", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("create table t (x, y);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
conn.execute("insert into t values (1, null), (2, null), (3, null), (null, null), (4, null)")?;
|
||||
let mut rows = Vec::new();
|
||||
@@ -787,7 +775,7 @@ fn test_avg_agg() -> anyhow::Result<()> {
|
||||
|
||||
#[test]
|
||||
fn test_offset_limit_bind() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE test (i INTEGER);", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE test (i INTEGER);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
conn.execute("INSERT INTO test VALUES (5), (4), (3), (2), (1)")?;
|
||||
@@ -830,10 +818,8 @@ fn test_offset_limit_bind() -> anyhow::Result<()> {
|
||||
|
||||
#[test]
|
||||
fn test_upsert_parameters_order() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"CREATE TABLE test (k INTEGER PRIMARY KEY, v INTEGER);",
|
||||
false,
|
||||
);
|
||||
let tmp_db =
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE test (k INTEGER PRIMARY KEY, v INTEGER);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
conn.execute("INSERT INTO test VALUES (1, 2), (3, 4)")?;
|
||||
@@ -879,10 +865,8 @@ fn test_upsert_parameters_order() -> anyhow::Result<()> {
|
||||
|
||||
#[test]
|
||||
fn test_multiple_connections_visibility() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"CREATE TABLE test (k INTEGER PRIMARY KEY, v INTEGER);",
|
||||
false,
|
||||
);
|
||||
let tmp_db =
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE test (k INTEGER PRIMARY KEY, v INTEGER);");
|
||||
let conn1 = tmp_db.connect_limbo();
|
||||
let conn2 = tmp_db.connect_limbo();
|
||||
conn1.execute("BEGIN")?;
|
||||
@@ -901,7 +885,7 @@ fn test_multiple_connections_visibility() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
/// Test that we can only join up to 63 tables, and trying to join more should fail with an error instead of panicing.
|
||||
fn test_max_joined_tables_limit() {
|
||||
let tmp_db = TempDatabase::new("test_max_joined_tables_limit", false);
|
||||
let tmp_db = TempDatabase::new("test_max_joined_tables_limit");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
// Create 64 tables
|
||||
@@ -934,7 +918,7 @@ fn test_many_columns() {
|
||||
}
|
||||
create_sql.push(')');
|
||||
|
||||
let tmp_db = TempDatabase::new("test_many_columns", false);
|
||||
let tmp_db = TempDatabase::new("test_many_columns");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
conn.execute(&create_sql).unwrap();
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ use crate::common::TempDatabase;
|
||||
// was still fresh (no reads or writes happened).
|
||||
#[test]
|
||||
fn test_deferred_transaction_restart() {
|
||||
let tmp_db = TempDatabase::new("test_deferred_tx.db", true);
|
||||
let tmp_db = TempDatabase::new("test_deferred_tx.db");
|
||||
let conn1 = tmp_db.connect_limbo();
|
||||
let conn2 = tmp_db.connect_limbo();
|
||||
|
||||
@@ -57,7 +57,7 @@ fn test_deferred_transaction_restart() {
|
||||
// because it has performed reads and has a committed snapshot.
|
||||
#[test]
|
||||
fn test_deferred_transaction_no_restart() {
|
||||
let tmp_db = TempDatabase::new("test_deferred_tx_no_restart.db", true);
|
||||
let tmp_db = TempDatabase::new("test_deferred_tx_no_restart.db");
|
||||
let conn1 = tmp_db.connect_limbo();
|
||||
let conn2 = tmp_db.connect_limbo();
|
||||
|
||||
@@ -106,7 +106,7 @@ fn test_deferred_transaction_no_restart() {
|
||||
|
||||
#[test]
|
||||
fn test_txn_error_doesnt_rollback_txn() -> Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("create table t (x);", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("create table t (x);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
conn.execute("begin")?;
|
||||
@@ -131,7 +131,7 @@ fn test_txn_error_doesnt_rollback_txn() -> Result<()> {
|
||||
/// Connection 2 should see the initial data (table 'test' in schema + 2 rows). Regression test for #2997
|
||||
/// It should then see another created table 'test2' in schema, as well.
|
||||
fn test_transaction_visibility() {
|
||||
let tmp_db = TempDatabase::new("test_transaction_visibility.db", true);
|
||||
let tmp_db = TempDatabase::new("test_transaction_visibility.db");
|
||||
let conn1 = tmp_db.connect_limbo();
|
||||
let conn2 = tmp_db.connect_limbo();
|
||||
|
||||
@@ -179,10 +179,8 @@ fn test_transaction_visibility() {
|
||||
#[test]
|
||||
/// A constraint error does not rollback the transaction, it rolls back the statement.
|
||||
fn test_constraint_error_aborts_only_stmt_not_entire_transaction() {
|
||||
let tmp_db = TempDatabase::new(
|
||||
"test_constraint_error_aborts_only_stmt_not_entire_transaction.db",
|
||||
true,
|
||||
);
|
||||
let tmp_db =
|
||||
TempDatabase::new("test_constraint_error_aborts_only_stmt_not_entire_transaction.db");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
// Create table succeeds
|
||||
@@ -224,7 +222,7 @@ fn test_constraint_error_aborts_only_stmt_not_entire_transaction() {
|
||||
/// violations being persisted to the database, even though the transaction was aborted.
|
||||
/// This test ensures that dirty pages are not flushed to WAL until after deferred violations are checked.
|
||||
fn test_deferred_fk_violation_rollback_in_autocommit() {
|
||||
let tmp_db = TempDatabase::new("test_deferred_fk_violation_rollback.db", true);
|
||||
let tmp_db = TempDatabase::new("test_deferred_fk_violation_rollback.db");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
// Enable foreign keys
|
||||
@@ -579,7 +577,7 @@ fn test_mvcc_checkpoint_works() {
|
||||
conn.execute("PRAGMA wal_checkpoint(TRUNCATE)").unwrap();
|
||||
|
||||
// Verify all rows after reopening database
|
||||
let tmp_db = TempDatabase::new_with_existent(&tmp_db.path, true);
|
||||
let tmp_db = TempDatabase::new_with_existent(&tmp_db.path);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
let stmt = conn
|
||||
.query("SELECT * FROM test ORDER BY id, value")
|
||||
@@ -723,7 +721,7 @@ fn test_mvcc_recovery_of_both_checkpointed_and_noncheckpointed_tables_works() {
|
||||
#[test]
|
||||
fn test_non_mvcc_to_mvcc() {
|
||||
// Create non-mvcc database
|
||||
let tmp_db = TempDatabase::new("test_non_mvcc_to_mvcc.db", false);
|
||||
let tmp_db = TempDatabase::new("test_non_mvcc_to_mvcc.db");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
// Create table and insert data
|
||||
|
||||
@@ -27,10 +27,8 @@ macro_rules! change_state {
|
||||
#[ignore]
|
||||
fn test_simple_overflow_page() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"CREATE TABLE test (x INTEGER PRIMARY KEY, t TEXT);",
|
||||
false,
|
||||
);
|
||||
let tmp_db =
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE test (x INTEGER PRIMARY KEY, t TEXT);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
let mut huge_text = String::new();
|
||||
@@ -91,10 +89,8 @@ fn test_simple_overflow_page() -> anyhow::Result<()> {
|
||||
fn test_sequential_overflow_page() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
maybe_setup_tracing();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite(
|
||||
"CREATE TABLE test (x INTEGER PRIMARY KEY, t TEXT);",
|
||||
false,
|
||||
);
|
||||
let tmp_db =
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE test (x INTEGER PRIMARY KEY, t TEXT);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
let iterations = 10_usize;
|
||||
|
||||
@@ -163,8 +159,7 @@ fn test_sequential_write() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
maybe_setup_tracing();
|
||||
|
||||
let tmp_db =
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE test (x INTEGER PRIMARY KEY);", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE test (x INTEGER PRIMARY KEY);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
let list_query = "SELECT * FROM test";
|
||||
@@ -199,7 +194,7 @@ fn test_sequential_write() -> anyhow::Result<()> {
|
||||
/// https://github.com/tursodatabase/turso/pull/679
|
||||
fn test_regression_multi_row_insert() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE test (x REAL);", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE test (x REAL);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
let insert_query = "INSERT INTO test VALUES (-2), (-3), (-1)";
|
||||
@@ -232,7 +227,7 @@ fn test_regression_multi_row_insert() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_statement_reset() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("create table test (i integer);", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("create table test (i integer);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
conn.execute("insert into test values (1)")?;
|
||||
@@ -278,8 +273,7 @@ fn test_statement_reset() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_wal_checkpoint() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db =
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE test (x INTEGER PRIMARY KEY);", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE test (x INTEGER PRIMARY KEY);");
|
||||
// threshold is 1000 by default
|
||||
let iterations = 1001_usize;
|
||||
let conn = tmp_db.connect_limbo();
|
||||
@@ -309,8 +303,7 @@ fn test_wal_checkpoint() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_wal_restart() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db =
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE test (x INTEGER PRIMARY KEY);", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE test (x INTEGER PRIMARY KEY);");
|
||||
// threshold is 1000 by default
|
||||
|
||||
fn insert(i: usize, conn: &Arc<Connection>, tmp_db: &TempDatabase) -> anyhow::Result<()> {
|
||||
@@ -355,7 +348,7 @@ fn test_wal_restart() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_insert_after_big_blob() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE temp (t1 BLOB, t2 INTEGER)", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE temp (t1 BLOB, t2 INTEGER)");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
conn.execute("insert into temp(t1) values (zeroblob (262144))")?;
|
||||
@@ -371,7 +364,7 @@ fn test_write_delete_with_index() -> anyhow::Result<()> {
|
||||
|
||||
maybe_setup_tracing();
|
||||
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE test (x PRIMARY KEY);", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE test (x PRIMARY KEY);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
let list_query = "SELECT * FROM test";
|
||||
@@ -425,8 +418,7 @@ fn test_update_with_index() -> anyhow::Result<()> {
|
||||
|
||||
maybe_setup_tracing();
|
||||
|
||||
let tmp_db =
|
||||
TempDatabase::new_with_rusqlite("CREATE TABLE test (x REAL PRIMARY KEY, y TEXT);", true);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE test (x REAL PRIMARY KEY, y TEXT);");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
common::run_query(&tmp_db, &conn, "INSERT INTO test VALUES (1.0, 'foo')")?;
|
||||
@@ -462,7 +454,7 @@ fn test_delete_with_index() -> anyhow::Result<()> {
|
||||
|
||||
maybe_setup_tracing();
|
||||
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (x UNIQUE)", true);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (x UNIQUE)");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
common::run_query(&tmp_db, &conn, "INSERT INTO t VALUES (1), (2)")?;
|
||||
@@ -478,7 +470,7 @@ fn test_delete_with_index() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_update_regression() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE imaginative_baroja (blithesome_hall BLOB,remarkable_lester INTEGER,generous_balagun TEXT,ample_earth INTEGER,marvelous_khadzhiev BLOB,glowing_parissi TEXT,insightful_ryner BLOB)", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE imaginative_baroja (blithesome_hall BLOB,remarkable_lester INTEGER,generous_balagun TEXT,ample_earth INTEGER,marvelous_khadzhiev BLOB,glowing_parissi TEXT,insightful_ryner BLOB)");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
conn.execute("INSERT INTO imaginative_baroja VALUES (X'617070726F61636861626C655F6F6D6164', 5581285929211692372, 'approachable_podur', -4145754929970306534, X'666F72747569746F75735F7368617270', 'sensible_amesly', X'636F6D70657469746976655F6669746368'), (X'6D6972746866756C5F686F6673746565', -8554670009677647372, 'shimmering_modkraftdk', 4993627046425025026, X'636F6E73696465726174655F63616765', 'breathtaking_boggs', X'616D617A696E675F73696D6F6E65'), (X'7669766163696F75735F7363687761727A', 5860599187854155616, 'sparkling_aurora', 3757552048117668067, X'756E697175655F6769617A', 'lovely_leroy', X'68617264776F726B696E675F6D696C6C6572'), (X'677265676172696F75735F7061657065', -488992130149088413, 'focused_brinker', 4503849242092922100, X'66756E6E795F6A616B736963', 'competitive_communications', X'657863656C6C656E745F7873696C656E74'), (X'7374756E6E696E675F74616E6E656E6261756D', -5634782647279946253, 'fabulous_crute', -3978009805517476564, X'72656C617865645F63617272796F7574', 'spellbinding_erkan', X'66756E6E795F646F626273'), (X'696D6167696E61746976655F746F6C6F6B6F6E6E696B6F7661', 4236471363502323025, 'excellent_wolke', 7606168469334609395, X'736C65656B5F6D6361666565', 'magnificent_riley', X'616D6961626C655F706173736164616B6973'), (X'77696C6C696E675F736872657665', 5048296470820985219, 'ambitious_jeppesen', 6961857167361512834, X'70617469656E745F6272696E6B6572', 'giving_kramm', X'726573706F6E7369626C655F7363686D696474'), (X'73656E7369626C655F6D757865726573', -5519194136843846790, 'frank_ruggero', 4354855935194921345, X'76697669645F63617365', 'focused_lovecruft', X'6D61676E69666963656E745F736B79')")?;
|
||||
@@ -635,7 +627,7 @@ fn test_rollback_on_foreign_key_constraint_violation() -> anyhow::Result<()> {
|
||||
#[test]
|
||||
fn test_multiple_statements() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (x)", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (x)");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
|
||||
conn.execute("INSERT INTO t values(1); insert into t values(2);")?;
|
||||
@@ -729,7 +721,7 @@ fn test_write_concurrent_connections() -> anyhow::Result<()> {
|
||||
|
||||
maybe_setup_tracing();
|
||||
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (x)", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t (x)");
|
||||
let num_connections = 4;
|
||||
let num_inserts_per_connection = 100;
|
||||
let mut connections = vec![];
|
||||
@@ -780,7 +772,7 @@ fn test_wal_bad_frame() -> anyhow::Result<()> {
|
||||
maybe_setup_tracing();
|
||||
let _ = env_logger::try_init();
|
||||
let db_path = {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t1 (x)", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE t1 (x)");
|
||||
let db_path = tmp_db.path.clone();
|
||||
let conn = tmp_db.connect_limbo();
|
||||
conn.execute("BEGIN")?;
|
||||
@@ -872,20 +864,20 @@ fn test_read_wal_dumb_no_frames() -> anyhow::Result<()> {
|
||||
maybe_setup_tracing();
|
||||
let _ = env_logger::try_init();
|
||||
let db_path = {
|
||||
let tmp_db = TempDatabase::new_empty(false);
|
||||
let tmp_db = TempDatabase::new_empty();
|
||||
let conn = tmp_db.connect_limbo();
|
||||
conn.close()?;
|
||||
tmp_db.path.clone()
|
||||
};
|
||||
// Second connection must recover from the WAL file. Last checksum should be filled correctly.
|
||||
{
|
||||
let tmp_db = TempDatabase::new_with_existent(&db_path, false);
|
||||
let tmp_db = TempDatabase::new_with_existent(&db_path);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
conn.execute("CREATE TABLE t0 (x)")?;
|
||||
conn.close()?;
|
||||
}
|
||||
{
|
||||
let tmp_db = TempDatabase::new_with_existent(&db_path, false);
|
||||
let tmp_db = TempDatabase::new_with_existent(&db_path);
|
||||
let conn = tmp_db.connect_limbo();
|
||||
conn.execute("INSERT INTO t0(x) VALUES (1)")?;
|
||||
conn.close()?;
|
||||
@@ -896,7 +888,7 @@ fn test_read_wal_dumb_no_frames() -> anyhow::Result<()> {
|
||||
|
||||
#[test]
|
||||
fn test_insert_with_column_names() -> anyhow::Result<()> {
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE a(z)", false);
|
||||
let tmp_db = TempDatabase::new_with_rusqlite("CREATE TABLE a(z)");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
let result = conn.execute("INSERT INTO a VALUES (b.x)");
|
||||
|
||||
@@ -917,7 +909,7 @@ fn test_insert_with_column_names() -> anyhow::Result<()> {
|
||||
|
||||
#[test]
|
||||
pub fn delete_search_op_ignore_nulls() {
|
||||
let limbo = TempDatabase::new_empty(true);
|
||||
let limbo = TempDatabase::new_empty();
|
||||
let conn = limbo.db.connect().unwrap();
|
||||
for sql in [
|
||||
"CREATE TABLE t (id INTEGER PRIMARY KEY AUTOINCREMENT, c INT);",
|
||||
@@ -938,7 +930,7 @@ pub fn delete_search_op_ignore_nulls() {
|
||||
|
||||
#[test]
|
||||
pub fn delete_eq_correct() {
|
||||
let limbo = TempDatabase::new_empty(true);
|
||||
let limbo = TempDatabase::new_empty();
|
||||
let conn = limbo.db.connect().unwrap();
|
||||
for sql in [
|
||||
"CREATE TABLE t (id INTEGER PRIMARY KEY AUTOINCREMENT, c INT);",
|
||||
@@ -966,7 +958,7 @@ pub fn delete_eq_correct() {
|
||||
|
||||
#[test]
|
||||
pub fn upsert_conflict() {
|
||||
let limbo = TempDatabase::new_empty(true);
|
||||
let limbo = TempDatabase::new_empty();
|
||||
let conn = limbo.db.connect().unwrap();
|
||||
for sql in [
|
||||
"CREATE TABLE t (id INTEGER PRIMARY KEY AUTOINCREMENT, c INT UNIQUE, value INT);",
|
||||
|
||||
@@ -7,7 +7,7 @@ use turso_core::Row;
|
||||
fn test_per_page_checksum() -> anyhow::Result<()> {
|
||||
let _ = env_logger::try_init();
|
||||
let db_name = format!("test-{}.db", rng().next_u32());
|
||||
let tmp_db = TempDatabase::new(&db_name, false);
|
||||
let tmp_db = TempDatabase::new(&db_name);
|
||||
let db_path = tmp_db.path.clone();
|
||||
|
||||
{
|
||||
@@ -65,7 +65,7 @@ fn test_per_page_checksum() -> anyhow::Result<()> {
|
||||
fn test_checksum_detects_corruption() {
|
||||
let _ = env_logger::try_init();
|
||||
let db_name = format!("test-corruption-{}.db", rng().next_u32());
|
||||
let tmp_db = TempDatabase::new(&db_name, false);
|
||||
let tmp_db = TempDatabase::new(&db_name);
|
||||
let db_path = tmp_db.path.clone();
|
||||
|
||||
// Create and populate the database
|
||||
@@ -98,7 +98,7 @@ fn test_checksum_detects_corruption() {
|
||||
}
|
||||
|
||||
{
|
||||
let existing_db = TempDatabase::new_with_existent(&db_path, false);
|
||||
let existing_db = TempDatabase::new_with_existent(&db_path);
|
||||
// this query should fail and result in panic because db is now corrupted
|
||||
let should_panic = panic::catch_unwind(panic::AssertUnwindSafe(|| {
|
||||
let conn = existing_db.connect_limbo();
|
||||
|
||||
@@ -9,7 +9,7 @@ use turso_core::{Connection, LimboError, Result, StepResult};
|
||||
#[test]
|
||||
fn test_wal_checkpoint_result() -> Result<()> {
|
||||
maybe_setup_tracing();
|
||||
let tmp_db = TempDatabase::new("test_wal.db", false);
|
||||
let tmp_db = TempDatabase::new("test_wal.db");
|
||||
let conn = tmp_db.connect_limbo();
|
||||
conn.execute("CREATE TABLE t1 (id text);")?;
|
||||
|
||||
@@ -36,7 +36,7 @@ fn test_wal_checkpoint_result() -> Result<()> {
|
||||
#[ignore = "ignored for now because it's flaky"]
|
||||
fn test_wal_1_writer_1_reader() -> Result<()> {
|
||||
maybe_setup_tracing();
|
||||
let tmp_db = Arc::new(Mutex::new(TempDatabase::new("test_wal.db", false)));
|
||||
let tmp_db = Arc::new(Mutex::new(TempDatabase::new("test_wal.db")));
|
||||
let db = tmp_db.lock().unwrap().limbo_database(false);
|
||||
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user