LibEctoV2.QueryBuilder (lib_ecto v0.4.0)
View Source查询构建器模块,提供构建和管理数据库查询条件的功能。
此模块专注于将用户提供的过滤参数转换为 Ecto 查询条件。
Summary
Functions
@spec apply_query_options( Ecto.Query.t(), keyword() | nil, non_neg_integer() | nil, non_neg_integer() | nil ) :: Ecto.Query.t()
应用排序、限制和偏移到查询。
参数
query: Ecto 查询sort_by: 排序选项limit: 限制返回记录数offset: 跳过前 N 条记录
返回值
- 包含排序、限制和偏移的 Ecto 查询
示例
iex> query = from(u in User)
iex> LibEctoV2.QueryBuilder.apply_query_options(query, [desc: :inserted_at], 10, 0)
#Ecto.Query<...>
@spec build_condition(any(), map(), list(), function(), boolean()) :: {:ok, any()} | {:error, any()}
根据提供的参数和过滤器构建查询条件。
参数
init: 初始查询条件params: 包含过滤参数的映射filters: 过滤器列表filter_fn: 用于应用过滤器的函数check_empty?: 是否检查空条件,默认为true
返回值
{:ok, dynamic}: 成功构建的查询条件{:error, reason}: 发生错误时的错误原因
示例
iex> init = true
iex> params = %{"name" => "test"}
iex> filters = [:name, :age]
iex> filter_fn = &MyModule.filter/3
iex> LibEctoV2.QueryBuilder.build_condition(init, params, filters, filter_fn)
{:ok, dynamic_expr}
@spec calculate_offset(non_neg_integer(), non_neg_integer()) :: non_neg_integer()
计算分页查询的偏移量。
参数
page: 页码(从1开始)page_size: 每页记录数
返回值
- 偏移量
示例
iex> LibEctoV2.QueryBuilder.calculate_offset(2, 10)
10
@spec check_result({:ok, any()} | {:error, any()}, any(), boolean()) :: {:ok, any()} | {:error, any()}
检查查询条件构建的结果,并处理空条件的情况。
参数
result: 构建查询条件的结果init: 初始查询条件check_empty?: 是否检查空条件
返回值
{:ok, dynamic}: 有效的查询条件{:error, reason}: 错误原因