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(())
 | 
						|
}
 |