Skip to content

Instantly share code, notes, and snippets.

@mykhailokrainik
Forked from patshaughnessy/main.rs
Created July 7, 2018 11:55
Show Gist options
  • Save mykhailokrainik/07b17ccb0701c78bc31ac9243d4b24f6 to your computer and use it in GitHub Desktop.
Save mykhailokrainik/07b17ccb0701c78bc31ac9243d4b24f6 to your computer and use it in GitHub Desktop.
Execute a simple SQL report using Rust and Diesel
#[macro_use]
extern crate diesel;
use diesel::prelude::*;
table! {
users (id) {
id -> Int4,
first_name -> Nullable<Varchar>,
last_name -> Nullable<Varchar>,
}
}
#[derive(Queryable)]
pub struct User {
pub id: i32,
pub first_name: Option<String>,
pub last_name: Option<String>,
}
fn main() {
let database_url = "postgres://pat@localhost:5432/names";
let connection = PgConnection::establish(&database_url).expect(
&format!("Error connecting to {}", database_url)
);
println!("Connected!");
use users::dsl::*;
let results = users.load::<User>(&connection).expect(
"Error loading users"
);
let (mult, one): (Vec<User>, Vec<User>) =
results.into_iter().partition(|user|
if let Some(ref name) = user.last_name {
name.split(' ').count() > 1
} else {
false
}
);
println!("Found {} users with more than one last name.", mult.len());
println!("Found {} users with one last name.", one.len());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment