60 lines
1.7 KiB
Rust
60 lines
1.7 KiB
Rust
//! Example: Query world resources from the database
|
|
//!
|
|
//! Run with: cargo run --example query_world_resources
|
|
|
|
use diesel::prelude::*;
|
|
use diesel::sqlite::SqliteConnection;
|
|
use std::env;
|
|
|
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
// Connect to database
|
|
let database_url = env::var("DATABASE_URL").unwrap_or_else(|_| "../cursebreaker.db".to_string());
|
|
let mut conn = SqliteConnection::establish(&database_url)?;
|
|
|
|
// Use the schema
|
|
use cursebreaker_parser::schema::world_resources::dsl::*;
|
|
|
|
// Query all resources
|
|
#[derive(Queryable, Debug)]
|
|
struct WorldResource {
|
|
item_id: i32,
|
|
pos_x: f32,
|
|
pos_y: f32,
|
|
}
|
|
|
|
let results = world_resources
|
|
.limit(10)
|
|
.load::<WorldResource>(&mut conn)?;
|
|
|
|
println!("Found {} resources (showing first 10):", results.len());
|
|
println!();
|
|
|
|
for resource in results {
|
|
println!("Resource:");
|
|
println!(" Item ID: {}", resource.item_id);
|
|
println!(" Position: ({:.2}, {:.2})", resource.pos_x, resource.pos_y);
|
|
println!();
|
|
}
|
|
|
|
// Query all resources
|
|
println!("\n--- All world resources ---");
|
|
let all_results = world_resources
|
|
.load::<WorldResource>(&mut conn)?;
|
|
|
|
println!("Found {} total resources", all_results.len());
|
|
|
|
// Group by item_id
|
|
use std::collections::HashMap;
|
|
let mut item_counts: HashMap<i32, usize> = HashMap::new();
|
|
for resource in &all_results {
|
|
*item_counts.entry(resource.item_id).or_insert(0) += 1;
|
|
}
|
|
|
|
println!("\nResource counts by item ID:");
|
|
for (i_id, count) in item_counts {
|
|
println!(" Item {}: {} instances", i_id, count);
|
|
}
|
|
|
|
Ok(())
|
|
}
|