FLP-GSP
General Search Parser
General Search String (GSS) Builder
General Search String (GSS) LALR(1) Grammar
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 In Array
-> Str IsNone
Str -> `[^`]*`
Array -> \[[^\[,]*\w*(,[^\[,]*)*\]
GroupStart -> (
GroupEnd -> )
And -> &
Or -> |
Not -> !
Equal -> =
EqualCI -> ~
Greater -> >
Less -> <
Wildcard -> *
Regex -> $
In -> ?
IsNone -> -
Interpreter
Some example interpreters that maybe useful
Evaluate
Customizable in-code evaluating interpreter. Goto the file.
An example could be found here.
Concept
To evaluate a Search
, you will need EvaluateRules
and EvaluatePairs
.
-
EvaluateRules
: You can overwrite any default rules for comparison. Usually, you may want to overwriteis_greater_than
andis_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.
Mysql
Generating Mysql condition clause. Goto the file.
An example could be found here.
Concept
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. keysex
in search string may need to be renamed totable_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.
Postgres
Very similar to Mysql except for some types.