sqlxo 0.9.1

sqlxo: small SQL query builder + derives for filterable ORM-ish patterns
Documentation
#![feature(inherent_associated_types)]
#![allow(incomplete_features)]

use criterion::{
	criterion_group,
	criterion_main,
	Criterion,
};
use sqlx::FromRow;
use sqlxo::blocks::{
	BuildableFilter,
	BuildableJoin,
};
use sqlxo::{
	Buildable,
	JoinKind,
	QueryBuilder,
};
use sqlxo::{
	JoinValue,
	Query,
};
use uuid::Uuid;

#[derive(Debug, Clone, FromRow, Query)]
pub struct Material {
	#[sqlxo(primary_key)]
	pub id: Uuid,
}

#[derive(Debug, Clone, FromRow, Query)]
pub struct Item {
	#[sqlxo(primary_key)]
	pub id:          Uuid,
	#[sqlxo(foreign_key(to = "material.id"))]
	pub material_id: Option<Uuid>,

	#[sqlxo(belongs_to)]
	#[sqlx(skip)]
	pub material: JoinValue<Material>,
}

fn bench_read_builder(c: &mut Criterion) {
	let mut group = c.benchmark_group("read_builder");

	group.bench_function("baseline", |b| {
		b.iter(|| {
			let plan = QueryBuilder::<Item>::read().build();
			criterion::black_box(plan.sql(sqlxo::blocks::SelectType::Star));
		});
	});

	group.bench_function("join_and_where", |b| {
		b.iter(|| {
			let plan = QueryBuilder::<Item>::read()
				.join(ItemJoin::ItemToMaterialByMaterialId, JoinKind::Left)
				.r#where(sqlxo::blocks::Expression::Leaf(
					ItemQuery::MaterialIdIsNotNull,
				))
				.build();
			criterion::black_box(plan.sql(sqlxo::blocks::SelectType::Star));
		});
	});

	group.finish();
}

criterion_group!(benches, bench_read_builder);
criterion_main!(benches);