Copyright © 2009-2026 Arjan Scherpenisse
Authors: Arjan Scherpenisse (arjan@scherpenisse.net).
| build_query/2 | |
| expand_content_groups/2 | |
| expand_object_predicates/2 | |
| extract_value_op/2 | Extract the operator from the value. |
| filters_to_nested_terms/1 | Rewrite nested filter lists to anyof/allof queries. |
| parse_request_args/1 | |
| qterm/3 | |
| search/2 | Build a SQL search query from the filter arguments. |
| sql_safe/1 | |
| term_op_expr/4 |
build_query(Terms::list(), Context::z:context()) -> #search_sql_terms{terms = [#search_sql_term{} | #search_sql_nested{terms = [#search_sql_term{} | #search_sql_nested{terms = [#search_sql_term{} | #search_sql_nested{}], operator = binary()}], operator = binary()}], post_func = fun((#search_result{search_name = binary() | atom(), search_args = map() | proplists:proplist(), result = list(), page = pos_integer(), pagelen = pos_integer() | undefined, options = z_search:search_options(), total = non_neg_integer() | undefined, pages = non_neg_integer() | undefined, is_total_estimated = boolean(), next = pos_integer() | false, prev = pos_integer(), facets = #{binary() => map()} | undefined}, #search_sql{select = iodata(), from = iodata(), where = iodata(), order = iodata(), group_by = iodata(), limit = any(), tables = list(), args = list(), cats = list(), cats_exclude = list(), cats_exact = list(), run_func = function() | undefined, post_func = fun((#search_result{search_name = binary() | atom(), search_args = map() | proplists:proplist(), result = list(), page = pos_integer(), pagelen = pos_integer() | undefined, options = z_search:search_options(), total = non_neg_integer() | undefined, pages = non_neg_integer() | undefined, is_total_estimated = boolean(), next = pos_integer() | false, prev = pos_integer(), facets = #{binary() => map()} | undefined}, #search_sql{select = iodata(), from = iodata(), where = iodata(), order = iodata(), group_by = iodata(), limit = any(), tables = list(), args = list(), cats = list(), cats_exclude = list(), cats_exact = list(), run_func = function() | undefined, post_func = fun((#search_result{}, #search_sql{}, z:context()) -> #search_result{}) | undefined, extra = list(), assoc = boolean(), search_sql_terms = list() | undefined}, z:context()) -> #search_result{search_name = binary() | atom(), search_args = map() | proplists:proplist(), result = list(), page = pos_integer(), pagelen = pos_integer() | undefined, options = z_search:search_options(), total = non_neg_integer() | undefined, pages = non_neg_integer() | undefined, is_total_estimated = boolean(), next = pos_integer() | false, prev = pos_integer(), facets = #{binary() => map()} | undefined}) | undefined, extra = list(), assoc = boolean(), search_sql_terms = list() | undefined}, z:context()) -> #search_result{search_name = binary() | atom(), search_args = map() | proplists:proplist(), result = list(), page = pos_integer(), pagelen = pos_integer() | undefined, options = z_search:search_options(), total = non_neg_integer() | undefined, pages = non_neg_integer() | undefined, is_total_estimated = boolean(), next = pos_integer() | false, prev = pos_integer(), facets = #{binary() => map()} | undefined}) | undefined} | #search_result{search_name = binary() | atom(), search_args = map() | proplists:proplist(), result = list(), page = pos_integer(), pagelen = pos_integer() | undefined, options = z_search:search_options(), total = non_neg_integer() | undefined, pages = non_neg_integer() | undefined, is_total_estimated = boolean(), next = pos_integer() | false, prev = pos_integer(), facets = #{binary() => map()} | undefined}
expand_content_groups(ContentGroups, Context) -> {WithDefaultGroup, GroupsAndSubgroups}
ContentGroups = [m_rsc:resource()]Context = z:context()WithDefaultGroup = boolean()GroupsAndSubgroups = [m_rsc:resource_id()]
expand_object_predicates(Bin, Context) -> any()
extract_value_op(Value, DefaultOperator) -> {Operator, Value1}
Value = binary() | term()DefaultOperator = binary()Operator = binary()Value1 = term()
Extract the operator from the value.
filters_to_nested_terms(Filters) -> any()
Rewrite nested filter lists to anyof/allof queries.
parse_request_args(Args::[{binary(), term()}]) -> [{binary(), term()}]
qterm(Term, IsNested, Context) -> QueryTerms
Term = list() | map()IsNested = boolean()Context = z:context()QueryTerms = list() | #search_sql_term{} | #search_sql_nested{terms = [#search_sql_term{} | #search_sql_nested{terms = [#search_sql_term{} | #search_sql_nested{}], operator = binary()}], operator = binary()}
search(Query, Context) -> SqlTerms | EmptyResult
Query = map() | proplists:proplist()Context = z:context()SqlTerms = #search_sql_terms{terms = [#search_sql_term{} | #search_sql_nested{terms = [#search_sql_term{} | #search_sql_nested{terms = [#search_sql_term{} | #search_sql_nested{}], operator = binary()}], operator = binary()}], post_func = fun((#search_result{search_name = binary() | atom(), search_args = map() | proplists:proplist(), result = list(), page = pos_integer(), pagelen = pos_integer() | undefined, options = z_search:search_options(), total = non_neg_integer() | undefined, pages = non_neg_integer() | undefined, is_total_estimated = boolean(), next = pos_integer() | false, prev = pos_integer(), facets = #{binary() => map()} | undefined}, #search_sql{select = iodata(), from = iodata(), where = iodata(), order = iodata(), group_by = iodata(), limit = any(), tables = list(), args = list(), cats = list(), cats_exclude = list(), cats_exact = list(), run_func = function() | undefined, post_func = fun((#search_result{search_name = binary() | atom(), search_args = map() | proplists:proplist(), result = list(), page = pos_integer(), pagelen = pos_integer() | undefined, options = z_search:search_options(), total = non_neg_integer() | undefined, pages = non_neg_integer() | undefined, is_total_estimated = boolean(), next = pos_integer() | false, prev = pos_integer(), facets = #{binary() => map()} | undefined}, #search_sql{select = iodata(), from = iodata(), where = iodata(), order = iodata(), group_by = iodata(), limit = any(), tables = list(), args = list(), cats = list(), cats_exclude = list(), cats_exact = list(), run_func = function() | undefined, post_func = fun((#search_result{}, #search_sql{}, z:context()) -> #search_result{}) | undefined, extra = list(), assoc = boolean(), search_sql_terms = list() | undefined}, z:context()) -> #search_result{search_name = binary() | atom(), search_args = map() | proplists:proplist(), result = list(), page = pos_integer(), pagelen = pos_integer() | undefined, options = z_search:search_options(), total = non_neg_integer() | undefined, pages = non_neg_integer() | undefined, is_total_estimated = boolean(), next = pos_integer() | false, prev = pos_integer(), facets = #{binary() => map()} | undefined}) | undefined, extra = list(), assoc = boolean(), search_sql_terms = list() | undefined}, z:context()) -> #search_result{search_name = binary() | atom(), search_args = map() | proplists:proplist(), result = list(), page = pos_integer(), pagelen = pos_integer() | undefined, options = z_search:search_options(), total = non_neg_integer() | undefined, pages = non_neg_integer() | undefined, is_total_estimated = boolean(), next = pos_integer() | false, prev = pos_integer(), facets = #{binary() => map()} | undefined}) | undefined}EmptyResult = #search_result{search_name = binary() | atom(), search_args = map() | proplists:proplist(), result = list(), page = pos_integer(), pagelen = pos_integer() | undefined, options = z_search:search_options(), total = non_neg_integer() | undefined, pages = non_neg_integer() | undefined, is_total_estimated = boolean(), next = pos_integer() | false, prev = pos_integer(), facets = #{binary() => map()} | undefined}
Build a SQL search query from the filter arguments. The query can be a map or list of terms.
sql_safe(String) -> any()
term_op_expr(Ref, Op, Value, Type) -> list()
Ref = iodata()Op = binary()Value = iodata() | atom()Type = text | number
Generated by EDoc