added match logic and query error checking
This commit is contained in:
parent
e309b478f5
commit
5a8e1e6cf6
4 changed files with 315 additions and 70 deletions
46
README.md
46
README.md
|
|
@ -35,10 +35,18 @@ var data = Filter{
|
|||
}
|
||||
```
|
||||
|
||||
### Filter logic
|
||||
|
||||
Supported logical matching:
|
||||
|
||||
* AND - all of the queries have to match
|
||||
* OR - only one query has to match
|
||||
* NOT - none of the queries have to match
|
||||
|
||||
### Explicit match
|
||||
|
||||
```
|
||||
filter.NewQuery("Bool:true").Filter(&data)
|
||||
filter.NewQuery("Bool:true", filter.OR).Filter(&data)
|
||||
|
||||
data = [{str1 42 true {s1 {1}}} {str2 42 true {s2 {2}}}]
|
||||
```
|
||||
|
|
@ -46,7 +54,7 @@ data = [{str1 42 true {s1 {1}}} {str2 42 true {s2 {2}}}]
|
|||
### Wildcard match
|
||||
|
||||
```
|
||||
filter.NewQuery("String:s*").Filter(&data)
|
||||
filter.NewQuery("String:s*", filter.OR).Filter(&data)
|
||||
|
||||
data = [{str1 42 true {s1 {1}}} {str3 42 false {s3 {3}}}]
|
||||
```
|
||||
|
|
@ -54,7 +62,7 @@ data = [{str1 42 true {s1 {1}}} {str3 42 false {s3 {3}}}]
|
|||
### Nested struct match
|
||||
|
||||
```
|
||||
filter.NewQuery("Struct.Struct.Int:3").Filter(&data)
|
||||
filter.NewQuery("Struct.Struct.Int:3", filter.OR).Filter(&data)
|
||||
|
||||
data = [{str3 42 false {s3 {3}}}]
|
||||
```
|
||||
|
|
@ -62,7 +70,7 @@ data = [{str3 42 false {s3 {3}}}]
|
|||
### Multiple matches
|
||||
|
||||
```
|
||||
filter.NewQuery("Struct.String:*2 Bool:true").Filter(&data)
|
||||
filter.NewQuery("Struct.String:*2 Bool:true", filter.AND).Filter(&data)
|
||||
|
||||
data = [{2str 42 true {s2 {2}}}]
|
||||
```
|
||||
|
|
@ -71,16 +79,22 @@ data = [{2str 42 true {s2 {2}}}]
|
|||
|
||||
```
|
||||
go test -cpu 1,2,4 --bench .
|
||||
BenchmarkFilterSimple 2000000 899 ns/op 432 B/op 12 allocs/op
|
||||
BenchmarkFilterSimple-2 2000000 896 ns/op 432 B/op 12 allocs/op
|
||||
BenchmarkFilterSimple-4 1000000 1439 ns/op 432 B/op 12 allocs/op
|
||||
BenchmarkGenericFilterSimple 500000 2438 ns/op 1200 B/op 24 allocs/op
|
||||
BenchmarkGenericFilterSimple-2 500000 2406 ns/op 1200 B/op 24 allocs/op
|
||||
BenchmarkGenericFilterSimple-4 500000 2645 ns/op 1200 B/op 24 allocs/op
|
||||
BenchmarkFilterComplex 500000 2929 ns/op 672 B/op 42 allocs/op
|
||||
BenchmarkFilterComplex-2 500000 2918 ns/op 672 B/op 42 allocs/op
|
||||
BenchmarkFilterComplex-4 500000 5574 ns/op 672 B/op 42 allocs/op
|
||||
BenchmarkGenericFilterComplex 200000 7343 ns/op 1680 B/op 84 allocs/op
|
||||
BenchmarkGenericFilterComplex-2 200000 7400 ns/op 1680 B/op 84 allocs/op
|
||||
BenchmarkGenericFilterComplex-4 200000 11979 ns/op 1680 B/op 84 allocs/op
|
||||
BenchmarkFilterSimple 2000000 877 ns/op 432 B/op 12 allocs/op
|
||||
BenchmarkFilterSimple-2 2000000 865 ns/op 432 B/op 12 allocs/op
|
||||
BenchmarkFilterSimple-4 1000000 1713 ns/op 432 B/op 12 allocs/op
|
||||
BenchmarkFilterComplex 500000 3032 ns/op 672 B/op 48 allocs/op
|
||||
BenchmarkFilterComplex-2 500000 3100 ns/op 672 B/op 48 allocs/op
|
||||
BenchmarkFilterComplex-4 500000 6235 ns/op 672 B/op 48 allocs/op
|
||||
BenchmarkFilterComplexOr 500000 2649 ns/op 816 B/op 39 allocs/op
|
||||
BenchmarkFilterComplexOr-2 500000 2659 ns/op 816 B/op 39 allocs/op
|
||||
BenchmarkFilterComplexOr-4 500000 5548 ns/op 816 B/op 39 allocs/op
|
||||
BenchmarkGenericFilterSimple 500000 2340 ns/op 1200 B/op 24 allocs/op
|
||||
BenchmarkGenericFilterSimple-2 1000000 2307 ns/op 1200 B/op 24 allocs/op
|
||||
BenchmarkGenericFilterSimple-4 1000000 3615 ns/op 1200 B/op 24 allocs/op
|
||||
BenchmarkGenericFilterComplex 200000 7073 ns/op 1680 B/op 96 allocs/op
|
||||
BenchmarkGenericFilterComplex-2 200000 7598 ns/op 1680 B/op 96 allocs/op
|
||||
BenchmarkGenericFilterComplex-4 200000 10735 ns/op 1680 B/op 96 allocs/op
|
||||
BenchmarkGenericFilterComplexOr 200000 5406 ns/op 2456 B/op 61 allocs/op
|
||||
BenchmarkGenericFilterComplexOr-2 300000 5300 ns/op 2456 B/op 61 allocs/op
|
||||
BenchmarkGenericFilterComplexOr-4 200000 7707 ns/op 2456 B/op 61 allocs/op
|
||||
```
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue