FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
dgraph/worker/stringfilter.go at master · NormalFish/dgraph · GitHub
NormalFish
/
dgraph
Public
forked from
dgraph-io/dgraph
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
dgraph
/
worker
/
stringfilter.go
Copy path
More file actions
More file actions
Latest commit
History
History
History
110 lines (96 loc) · 2.69 KB
Breadcrumbs
dgraph
/
worker
/
stringfilter.go
Copy path
File metadata and controls
110 lines (96 loc) · 2.69 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
* Copyright 2017-2018 Dgraph Labs, Inc. and Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
worker
import
(
"strings"
"github.com/dgraph-io/dgraph/tok"
"github.com/dgraph-io/dgraph/types"
"github.com/dgraph-io/dgraph/x"
"github.com/golang/glog"
)
type
matchFunc
func
(types.
Val
,
*
stringFilter
)
bool
type
stringFilter
struct
{
funcName
string
funcType
FuncType
lang
string
tokens
[]
string
match
matchFunc
ineqValue
types.
Val
eqVals
[]types.
Val
tokName
string
}
func
matchStrings
(
filter
*
stringFilter
,
values
[]types.
Val
)
bool
{
if
len
(
values
)
==
0
{
return
false
}
if
filter
==
nil
{
// Handle a nil filter as filtering all the elements out.
return
true
}
for
i
:=
0
;
i
<
len
(
values
);
i
++
{
if
filter
.
match
(
values
[
i
],
filter
) {
return
true
}
}
return
false
}
func
defaultMatch
(
value
types.
Val
,
filter
*
stringFilter
)
bool
{
tokenMap
:=
map
[
string
]
bool
{}
for
_
,
t
:=
range
filter
.
tokens
{
tokenMap
[
t
]
=
false
}
tokens
:=
tokenizeValue
(
value
,
filter
)
cnt
:=
0
for
_
,
token
:=
range
tokens
{
previous
,
ok
:=
tokenMap
[
token
]
if
ok
{
tokenMap
[
token
]
=
true
if
!
previous
{
// count only once
cnt
++
}
}
}
all
:=
strings
.
HasPrefix
(
filter
.
funcName
,
"allof"
)
// anyofterms or anyoftext
if
all
{
return
cnt
==
len
(
filter
.
tokens
)
}
return
cnt
>
0
}
func
ineqMatch
(
value
types.
Val
,
filter
*
stringFilter
)
bool
{
if
filter
.
funcName
==
eq
{
for
_
,
v
:=
range
filter
.
eqVals
{
if
types
.
CompareVals
(
filter
.
funcName
,
value
,
v
) {
return
true
}
}
return
false
}
else
if
filter
.
funcName
==
between
{
return
types
.
CompareVals
(
"ge"
,
value
,
filter
.
eqVals
[
0
])
&&
types
.
CompareVals
(
"le"
,
value
,
filter
.
eqVals
[
1
])
}
return
types
.
CompareVals
(
filter
.
funcName
,
value
,
filter
.
eqVals
[
0
])
}
func
tokenizeValue
(
value
types.
Val
,
filter
*
stringFilter
) []
string
{
tokenizer
,
found
:=
tok
.
GetTokenizer
(
filter
.
tokName
)
// tokenizer was used in previous stages of query processing, it has to be available
x
.
AssertTrue
(
found
)
tokens
,
err
:=
tok
.
BuildTokens
(
value
.
Value
,
tok
.
GetTokenizerForLang
(
tokenizer
,
filter
.
lang
))
if
err
!=
nil
{
glog
.
Errorf
(
"Error while building tokens: %s"
,
err
)
return
[]
string
{}
}
return
tokens
}
Back
|
FazBrowse Home
|
New Git URL