General Search Parser
``` Search -> Statements
Statements -> -> Statements Relation
Relation -> GroupStart Comparison GroupEnd -> GroupStart Relation And Relation GroupEnd -> GroupStart Relation And Comparison GroupEnd -> GroupStart Comparison And Relation GroupEnd -> GroupStart Comparison And Comparison GroupEnd -> GroupStart Relation Or Relation GroupEnd -> GroupStart Relation Or Comparison GroupEnd -> GroupStart Comparison Or Relation GroupEnd -> GroupStart Comparison Or Comparison GroupEnd -> GroupStart Not Relation GroupEnd -> GroupStart Not Comparison GroupEnd
Comparison -> Str Equal Str -> Str EqualCI Str -> Str Greater Str -> Str Less Str -> Str Wildcard Str -> Str Regex Str
Str -> `[^`]*`
GroupStart -> (
GroupEnd -> )
And -> &
Or -> |
Not -> !
Equal -> =
EqualCI -> ~
Greater -> >
Less -> <
Wildcard -> *
Regex -> $
```
Some example interpreters that maybe useful
Customizable in-code evaluating interpreter. Goto the file.
An example could be found here.
To evaluate a Search
, you will need EvaluateRules
and EvaluatePairs
.
EvaluateRules
: You can overwrite any default rules for comparison. Usually, you may want to overwrite is_greater_than
and is_less_than
if the key has a numeric value. Rules should be reused as often as possible in order to reduce redundant codes.
EvaluatePairs
: Actual key-value pairs for the evaluation. You need to parse your values into strings so that rules can be applied.
Generating Mysql condition clause. Goto the file.
An example could be found here.
To generate Mysql condition clause from a Search
, you will need MysqlRenames
and MysqlTypes
.
MysqlRenames
: You can insert any rename rules to it. E.g. key sex
in search string may need to be renamed to table_a.gender
regarding the actual query string. All keys without rename rules will stay as is.
MysqlTypes
: You can insert any types to it. You need this because the condition clause is a prepare clause (i.e. all values are replaced as placeholder(?)) and you will be given a Vec