Skip to content
Snippets Groups Projects

[ref] gva:schema: create macro exec_in_db_transaction to factor code

Merged Éloïs requested to merge elois/tmp into dev
3 files
+ 31
52
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -33,6 +33,26 @@ use juniper_from_schema::graphql_schema_from_file;
@@ -33,6 +33,26 @@ use juniper_from_schema::graphql_schema_from_file;
// generate schema from schema file
// generate schema from schema file
graphql_schema_from_file!("resources/schema.gql", context_type: QueryContext);
graphql_schema_from_file!("resources/schema.gql", context_type: QueryContext);
 
/// Macro that execute a query resolver in db read transaction
 
#[cfg(not(test))]
 
macro_rules! exec_in_db_transaction {
 
($f:ident($e:ident, $($param:expr),*)) => {
 
{
 
let db = $e.context().get_db();
 
db.read(|r| queries::$f::execute(&BcDbRoWithReader { db, r }$(, $param)*)).map_err(Into::into)
 
}
 
};
 
}
 
#[cfg(test)]
 
macro_rules! exec_in_db_transaction {
 
($f:ident($e:ident, $($param:expr),*)) => {
 
{
 
let db = $e.context().get_db();
 
queries::$f::execute(db$(, $param)*).map_err(Into::into)
 
}
 
};
 
}
 
pub struct Query;
pub struct Query;
impl QueryFields for Query {
impl QueryFields for Query {
@@ -54,14 +74,7 @@ impl QueryFields for Query {
@@ -54,14 +74,7 @@ impl QueryFields for Query {
executor: &Executor<'_, QueryContext>,
executor: &Executor<'_, QueryContext>,
trail: &QueryTrail<'_, Block, Walked>,
trail: &QueryTrail<'_, Block, Walked>,
) -> FieldResult<Option<Block>> {
) -> FieldResult<Option<Block>> {
let db = executor.context().get_db();
exec_in_db_transaction!(current(executor, trail))
cfg_if::cfg_if! {
if #[cfg(not(test))] {
db.read(|r| queries::current::execute(&BcDbRoWithReader { db, r }, trail)).map_err(Into::into)
} else {
queries::current::execute(db, trail).map_err(Into::into)
}
}
}
}
#[inline]
#[inline]
fn field_block(
fn field_block(
@@ -70,14 +83,7 @@ impl QueryFields for Query {
@@ -70,14 +83,7 @@ impl QueryFields for Query {
trail: &QueryTrail<'_, Block, Walked>,
trail: &QueryTrail<'_, Block, Walked>,
number: i32,
number: i32,
) -> FieldResult<Option<Block>> {
) -> FieldResult<Option<Block>> {
let db = executor.context().get_db();
exec_in_db_transaction!(block(executor, trail, number))
cfg_if::cfg_if! {
if #[cfg(not(test))] {
db.read(|r| queries::block::execute(&BcDbRoWithReader { db, r }, trail, number)).map_err(Into::into)
} else {
queries::block::execute(db, trail, number).map_err(Into::into)
}
}
}
}
#[inline]
#[inline]
fn field_blocks(
fn field_blocks(
@@ -92,32 +98,14 @@ impl QueryFields for Query {
@@ -92,32 +98,14 @@ impl QueryFields for Query {
if step <= 0 {
if step <= 0 {
step = 1;
step = 1;
}
}
let db = executor.context().get_db();
exec_in_db_transaction!(blocks(
cfg_if::cfg_if! {
executor,
if #[cfg(not(test))] {
trail,
db.read(|r| {
paging_opt,
queries::blocks::execute(
block_interval_opt,
&BcDbRoWithReader { db, r },
step as usize,
trail,
sort_order
paging_opt,
))
block_interval_opt,
step as usize,
sort_order,
)
})
.map_err(Into::into)
} else {
queries::blocks::execute(
db,
trail,
paging_opt,
block_interval_opt,
step as usize,
sort_order,
)
.map_err(Into::into)
}
}
}
}
#[inline]
#[inline]
fn field_current_ud(
fn field_current_ud(
@@ -125,14 +113,7 @@ impl QueryFields for Query {
@@ -125,14 +113,7 @@ impl QueryFields for Query {
executor: &Executor<'_, QueryContext>,
executor: &Executor<'_, QueryContext>,
trail: &QueryTrail<'_, CurrentUd, Walked>,
trail: &QueryTrail<'_, CurrentUd, Walked>,
) -> FieldResult<Option<CurrentUd>> {
) -> FieldResult<Option<CurrentUd>> {
let db = executor.context().get_db();
exec_in_db_transaction!(current_ud(executor, trail))
cfg_if::cfg_if! {
if #[cfg(not(test))] {
db.read(|r| queries::current_ud::execute(&BcDbRoWithReader { db, r }, trail)).map_err(Into::into)
} else {
queries::current_ud::execute(db, trail).map_err(Into::into)
}
}
}
}
}
}
Loading