mirror of https://github.com/milvus-io/milvus.git
Support json contains for json field (#24720)
Signed-off-by: cai.zhang <cai.zhang@zilliz.com>pull/24795/head
parent
2bcd1bb0d8
commit
853b7d0054
|
@ -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:
|
||||
|
|
|
@ -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]
|
|
@ -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
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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{}
|
||||
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue