General Search Parser
Search -> 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 Any Array
-> Str Null
Str -> DoubleQuote Content DoubleQuote
Array -> SquareBracketLeft (Str Comma)* SquareBracketRight
GroupStart -> (
GroupEnd -> )
And -> &
Or -> |
Not -> !
Equal -> =
EqualCI -> ~
Greater -> >
Less -> <
Wildcard -> *
Regex -> $
Any -> ?
Null -> -
Interpreter
Some example interpreters that maybe useful, need to be enabled by feature
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.
The types can be used in sqlx^0.5 binding directly.
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 with search targets in the order that "?"s appear in the clause. For details, please read the example. Additionally, MysqlType::StringLike(String) is the default type if you didn't insert types for one or some keys.
Very similar to Mysql except for some types.
The types can be used in sqlx^0.5 binding directly, except several types defined by sqlx itself, e.g. PgInterval
, PgMoney
, etc.
target
need to be in format of <u64>
. E.g. 1024
stands for bits 0000010000000000
Author: hakukano
Source: https://github.com/hakukano/flp-gsp
License: Apache-2.0, MIT licenses found