Support json contains for json field (#24720)

Signed-off-by: cai.zhang <cai.zhang@zilliz.com>
pull/24795/head
cai.zhang 2023-06-09 16:10:36 +08:00 committed by GitHub
parent 2bcd1bb0d8
commit 853b7d0054
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 837 additions and 399 deletions

View File

@ -17,6 +17,7 @@ expr:
| expr op = (SHL | SHR) expr # Shift
| expr op = (IN | NIN) ('[' expr (',' expr)* ','? ']') # Term
| expr op = (IN | NIN) EmptyTerm # EmptyTerm
| JSONContains'('expr',' expr')' # JSONContains
| expr op1 = (LT | LE) (Identifier | JSONIdentifier) op2 = (LT | LE) expr # Range
| expr op1 = (GT | GE) (Identifier | JSONIdentifier) op2 = (GT | GE) expr # ReverseRange
| expr op = (LT | LE | GT | GE) expr # Relational
@ -70,6 +71,8 @@ IN: 'in';
NIN: 'not in';
EmptyTerm: '[' (Whitespace | Newline)* ']';
JSONContains: 'json_contains';
BooleanConstant: 'true' | 'True' | 'TRUE' | 'false' | 'False' | 'FALSE';
IntegerConstant:

View File

@ -31,6 +31,7 @@ null
'in'
'not in'
null
'json_contains'
null
null
null
@ -73,6 +74,7 @@ NOT
IN
NIN
EmptyTerm
JSONContains
BooleanConstant
IntegerConstant
FloatingConstant
@ -87,4 +89,4 @@ expr
atn:
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 41, 92, 4, 2, 9, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 20, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 74, 10, 2, 12, 2, 14, 2, 77, 11, 2, 3, 2, 5, 2, 80, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 87, 10, 2, 12, 2, 14, 2, 90, 11, 2, 3, 2, 2, 3, 2, 3, 2, 2, 12, 4, 2, 16, 17, 29, 30, 3, 2, 18, 20, 3, 2, 16, 17, 3, 2, 22, 23, 3, 2, 8, 9, 4, 2, 37, 37, 39, 39, 3, 2, 10, 11, 3, 2, 8, 11, 3, 2, 12, 13, 3, 2, 31, 32, 2, 116, 2, 19, 3, 2, 2, 2, 4, 5, 8, 2, 1, 2, 5, 20, 7, 35, 2, 2, 6, 20, 7, 36, 2, 2, 7, 20, 7, 34, 2, 2, 8, 20, 7, 38, 2, 2, 9, 20, 7, 37, 2, 2, 10, 20, 7, 39, 2, 2, 11, 12, 7, 3, 2, 2, 12, 13, 5, 2, 2, 2, 13, 14, 7, 4, 2, 2, 14, 20, 3, 2, 2, 2, 15, 16, 9, 2, 2, 2, 16, 20, 5, 2, 2, 18, 17, 18, 7, 15, 2, 2, 18, 20, 5, 2, 2, 3, 19, 4, 3, 2, 2, 2, 19, 6, 3, 2, 2, 2, 19, 7, 3, 2, 2, 2, 19, 8, 3, 2, 2, 2, 19, 9, 3, 2, 2, 2, 19, 10, 3, 2, 2, 2, 19, 11, 3, 2, 2, 2, 19, 15, 3, 2, 2, 2, 19, 17, 3, 2, 2, 2, 20, 88, 3, 2, 2, 2, 21, 22, 12, 19, 2, 2, 22, 23, 7, 21, 2, 2, 23, 87, 5, 2, 2, 20, 24, 25, 12, 17, 2, 2, 25, 26, 9, 3, 2, 2, 26, 87, 5, 2, 2, 18, 27, 28, 12, 16, 2, 2, 28, 29, 9, 4, 2, 2, 29, 87, 5, 2, 2, 17, 30, 31, 12, 15, 2, 2, 31, 32, 9, 5, 2, 2, 32, 87, 5, 2, 2, 16, 33, 34, 12, 12, 2, 2, 34, 35, 9, 6, 2, 2, 35, 36, 9, 7, 2, 2, 36, 37, 9, 6, 2, 2, 37, 87, 5, 2, 2, 13, 38, 39, 12, 11, 2, 2, 39, 40, 9, 8, 2, 2, 40, 41, 9, 7, 2, 2, 41, 42, 9, 8, 2, 2, 42, 87, 5, 2, 2, 12, 43, 44, 12, 10, 2, 2, 44, 45, 9, 9, 2, 2, 45, 87, 5, 2, 2, 11, 46, 47, 12, 9, 2, 2, 47, 48, 9, 10, 2, 2, 48, 87, 5, 2, 2, 10, 49, 50, 12, 8, 2, 2, 50, 51, 7, 24, 2, 2, 51, 87, 5, 2, 2, 9, 52, 53, 12, 7, 2, 2, 53, 54, 7, 26, 2, 2, 54, 87, 5, 2, 2, 8, 55, 56, 12, 6, 2, 2, 56, 57, 7, 25, 2, 2, 57, 87, 5, 2, 2, 7, 58, 59, 12, 5, 2, 2, 59, 60, 7, 27, 2, 2, 60, 87, 5, 2, 2, 6, 61, 62, 12, 4, 2, 2, 62, 63, 7, 28, 2, 2, 63, 87, 5, 2, 2, 5, 64, 65, 12, 20, 2, 2, 65, 66, 7, 14, 2, 2, 66, 87, 7, 38, 2, 2, 67, 68, 12, 14, 2, 2, 68, 69, 9, 11, 2, 2, 69, 70, 7, 5, 2, 2, 70, 75, 5, 2, 2, 2, 71, 72, 7, 6, 2, 2, 72, 74, 5, 2, 2, 2, 73, 71, 3, 2, 2, 2, 74, 77, 3, 2, 2, 2, 75, 73, 3, 2, 2, 2, 75, 76, 3, 2, 2, 2, 76, 79, 3, 2, 2, 2, 77, 75, 3, 2, 2, 2, 78, 80, 7, 6, 2, 2, 79, 78, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2, 80, 81, 3, 2, 2, 2, 81, 82, 7, 7, 2, 2, 82, 87, 3, 2, 2, 2, 83, 84, 12, 13, 2, 2, 84, 85, 9, 11, 2, 2, 85, 87, 7, 33, 2, 2, 86, 21, 3, 2, 2, 2, 86, 24, 3, 2, 2, 2, 86, 27, 3, 2, 2, 2, 86, 30, 3, 2, 2, 2, 86, 33, 3, 2, 2, 2, 86, 38, 3, 2, 2, 2, 86, 43, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86, 49, 3, 2, 2, 2, 86, 52, 3, 2, 2, 2, 86, 55, 3, 2, 2, 2, 86, 58, 3, 2, 2, 2, 86, 61, 3, 2, 2, 2, 86, 64, 3, 2, 2, 2, 86, 67, 3, 2, 2, 2, 86, 83, 3, 2, 2, 2, 87, 90, 3, 2, 2, 2, 88, 86, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 3, 3, 2, 2, 2, 90, 88, 3, 2, 2, 2, 7, 19, 75, 79, 86, 88]
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 42, 99, 4, 2, 9, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 27, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 81, 10, 2, 12, 2, 14, 2, 84, 11, 2, 3, 2, 5, 2, 87, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 94, 10, 2, 12, 2, 14, 2, 97, 11, 2, 3, 2, 2, 3, 2, 3, 2, 2, 12, 4, 2, 16, 17, 29, 30, 3, 2, 18, 20, 3, 2, 16, 17, 3, 2, 22, 23, 3, 2, 8, 9, 4, 2, 38, 38, 40, 40, 3, 2, 10, 11, 3, 2, 8, 11, 3, 2, 12, 13, 3, 2, 31, 32, 2, 124, 2, 26, 3, 2, 2, 2, 4, 5, 8, 2, 1, 2, 5, 27, 7, 36, 2, 2, 6, 27, 7, 37, 2, 2, 7, 27, 7, 35, 2, 2, 8, 27, 7, 39, 2, 2, 9, 27, 7, 38, 2, 2, 10, 27, 7, 40, 2, 2, 11, 12, 7, 3, 2, 2, 12, 13, 5, 2, 2, 2, 13, 14, 7, 4, 2, 2, 14, 27, 3, 2, 2, 2, 15, 16, 9, 2, 2, 2, 16, 27, 5, 2, 2, 19, 17, 18, 7, 34, 2, 2, 18, 19, 7, 3, 2, 2, 19, 20, 5, 2, 2, 2, 20, 21, 7, 6, 2, 2, 21, 22, 5, 2, 2, 2, 22, 23, 7, 4, 2, 2, 23, 27, 3, 2, 2, 2, 24, 25, 7, 15, 2, 2, 25, 27, 5, 2, 2, 3, 26, 4, 3, 2, 2, 2, 26, 6, 3, 2, 2, 2, 26, 7, 3, 2, 2, 2, 26, 8, 3, 2, 2, 2, 26, 9, 3, 2, 2, 2, 26, 10, 3, 2, 2, 2, 26, 11, 3, 2, 2, 2, 26, 15, 3, 2, 2, 2, 26, 17, 3, 2, 2, 2, 26, 24, 3, 2, 2, 2, 27, 95, 3, 2, 2, 2, 28, 29, 12, 20, 2, 2, 29, 30, 7, 21, 2, 2, 30, 94, 5, 2, 2, 21, 31, 32, 12, 18, 2, 2, 32, 33, 9, 3, 2, 2, 33, 94, 5, 2, 2, 19, 34, 35, 12, 17, 2, 2, 35, 36, 9, 4, 2, 2, 36, 94, 5, 2, 2, 18, 37, 38, 12, 16, 2, 2, 38, 39, 9, 5, 2, 2, 39, 94, 5, 2, 2, 17, 40, 41, 12, 12, 2, 2, 41, 42, 9, 6, 2, 2, 42, 43, 9, 7, 2, 2, 43, 44, 9, 6, 2, 2, 44, 94, 5, 2, 2, 13, 45, 46, 12, 11, 2, 2, 46, 47, 9, 8, 2, 2, 47, 48, 9, 7, 2, 2, 48, 49, 9, 8, 2, 2, 49, 94, 5, 2, 2, 12, 50, 51, 12, 10, 2, 2, 51, 52, 9, 9, 2, 2, 52, 94, 5, 2, 2, 11, 53, 54, 12, 9, 2, 2, 54, 55, 9, 10, 2, 2, 55, 94, 5, 2, 2, 10, 56, 57, 12, 8, 2, 2, 57, 58, 7, 24, 2, 2, 58, 94, 5, 2, 2, 9, 59, 60, 12, 7, 2, 2, 60, 61, 7, 26, 2, 2, 61, 94, 5, 2, 2, 8, 62, 63, 12, 6, 2, 2, 63, 64, 7, 25, 2, 2, 64, 94, 5, 2, 2, 7, 65, 66, 12, 5, 2, 2, 66, 67, 7, 27, 2, 2, 67, 94, 5, 2, 2, 6, 68, 69, 12, 4, 2, 2, 69, 70, 7, 28, 2, 2, 70, 94, 5, 2, 2, 5, 71, 72, 12, 21, 2, 2, 72, 73, 7, 14, 2, 2, 73, 94, 7, 39, 2, 2, 74, 75, 12, 15, 2, 2, 75, 76, 9, 11, 2, 2, 76, 77, 7, 5, 2, 2, 77, 82, 5, 2, 2, 2, 78, 79, 7, 6, 2, 2, 79, 81, 5, 2, 2, 2, 80, 78, 3, 2, 2, 2, 81, 84, 3, 2, 2, 2, 82, 80, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 86, 3, 2, 2, 2, 84, 82, 3, 2, 2, 2, 85, 87, 7, 6, 2, 2, 86, 85, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 88, 3, 2, 2, 2, 88, 89, 7, 7, 2, 2, 89, 94, 3, 2, 2, 2, 90, 91, 12, 14, 2, 2, 91, 92, 9, 11, 2, 2, 92, 94, 7, 33, 2, 2, 93, 28, 3, 2, 2, 2, 93, 31, 3, 2, 2, 2, 93, 34, 3, 2, 2, 2, 93, 37, 3, 2, 2, 2, 93, 40, 3, 2, 2, 2, 93, 45, 3, 2, 2, 2, 93, 50, 3, 2, 2, 2, 93, 53, 3, 2, 2, 2, 93, 56, 3, 2, 2, 2, 93, 59, 3, 2, 2, 2, 93, 62, 3, 2, 2, 2, 93, 65, 3, 2, 2, 2, 93, 68, 3, 2, 2, 2, 93, 71, 3, 2, 2, 2, 93, 74, 3, 2, 2, 2, 93, 90, 3, 2, 2, 2, 94, 97, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 3, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 7, 26, 82, 86, 93, 95]

View File

@ -29,14 +29,15 @@ NOT=28
IN=29
NIN=30
EmptyTerm=31
BooleanConstant=32
IntegerConstant=33
FloatingConstant=34
Identifier=35
StringLiteral=36
JSONIdentifier=37
Whitespace=38
Newline=39
JSONContains=32
BooleanConstant=33
IntegerConstant=34
FloatingConstant=35
Identifier=36
StringLiteral=37
JSONIdentifier=38
Whitespace=39
Newline=40
'('=1
')'=2
'['=3
@ -62,3 +63,4 @@ Newline=39
'~'=27
'in'=29
'not in'=30
'json_contains'=32

File diff suppressed because one or more lines are too long

View File

@ -29,14 +29,15 @@ NOT=28
IN=29
NIN=30
EmptyTerm=31
BooleanConstant=32
IntegerConstant=33
FloatingConstant=34
Identifier=35
StringLiteral=36
JSONIdentifier=37
Whitespace=38
Newline=39
JSONContains=32
BooleanConstant=33
IntegerConstant=34
FloatingConstant=35
Identifier=36
StringLiteral=37
JSONIdentifier=38
Whitespace=39
Newline=40
'('=1
')'=2
'['=3
@ -62,3 +63,4 @@ Newline=39
'~'=27
'in'=29
'not in'=30
'json_contains'=32

View File

@ -75,6 +75,10 @@ func (v *BasePlanVisitor) VisitTerm(ctx *TermContext) interface{} {
return v.VisitChildren(ctx)
}
func (v *BasePlanVisitor) VisitJSONContains(ctx *JSONContainsContext) interface{} {
return v.VisitChildren(ctx)
}
func (v *BasePlanVisitor) VisitRange(ctx *RangeContext) interface{} {
return v.VisitChildren(ctx)
}

View File

