Crate clickhouse_filters

Source
Expand description

ClickHouse Filters

This crate provides a powerful, type-safe, and flexible way to build ClickHouse SQL for pagination, sorting, and filtering. It’s designed to work with the ClickHouse database while maintaining API compatibility with the pg_filters crate.

§Examples

use clickhouse_filters::{ClickHouseFilters, PaginationOptions, FilteringOptions};
use clickhouse_filters::filtering::{FilterCondition, FilterExpression, FilterOperator};
use clickhouse_filters::sorting::SortedColumn;
use std::collections::HashMap;

// Define column types
let mut columns = HashMap::new();
columns.insert("name", ColumnDef::String("name"));
columns.insert("age", ColumnDef::UInt32("age"));

// Create filters
let filters = ClickHouseFilters::new(
    Some(PaginationOptions {
        current_page: 1,
        per_page: 10,
        per_page_limit: 10,
        total_records: 1000,
    }),
    vec![SortedColumn::new("name", "asc")],
    Some(FilteringOptions::new(
        vec![FilterExpression::Condition(FilterCondition::StringValue {
            column: "name".to_string(),
            operator: FilterOperator::Equal,
            value: Some("John".to_string()),
        })],
        columns.clone(),
    )),
    columns,
)?;

// Generate SQL
let sql = filters.sql()?;

Modules§

filtering
Filtering module for ClickHouse SQL queries
pagination
Pagination module for ClickHouse SQL queries
sorting
Sorting module for ClickHouse SQL queries

Structs§

ClickHouseFilters
Main struct for ClickHouse filtering, sorting, and pagination
FilteringOptions
Filtering options for ClickHouse queries
PaginationOptions
Pagination options for ClickHouse queries

Enums§

ColumnDef
ColumnDef enum represents different ClickHouse column types