[][src]Trait toql_core::sql_mapper::FieldHandler

pub trait FieldHandler {
    fn build_filter(
        &self,
        sql: &str,
        _filter: &FieldFilter
    ) -> Result<Option<String>, SqlBuilderError>;
fn build_param(&self, _filter: &FieldFilter) -> Vec<String>; fn build_select(&self, sql: &str) -> Option<String> { ... }
fn build_join(&self) -> Option<String> { ... } }

A FieldHandler maps a Toql field onto an SQL. Use it to

  • define your own custom function (through FN)
  • map the standart filters differently
  • disallow standart filters
  • handle fields that do not exist in the struct
  • handle fields that match multiple columns (full text index)

Example (see full working example in tests)

This example is not tested
use toql::query::FieldFilter;
use toql::sql_mapper::FieldHandler;
use toql::sql_builder::SqlBuilderError;
struct MyHandler {};
 
impl FieldHandler for MyHandler {
    fn build_filter(&self, sql: &str, _filter: &FieldFilter) 
    ->Result<Option<String>, SqlBuilderError> {
       --snip--
    }
    fn build_param(&self, _filter: &FieldFilter) -> Vec<String> {
        --snip--
    }
}
let my_handler = MyHandler {};
let mapper = SqlMapper::new_with_handler(my_handler);

Required methods

fn build_filter(
    &self,
    sql: &str,
    _filter: &FieldFilter
) -> Result<Option<String>, SqlBuilderError>

Match filter and return SQL expression. Do not insert parameters in the SQL expression, use ? instead. If you miss some arguments, raise an error, typically SqlBuilderError::FilterInvalid

fn build_param(&self, _filter: &FieldFilter) -> Vec<String>

Return the parameters for your ?

Loading content...

Provided methods

fn build_select(&self, sql: &str) -> Option<String>

Return sql if you want to select it.

fn build_join(&self) -> Option<String>

Return addition SQL join clause for this field or None

Loading content...

Trait Implementations

impl Debug for dyn FieldHandler + Send + Sync + 'static[src]

Implementors

impl FieldHandler for BasicFieldHandler[src]

fn build_select(&self, sql: &str) -> Option<String>[src]

fn build_join(&self) -> Option<String>[src]

Loading content...