@ -14,7 +14,7 @@ var _ = fmt.Printf
var _ = unicode.IsLetter
var serializedLexerAtn = []uint16{
3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 41, 508,
3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 42, 524,
8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7,
9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12,
4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4,
@ -27,229 +27,236 @@ var serializedLexerAtn = []uint16{
49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54,
4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4,
60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65,
9, 65, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7,
3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11,
3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3,
13, 3, 13, 5, 13, 166, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14,
3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 180, 10, 14, 3, 15, 3,
15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20,
3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3,
24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 212, 10, 26,
3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 218, 10, 27, 3, 28, 3, 28, 3, 29, 3,
29, 3, 29, 3, 29, 5, 29, 226, 10, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31,
3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 7, 32, 241, 10,
32, 12, 32, 14, 32, 244, 11, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3,
33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33,
9, 65, 4, 66, 9, 66, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3,
6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10,
3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3,
13, 3, 13, 3, 13, 3, 13, 5, 13, 168, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14,
3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 182, 10,
14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19,
3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3,
23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26,
214, 10, 26, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 220, 10, 27, 3, 28, 3,
28, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 228, 10, 29, 3, 30, 3, 30, 3, 30,
3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 7,
32, 243, 10, 32, 12, 32, 14, 32, 246, 11, 32, 3, 32, 3, 32, 3, 33, 3, 33,
3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3,
33, 3, 33, 3, 33, 5, 33, 275, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34,
281, 10, 34, 3, 35, 3, 35, 5, 35, 285, 10, 35, 3, 36, 3, 36, 3, 36, 7,
36, 290, 10, 36, 12, 36, 14, 36, 293, 11, 36, 3, 36, 3, 36, 3, 36, 3, 36,
3, 36, 5, 36, 300, 10, 36, 3, 37, 5, 37, 303, 10, 37, 3, 37, 3, 37, 5,
37, 307, 10, 37, 3, 37, 3, 37, 3, 37, 5, 37, 312, 10, 37, 3, 37, 5, 37,
315, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 321, 10, 38, 3, 38, 3,
38, 6, 38, 325, 10, 38, 13, 38, 14, 38, 326, 3, 39, 3, 39, 3, 39, 5, 39,
332, 10, 39, 3, 40, 6, 40, 335, 10, 40, 13, 40, 14, 40, 336, 3, 41, 6,
41, 340, 10, 41, 13, 41, 14, 41, 341, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42,
3, 42, 3, 42, 5, 42, 351, 10, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3,
43, 3, 43, 5, 43, 360, 10, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46,
3, 46, 6, 46, 369, 10, 46, 13, 46, 14, 46, 370, 3, 47, 3, 47, 7, 47, 375,
10, 47, 12, 47, 14, 47, 378, 11, 47, 3, 47, 5, 47, 381, 10, 47, 3, 48,
3, 48, 7, 48, 385, 10, 48, 12, 48, 14, 48, 388, 11, 48, 3, 49, 3, 49, 3,
49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53,
3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3,
54, 3, 54, 5, 54, 415, 10, 54, 3, 55, 3, 55, 5, 55, 419, 10, 55, 3, 55,
3, 55, 3, 55, 5, 55, 424, 10, 55, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 430,
10, 56, 3, 56, 3, 56, 3, 57, 5, 57, 435, 10, 57, 3, 57, 3, 57, 3, 57, 3,
57, 3, 57, 5, 57, 442, 10, 57, 3, 58, 3, 58, 5, 58, 446, 10, 58, 3, 58,
3, 58, 3, 59, 6, 59, 451, 10, 59, 13, 59, 14, 59, 452, 3, 60, 5, 60, 456,
10, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 463, 10, 60, 3, 61, 6,
61, 466, 10, 61, 13, 61, 14, 61, 467, 3, 62, 3, 62, 5, 62, 472, 10, 62,
3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 5, 63, 481, 10, 63, 3,
63, 5, 63, 484, 10, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 5, 63, 491,
10, 63, 3, 64, 6, 64, 494, 10, 64, 13, 64, 14, 64, 495, 3, 64, 3, 64, 3,
65, 3, 65, 5, 65, 502, 10, 65, 3, 65, 5, 65, 505, 10, 65, 3, 65, 3, 65,
2, 2, 66, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11,
21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20,
39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29,
57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38,
75, 39, 77, 2, 79, 2, 81, 2, 83, 2, 85, 2, 87, 2, 89, 2, 91, 2, 93, 2,
95, 2, 97, 2, 99, 2, 101, 2, 103, 2, 105, 2, 107, 2, 109, 2, 111, 2, 113,
2, 115, 2, 117, 2, 119, 2, 121, 2, 123, 2, 125, 2, 127, 40, 129, 41, 3,
2, 18, 5, 2, 78, 78, 87, 87, 119, 119, 6, 2, 12, 12, 15, 15, 36, 36, 94,
94, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 5, 2, 67, 92, 97, 97, 99, 124,
3, 2, 50, 59, 4, 2, 68, 68, 100, 100, 3, 2, 50, 51, 4, 2, 90, 90, 122,
122, 3, 2, 51, 59, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71,
71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 82, 82, 114, 114, 12, 2, 36,
36, 41, 41, 65, 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118,
118, 120, 120, 4, 2, 11, 11, 34, 34, 2, 540, 2, 3, 3, 2, 2, 2, 2, 5, 3,
2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13,
3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2,
21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2,
2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2,
2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2,
2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3,
2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59,
3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2,
67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2,
2, 75, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 3, 131, 3, 2,
2, 2, 5, 133, 3, 2, 2, 2, 7, 135, 3, 2, 2, 2, 9, 137, 3, 2, 2, 2, 11, 139,
3, 2, 2, 2, 13, 141, 3, 2, 2, 2, 15, 143, 3, 2, 2, 2, 17, 146, 3, 2, 2,
2, 19, 148, 3, 2, 2, 2, 21, 151, 3, 2, 2, 2, 23, 154, 3, 2, 2, 2, 25, 165,
3, 2, 2, 2, 27, 179, 3, 2, 2, 2, 29, 181, 3, 2, 2, 2, 31, 183, 3, 2, 2,
2, 33, 185, 3, 2, 2, 2, 35, 187, 3, 2, 2, 2, 37, 189, 3, 2, 2, 2, 39, 191,
3, 2, 2, 2, 41, 194, 3, 2, 2, 2, 43, 197, 3, 2, 2, 2, 45, 200, 3, 2, 2,
2, 47, 202, 3, 2, 2, 2, 49, 204, 3, 2, 2, 2, 51, 211, 3, 2, 2, 2, 53, 217,
3, 2, 2, 2, 55, 219, 3, 2, 2, 2, 57, 225, 3, 2, 2, 2, 59, 227, 3, 2, 2,
2, 61, 230, 3, 2, 2, 2, 63, 237, 3, 2, 2, 2, 65, 274, 3, 2, 2, 2, 67, 280,
3, 2, 2, 2, 69, 284, 3, 2, 2, 2, 71, 299, 3, 2, 2, 2, 73, 302, 3, 2, 2,
2, 75, 316, 3, 2, 2, 2, 77, 331, 3, 2, 2, 2, 79, 334, 3, 2, 2, 2, 81, 339,
3, 2, 2, 2, 83, 350, 3, 2, 2, 2, 85, 359, 3, 2, 2, 2, 87, 361, 3, 2, 2,
2, 89, 363, 3, 2, 2, 2, 91, 365, 3, 2, 2, 2, 93, 380, 3, 2, 2, 2, 95, 382,
3, 2, 2, 2, 97, 389, 3, 2, 2, 2, 99, 393, 3, 2, 2, 2, 101, 395, 3, 2, 2,
2, 103, 397, 3, 2, 2, 2, 105, 399, 3, 2, 2, 2, 107, 414, 3, 2, 2, 2, 109,
423, 3, 2, 2, 2, 111, 425, 3, 2, 2, 2, 113, 441, 3, 2, 2, 2, 115, 443,
3, 2, 2, 2, 117, 450, 3, 2, 2, 2, 119, 462, 3, 2, 2, 2, 121, 465, 3, 2,
2, 2, 123, 469, 3, 2, 2, 2, 125, 490, 3, 2, 2, 2, 127, 493, 3, 2, 2, 2,
129, 504, 3, 2, 2, 2, 131, 132, 7, 42, 2, 2, 132, 4, 3, 2, 2, 2, 133, 134,
7, 43, 2, 2, 134, 6, 3, 2, 2, 2, 135, 136, 7, 93, 2, 2, 136, 8, 3, 2, 2,
2, 137, 138, 7, 46, 2, 2, 138, 10, 3, 2, 2, 2, 139, 140, 7, 95, 2, 2, 140,
12, 3, 2, 2, 2, 141, 142, 7, 62, 2, 2, 142, 14, 3, 2, 2, 2, 143, 144, 7,
62, 2, 2, 144, 145, 7, 63, 2, 2, 145, 16, 3, 2, 2, 2, 146, 147, 7, 64,
2, 2, 147, 18, 3, 2, 2, 2, 148, 149, 7, 64, 2, 2, 149, 150, 7, 63, 2, 2,
150, 20, 3, 2, 2, 2, 151, 152, 7, 63, 2, 2, 152, 153, 7, 63, 2, 2, 153,
22, 3, 2, 2, 2, 154, 155, 7, 35, 2, 2, 155, 156, 7, 63, 2, 2, 156, 24,
3, 2, 2, 2, 157, 158, 7, 110, 2, 2, 158, 159, 7, 107, 2, 2, 159, 160, 7,
109, 2, 2, 160, 166, 7, 103, 2, 2, 161, 162, 7, 78, 2, 2, 162, 163, 7,
75, 2, 2, 163, 164, 7, 77, 2, 2, 164, 166, 7, 71, 2, 2, 165, 157, 3, 2,
2, 2, 165, 161, 3, 2, 2, 2, 166, 26, 3, 2, 2, 2, 167, 168, 7, 103, 2, 2,
168, 169, 7, 122, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 117, 2, 2,
171, 172, 7, 118, 2, 2, 172, 180, 7, 117, 2, 2, 173, 174, 7, 71, 2, 2,
174, 175, 7, 90, 2, 2, 175, 176, 7, 75, 2, 2, 176, 177, 7, 85, 2, 2, 177,
178, 7, 86, 2, 2, 178, 180, 7, 85, 2, 2, 179, 167, 3, 2, 2, 2, 179, 173,
3, 2, 2, 2, 180, 28, 3, 2, 2, 2, 181, 182, 7, 45, 2, 2, 182, 30, 3, 2,
2, 2, 183, 184, 7, 47, 2, 2, 184, 32, 3, 2, 2, 2, 185, 186, 7, 44, 2, 2,
186, 34, 3, 2, 2, 2, 187, 188, 7, 49, 2, 2, 188, 36, 3, 2, 2, 2, 189, 190,
7, 39, 2, 2, 190, 38, 3, 2, 2, 2, 191, 192, 7, 44, 2, 2, 192, 193, 7, 44,
2, 2, 193, 40, 3, 2, 2, 2, 194, 195, 7, 62, 2, 2, 195, 196, 7, 62, 2, 2,
196, 42, 3, 2, 2, 2, 197, 198, 7, 64, 2, 2, 198, 199, 7, 64, 2, 2, 199,
44, 3, 2, 2, 2, 200, 201, 7, 40, 2, 2, 201, 46, 3, 2, 2, 2, 202, 203, 7,
126, 2, 2, 203, 48, 3, 2, 2, 2, 204, 205, 7, 96, 2, 2, 205, 50, 3, 2, 2,
2, 206, 207, 7, 40, 2, 2, 207, 212, 7, 40, 2, 2, 208, 209, 7, 99, 2, 2,
209, 210, 7, 112, 2, 2, 210, 212, 7, 102, 2, 2, 211, 206, 3, 2, 2, 2, 211,
208, 3, 2, 2, 2, 212, 52, 3, 2, 2, 2, 213, 214, 7, 126, 2, 2, 214, 218,
7, 126, 2, 2, 215, 216, 7, 113, 2, 2, 216, 218, 7, 116, 2, 2, 217, 213,
3, 2, 2, 2, 217, 215, 3, 2, 2, 2, 218, 54, 3, 2, 2, 2, 219, 220, 7, 128,
2, 2, 220, 56, 3, 2, 2, 2, 221, 226, 7, 35, 2, 2, 222, 223, 7, 112, 2,
2, 223, 224, 7, 113, 2, 2, 224, 226, 7, 118, 2, 2, 225, 221, 3, 2, 2, 2,
225, 222, 3, 2, 2, 2, 226, 58, 3, 2, 2, 2, 227, 228, 7, 107, 2, 2, 228,
229, 7, 112, 2, 2, 229, 60, 3, 2, 2, 2, 230, 231, 7, 112, 2, 2, 231, 232,
7, 113, 2, 2, 232, 233, 7, 118, 2, 2, 233, 234, 7, 34, 2, 2, 234, 235,
7, 107, 2, 2, 235, 236, 7, 112, 2, 2, 236, 62, 3, 2, 2, 2, 237, 242, 7,
93, 2, 2, 238, 241, 5, 127, 64, 2, 239, 241, 5, 129, 65, 2, 240, 238, 3,
2, 2, 2, 240, 239, 3, 2, 2, 2, 241, 244, 3, 2, 2, 2, 242, 240, 3, 2, 2,
2, 242, 243, 3, 2, 2, 2, 243, 245, 3, 2, 2, 2, 244, 242, 3, 2, 2, 2, 245,
246, 7, 95, 2, 2, 246, 64, 3, 2, 2, 2, 247, 248, 7, 118, 2, 2, 248, 249,
7, 116, 2, 2, 249, 250, 7, 119, 2, 2, 250, 275, 7, 103, 2, 2, 251, 252,
7, 86, 2, 2, 252, 253, 7, 116, 2, 2, 253, 254, 7, 119, 2, 2, 254, 275,
7, 103, 2, 2, 255, 256, 7, 86, 2, 2, 256, 257, 7, 84, 2, 2, 257, 258, 7,
87, 2, 2, 258, 275, 7, 71, 2, 2, 259, 260, 7, 104, 2, 2, 260, 261, 7, 99,
2, 2, 261, 262, 7, 110, 2, 2, 262, 263, 7, 117, 2, 2, 263, 275, 7, 103,
2, 2, 264, 265, 7, 72, 2, 2, 265, 266, 7, 99, 2, 2, 266, 267, 7, 110, 2,
2, 267, 268, 7, 117, 2, 2, 268, 275, 7, 103, 2, 2, 269, 270, 7, 72, 2,
2, 270, 271, 7, 67, 2, 2, 271, 272, 7, 78, 2, 2, 272, 273, 7, 85, 2, 2,
273, 275, 7, 71, 2, 2, 274, 247, 3, 2, 2, 2, 274, 251, 3, 2, 2, 2, 274,
255, 3, 2, 2, 2, 274, 259, 3, 2, 2, 2, 274, 264, 3, 2, 2, 2, 274, 269,
3, 2, 2, 2, 275, 66, 3, 2, 2, 2, 276, 281, 5, 93, 47, 2, 277, 281, 5, 95,
48, 2, 278, 281, 5, 97, 49, 2, 279, 281, 5, 91, 46, 2, 280, 276, 3, 2,
2, 2, 280, 277, 3, 2, 2, 2, 280, 278, 3, 2, 2, 2, 280, 279, 3, 2, 2, 2,
281, 68, 3, 2, 2, 2, 282, 285, 5, 109, 55, 2, 283, 285, 5, 111, 56, 2,
284, 282, 3, 2, 2, 2, 284, 283, 3, 2, 2, 2, 285, 70, 3, 2, 2, 2, 286, 291,
5, 87, 44, 2, 287, 290, 5, 87, 44, 2, 288, 290, 5, 89, 45, 2, 289, 287,
3, 2, 2, 2, 289, 288, 3, 2, 2, 2, 290, 293, 3, 2, 2, 2, 291, 289, 3, 2,
2, 2, 291, 292, 3, 2, 2, 2, 292, 300, 3, 2, 2, 2, 293, 291, 3, 2, 2, 2,
294, 295, 7, 38, 2, 2, 295, 296, 7, 111, 2, 2, 296, 297, 7, 103, 2, 2,
297, 298, 7, 118, 2, 2, 298, 300, 7, 99, 2, 2, 299, 286, 3, 2, 2, 2, 299,
294, 3, 2, 2, 2, 300, 72, 3, 2, 2, 2, 301, 303, 5, 77, 39, 2, 302, 301,
3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 314, 3, 2, 2, 2, 304, 306, 7, 36,
2, 2, 305, 307, 5, 79, 40, 2, 306, 305, 3, 2, 2, 2, 306, 307, 3, 2, 2,
2, 307, 308, 3, 2, 2, 2, 308, 315, 7, 36, 2, 2, 309, 311, 7, 41, 2, 2,
310, 312, 5, 81, 41, 2, 311, 310, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312,
313, 3, 2, 2, 2, 313, 315, 7, 41, 2, 2, 314, 304, 3, 2, 2, 2, 314, 309,
3, 2, 2, 2, 315, 74, 3, 2, 2, 2, 316, 324, 5, 71, 36, 2, 317, 320, 7, 93,
2, 2, 318, 321, 5, 73, 37, 2, 319, 321, 5, 93, 47, 2, 320, 318, 3, 2, 2,
2, 320, 319, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 323, 7, 95, 2, 2, 323,
325, 3, 2, 2, 2, 324, 317, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 324,
3, 2, 2, 2, 326, 327, 3, 2, 2, 2, 327, 76, 3, 2, 2, 2, 328, 329, 7, 119,
2, 2, 329, 332, 7, 58, 2, 2, 330, 332, 9, 2, 2, 2, 331, 328, 3, 2, 2, 2,
331, 330, 3, 2, 2, 2, 332, 78, 3, 2, 2, 2, 333, 335, 5, 83, 42, 2, 334,
333, 3, 2, 2, 2, 335, 336, 3, 2, 2, 2, 336, 334, 3, 2, 2, 2, 336, 337,
3, 2, 2, 2, 337, 80, 3, 2, 2, 2, 338, 340, 5, 85, 43, 2, 339, 338, 3, 2,
2, 2, 340, 341, 3, 2, 2, 2, 341, 339, 3, 2, 2, 2, 341, 342, 3, 2, 2, 2,
342, 82, 3, 2, 2, 2, 343, 351, 10, 3, 2, 2, 344, 351, 5, 125, 63, 2, 345,
346, 7, 94, 2, 2, 346, 351, 7, 12, 2, 2, 347, 348, 7, 94, 2, 2, 348, 349,
7, 15, 2, 2, 349, 351, 7, 12, 2, 2, 350, 343, 3, 2, 2, 2, 350, 344, 3,
2, 2, 2, 350, 345, 3, 2, 2, 2, 350, 347, 3, 2, 2, 2, 351, 84, 3, 2, 2,
2, 352, 360, 10, 4, 2, 2, 353, 360, 5, 125, 63, 2, 354, 355, 7, 94, 2,
2, 355, 360, 7, 12, 2, 2, 356, 357, 7, 94, 2, 2, 357, 358, 7, 15, 2, 2,
358, 360, 7, 12, 2, 2, 359, 352, 3, 2, 2, 2, 359, 353, 3, 2, 2, 2, 359,
354, 3, 2, 2, 2, 359, 356, 3, 2, 2, 2, 360, 86, 3, 2, 2, 2, 361, 362, 9,
5, 2, 2, 362, 88, 3, 2, 2, 2, 363, 364, 9, 6, 2, 2, 364, 90, 3, 2, 2, 2,
365, 366, 7, 50, 2, 2, 366, 368, 9, 7, 2, 2, 367, 369, 9, 8, 2, 2, 368,
367, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 368, 3, 2, 2, 2, 370, 371,
3, 2, 2, 2, 371, 92, 3, 2, 2, 2, 372, 376, 5, 99, 50, 2, 373, 375, 5, 89,
45, 2, 374, 373, 3, 2, 2, 2, 375, 378, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2,
376, 377, 3, 2, 2, 2, 377, 381, 3, 2, 2, 2, 378, 376, 3, 2, 2, 2, 379,
381, 7, 50, 2, 2, 380, 372, 3, 2, 2, 2, 380, 379, 3, 2, 2, 2, 381, 94,
3, 2, 2, 2, 382, 386, 7, 50, 2, 2, 383, 385, 5, 101, 51, 2, 384, 383, 3,
2, 2, 2, 385, 388, 3, 2, 2, 2, 386, 384, 3, 2, 2, 2, 386, 387, 3, 2, 2,
2, 387, 96, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 389, 390, 7, 50, 2, 2, 390,
391, 9, 9, 2, 2, 391, 392, 5, 121, 61, 2, 392, 98, 3, 2, 2, 2, 393, 394,
9, 10, 2, 2, 394, 100, 3, 2, 2, 2, 395, 396, 9, 11, 2, 2, 396, 102, 3,
2, 2, 2, 397, 398, 9, 12, 2, 2, 398, 104, 3, 2, 2, 2, 399, 400, 5, 103,
52, 2, 400, 401, 5, 103, 52, 2, 401, 402, 5, 103, 52, 2, 402, 403, 5, 103,
52, 2, 403, 106, 3, 2, 2, 2, 404, 405, 7, 94, 2, 2, 405, 406, 7, 119, 2,
2, 406, 407, 3, 2, 2, 2, 407, 415, 5, 105, 53, 2, 408, 409, 7, 94, 2, 2,
409, 410, 7, 87, 2, 2, 410, 411, 3, 2, 2, 2, 411, 412, 5, 105, 53, 2, 412,
413, 5, 105, 53, 2, 413, 415, 3, 2, 2, 2, 414, 404, 3, 2, 2, 2, 414, 408,
3, 2, 2, 2, 415, 108, 3, 2, 2, 2, 416, 418, 5, 113, 57, 2, 417, 419, 5,
115, 58, 2, 418, 417, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 424, 3, 2,
2, 2, 420, 421, 5, 117, 59, 2, 421, 422, 5, 115, 58, 2, 422, 424, 3, 2,
2, 2, 423, 416, 3, 2, 2, 2, 423, 420, 3, 2, 2, 2, 424, 110, 3, 2, 2, 2,
425, 426, 7, 50, 2, 2, 426, 429, 9, 9, 2, 2, 427, 430, 5, 119, 60, 2, 428,
430, 5, 121, 61, 2, 429, 427, 3, 2, 2, 2, 429, 428, 3, 2, 2, 2, 430, 431,
3, 2, 2, 2, 431, 432, 5, 123, 62, 2, 432, 112, 3, 2, 2, 2, 433, 435, 5,
117, 59, 2, 434, 433, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 436, 3, 2,
2, 2, 436, 437, 7, 48, 2, 2, 437, 442, 5, 117, 59, 2, 438, 439, 5, 117,
59, 2, 439, 440, 7, 48, 2, 2, 440, 442, 3, 2, 2, 2, 441, 434, 3, 2, 2,
2, 441, 438, 3, 2, 2, 2, 442, 114, 3, 2, 2, 2, 443, 445, 9, 13, 2, 2, 444,
446, 9, 14, 2, 2, 445, 444, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 447,
3, 2, 2, 2, 447, 448, 5, 117, 59, 2, 448, 116, 3, 2, 2, 2, 449, 451, 5,
89, 45, 2, 450, 449, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 450, 3, 2,
2, 2, 452, 453, 3, 2, 2, 2, 453, 118, 3, 2, 2, 2, 454, 456, 5, 121, 61,
2, 455, 454, 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 457, 3, 2, 2, 2, 457,
458, 7, 48, 2, 2, 458, 463, 5, 121, 61, 2, 459, 460, 5, 121, 61, 2, 460,
461, 7, 48, 2, 2, 461, 463, 3, 2, 2, 2, 462, 455, 3, 2, 2, 2, 462, 459,
3, 2, 2, 2, 463, 120, 3, 2, 2, 2, 464, 466, 5, 103, 52, 2, 465, 464, 3,
2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 465, 3, 2, 2, 2, 467, 468, 3, 2, 2,
2, 468, 122, 3, 2, 2, 2, 469, 471, 9, 15, 2, 2, 470, 472, 9, 14, 2, 2,
471, 470, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473,
474, 5, 117, 59, 2, 474, 124, 3, 2, 2, 2, 475, 476, 7, 94, 2, 2, 476, 491,
9, 16, 2, 2, 477, 478, 7, 94, 2, 2, 478, 480, 5, 101, 51, 2, 479, 481,
5, 101, 51, 2, 480, 479, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 483, 3,
2, 2, 2, 482, 484, 5, 101, 51, 2, 483, 482, 3, 2, 2, 2, 483, 484, 3, 2,
2, 2, 484, 491, 3, 2, 2, 2, 485, 486, 7, 94, 2, 2, 486, 487, 7, 122, 2,
2, 487, 488, 3, 2, 2, 2, 488, 491, 5, 121, 61, 2, 489, 491, 5, 107, 54,
2, 490, 475, 3, 2, 2, 2, 490, 477, 3, 2, 2, 2, 490, 485, 3, 2, 2, 2, 490,
489, 3, 2, 2, 2, 491, 126, 3, 2, 2, 2, 492, 494, 9, 17, 2, 2, 493, 492,
3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 496, 3, 2,
2, 2, 496, 497, 3, 2, 2, 2, 497, 498, 8, 64, 2, 2, 498, 128, 3, 2, 2, 2,
499, 501, 7, 15, 2, 2, 500, 502, 7, 12, 2, 2, 501, 500, 3, 2, 2, 2, 501,
502, 3, 2, 2, 2, 502, 505, 3, 2, 2, 2, 503, 505, 7, 12, 2, 2, 504, 499,
3, 2, 2, 2, 504, 503, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 507, 8, 65,
2, 2, 507, 130, 3, 2, 2, 2, 49, 2, 165, 179, 211, 217, 225, 240, 242, 274,
280, 284, 289, 291, 299, 302, 306, 311, 314, 320, 326, 331, 336, 341, 350,
359, 370, 376, 380, 386, 414, 418, 423, 429, 434, 441, 445, 452, 455, 462,
467, 471, 480, 483, 490, 495, 501, 504, 3, 8, 2, 2,
33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34,
3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3,
34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 291, 10, 34,
3, 35, 3, 35, 3, 35, 3, 35, 5, 35, 297, 10, 35, 3, 36, 3, 36, 5, 36, 301,
10, 36, 3, 37, 3, 37, 3, 37, 7, 37, 306, 10, 37, 12, 37, 14, 37, 309, 11,
37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 316, 10, 37, 3, 38, 5, 38,
319, 10, 38, 3, 38, 3, 38, 5, 38, 323, 10, 38, 3, 38, 3, 38, 3, 38, 5,
38, 328, 10, 38, 3, 38, 5, 38, 331, 10, 38, 3, 39, 3, 39, 3, 39, 3, 39,
5, 39, 337, 10, 39, 3, 39, 3, 39, 6, 39, 341, 10, 39, 13, 39, 14, 39, 342,
3, 40, 3, 40, 3, 40, 5, 40, 348, 10, 40, 3, 41, 6, 41, 351, 10, 41, 13,
41, 14, 41, 352, 3, 42, 6, 42, 356, 10, 42, 13, 42, 14, 42, 357, 3, 43,
3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 5, 43, 367, 10, 43, 3, 44, 3,
44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 376, 10, 44, 3, 45, 3, 45,
3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 6, 47, 385, 10, 47, 13, 47, 14, 47,
386, 3, 48, 3, 48, 7, 48, 391, 10, 48, 12, 48, 14, 48, 394, 11, 48, 3,
48, 5, 48, 397, 10, 48, 3, 49, 3, 49, 7, 49, 401, 10, 49, 12, 49, 14, 49,
404, 11, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3,
53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55,
3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 431, 10, 55, 3, 56, 3,
56, 5, 56, 435, 10, 56, 3, 56, 3, 56, 3, 56, 5, 56, 440, 10, 56, 3, 57,
3, 57, 3, 57, 3, 57, 5, 57, 446, 10, 57, 3, 57, 3, 57, 3, 58, 5, 58, 451,
10, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 5, 58, 458, 10, 58, 3, 59, 3,
59, 5, 59, 462, 10, 59, 3, 59, 3, 59, 3, 60, 6, 60, 467, 10, 60, 13, 60,
14, 60, 468, 3, 61, 5, 61, 472, 10, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3,
61, 5, 61, 479, 10, 61, 3, 62, 6, 62, 482, 10, 62, 13, 62, 14, 62, 483,
3, 63, 3, 63, 5, 63, 488, 10, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3,
64, 3, 64, 5, 64, 497, 10, 64, 3, 64, 5, 64, 500, 10, 64, 3, 64, 3, 64,
3, 64, 3, 64, 3, 64, 5, 64, 507, 10, 64, 3, 65, 6, 65, 510, 10, 65, 13,
65, 14, 65, 511, 3, 65, 3, 65, 3, 66, 3, 66, 5, 66, 518, 10, 66, 3, 66,
5, 66, 521, 10, 66, 3, 66, 3, 66, 2, 2, 67, 3, 3, 5, 4, 7, 5, 9, 6, 11,
7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16,
31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25,
49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34,
67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 2, 81, 2, 83, 2, 85,
2, 87, 2, 89, 2, 91, 2, 93, 2, 95, 2, 97, 2, 99, 2, 101, 2, 103, 2, 105,
2, 107, 2, 109, 2, 111, 2, 113, 2, 115, 2, 117, 2, 119, 2, 121, 2, 123,
2, 125, 2, 127, 2, 129, 41, 131, 42, 3, 2, 18, 5, 2, 78, 78, 87, 87, 119,
119, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 6, 2, 12, 12, 15, 15, 41, 41,
94, 94, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 4, 2, 68, 68, 100,
100, 3, 2, 50, 51, 4, 2, 90, 90, 122, 122, 3, 2, 51, 59, 3, 2, 50, 57,
5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47,
47, 4, 2, 82, 82, 114, 114, 12, 2, 36, 36, 41, 41, 65, 65, 94, 94, 99,
100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 4, 2, 11, 11, 34,
34, 2, 556, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9,
3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2,
17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2,
2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2,
2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2,
2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3,
2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55,
3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2,
63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2,
2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2,
2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 3, 133, 3, 2, 2, 2, 5, 135,
3, 2, 2, 2, 7, 137, 3, 2, 2, 2, 9, 139, 3, 2, 2, 2, 11, 141, 3, 2, 2, 2,
13, 143, 3, 2, 2, 2, 15, 145, 3, 2, 2, 2, 17, 148, 3, 2, 2, 2, 19, 150,
3, 2, 2, 2, 21, 153, 3, 2, 2, 2, 23, 156, 3, 2, 2, 2, 25, 167, 3, 2, 2,
2, 27, 181, 3, 2, 2, 2, 29, 183, 3, 2, 2, 2, 31, 185, 3, 2, 2, 2, 33, 187,
3, 2, 2, 2, 35, 189, 3, 2, 2, 2, 37, 191, 3, 2, 2, 2, 39, 193, 3, 2, 2,
2, 41, 196, 3, 2, 2, 2, 43, 199, 3, 2, 2, 2, 45, 202, 3, 2, 2, 2, 47, 204,
3, 2, 2, 2, 49, 206, 3, 2, 2, 2, 51, 213, 3, 2, 2, 2, 53, 219, 3, 2, 2,
2, 55, 221, 3, 2, 2, 2, 57, 227, 3, 2, 2, 2, 59, 229, 3, 2, 2, 2, 61, 232,
3, 2, 2, 2, 63, 239, 3, 2, 2, 2, 65, 249, 3, 2, 2, 2, 67, 290, 3, 2, 2,
2, 69, 296, 3, 2, 2, 2, 71, 300, 3, 2, 2, 2, 73, 315, 3, 2, 2, 2, 75, 318,
3, 2, 2, 2, 77, 332, 3, 2, 2, 2, 79, 347, 3, 2, 2, 2, 81, 350, 3, 2, 2,
2, 83, 355, 3, 2, 2, 2, 85, 366, 3, 2, 2, 2, 87, 375, 3, 2, 2, 2, 89, 377,
3, 2, 2, 2, 91, 379, 3, 2, 2, 2, 93, 381, 3, 2, 2, 2, 95, 396, 3, 2, 2,
2, 97, 398, 3, 2, 2, 2, 99, 405, 3, 2, 2, 2, 101, 409, 3, 2, 2, 2, 103,
411, 3, 2, 2, 2, 105, 413, 3, 2, 2, 2, 107, 415, 3, 2, 2, 2, 109, 430,
3, 2, 2, 2, 111, 439, 3, 2, 2, 2, 113, 441, 3, 2, 2, 2, 115, 457, 3, 2,
2, 2, 117, 459, 3, 2, 2, 2, 119, 466, 3, 2, 2, 2, 121, 478, 3, 2, 2, 2,
123, 481, 3, 2, 2, 2, 125, 485, 3, 2, 2, 2, 127, 506, 3, 2, 2, 2, 129,
509, 3, 2, 2, 2, 131, 520, 3, 2, 2, 2, 133, 134, 7, 42, 2, 2, 134, 4, 3,
2, 2, 2, 135, 136, 7, 43, 2, 2, 136, 6, 3, 2, 2, 2, 137, 138, 7, 93, 2,
2, 138, 8, 3, 2, 2, 2, 139, 140, 7, 46, 2, 2, 140, 10, 3, 2, 2, 2, 141,
142, 7, 95, 2, 2, 142, 12, 3, 2, 2, 2, 143, 144, 7, 62, 2, 2, 144, 14,
3, 2, 2, 2, 145, 146, 7, 62, 2, 2, 146, 147, 7, 63, 2, 2, 147, 16, 3, 2,
2, 2, 148, 149, 7, 64, 2, 2, 149, 18, 3, 2, 2, 2, 150, 151, 7, 64, 2, 2,
151, 152, 7, 63, 2, 2, 152, 20, 3, 2, 2, 2, 153, 154, 7, 63, 2, 2, 154,
155, 7, 63, 2, 2, 155, 22, 3, 2, 2, 2, 156, 157, 7, 35, 2, 2, 157, 158,
7, 63, 2, 2, 158, 24, 3, 2, 2, 2, 159, 160, 7, 110, 2, 2, 160, 161, 7,
107, 2, 2, 161, 162, 7, 109, 2, 2, 162, 168, 7, 103, 2, 2, 163, 164, 7,
78, 2, 2, 164, 165, 7, 75, 2, 2, 165, 166, 7, 77, 2, 2, 166, 168, 7, 71,
2, 2, 167, 159, 3, 2, 2, 2, 167, 163, 3, 2, 2, 2, 168, 26, 3, 2, 2, 2,
169, 170, 7, 103, 2, 2, 170, 171, 7, 122, 2, 2, 171, 172, 7, 107, 2, 2,
172, 173, 7, 117, 2, 2, 173, 174, 7, 118, 2, 2, 174, 182, 7, 117, 2, 2,
175, 176, 7, 71, 2, 2, 176, 177, 7, 90, 2, 2, 177, 178, 7, 75, 2, 2, 178,
179, 7, 85, 2, 2, 179, 180, 7, 86, 2, 2, 180, 182, 7, 85, 2, 2, 181, 169,
3, 2, 2, 2, 181, 175, 3, 2, 2, 2, 182, 28, 3, 2, 2, 2, 183, 184, 7, 45,
2, 2, 184, 30, 3, 2, 2, 2, 185, 186, 7, 47, 2, 2, 186, 32, 3, 2, 2, 2,
187, 188, 7, 44, 2, 2, 188, 34, 3, 2, 2, 2, 189, 190, 7, 49, 2, 2, 190,
36, 3, 2, 2, 2, 191, 192, 7, 39, 2, 2, 192, 38, 3, 2, 2, 2, 193, 194, 7,
44, 2, 2, 194, 195, 7, 44, 2, 2, 195, 40, 3, 2, 2, 2, 196, 197, 7, 62,
2, 2, 197, 198, 7, 62, 2, 2, 198, 42, 3, 2, 2, 2, 199, 200, 7, 64, 2, 2,
200, 201, 7, 64, 2, 2, 201, 44, 3, 2, 2, 2, 202, 203, 7, 40, 2, 2, 203,
46, 3, 2, 2, 2, 204, 205, 7, 126, 2, 2, 205, 48, 3, 2, 2, 2, 206, 207,
7, 96, 2, 2, 207, 50, 3, 2, 2, 2, 208, 209, 7, 40, 2, 2, 209, 214, 7, 40,
2, 2, 210, 211, 7, 99, 2, 2, 211, 212, 7, 112, 2, 2, 212, 214, 7, 102,
2, 2, 213, 208, 3, 2, 2, 2, 213, 210, 3, 2, 2, 2, 214, 52, 3, 2, 2, 2,
215, 216, 7, 126, 2, 2, 216, 220, 7, 126, 2, 2, 217, 218, 7, 113, 2, 2,
218, 220, 7, 116, 2, 2, 219, 215, 3, 2, 2, 2, 219, 217, 3, 2, 2, 2, 220,
54, 3, 2, 2, 2, 221, 222, 7, 128, 2, 2, 222, 56, 3, 2, 2, 2, 223, 228,
7, 35, 2, 2, 224, 225, 7, 112, 2, 2, 225, 226, 7, 113, 2, 2, 226, 228,
7, 118, 2, 2, 227, 223, 3, 2, 2, 2, 227, 224, 3, 2, 2, 2, 228, 58, 3, 2,
2, 2, 229, 230, 7, 107, 2, 2, 230, 231, 7, 112, 2, 2, 231, 60, 3, 2, 2,
2, 232, 233, 7, 112, 2, 2, 233, 234, 7, 113, 2, 2, 234, 235, 7, 118, 2,
2, 235, 236, 7, 34, 2, 2, 236, 237, 7, 107, 2, 2, 237, 238, 7, 112, 2,
2, 238, 62, 3, 2, 2, 2, 239, 244, 7, 93, 2, 2, 240, 243, 5, 129, 65, 2,
241, 243, 5, 131, 66, 2, 242, 240, 3, 2, 2, 2, 242, 241, 3, 2, 2, 2, 243,
246, 3, 2, 2, 2, 244, 242, 3, 2, 2, 2, 244, 245, 3, 2, 2, 2, 245, 247,
3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 247, 248, 7, 95, 2, 2, 248, 64, 3, 2,
2, 2, 249, 250, 7, 108, 2, 2, 250, 251, 7, 117, 2, 2, 251, 252, 7, 113,
2, 2, 252, 253, 7, 112, 2, 2, 253, 254, 7, 97, 2, 2, 254, 255, 7, 101,
2, 2, 255, 256, 7, 113, 2, 2, 256, 257, 7, 112, 2, 2, 257, 258, 7, 118,
2, 2, 258, 259, 7, 99, 2, 2, 259, 260, 7, 107, 2, 2, 260, 261, 7, 112,
2, 2, 261, 262, 7, 117, 2, 2, 262, 66, 3, 2, 2, 2, 263, 264, 7, 118, 2,
2, 264, 265, 7, 116, 2, 2, 265, 266, 7, 119, 2, 2, 266, 291, 7, 103, 2,
2, 267, 268, 7, 86, 2, 2, 268, 269, 7, 116, 2, 2, 269, 270, 7, 119, 2,
2, 270, 291, 7, 103, 2, 2, 271, 272, 7, 86, 2, 2, 272, 273, 7, 84, 2, 2,
273, 274, 7, 87, 2, 2, 274, 291, 7, 71, 2, 2, 275, 276, 7, 104, 2, 2, 276,
277, 7, 99, 2, 2, 277, 278, 7, 110, 2, 2, 278, 279, 7, 117, 2, 2, 279,
291, 7, 103, 2, 2, 280, 281, 7, 72, 2, 2, 281, 282, 7, 99, 2, 2, 282, 283,
7, 110, 2, 2, 283, 284, 7, 117, 2, 2, 284, 291, 7, 103, 2, 2, 285, 286,
7, 72, 2, 2, 286, 287, 7, 67, 2, 2, 287, 288, 7, 78, 2, 2, 288, 289, 7,
85, 2, 2, 289, 291, 7, 71, 2, 2, 290, 263, 3, 2, 2, 2, 290, 267, 3, 2,
2, 2, 290, 271, 3, 2, 2, 2, 290, 275, 3, 2, 2, 2, 290, 280, 3, 2, 2, 2,
290, 285, 3, 2, 2, 2, 291, 68, 3, 2, 2, 2, 292, 297, 5, 95, 48, 2, 293,
297, 5, 97, 49, 2, 294, 297, 5, 99, 50, 2, 295, 297, 5, 93, 47, 2, 296,
292, 3, 2, 2, 2, 296, 293, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 296, 295,
3, 2, 2, 2, 297, 70, 3, 2, 2, 2, 298, 301, 5, 111, 56, 2, 299, 301, 5,
113, 57, 2, 300, 298, 3, 2, 2, 2, 300, 299, 3, 2, 2, 2, 301, 72, 3, 2,
2, 2, 302, 307, 5, 89, 45, 2, 303, 306, 5, 89, 45, 2, 304, 306, 5, 91,
46, 2, 305, 303, 3, 2, 2, 2, 305, 304, 3, 2, 2, 2, 306, 309, 3, 2, 2, 2,
307, 305, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 316, 3, 2, 2, 2, 309,
307, 3, 2, 2, 2, 310, 311, 7, 38, 2, 2, 311, 312, 7, 111, 2, 2, 312, 313,
7, 103, 2, 2, 313, 314, 7, 118, 2, 2, 314, 316, 7, 99, 2, 2, 315, 302,
3, 2, 2, 2, 315, 310, 3, 2, 2, 2, 316, 74, 3, 2, 2, 2, 317, 319, 5, 79,
40, 2, 318, 317, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 330, 3, 2, 2, 2,
320, 322, 7, 36, 2, 2, 321, 323, 5, 81, 41, 2, 322, 321, 3, 2, 2, 2, 322,
323, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 331, 7, 36, 2, 2, 325, 327,
7, 41, 2, 2, 326, 328, 5, 83, 42, 2, 327, 326, 3, 2, 2, 2, 327, 328, 3,
2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 331, 7, 41, 2, 2, 330, 320, 3, 2, 2,
2, 330, 325, 3, 2, 2, 2, 331, 76, 3, 2, 2, 2, 332, 340, 5, 73, 37, 2, 333,
336, 7, 93, 2, 2, 334, 337, 5, 75, 38, 2, 335, 337, 5, 95, 48, 2, 336,
334, 3, 2, 2, 2, 336, 335, 3, 2, 2, 2, 337, 338, 3, 2, 2, 2, 338, 339,
7, 95, 2, 2, 339, 341, 3, 2, 2, 2, 340, 333, 3, 2, 2, 2, 341, 342, 3, 2,
2, 2, 342, 340, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 78, 3, 2, 2, 2,
344, 345, 7, 119, 2, 2, 345, 348, 7, 58, 2, 2, 346, 348, 9, 2, 2, 2, 347,
344, 3, 2, 2, 2, 347, 346, 3, 2, 2, 2, 348, 80, 3, 2, 2, 2, 349, 351, 5,
85, 43, 2, 350, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 350, 3, 2,
2, 2, 352, 353, 3, 2, 2, 2, 353, 82, 3, 2, 2, 2, 354, 356, 5, 87, 44, 2,
355, 354, 3, 2, 2, 2, 356, 357, 3, 2, 2, 2, 357, 355, 3, 2, 2, 2, 357,
358, 3, 2, 2, 2, 358, 84, 3, 2, 2, 2, 359, 367, 10, 3, 2, 2, 360, 367,
5, 127, 64, 2, 361, 362, 7, 94, 2, 2, 362, 367, 7, 12, 2, 2, 363, 364,
7, 94, 2, 2, 364, 365, 7, 15, 2, 2, 365, 367, 7, 12, 2, 2, 366, 359, 3,
2, 2, 2, 366, 360, 3, 2, 2, 2, 366, 361, 3, 2, 2, 2, 366, 363, 3, 2, 2,
2, 367, 86, 3, 2, 2, 2, 368, 376, 10, 4, 2, 2, 369, 376, 5, 127, 64, 2,
370, 371, 7, 94, 2, 2, 371, 376, 7, 12, 2, 2, 372, 373, 7, 94, 2, 2, 373,
374, 7, 15, 2, 2, 374, 376, 7, 12, 2, 2, 375, 368, 3, 2, 2, 2, 375, 369,
3, 2, 2, 2, 375, 370, 3, 2, 2, 2, 375, 372, 3, 2, 2, 2, 376, 88, 3, 2,
2, 2, 377, 378, 9, 5, 2, 2, 378, 90, 3, 2, 2, 2, 379, 380, 9, 6, 2, 2,
380, 92, 3, 2, 2, 2, 381, 382, 7, 50, 2, 2, 382, 384, 9, 7, 2, 2, 383,
385, 9, 8, 2, 2, 384, 383, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 384,
3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 94, 3, 2, 2, 2, 388, 392, 5, 101,
51, 2, 389, 391, 5, 91, 46, 2, 390, 389, 3, 2, 2, 2, 391, 394, 3, 2, 2,
2, 392, 390, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 397, 3, 2, 2, 2, 394,
392, 3, 2, 2, 2, 395, 397, 7, 50, 2, 2, 396, 388, 3, 2, 2, 2, 396, 395,
3, 2, 2, 2, 397, 96, 3, 2, 2, 2, 398, 402, 7, 50, 2, 2, 399, 401, 5, 103,
52, 2, 400, 399, 3, 2, 2, 2, 401, 404, 3, 2, 2, 2, 402, 400, 3, 2, 2, 2,
402, 403, 3, 2, 2, 2, 403, 98, 3, 2, 2, 2, 404, 402, 3, 2, 2, 2, 405, 406,
7, 50, 2, 2, 406, 407, 9, 9, 2, 2, 407, 408, 5, 123, 62, 2, 408, 100, 3,
2, 2, 2, 409, 410, 9, 10, 2, 2, 410, 102, 3, 2, 2, 2, 411, 412, 9, 11,
2, 2, 412, 104, 3, 2, 2, 2, 413, 414, 9, 12, 2, 2, 414, 106, 3, 2, 2, 2,
415, 416, 5, 105, 53, 2, 416, 417, 5, 105, 53, 2, 417, 418, 5, 105, 53,
2, 418, 419, 5, 105, 53, 2, 419, 108, 3, 2, 2, 2, 420, 421, 7, 94, 2, 2,
421, 422, 7, 119, 2, 2, 422, 423, 3, 2, 2, 2, 423, 431, 5, 107, 54, 2,
424, 425, 7, 94, 2, 2, 425, 426, 7, 87, 2, 2, 426, 427, 3, 2, 2, 2, 427,
428, 5, 107, 54, 2, 428, 429, 5, 107, 54, 2, 429, 431, 3, 2, 2, 2, 430,
420, 3, 2, 2, 2, 430, 424, 3, 2, 2, 2, 431, 110, 3, 2, 2, 2, 432, 434,
5, 115, 58, 2, 433, 435, 5, 117, 59, 2, 434, 433, 3, 2, 2, 2, 434, 435,
3, 2, 2, 2, 435, 440, 3, 2, 2, 2, 436, 437, 5, 119, 60, 2, 437, 438, 5,
117, 59, 2, 438, 440, 3, 2, 2, 2, 439, 432, 3, 2, 2, 2, 439, 436, 3, 2,
2, 2, 440, 112, 3, 2, 2, 2, 441, 442, 7, 50, 2, 2, 442, 445, 9, 9, 2, 2,
443, 446, 5, 121, 61, 2, 444, 446, 5, 123, 62, 2, 445, 443, 3, 2, 2, 2,
445, 444, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 448, 5, 125, 63, 2, 448,
114, 3, 2, 2, 2, 449, 451, 5, 119, 60, 2, 450, 449, 3, 2, 2, 2, 450, 451,
3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 453, 7, 48, 2, 2, 453, 458, 5, 119,
60, 2, 454, 455, 5, 119, 60, 2, 455, 456, 7, 48, 2, 2, 456, 458, 3, 2,
2, 2, 457, 450, 3, 2, 2, 2, 457, 454, 3, 2, 2, 2, 458, 116, 3, 2, 2, 2,
459, 461, 9, 13, 2, 2, 460, 462, 9, 14, 2, 2, 461, 460, 3, 2, 2, 2, 461,
462, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 464, 5, 119, 60, 2, 464, 118,
3, 2, 2, 2, 465, 467, 5, 91, 46, 2, 466, 465, 3, 2, 2, 2, 467, 468, 3,
2, 2, 2, 468, 466, 3, 2, 2, 2, 468, 469, 3, 2, 2, 2, 469, 120, 3, 2, 2,
2, 470, 472, 5, 123, 62, 2, 471, 470, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2,
472, 473, 3, 2, 2, 2, 473, 474, 7, 48, 2, 2, 474, 479, 5, 123, 62, 2, 475,
476, 5, 123, 62, 2, 476, 477, 7, 48, 2, 2, 477, 479, 3, 2, 2, 2, 478, 471,
3, 2, 2, 2, 478, 475, 3, 2, 2, 2, 479, 122, 3, 2, 2, 2, 480, 482, 5, 105,
53, 2, 481, 480, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2,
483, 484, 3, 2, 2, 2, 484, 124, 3, 2, 2, 2, 485, 487, 9, 15, 2, 2, 486,
488, 9, 14, 2, 2, 487, 486, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 489,
3, 2, 2, 2, 489, 490, 5, 119, 60, 2, 490, 126, 3, 2, 2, 2, 491, 492, 7,
94, 2, 2, 492, 507, 9, 16, 2, 2, 493, 494, 7, 94, 2, 2, 494, 496, 5, 103,
52, 2, 495, 497, 5, 103, 52, 2, 496, 495, 3, 2, 2, 2, 496, 497, 3, 2, 2,
2, 497, 499, 3, 2, 2, 2, 498, 500, 5, 103, 52, 2, 499, 498, 3, 2, 2, 2,
499, 500, 3, 2, 2, 2, 500, 507, 3, 2, 2, 2, 501, 502, 7, 94, 2, 2, 502,
503, 7, 122, 2, 2, 503, 504, 3, 2, 2, 2, 504, 507, 5, 123, 62, 2, 505,
507, 5, 109, 55, 2, 506, 491, 3, 2, 2, 2, 506, 493, 3, 2, 2, 2, 506, 501,
3, 2, 2, 2, 506, 505, 3, 2, 2, 2, 507, 128, 3, 2, 2, 2, 508, 510, 9, 17,
2, 2, 509, 508, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2,
511, 512, 3, 2, 2, 2, 512, 513, 3, 2, 2, 2, 513, 514, 8, 65, 2, 2, 514,
130, 3, 2, 2, 2, 515, 517, 7, 15, 2, 2, 516, 518, 7, 12, 2, 2, 517, 516,
3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 521, 3, 2, 2, 2, 519, 521, 7, 12,
2, 2, 520, 515, 3, 2, 2, 2, 520, 519, 3, 2, 2, 2, 521, 522, 3, 2, 2, 2,
522, 523, 8, 66, 2, 2, 523, 132, 3, 2, 2, 2, 49, 2, 167, 181, 213, 219,
227, 242, 244, 290, 296, 300, 305, 307, 315, 318, 322, 327, 330, 336, 342,
347, 352, 357, 366, 375, 386, 392, 396, 402, 430, 434, 439, 445, 450, 457,
461, 468, 471, 478, 483, 487, 496, 499, 506, 511, 517, 520, 3, 8, 2, 2,
}
var lexerChannelNames = []string{
@ -263,23 +270,23 @@ var lexerModeNames = []string{
var lexerLiteralNames = []string{
"", "'('", "')'", "'['", "','", "']'", "'<'", "'<='", "'>'", "'>='", "'=='",
"'!='", "", "", "'+'", "'-'", "'*'", "'/'", "'%'", "'**'", "'<<'", "'>>'",
"'&'", "'|'", "'^'", "", "", "'~'", "", "'in'", "'not in'",
"'&'", "'|'", "'^'", "", "", "'~'", "", "'in'", "'not in'", "", "'json_contains'",
}
var lexerSymbolicNames = []string{
"", "", "", "", "", "", "LT", "LE", "GT", "GE", "EQ", "NE", "LIKE", "EXISTS",
"ADD", "SUB", "MUL", "DIV", "MOD", "POW", "SHL", "SHR", "BAND", "BOR",
"BXOR", "AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm", "BooleanConstant",
"IntegerConstant", "FloatingConstant", "Identifier", "StringLiteral", "JSONIdentifier",
"Whitespace", "Newline",
"BXOR", "AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm", "JSONContains",
"BooleanConstant", "IntegerConstant", "FloatingConstant", "Identifier",
"StringLiteral", "JSONIdentifier", "Whitespace", "Newline",
}
var lexerRuleNames = []string{
"T__0", "T__1", "T__2", "T__3", "T__4", "LT", "LE", "GT", "GE", "EQ", "NE",
"LIKE", "EXISTS", "ADD", "SUB", "MUL", "DIV", "MOD", "POW", "SHL", "SHR",
"BAND", "BOR", "BXOR", "AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm",
"BooleanConstant", "IntegerConstant", "FloatingConstant", "Identifier",
"StringLiteral", "JSONIdentifier", "EncodingPrefix", "DoubleSCharSequence",
"JSONContains", "BooleanConstant", "IntegerConstant", "FloatingConstant",
"Identifier", "StringLiteral", "JSONIdentifier", "EncodingPrefix", "DoubleSCharSequence",
"SingleSCharSequence", "DoubleSChar", "SingleSChar", "Nondigit", "Digit",
"BinaryConstant", "DecimalConstant", "OctalConstant", "HexadecimalConstant",
"NonzeroDigit", "OctalDigit", "HexadecimalDigit", "HexQuad", "UniversalCharacterName",
@ -356,12 +363,13 @@ const (
PlanLexerIN = 29
PlanLexerNIN = 30
PlanLexerEmptyTerm = 31
PlanLexerBooleanConstant = 32
PlanLexerIntegerConstant = 33
PlanLexerFloatingConstant = 34
PlanLexerIdentifier = 35
PlanLexerStringLiteral = 36
PlanLexerJSONIdentifier = 37
PlanLexerWhitespace = 38
PlanLexerNewline = 39
PlanLexerJSONContains = 32
PlanLexerBooleanConstant = 33
PlanLexerIntegerConstant = 34
PlanLexerFloatingConstant = 35
PlanLexerIdentifier = 36
PlanLexerStringLiteral = 37
PlanLexerJSONIdentifier = 38
PlanLexerWhitespace = 39
PlanLexerNewline = 40
)

View File

@ -15,62 +15,65 @@ var _ = reflect.Copy
var _ = strconv.Itoa
var parserATN = []uint16{
3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 41, 92, 4,
3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 42, 99, 4,
2, 9, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 20, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5,
2, 27, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7,
2, 74, 10, 2, 12, 2, 14, 2, 77, 11, 2, 3, 2, 5, 2, 80, 10, 2, 3, 2, 3,
2, 3, 2, 3, 2, 3, 2, 7, 2, 87, 10, 2, 12, 2, 14, 2, 90, 11, 2, 3, 2, 2,
3, 2, 3, 2, 2, 12, 4, 2, 16, 17, 29, 30, 3, 2, 18, 20, 3, 2, 16, 17, 3,
2, 22, 23, 3, 2, 8, 9, 4, 2, 37, 37, 39, 39, 3, 2, 10, 11, 3, 2, 8, 11,
3, 2, 12, 13, 3, 2, 31, 32, 2, 116, 2, 19, 3, 2, 2, 2, 4, 5, 8, 2, 1, 2,
5, 20, 7, 35, 2, 2, 6, 20, 7, 36, 2, 2, 7, 20, 7, 34, 2, 2, 8, 20, 7, 38,
2, 2, 9, 20, 7, 37, 2, 2, 10, 20, 7, 39, 2, 2, 11, 12, 7, 3, 2, 2, 12,
13, 5, 2, 2, 2, 13, 14, 7, 4, 2, 2, 14, 20, 3, 2, 2, 2, 15, 16, 9, 2, 2,
2, 16, 20, 5, 2, 2, 18, 17, 18, 7, 15, 2, 2, 18, 20, 5, 2, 2, 3, 19, 4,
3, 2, 2, 2, 19, 6, 3, 2, 2, 2, 19, 7, 3, 2, 2, 2, 19, 8, 3, 2, 2, 2, 19,
9, 3, 2, 2, 2, 19, 10, 3, 2, 2, 2, 19, 11, 3, 2, 2, 2, 19, 15, 3, 2, 2,
2, 19, 17, 3, 2, 2, 2, 20, 88, 3, 2, 2, 2, 21, 22, 12, 19, 2, 2, 22, 23,
7, 21, 2, 2, 23, 87, 5, 2, 2, 20, 24, 25, 12, 17, 2, 2, 25, 26, 9, 3, 2,
2, 26, 87, 5, 2, 2, 18, 27, 28, 12, 16, 2, 2, 28, 29, 9, 4, 2, 2, 29, 87,
5, 2, 2, 17, 30, 31, 12, 15, 2, 2, 31, 32, 9, 5, 2, 2, 32, 87, 5, 2, 2,
16, 33, 34, 12, 12, 2, 2, 34, 35, 9, 6, 2, 2, 35, 36, 9, 7, 2, 2, 36, 37,
9, 6, 2, 2, 37, 87, 5, 2, 2, 13, 38, 39, 12, 11, 2, 2, 39, 40, 9, 8, 2,
2, 40, 41, 9, 7, 2, 2, 41, 42, 9, 8, 2, 2, 42, 87, 5, 2, 2, 12, 43, 44,
12, 10, 2, 2, 44, 45, 9, 9, 2, 2, 45, 87, 5, 2, 2, 11, 46, 47, 12, 9, 2,
2, 47, 48, 9, 10, 2, 2, 48, 87, 5, 2, 2, 10, 49, 50, 12, 8, 2, 2, 50, 51,
7, 24, 2, 2, 51, 87, 5, 2, 2, 9, 52, 53, 12, 7, 2, 2, 53, 54, 7, 26, 2,
2, 54, 87, 5, 2, 2, 8, 55, 56, 12, 6, 2, 2, 56, 57, 7, 25, 2, 2, 57, 87,
5, 2, 2, 7, 58, 59, 12, 5, 2, 2, 59, 60, 7, 27, 2, 2, 60, 87, 5, 2, 2,
6, 61, 62, 12, 4, 2, 2, 62, 63, 7, 28, 2, 2, 63, 87, 5, 2, 2, 5, 64, 65,
12, 20, 2, 2, 65, 66, 7, 14, 2, 2, 66, 87, 7, 38, 2, 2, 67, 68, 12, 14,
2, 2, 68, 69, 9, 11, 2, 2, 69, 70, 7, 5, 2, 2, 70, 75, 5, 2, 2, 2, 71,
72, 7, 6, 2, 2, 72, 74, 5, 2, 2, 2, 73, 71, 3, 2, 2, 2, 74, 77, 3, 2, 2,
2, 75, 73, 3, 2, 2, 2, 75, 76, 3, 2, 2, 2, 76, 79, 3, 2, 2, 2, 77, 75,
3, 2, 2, 2, 78, 80, 7, 6, 2, 2, 79, 78, 3, 2, 2, 2, 79, 80, 3, 2, 2, 2,
80, 81, 3, 2, 2, 2, 81, 82, 7, 7, 2, 2, 82, 87, 3, 2, 2, 2, 83, 84, 12,
13, 2, 2, 84, 85, 9, 11, 2, 2, 85, 87, 7, 33, 2, 2, 86, 21, 3, 2, 2, 2,
86, 24, 3, 2, 2, 2, 86, 27, 3, 2, 2, 2, 86, 30, 3, 2, 2, 2, 86, 33, 3,
2, 2, 2, 86, 38, 3, 2, 2, 2, 86, 43, 3, 2, 2, 2, 86, 46, 3, 2, 2, 2, 86,
49, 3, 2, 2, 2, 86, 52, 3, 2, 2, 2, 86, 55, 3, 2, 2, 2, 86, 58, 3, 2, 2,
2, 86, 61, 3, 2, 2, 2, 86, 64, 3, 2, 2, 2, 86, 67, 3, 2, 2, 2, 86, 83,
3, 2, 2, 2, 87, 90, 3, 2, 2, 2, 88, 86, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2,
89, 3, 3, 2, 2, 2, 90, 88, 3, 2, 2, 2, 7, 19, 75, 79, 86, 88,
2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 81, 10, 2, 12, 2, 14, 2, 84,
11, 2, 3, 2, 5, 2, 87, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 94, 10,
2, 12, 2, 14, 2, 97, 11, 2, 3, 2, 2, 3, 2, 3, 2, 2, 12, 4, 2, 16, 17, 29,
30, 3, 2, 18, 20, 3, 2, 16, 17, 3, 2, 22, 23, 3, 2, 8, 9, 4, 2, 38, 38,
40, 40, 3, 2, 10, 11, 3, 2, 8, 11, 3, 2, 12, 13, 3, 2, 31, 32, 2, 124,
2, 26, 3, 2, 2, 2, 4, 5, 8, 2, 1, 2, 5, 27, 7, 36, 2, 2, 6, 27, 7, 37,
2, 2, 7, 27, 7, 35, 2, 2, 8, 27, 7, 39, 2, 2, 9, 27, 7, 38, 2, 2, 10, 27,
7, 40, 2, 2, 11, 12, 7, 3, 2, 2, 12, 13, 5, 2, 2, 2, 13, 14, 7, 4, 2, 2,
14, 27, 3, 2, 2, 2, 15, 16, 9, 2, 2, 2, 16, 27, 5, 2, 2, 19, 17, 18, 7,
34, 2, 2, 18, 19, 7, 3, 2, 2, 19, 20, 5, 2, 2, 2, 20, 21, 7, 6, 2, 2, 21,
22, 5, 2, 2, 2, 22, 23, 7, 4, 2, 2, 23, 27, 3, 2, 2, 2, 24, 25, 7, 15,
2, 2, 25, 27, 5, 2, 2, 3, 26, 4, 3, 2, 2, 2, 26, 6, 3, 2, 2, 2, 26, 7,
3, 2, 2, 2, 26, 8, 3, 2, 2, 2, 26, 9, 3, 2, 2, 2, 26, 10, 3, 2, 2, 2, 26,
11, 3, 2, 2, 2, 26, 15, 3, 2, 2, 2, 26, 17, 3, 2, 2, 2, 26, 24, 3, 2, 2,
2, 27, 95, 3, 2, 2, 2, 28, 29, 12, 20, 2, 2, 29, 30, 7, 21, 2, 2, 30, 94,
5, 2, 2, 21, 31, 32, 12, 18, 2, 2, 32, 33, 9, 3, 2, 2, 33, 94, 5, 2, 2,
19, 34, 35, 12, 17, 2, 2, 35, 36, 9, 4, 2, 2, 36, 94, 5, 2, 2, 18, 37,
38, 12, 16, 2, 2, 38, 39, 9, 5, 2, 2, 39, 94, 5, 2, 2, 17, 40, 41, 12,
12, 2, 2, 41, 42, 9, 6, 2, 2, 42, 43, 9, 7, 2, 2, 43, 44, 9, 6, 2, 2, 44,
94, 5, 2, 2, 13, 45, 46, 12, 11, 2, 2, 46, 47, 9, 8, 2, 2, 47, 48, 9, 7,
2, 2, 48, 49, 9, 8, 2, 2, 49, 94, 5, 2, 2, 12, 50, 51, 12, 10, 2, 2, 51,
52, 9, 9, 2, 2, 52, 94, 5, 2, 2, 11, 53, 54, 12, 9, 2, 2, 54, 55, 9, 10,
2, 2, 55, 94, 5, 2, 2, 10, 56, 57, 12, 8, 2, 2, 57, 58, 7, 24, 2, 2, 58,
94, 5, 2, 2, 9, 59, 60, 12, 7, 2, 2, 60, 61, 7, 26, 2, 2, 61, 94, 5, 2,
2, 8, 62, 63, 12, 6, 2, 2, 63, 64, 7, 25, 2, 2, 64, 94, 5, 2, 2, 7, 65,
66, 12, 5, 2, 2, 66, 67, 7, 27, 2, 2, 67, 94, 5, 2, 2, 6, 68, 69, 12, 4,
2, 2, 69, 70, 7, 28, 2, 2, 70, 94, 5, 2, 2, 5, 71, 72, 12, 21, 2, 2, 72,
73, 7, 14, 2, 2, 73, 94, 7, 39, 2, 2, 74, 75, 12, 15, 2, 2, 75, 76, 9,
11, 2, 2, 76, 77, 7, 5, 2, 2, 77, 82, 5, 2, 2, 2, 78, 79, 7, 6, 2, 2, 79,
81, 5, 2, 2, 2, 80, 78, 3, 2, 2, 2, 81, 84, 3, 2, 2, 2, 82, 80, 3, 2, 2,
2, 82, 83, 3, 2, 2, 2, 83, 86, 3, 2, 2, 2, 84, 82, 3, 2, 2, 2, 85, 87,
7, 6, 2, 2, 86, 85, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 88, 3, 2, 2, 2,
88, 89, 7, 7, 2, 2, 89, 94, 3, 2, 2, 2, 90, 91, 12, 14, 2, 2, 91, 92, 9,
11, 2, 2, 92, 94, 7, 33, 2, 2, 93, 28, 3, 2, 2, 2, 93, 31, 3, 2, 2, 2,
93, 34, 3, 2, 2, 2, 93, 37, 3, 2, 2, 2, 93, 40, 3, 2, 2, 2, 93, 45, 3,
2, 2, 2, 93, 50, 3, 2, 2, 2, 93, 53, 3, 2, 2, 2, 93, 56, 3, 2, 2, 2, 93,
59, 3, 2, 2, 2, 93, 62, 3, 2, 2, 2, 93, 65, 3, 2, 2, 2, 93, 68, 3, 2, 2,
2, 93, 71, 3, 2, 2, 2, 93, 74, 3, 2, 2, 2, 93, 90, 3, 2, 2, 2, 94, 97,
3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 95, 96, 3, 2, 2, 2, 96, 3, 3, 2, 2, 2,
97, 95, 3, 2, 2, 2, 7, 26, 82, 86, 93, 95,
}
var literalNames = []string{
"", "'('", "')'", "'['", "','", "']'", "'<'", "'<='", "'>'", "'>='", "'=='",
"'!='", "", "", "'+'", "'-'", "'*'", "'/'", "'%'", "'**'", "'<<'", "'>>'",
"'&'", "'|'", "'^'", "", "", "'~'", "", "'in'", "'not in'",
"'&'", "'|'", "'^'", "", "", "'~'", "", "'in'", "'not in'", "", "'json_contains'",
}
var symbolicNames = []string{
"", "", "", "", "", "", "LT", "LE", "GT", "GE", "EQ", "NE", "LIKE", "EXISTS",
"ADD", "SUB", "MUL", "DIV", "MOD", "POW", "SHL", "SHR", "BAND", "BOR",
"BXOR", "AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm", "BooleanConstant",
"IntegerConstant", "FloatingConstant", "Identifier", "StringLiteral", "JSONIdentifier",
"Whitespace", "Newline",
"BXOR", "AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm", "JSONContains",
"BooleanConstant", "IntegerConstant", "FloatingConstant", "Identifier",
"StringLiteral", "JSONIdentifier", "Whitespace", "Newline",
}
var ruleNames = []string{
@ -140,14 +143,15 @@ const (
PlanParserIN = 29
PlanParserNIN = 30
PlanParserEmptyTerm = 31
PlanParserBooleanConstant = 32
PlanParserIntegerConstant = 33
PlanParserFloatingConstant = 34
PlanParserIdentifier = 35
PlanParserStringLiteral = 36
PlanParserJSONIdentifier = 37
PlanParserWhitespace = 38
PlanParserNewline = 39
PlanParserJSONContains = 32
PlanParserBooleanConstant = 33
PlanParserIntegerConstant = 34
PlanParserFloatingConstant = 35
PlanParserIdentifier = 36
PlanParserStringLiteral = 37
PlanParserJSONIdentifier = 38
PlanParserWhitespace = 39
PlanParserNewline = 40
)
// PlanParserRULE_expr is the PlanParser rule.
@ -1093,6 +1097,61 @@ func (s *TermContext) Accept(visitor antlr.ParseTreeVisitor) interface{} {
}
}
type JSONContainsContext struct {
*ExprContext
}
func NewJSONContainsContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *JSONContainsContext {
var p = new(JSONContainsContext)
p.ExprContext = NewEmptyExprContext()
p.parser = parser
p.CopyFrom(ctx.(*ExprContext))
return p
}
func (s *JSONContainsContext) GetRuleContext() antlr.RuleContext {
return s
}
func (s *JSONContainsContext) JSONContains() antlr.TerminalNode {
return s.GetToken(PlanParserJSONContains, 0)
}
func (s *JSONContainsContext) AllExpr() []IExprContext {
var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IExprContext)(nil)).Elem())
var tst = make([]IExprContext, len(ts))
for i, t := range ts {
if t != nil {
tst[i] = t.(IExprContext)
}
}
return tst
}
func (s *JSONContainsContext) Expr(i int) IExprContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i)
if t == nil {
return nil
}
return t.(IExprContext)
}
func (s *JSONContainsContext) Accept(visitor antlr.ParseTreeVisitor) interface{} {
switch t := visitor.(type) {
case PlanVisitor:
return t.VisitJSONContains(s)
default:
return t.VisitChildren(s)
}
}
type RangeContext struct {
*ExprContext
op1 antlr.Token
@ -1564,7 +1623,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
var _alt int
p.EnterOuterAlt(localctx, 1)
p.SetState(17)
p.SetState(24)
p.GetErrorHandler().Sync(p)
switch p.GetTokenStream().LA(1) {
@ -1664,7 +1723,36 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
{
p.SetState(14)
p.expr(16)
p.expr(17)
}
case PlanParserJSONContains:
localctx = NewJSONContainsContext(p, localctx)
p.SetParserRuleContext(localctx)
_prevctx = localctx
{
p.SetState(15)
p.Match(PlanParserJSONContains)
}
{
p.SetState(16)
p.Match(PlanParserT__0)
}
{
p.SetState(17)
p.expr(0)
}
{
p.SetState(18)
p.Match(PlanParserT__3)
}
{
p.SetState(19)
p.expr(0)
}
{
p.SetState(20)
p.Match(PlanParserT__1)
}
case PlanParserEXISTS:
@ -1672,11 +1760,11 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
p.SetParserRuleContext(localctx)
_prevctx = localctx
{
p.SetState(15)
p.SetState(22)
p.Match(PlanParserEXISTS)
}
{
p.SetState(16)
p.SetState(23)
p.expr(1)
}
@ -1684,7 +1772,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil))
}
p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1))
p.SetState(86)
p.SetState(93)
p.GetErrorHandler().Sync(p)
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 4, p.GetParserRuleContext())
@ -1694,36 +1782,36 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
p.TriggerExitRuleEvent()
}
_prevctx = localctx
p.SetState(84)
p.SetState(91)
p.GetErrorHandler().Sync(p)
switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 3, p.GetParserRuleContext()) {
case 1:
localctx = NewPowerContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(19)
p.SetState(26)
if !(p.Precpred(p.GetParserRuleContext(), 17)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 17)", ""))
if !(p.Precpred(p.GetParserRuleContext(), 18)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 18)", ""))
}
{
p.SetState(20)
p.SetState(27)
p.Match(PlanParserPOW)
}
{
p.SetState(21)
p.expr(18)
p.SetState(28)
p.expr(19)
}
case 2:
localctx = NewMulDivModContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(22)
p.SetState(29)
if !(p.Precpred(p.GetParserRuleContext(), 15)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 15)", ""))
if !(p.Precpred(p.GetParserRuleContext(), 16)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 16)", ""))
}
{
p.SetState(23)
p.SetState(30)
var _lt = p.GetTokenStream().LT(1)
@ -1741,20 +1829,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(24)
p.expr(16)
p.SetState(31)
p.expr(17)
}
case 3:
localctx = NewAddSubContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(25)
p.SetState(32)
if !(p.Precpred(p.GetParserRuleContext(), 14)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 14)", ""))
if !(p.Precpred(p.GetParserRuleContext(), 15)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 15)", ""))
}
{
p.SetState(26)
p.SetState(33)
var _lt = p.GetTokenStream().LT(1)
@ -1772,20 +1860,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(27)
p.expr(15)
p.SetState(34)
p.expr(16)
}
case 4:
localctx = NewShiftContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(28)
p.SetState(35)
if !(p.Precpred(p.GetParserRuleContext(), 13)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 13)", ""))
if !(p.Precpred(p.GetParserRuleContext(), 14)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 14)", ""))
}
{
p.SetState(29)
p.SetState(36)
var _lt = p.GetTokenStream().LT(1)
@ -1803,20 +1891,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(30)
p.expr(14)
p.SetState(37)
p.expr(15)
}
case 5:
localctx = NewRangeContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(31)
p.SetState(38)
if !(p.Precpred(p.GetParserRuleContext(), 10)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 10)", ""))
}
{
p.SetState(32)
p.SetState(39)
var _lt = p.GetTokenStream().LT(1)
@ -1834,7 +1922,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(33)
p.SetState(40)
_la = p.GetTokenStream().LA(1)
if !(_la == PlanParserIdentifier || _la == PlanParserJSONIdentifier) {
@ -1845,7 +1933,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(34)
p.SetState(41)
var _lt = p.GetTokenStream().LT(1)
@ -1863,20 +1951,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(35)
p.SetState(42)
p.expr(11)
}
case 6:
localctx = NewReverseRangeContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(36)
p.SetState(43)
if !(p.Precpred(p.GetParserRuleContext(), 9)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 9)", ""))
}
{
p.SetState(37)
p.SetState(44)
var _lt = p.GetTokenStream().LT(1)
@ -1894,7 +1982,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(38)
p.SetState(45)
_la = p.GetTokenStream().LA(1)
if !(_la == PlanParserIdentifier || _la == PlanParserJSONIdentifier) {
@ -1905,7 +1993,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(39)
p.SetState(46)
var _lt = p.GetTokenStream().LT(1)
@ -1923,20 +2011,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(40)
p.SetState(47)
p.expr(10)
}
case 7:
localctx = NewRelationalContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(41)
p.SetState(48)
if !(p.Precpred(p.GetParserRuleContext(), 8)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 8)", ""))
}
{
p.SetState(42)
p.SetState(49)
var _lt = p.GetTokenStream().LT(1)
@ -1954,20 +2042,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(43)
p.SetState(50)
p.expr(9)
}
case 8:
localctx = NewEqualityContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(44)
p.SetState(51)
if !(p.Precpred(p.GetParserRuleContext(), 7)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 7)", ""))
}
{
p.SetState(45)
p.SetState(52)
var _lt = p.GetTokenStream().LT(1)
@ -1985,122 +2073,122 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(46)
p.SetState(53)
p.expr(8)
}
case 9:
localctx = NewBitAndContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(47)
p.SetState(54)
if !(p.Precpred(p.GetParserRuleContext(), 6)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 6)", ""))
}
{
p.SetState(48)
p.SetState(55)
p.Match(PlanParserBAND)
}
{
p.SetState(49)
p.SetState(56)
p.expr(7)
}
case 10:
localctx = NewBitXorContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(50)
p.SetState(57)
if !(p.Precpred(p.GetParserRuleContext(), 5)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 5)", ""))
}
{
p.SetState(51)
p.SetState(58)
p.Match(PlanParserBXOR)
}
{
p.SetState(52)
p.SetState(59)
p.expr(6)
}
case 11:
localctx = NewBitOrContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(53)
p.SetState(60)
if !(p.Precpred(p.GetParserRuleContext(), 4)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 4)", ""))
}
{
p.SetState(54)
p.SetState(61)
p.Match(PlanParserBOR)
}
{
p.SetState(55)
p.SetState(62)
p.expr(5)
}
case 12:
localctx = NewLogicalAndContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(56)
p.SetState(63)
if !(p.Precpred(p.GetParserRuleContext(), 3)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 3)", ""))
}
{
p.SetState(57)
p.SetState(64)
p.Match(PlanParserAND)
}
{
p.SetState(58)
p.SetState(65)
p.expr(4)
}
case 13:
localctx = NewLogicalOrContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(59)
p.SetState(66)
if !(p.Precpred(p.GetParserRuleContext(), 2)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 2)", ""))
}
{
p.SetState(60)
p.SetState(67)
p.Match(PlanParserOR)
}
{
p.SetState(61)
p.SetState(68)
p.expr(3)
}
case 14:
localctx = NewLikeContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(62)
p.SetState(69)
if !(p.Precpred(p.GetParserRuleContext(), 18)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 18)", ""))
if !(p.Precpred(p.GetParserRuleContext(), 19)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 19)", ""))
}
{
p.SetState(63)
p.SetState(70)
p.Match(PlanParserLIKE)
}
{
p.SetState(64)
p.SetState(71)
p.Match(PlanParserStringLiteral)
}
case 15:
localctx = NewTermContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(65)
p.SetState(72)
if !(p.Precpred(p.GetParserRuleContext(), 12)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 12)", ""))
if !(p.Precpred(p.GetParserRuleContext(), 13)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 13)", ""))
}
{
p.SetState(66)
p.SetState(73)
var _lt = p.GetTokenStream().LT(1)
@ -2119,59 +2207,59 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
{
p.SetState(67)
p.SetState(74)
p.Match(PlanParserT__2)
}
{
p.SetState(68)
p.SetState(75)
p.expr(0)
}
p.SetState(73)
p.SetState(80)
p.GetErrorHandler().Sync(p)
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 1, p.GetParserRuleContext())
for _alt != 2 && _alt != antlr.ATNInvalidAltNumber {
if _alt == 1 {
{
p.SetState(69)
p.SetState(76)
p.Match(PlanParserT__3)
}
{
p.SetState(70)
p.SetState(77)
p.expr(0)
}
}
p.SetState(75)
p.SetState(82)
p.GetErrorHandler().Sync(p)
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 1, p.GetParserRuleContext())
}
p.SetState(77)
p.SetState(84)
p.GetErrorHandler().Sync(p)
_la = p.GetTokenStream().LA(1)
if _la == PlanParserT__3 {
{
p.SetState(76)
p.SetState(83)
p.Match(PlanParserT__3)
}
}
{
p.SetState(79)
p.SetState(86)
p.Match(PlanParserT__4)
}
case 16:
localctx = NewEmptyTermContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(81)
p.SetState(88)
if !(p.Precpred(p.GetParserRuleContext(), 11)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 11)", ""))
if !(p.Precpred(p.GetParserRuleContext(), 12)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 12)", ""))
}
{
p.SetState(82)
p.SetState(89)
var _lt = p.GetTokenStream().LT(1)
@ -2189,14 +2277,14 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(83)
p.SetState(90)
p.Match(PlanParserEmptyTerm)
}
}
}
p.SetState(88)
p.SetState(95)
p.GetErrorHandler().Sync(p)
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 4, p.GetParserRuleContext())
}
@ -2221,16 +2309,16 @@ func (p *PlanParser) Sempred(localctx antlr.RuleContext, ruleIndex, predIndex in
func (p *PlanParser) Expr_Sempred(localctx antlr.RuleContext, predIndex int) bool {
switch predIndex {
case 0:
return p.Precpred(p.GetParserRuleContext(), 17)
return p.Precpred(p.GetParserRuleContext(), 18)
case 1:
return p.Precpred(p.GetParserRuleContext(), 15)
return p.Precpred(p.GetParserRuleContext(), 16)
case 2:
return p.Precpred(p.GetParserRuleContext(), 14)
return p.Precpred(p.GetParserRuleContext(), 15)
case 3:
return p.Precpred(p.GetParserRuleContext(), 13)
return p.Precpred(p.GetParserRuleContext(), 14)
case 4:
return p.Precpred(p.GetParserRuleContext(), 10)
@ -2260,13 +2348,13 @@ func (p *PlanParser) Expr_Sempred(localctx antlr.RuleContext, predIndex int) boo
return p.Precpred(p.GetParserRuleContext(), 2)
case 13:
return p.Precpred(p.GetParserRuleContext(), 18)
return p.Precpred(p.GetParserRuleContext(), 19)
case 14:
return p.Precpred(p.GetParserRuleContext(), 12)
return p.Precpred(p.GetParserRuleContext(), 13)
case 15:
return p.Precpred(p.GetParserRuleContext(), 11)
return p.Precpred(p.GetParserRuleContext(), 12)
default:
panic("No predicate with index: " + fmt.Sprint(predIndex))

View File

@ -58,6 +58,9 @@ type PlanVisitor interface {
// Visit a parse tree produced by PlanParser#Term.
VisitTerm(ctx *TermContext) interface{}
// Visit a parse tree produced by PlanParser#JSONContains.
VisitJSONContains(ctx *JSONContainsContext) interface{}
// Visit a parse tree produced by PlanParser#Range.
VisitRange(ctx *RangeContext) interface{}

View File

@ -1023,3 +1023,42 @@ func (v *ParserVisitor) VisitExists(ctx *parser.ExistsContext) interface{} {
dataType: schemapb.DataType_Bool,
}
}
func (v *ParserVisitor) VisitJSONContains(ctx *parser.JSONContainsContext) interface{} {
field := ctx.Expr(0).Accept(v)
if err := getError(field); err != nil {
return err
}
columnInfo := toColumnInfo(field.(*ExprWithType))
if columnInfo == nil || !typeutil.IsJSONType(columnInfo.GetDataType()) {
return fmt.Errorf(
"json_contains operation are only supported on json fields now, got: %s", ctx.Expr(0).GetText())
}
element := ctx.Expr(1).Accept(v)
if err := getError(element); err != nil {
return err
}
elementValue := getGenericValue(element)
if elementValue == nil {
return fmt.Errorf(
"json_contains operation are only supported explicitly specified element, got: %s", ctx.Expr(1).GetText())
}
values := make([]*planpb.GenericValue, 1)
values[0] = elementValue
expr := &planpb.Expr{
Expr: &planpb.Expr_TermExpr{
TermExpr: &planpb.TermExpr{
ColumnInfo: columnInfo,
Values: values,
IsInField: true,
},
},
}
return &ExprWithType{
expr: expr,
dataType: schemapb.DataType_Bool,
}
}

View File

@ -117,10 +117,12 @@ func CreateSearchPlan(schemaPb *schemapb.CollectionSchema, exprStr string, vecto
expr, err := ParseExpr(schema, exprStr)
if err != nil {
log.Info("CreateSearchPlan failed", zap.Error(err))
return nil, err
}
vectorField, err := schema.GetFieldFromName(vectorFieldName)
if err != nil {
log.Info("CreateSearchPlan failed", zap.Error(err))
return nil, err
}
fieldID := vectorField.FieldID

View File

@ -436,6 +436,7 @@ func TestExpr_Invalid(t *testing.T) {
`VarCharField in [4.0]`,
`Int32Field in [4.0]`,
`FloatField in [5, 6.0, true]`,
`1 in A`,
// ----------------------- range -------------------------
//`1 < not_in_schema < 2`, // maybe in json
`1 < 3 < 2`,
@ -1174,6 +1175,42 @@ func Test_InvalidExprWithMultipleJSONField(t *testing.T) {
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `A in [1, 2, 3]`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `A not in [1, 2, 3]`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `"1" in A`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `"1" not in A`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
}
func Test_exprWithSingleQuotes(t *testing.T) {
@ -1234,3 +1271,248 @@ func Test_exprWithSingleQuotes(t *testing.T) {
})
assert.Error(t, err)
}
func Test_JSONContains(t *testing.T) {
schema := newTestSchema()
expr := ""
var err error
expr = `json_contains(A, 10)`
plan, err := CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.NoError(t, err)
assert.NotNil(t, plan.GetVectorAnns().GetPredicates().GetTermExpr())
expr = `not json_contains(A, 10)`
plan, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.NoError(t, err)
assert.NotNil(t, plan.GetVectorAnns().GetPredicates().GetUnaryExpr())
expr = `json_contains(A, 10.5)`
plan, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.NoError(t, err)
assert.NotNil(t, plan.GetVectorAnns().GetPredicates().GetTermExpr())
expr = `not json_contains(A, 10.5)`
plan, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.NoError(t, err)
assert.NotNil(t, plan.GetVectorAnns().GetPredicates().GetUnaryExpr())
expr = `json_contains(A, "10")`
plan, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.NoError(t, err)
assert.NotNil(t, plan.GetVectorAnns().GetPredicates().GetTermExpr())
expr = `not json_contains(A, "10")`
plan, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.NoError(t, err)
assert.NotNil(t, plan.GetVectorAnns().GetPredicates().GetUnaryExpr())
expr = `json_contains($meta["A"], 10)`
plan, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.NoError(t, err)
assert.NotNil(t, plan.GetVectorAnns().GetPredicates().GetTermExpr())
expr = `not json_contains($meta["A"], 10)`
plan, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.NoError(t, err)
assert.NotNil(t, plan.GetVectorAnns().GetPredicates().GetUnaryExpr())
expr = `json_contains(JSONField["x"], 5)`
plan, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.NoError(t, err)
assert.NotNil(t, plan.GetVectorAnns().GetPredicates().GetTermExpr())
expr = `not json_contains(JSONField["x"], 5)`
plan, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.NoError(t, err)
assert.NotNil(t, plan.GetVectorAnns().GetPredicates().GetUnaryExpr())
}
func Test_InvalidJSONContains(t *testing.T) {
schema := newTestSchema()
expr := ""
var err error
expr = `json_contains(10, A)`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains(1, [1,2,3])`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains([1,2,3], 1)`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains([1,2,3], [1,2,3])`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains([1,2,3], [1,2])`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains(A, [1,2,3])`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains($meta, 1)`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains(A, B)`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `not json_contains(A, B)`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains(A, B > 5)`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains(StringField, "a")`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains(A, StringField > 5)`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains(A)`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains(A, 5, C)`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
expr = `json_contains(JSONField, 5)`
_, err = CreateSearchPlan(schema, expr, "FloatVectorField", &planpb.QueryInfo{
Topk: 0,
MetricType: "",
SearchParams: "",
RoundDecimal: 0,
})
assert.Error(t, err)
}