90 lines
2.4 KiB
Rust
90 lines
2.4 KiB
Rust
use ourdb::{OurDB, OurDBConfig, OurDBSetArgs};
|
|
|
|
fn main() -> Result<(), ourdb::Error> {
|
|
// Create a temporary directory for the database
|
|
let db_path = std::env::temp_dir().join("ourdb_example");
|
|
std::fs::create_dir_all(&db_path)?;
|
|
|
|
println!("Creating database at: {}", db_path.display());
|
|
|
|
// Create a new database with incremental mode enabled
|
|
let config = OurDBConfig {
|
|
path: db_path.clone(),
|
|
incremental_mode: true,
|
|
file_size: None, // Use default (500MB)
|
|
keysize: None, // Use default (4 bytes)
|
|
reset: None, // Don't reset existing database
|
|
};
|
|
|
|
let mut db = OurDB::new(config)?;
|
|
|
|
// Store some data with auto-generated IDs
|
|
let data1 = b"First record";
|
|
let id1 = db.set(OurDBSetArgs {
|
|
id: None,
|
|
data: data1,
|
|
})?;
|
|
println!("Stored first record with ID: {}", id1);
|
|
|
|
let data2 = b"Second record";
|
|
let id2 = db.set(OurDBSetArgs {
|
|
id: None,
|
|
data: data2,
|
|
})?;
|
|
println!("Stored second record with ID: {}", id2);
|
|
|
|
// Retrieve and print the data
|
|
let retrieved1 = db.get(id1)?;
|
|
println!(
|
|
"Retrieved ID {}: {}",
|
|
id1,
|
|
String::from_utf8_lossy(&retrieved1)
|
|
);
|
|
|
|
let retrieved2 = db.get(id2)?;
|
|
println!(
|
|
"Retrieved ID {}: {}",
|
|
id2,
|
|
String::from_utf8_lossy(&retrieved2)
|
|
);
|
|
|
|
// Update a record to demonstrate history tracking
|
|
let updated_data = b"Updated first record";
|
|
db.set(OurDBSetArgs {
|
|
id: Some(id1),
|
|
data: updated_data,
|
|
})?;
|
|
println!("Updated record with ID: {}", id1);
|
|
|
|
// Get history for the updated record
|
|
let history = db.get_history(id1, 2)?;
|
|
println!("History for ID {}:", id1);
|
|
for (i, entry) in history.iter().enumerate() {
|
|
println!(" Version {}: {}", i, String::from_utf8_lossy(entry));
|
|
}
|
|
|
|
// Delete a record
|
|
db.delete(id2)?;
|
|
println!("Deleted record with ID: {}", id2);
|
|
|
|
// Verify deletion
|
|
match db.get(id2) {
|
|
Ok(_) => println!("Record still exists (unexpected)"),
|
|
Err(e) => println!("Verified deletion: {}", e),
|
|
}
|
|
|
|
// Close the database
|
|
db.close()?;
|
|
println!("Database closed successfully");
|
|
|
|
// Clean up (optional)
|
|
if std::env::var("KEEP_DB").is_err() {
|
|
std::fs::remove_dir_all(&db_path)?;
|
|
println!("Cleaned up database directory");
|
|
} else {
|
|
println!("Database kept at: {}", db_path.display());
|
|
}
|
|
|
|
Ok(())
|
|
}
|