Add wasm in milvus (#19489)

1. Add function storage in rootcoord

2. Parse udf expression

3. Execute wasm in core

Signed-off-by: Ziyu Wang <15871035978@163.com>

Signed-off-by: Ziyu Wang <15871035978@163.com>
revert-19489-summer/udf
mumon 2022-10-13 09:35:23 +08:00 committed by GitHub
parent 09255e5507
commit c346f29a4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
77 changed files with 9331 additions and 1252 deletions

View File

@ -370,6 +370,10 @@ const (
MsgType_SystemInfo MsgType = 601
MsgType_GetRecoveryInfo MsgType = 602
MsgType_GetSegmentState MsgType = 603
// FUNCTION
MsgType_CreateFunction MsgType = 700
MsgType_DropFunction MsgType = 701
MsgType_GetFunctionInfo MsgType = 702
// SYSTEM CONTROL
MsgType_TimeTick MsgType = 1200
MsgType_QueryNodeStats MsgType = 1201
@ -456,6 +460,9 @@ var MsgType_name = map[int32]string{
601: "SystemInfo",
602: "GetRecoveryInfo",
603: "GetSegmentState",
700: "CreateFunction",
701: "DropFunction",
702: "GetFunctionInfo",
1200: "TimeTick",
1201: "QueryNodeStats",
1202: "LoadIndex",
@ -539,6 +546,9 @@ var MsgType_value = map[string]int32{
"SystemInfo": 601,
"GetRecoveryInfo": 602,
"GetSegmentState": 603,
"CreateFunction": 700,
"DropFunction": 701,
"GetFunctionInfo": 702,
"TimeTick": 1200,
"QueryNodeStats": 1201,
"LoadIndex": 1202,
@ -1393,164 +1403,165 @@ func init() {
func init() { proto.RegisterFile("common.proto", fileDescriptor_555bd8c177793206) }
var fileDescriptor_555bd8c177793206 = []byte{
// 2531 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xc9, 0x73, 0x24, 0x47,
0xd5, 0x57, 0xa9, 0x5b, 0x4b, 0x67, 0xb7, 0x5a, 0x4f, 0x29, 0x8d, 0xa6, 0x3d, 0x8b, 0x47, 0xd6,
0x67, 0x7f, 0x9f, 0xbe, 0xfe, 0x6c, 0x8d, 0x3d, 0x8e, 0xf8, 0x20, 0x88, 0x30, 0x81, 0xd4, 0x2d,
0x69, 0x14, 0xd6, 0x46, 0x49, 0x63, 0x08, 0x22, 0x60, 0x22, 0xbb, 0xea, 0xa9, 0x95, 0x33, 0xd5,
0x95, 0x45, 0x65, 0xb6, 0x46, 0xcd, 0xc9, 0x18, 0xf0, 0x85, 0x0b, 0x98, 0x7f, 0x80, 0x3f, 0x00,
0x08, 0x76, 0x38, 0xb2, 0x63, 0xb3, 0x9d, 0xd9, 0xe1, 0x08, 0x77, 0x16, 0xe3, 0x95, 0x78, 0x59,
0xd5, 0x55, 0xd5, 0x9a, 0x31, 0x1c, 0xb8, 0x75, 0xfe, 0xde, 0xcb, 0xb7, 0xe5, 0xdb, 0xaa, 0x59,
0xcd, 0x53, 0xbd, 0x9e, 0x0a, 0x57, 0xa3, 0x58, 0x19, 0xc5, 0xe7, 0x7b, 0x32, 0x38, 0xed, 0xeb,
0xe4, 0xb4, 0x9a, 0x90, 0x2e, 0x2d, 0x75, 0x95, 0xea, 0x06, 0x78, 0xdd, 0x82, 0x9d, 0xfe, 0xf1,
0x75, 0x1f, 0xb5, 0x17, 0xcb, 0xc8, 0xa8, 0x38, 0x61, 0x5c, 0xbe, 0xcd, 0x26, 0x0f, 0x8d, 0x30,
0x7d, 0xcd, 0x9f, 0x61, 0x0c, 0xe3, 0x58, 0xc5, 0xb7, 0x3d, 0xe5, 0x63, 0xc3, 0x59, 0x72, 0x56,
0xea, 0x37, 0x1e, 0x5e, 0x7d, 0x80, 0xd4, 0xd5, 0x0d, 0x62, 0x6b, 0x29, 0x1f, 0xdd, 0x0a, 0x0e,
0x7f, 0xf2, 0x45, 0x36, 0x19, 0xa3, 0xd0, 0x2a, 0x6c, 0x8c, 0x2f, 0x39, 0x2b, 0x15, 0x37, 0x3d,
0x2d, 0xff, 0x3f, 0xab, 0x3d, 0x8b, 0x83, 0xe7, 0x44, 0xd0, 0xc7, 0x03, 0x21, 0x63, 0x0e, 0xac,
0x74, 0x17, 0x07, 0x56, 0x7e, 0xc5, 0xa5, 0x9f, 0x7c, 0x81, 0x4d, 0x9c, 0x12, 0x39, 0xbd, 0x98,
0x1c, 0x96, 0x9f, 0x66, 0xd5, 0x67, 0x71, 0xd0, 0x16, 0x46, 0xbc, 0xc3, 0x35, 0xce, 0xca, 0xbe,
0x30, 0xc2, 0xde, 0xaa, 0xb9, 0xf6, 0xf7, 0xf2, 0x15, 0x56, 0x5e, 0x0f, 0x54, 0x27, 0x17, 0xe9,
0x58, 0x62, 0x2a, 0xf2, 0x94, 0xc1, 0x41, 0x20, 0x3c, 0x3c, 0x51, 0x81, 0x8f, 0xb1, 0x35, 0x89,
0xe4, 0x1a, 0xd1, 0x1d, 0xca, 0x35, 0xa2, 0xcb, 0xdf, 0xcd, 0xca, 0x66, 0x10, 0x25, 0xd6, 0xd4,
0x6f, 0x3c, 0xfa, 0xc0, 0x08, 0x14, 0xc4, 0x1c, 0x0d, 0x22, 0x74, 0xed, 0x0d, 0x0a, 0x81, 0x55,
0xa4, 0x1b, 0xa5, 0xa5, 0xd2, 0x4a, 0xcd, 0x4d, 0x4f, 0xcb, 0x1f, 0x1e, 0xd1, 0xbb, 0x15, 0xab,
0x7e, 0xc4, 0xb7, 0x59, 0x2d, 0xca, 0x31, 0xdd, 0x70, 0x96, 0x4a, 0x2b, 0xd5, 0x1b, 0x8f, 0xfd,
0x3b, 0x6d, 0xd6, 0x68, 0x77, 0xe4, 0xea, 0xf2, 0x13, 0x6c, 0x6a, 0xcd, 0xf7, 0x63, 0xd4, 0x9a,
0xd7, 0xd9, 0xb8, 0x8c, 0x52, 0x67, 0xc6, 0x65, 0x44, 0x31, 0x8a, 0x54, 0x6c, 0xac, 0x2f, 0x25,
0xd7, 0xfe, 0x5e, 0x7e, 0xc9, 0x61, 0x53, 0xbb, 0xba, 0xbb, 0x2e, 0x34, 0xf2, 0x77, 0xb1, 0xe9,
0x9e, 0xee, 0xde, 0xb6, 0xfe, 0x26, 0x2f, 0x7e, 0xe5, 0x81, 0x16, 0xec, 0xea, 0xae, 0xf5, 0x73,
0xaa, 0x97, 0xfc, 0xa0, 0x00, 0xf7, 0x74, 0x77, 0xbb, 0x9d, 0x4a, 0x4e, 0x0e, 0xfc, 0x0a, 0xab,
0x18, 0xd9, 0x43, 0x6d, 0x44, 0x2f, 0x6a, 0x94, 0x96, 0x9c, 0x95, 0xb2, 0x9b, 0x03, 0xfc, 0x12,
0x9b, 0xd6, 0xaa, 0x1f, 0x7b, 0xb8, 0xdd, 0x6e, 0x94, 0xed, 0xb5, 0xec, 0xbc, 0xfc, 0x0c, 0xab,
0xec, 0xea, 0xee, 0x4d, 0x14, 0x3e, 0xc6, 0xfc, 0x49, 0x56, 0xee, 0x08, 0x9d, 0x58, 0x54, 0x7d,
0x67, 0x8b, 0xc8, 0x03, 0xd7, 0x72, 0x2e, 0x7f, 0x84, 0xd5, 0xda, 0xbb, 0x3b, 0xff, 0x81, 0x04,
0x32, 0x5d, 0x9f, 0x88, 0xd8, 0xdf, 0x13, 0xbd, 0x61, 0x22, 0xe6, 0xc0, 0xf2, 0xeb, 0x0e, 0xab,
0x1d, 0xc4, 0xf2, 0x54, 0x06, 0xd8, 0xc5, 0x8d, 0x33, 0xc3, 0xdf, 0xc7, 0xaa, 0xaa, 0x73, 0x07,
0x3d, 0x53, 0x8c, 0xdd, 0xb5, 0x07, 0xea, 0xd9, 0xb7, 0x7c, 0x36, 0x7c, 0x4c, 0x65, 0xbf, 0xf9,
0x3e, 0x83, 0x54, 0x42, 0x34, 0x14, 0xfc, 0x2f, 0x53, 0x2e, 0x11, 0x93, 0x19, 0xe1, 0xce, 0xaa,
0x51, 0x80, 0x37, 0xd9, 0x5c, 0x2a, 0x30, 0x14, 0x3d, 0xbc, 0x2d, 0x43, 0x1f, 0xcf, 0xec, 0x23,
0x4c, 0x0c, 0x79, 0xc9, 0x95, 0x6d, 0x82, 0xf9, 0xe3, 0x8c, 0xdf, 0xc7, 0xab, 0xed, 0xa3, 0x4c,
0xb8, 0x70, 0x8e, 0x59, 0x37, 0x5f, 0xa8, 0xb0, 0x4a, 0x56, 0xf3, 0xbc, 0xca, 0xa6, 0x0e, 0xfb,
0x9e, 0x87, 0x5a, 0xc3, 0x18, 0x9f, 0x67, 0xb3, 0xb7, 0x42, 0x3c, 0x8b, 0xd0, 0x33, 0xe8, 0x5b,
0x1e, 0x70, 0xf8, 0x1c, 0x9b, 0x69, 0xa9, 0x30, 0x44, 0xcf, 0x6c, 0x0a, 0x19, 0xa0, 0x0f, 0xe3,
0x7c, 0x81, 0xc1, 0x01, 0xc6, 0x3d, 0xa9, 0xb5, 0x54, 0x61, 0x1b, 0x43, 0x89, 0x3e, 0x94, 0xf8,
0x45, 0x36, 0xdf, 0x52, 0x41, 0x80, 0x9e, 0x91, 0x2a, 0xdc, 0x53, 0x66, 0xe3, 0x4c, 0x6a, 0xa3,
0xa1, 0x4c, 0x62, 0xb7, 0x83, 0x00, 0xbb, 0x22, 0x58, 0x8b, 0xbb, 0xfd, 0x1e, 0x86, 0x06, 0x26,
0x48, 0x46, 0x0a, 0xb6, 0x65, 0x0f, 0x43, 0x92, 0x04, 0x53, 0x05, 0xd4, 0x5a, 0x4b, 0xb1, 0x85,
0x69, 0xfe, 0x10, 0xbb, 0x90, 0xa2, 0x05, 0x05, 0xa2, 0x87, 0x50, 0xe1, 0xb3, 0xac, 0x9a, 0x92,
0x8e, 0xf6, 0x0f, 0x9e, 0x05, 0x56, 0x90, 0xe0, 0xaa, 0x7b, 0x2e, 0x7a, 0x2a, 0xf6, 0xa1, 0x5a,
0x30, 0xe1, 0x39, 0xf4, 0x8c, 0x8a, 0xb7, 0xdb, 0x50, 0x23, 0x83, 0x53, 0xf0, 0x10, 0x45, 0xec,
0x9d, 0xb8, 0xa8, 0xfb, 0x81, 0x81, 0x19, 0x0e, 0xac, 0xb6, 0x29, 0x03, 0xdc, 0x53, 0x66, 0x53,
0xf5, 0x43, 0x1f, 0xea, 0xbc, 0xce, 0xd8, 0x2e, 0x1a, 0x91, 0x46, 0x60, 0x96, 0xd4, 0xb6, 0x84,
0x77, 0x82, 0x29, 0x00, 0x7c, 0x91, 0xf1, 0x96, 0x08, 0x43, 0x65, 0x5a, 0x31, 0x0a, 0x83, 0x9b,
0xb6, 0x9a, 0x61, 0x8e, 0xcc, 0x19, 0xc1, 0x65, 0x80, 0xc0, 0x73, 0xee, 0x36, 0x06, 0x98, 0x71,
0xcf, 0xe7, 0xdc, 0x29, 0x4e, 0xdc, 0x0b, 0x64, 0xfc, 0x7a, 0x5f, 0x06, 0xbe, 0x0d, 0x49, 0xf2,
0x2c, 0x17, 0xc8, 0xc6, 0xd4, 0xf8, 0xbd, 0x9d, 0xed, 0xc3, 0x23, 0x58, 0xe4, 0x17, 0xd8, 0x5c,
0x8a, 0xec, 0xa2, 0x89, 0xa5, 0x67, 0x83, 0x77, 0x91, 0x4c, 0xdd, 0xef, 0x9b, 0xfd, 0xe3, 0x5d,
0xec, 0xa9, 0x78, 0x00, 0x0d, 0x7a, 0x50, 0x2b, 0x69, 0xf8, 0x44, 0xf0, 0x10, 0x69, 0xd8, 0xe8,
0x45, 0x66, 0x90, 0x87, 0x17, 0x2e, 0xf1, 0xcb, 0xec, 0xe2, 0xad, 0xc8, 0x17, 0x06, 0xb7, 0x7b,
0xd4, 0x6a, 0x8e, 0x84, 0xbe, 0x4b, 0xee, 0xf6, 0x63, 0x84, 0xcb, 0xfc, 0x12, 0x5b, 0x1c, 0x7d,
0x8b, 0x2c, 0x58, 0x57, 0xe8, 0x62, 0xe2, 0x6d, 0x2b, 0x46, 0x1f, 0x43, 0x23, 0x45, 0x30, 0xbc,
0x78, 0x35, 0x97, 0x7a, 0x3f, 0xf1, 0x61, 0x22, 0x26, 0x9e, 0xdf, 0x4f, 0xbc, 0xc6, 0x1b, 0x6c,
0x61, 0x0b, 0xcd, 0xfd, 0x94, 0x25, 0xa2, 0xec, 0x48, 0x6d, 0x49, 0xb7, 0x34, 0xc6, 0x7a, 0x48,
0x79, 0x84, 0x73, 0x56, 0xdf, 0x42, 0x43, 0xe0, 0x10, 0x5b, 0xa6, 0x38, 0x25, 0xe6, 0xb9, 0x2a,
0xc0, 0x21, 0xfc, 0x5f, 0x14, 0x83, 0x76, 0xac, 0xa2, 0x22, 0xf8, 0x28, 0xb9, 0xb9, 0x1f, 0x61,
0x2c, 0x0c, 0x92, 0x8c, 0x22, 0xed, 0x31, 0x92, 0x73, 0x88, 0x14, 0x81, 0x22, 0xfc, 0xdf, 0x39,
0x5c, 0xd4, 0xfa, 0x3f, 0x94, 0xc3, 0x29, 0x37, 0x26, 0x7d, 0x72, 0x48, 0x5a, 0x21, 0xaf, 0x53,
0x25, 0x59, 0xfd, 0x0f, 0x89, 0xff, 0x4b, 0xa9, 0x92, 0xdc, 0xdb, 0x8a, 0x45, 0x68, 0x86, 0x78,
0x93, 0x3f, 0xc2, 0xae, 0xba, 0x78, 0x1c, 0xa3, 0x3e, 0x39, 0x50, 0x81, 0xf4, 0x06, 0xdb, 0xe1,
0xb1, 0xca, 0x52, 0x92, 0x58, 0xfe, 0x8f, 0x2c, 0xa1, 0xb0, 0x24, 0xf4, 0x21, 0xfc, 0x38, 0xc5,
0x64, 0x4f, 0x99, 0x43, 0x6a, 0x87, 0x3b, 0xb6, 0xc1, 0xc2, 0x13, 0xa4, 0x65, 0x4f, 0xb9, 0x18,
0x05, 0xd2, 0x13, 0x6b, 0xa7, 0x42, 0x06, 0xa2, 0x13, 0x20, 0xac, 0x52, 0x50, 0x0e, 0xb1, 0x4b,
0x25, 0x9b, 0xbd, 0xef, 0x75, 0x3e, 0xc3, 0x2a, 0x9b, 0x2a, 0xf6, 0xb0, 0x8d, 0xe1, 0x00, 0x9e,
0xa4, 0xa3, 0x2b, 0x0c, 0xee, 0xc8, 0x9e, 0x34, 0xf0, 0x14, 0xe5, 0x1b, 0xcd, 0xf9, 0x96, 0x52,
0xb1, 0xbf, 0xb7, 0x06, 0x3e, 0xe7, 0x6c, 0xa6, 0xdd, 0x76, 0xf1, 0xa3, 0x7d, 0xd4, 0xc6, 0x15,
0x1e, 0xc2, 0x9f, 0xa6, 0x9a, 0x1e, 0x63, 0x36, 0x07, 0x69, 0x5b, 0x41, 0xb2, 0x28, 0x3f, 0xed,
0xa9, 0x10, 0x61, 0x8c, 0xd7, 0xd8, 0xf4, 0xad, 0x50, 0x6a, 0xdd, 0x47, 0x1f, 0x1c, 0xaa, 0xbf,
0xed, 0xf0, 0x20, 0x56, 0x5d, 0x1a, 0x8c, 0x30, 0x4e, 0xd4, 0x4d, 0x19, 0x4a, 0x7d, 0x62, 0x3b,
0x0f, 0x63, 0x93, 0x69, 0x21, 0x96, 0x79, 0x85, 0x4d, 0xb8, 0x68, 0xe2, 0x01, 0x4c, 0x34, 0x5f,
0x70, 0x58, 0x2d, 0xb5, 0x3e, 0xd1, 0xb3, 0xc0, 0xa0, 0x78, 0xce, 0x35, 0x65, 0xa5, 0xe0, 0x50,
0x43, 0xdc, 0x8a, 0xd5, 0x3d, 0x19, 0x76, 0x61, 0x9c, 0x04, 0x1f, 0xa2, 0x08, 0xac, 0x92, 0x2a,
0x9b, 0xda, 0x0c, 0xfa, 0x56, 0x63, 0xd9, 0xea, 0xa7, 0x03, 0xb1, 0x4d, 0x10, 0x89, 0x52, 0x27,
0x42, 0x1f, 0x26, 0x29, 0x1c, 0x49, 0xc1, 0x10, 0x6d, 0xaa, 0xf9, 0x5e, 0x36, 0x7b, 0x6e, 0xbf,
0xe0, 0xd3, 0xac, 0x9c, 0xaa, 0x06, 0x56, 0x5b, 0x97, 0xa1, 0x88, 0x07, 0x49, 0x57, 0x02, 0x9f,
0xa2, 0xb7, 0x19, 0x28, 0x61, 0x52, 0x00, 0x9b, 0xaf, 0xd6, 0xec, 0x80, 0xb7, 0x17, 0x67, 0x58,
0xe5, 0x56, 0xe8, 0xe3, 0xb1, 0x0c, 0xd1, 0x87, 0x31, 0xdb, 0x2d, 0x92, 0x3a, 0xcb, 0xcb, 0x96,
0xc2, 0x5d, 0x27, 0x63, 0x0a, 0x18, 0x52, 0xc9, 0xdf, 0x14, 0xba, 0x00, 0x1d, 0xd3, 0x8b, 0xb7,
0xed, 0xfa, 0xd8, 0x29, 0x5e, 0xef, 0xda, 0x17, 0x3f, 0x51, 0xf7, 0x72, 0x4c, 0xc3, 0x09, 0x69,
0xda, 0x42, 0x73, 0x38, 0xd0, 0x06, 0x7b, 0x2d, 0x15, 0x1e, 0xcb, 0xae, 0x06, 0x49, 0x9a, 0x76,
0x94, 0xf0, 0x0b, 0xd7, 0xef, 0x50, 0xce, 0xb9, 0x18, 0xa0, 0xd0, 0x45, 0xa9, 0x77, 0x6d, 0xbf,
0xb4, 0xa6, 0xae, 0x05, 0x52, 0x68, 0x08, 0xc8, 0x15, 0xb2, 0x32, 0x39, 0xf6, 0xe8, 0x7d, 0xd7,
0x02, 0x83, 0x71, 0x72, 0x0e, 0xf9, 0x02, 0x9b, 0x4d, 0xf8, 0x0f, 0x44, 0x6c, 0xa4, 0x15, 0xf2,
0xb2, 0x63, 0x33, 0x29, 0x56, 0x51, 0x8e, 0xbd, 0x42, 0xe3, 0xa9, 0x76, 0x53, 0xe8, 0x1c, 0xfa,
0x89, 0xc3, 0x17, 0xd9, 0xdc, 0xd0, 0xb5, 0x1c, 0xff, 0xa9, 0xc3, 0xe7, 0x59, 0x9d, 0x5c, 0xcb,
0x30, 0x0d, 0x3f, 0xb3, 0x20, 0x39, 0x51, 0x00, 0x7f, 0x6e, 0x25, 0xa4, 0x5e, 0x14, 0xf0, 0x5f,
0x58, 0x65, 0x24, 0x21, 0x4d, 0x22, 0x0d, 0xaf, 0x39, 0x64, 0xe9, 0x50, 0x59, 0x0a, 0xc3, 0xeb,
0x96, 0x91, 0xa4, 0x66, 0x8c, 0x6f, 0x58, 0xc6, 0x54, 0x66, 0x86, 0xbe, 0x69, 0xd1, 0x9b, 0x22,
0xf4, 0xd5, 0xf1, 0x71, 0x86, 0xbe, 0xe5, 0xf0, 0x06, 0x9b, 0xa7, 0xeb, 0xeb, 0x22, 0x10, 0xa1,
0x97, 0xf3, 0xbf, 0xed, 0xf0, 0x0b, 0x0c, 0xce, 0xa9, 0xd3, 0xf0, 0xfc, 0x38, 0x87, 0x61, 0x7c,
0x6d, 0x1d, 0xc1, 0x17, 0xc6, 0x6d, 0xac, 0x52, 0xc6, 0x04, 0xfb, 0xe2, 0x38, 0xaf, 0x27, 0x41,
0x4f, 0xce, 0x5f, 0x1a, 0xe7, 0x55, 0x36, 0xb9, 0x1d, 0x6a, 0x8c, 0x0d, 0x7c, 0x86, 0xf2, 0x7b,
0x32, 0xe9, 0xbd, 0xf0, 0x59, 0xaa, 0xa8, 0x09, 0x9b, 0xdf, 0xf0, 0x12, 0xcd, 0x75, 0xee, 0xa2,
0xc6, 0xd0, 0x2f, 0xd4, 0x8e, 0x86, 0xcf, 0xd9, 0x1b, 0xc9, 0xe0, 0x84, 0xbf, 0x94, 0x6c, 0x68,
0x8a, 0x53, 0xf4, 0xaf, 0x25, 0x32, 0x61, 0x0b, 0x4d, 0x5e, 0xd9, 0xf0, 0xb7, 0x12, 0xbf, 0xc4,
0x2e, 0x0c, 0x31, 0x3b, 0xd3, 0xb2, 0x9a, 0xfe, 0x7b, 0x89, 0x5f, 0x61, 0x17, 0xa9, 0xc1, 0x67,
0x79, 0x43, 0x97, 0xa4, 0x36, 0xd2, 0xd3, 0xf0, 0x6a, 0x89, 0x5f, 0x66, 0x8b, 0x5b, 0x68, 0xb2,
0xf7, 0x28, 0x10, 0xff, 0x51, 0xe2, 0x33, 0x6c, 0x9a, 0xaa, 0x5e, 0xe2, 0x29, 0xc2, 0x6b, 0x25,
0x7a, 0xd4, 0xe1, 0x31, 0x35, 0xe7, 0xf5, 0x12, 0x85, 0xfa, 0x03, 0xc2, 0x78, 0x27, 0xed, 0x5e,
0xeb, 0x44, 0x84, 0x21, 0x06, 0x1a, 0xde, 0x28, 0x51, 0x40, 0x5d, 0xec, 0xa9, 0x53, 0x2c, 0xc0,
0x6f, 0x5a, 0xa7, 0x2d, 0xf3, 0xfb, 0xfb, 0x18, 0x0f, 0x32, 0xc2, 0x5b, 0x25, 0x7a, 0x9a, 0x84,
0x7f, 0x94, 0xf2, 0x76, 0x89, 0x5f, 0x65, 0x8d, 0xa4, 0x59, 0x0c, 0x1f, 0x86, 0x88, 0x5d, 0xa4,
0xc6, 0x0c, 0xcf, 0x97, 0x33, 0x89, 0x6d, 0x0c, 0x8c, 0xc8, 0xee, 0x7d, 0xbc, 0x4c, 0x76, 0x51,
0x71, 0xe5, 0xfd, 0x58, 0xc3, 0x0b, 0x65, 0x7a, 0xd1, 0x2d, 0x34, 0x69, 0x4b, 0xd6, 0xf0, 0x09,
0x5a, 0xa3, 0xea, 0xb7, 0x42, 0xdd, 0xef, 0x64, 0x86, 0xc2, 0x27, 0x87, 0x97, 0xdb, 0x52, 0x9b,
0x58, 0x76, 0xfa, 0x36, 0xd3, 0x3f, 0x55, 0x26, 0xa7, 0x0e, 0x07, 0xa1, 0x37, 0x02, 0xbf, 0x68,
0x65, 0xa6, 0xb6, 0x59, 0xa3, 0x7e, 0x59, 0xe6, 0xb3, 0x8c, 0x25, 0x55, 0x6d, 0x81, 0x5f, 0x0d,
0xe5, 0xd1, 0xde, 0x74, 0x8a, 0xb1, 0x1d, 0x2a, 0xf0, 0xeb, 0xcc, 0xc4, 0x42, 0xef, 0x84, 0xdf,
0x94, 0x29, 0xe8, 0x47, 0xb2, 0x87, 0x47, 0xd2, 0xbb, 0x0b, 0x5f, 0xae, 0x90, 0x7d, 0x36, 0x26,
0x7b, 0xca, 0xc7, 0x24, 0x47, 0xbe, 0x52, 0xa1, 0x94, 0xa3, 0x4c, 0x4e, 0x52, 0xee, 0xab, 0xf6,
0x9c, 0x8e, 0x82, 0xed, 0x36, 0x7c, 0x8d, 0xf6, 0x37, 0x96, 0x9e, 0x8f, 0x0e, 0xf7, 0xe1, 0xeb,
0x15, 0x52, 0xb5, 0x16, 0x04, 0xca, 0x13, 0x26, 0xab, 0xa7, 0x6f, 0x54, 0xa8, 0x20, 0x0b, 0xda,
0xd3, 0x77, 0xff, 0x66, 0xc5, 0x3a, 0x9a, 0xe0, 0x36, 0x5d, 0xdb, 0xd4, 0x56, 0xbf, 0x65, 0xa5,
0xd2, 0x0c, 0x22, 0x4b, 0x8e, 0x0c, 0x7c, 0xdb, 0xf2, 0x9d, 0x5f, 0x49, 0xe0, 0xb7, 0xd5, 0x34,
0x43, 0x0b, 0xd8, 0xef, 0xaa, 0x49, 0x85, 0x8d, 0xee, 0x20, 0xf0, 0x7b, 0x0b, 0x9f, 0xdf, 0x5b,
0xe0, 0x0f, 0x55, 0x32, 0xac, 0xb8, 0x7a, 0xd0, 0x02, 0xae, 0xe1, 0x8f, 0x55, 0xb2, 0x20, 0x5f,
0x32, 0xe0, 0x3b, 0x35, 0x0a, 0xd6, 0x70, 0xbd, 0x80, 0xef, 0xd6, 0xc8, 0xcd, 0x73, 0x8b, 0x05,
0x7c, 0xaf, 0x66, 0x9f, 0x23, 0x5b, 0x29, 0xe0, 0xfb, 0x05, 0x80, 0xb8, 0xe0, 0x07, 0x35, 0xdb,
0xc3, 0x46, 0xd6, 0x08, 0xf8, 0x61, 0x8d, 0x6c, 0x3b, 0xbf, 0x40, 0xc0, 0x8f, 0x6a, 0xc9, 0x73,
0x67, 0xab, 0x03, 0xfc, 0xb8, 0x46, 0x35, 0xf4, 0xe0, 0xa5, 0x01, 0x5e, 0xb6, 0xba, 0xf2, 0x75,
0x01, 0x5e, 0xa9, 0x35, 0x97, 0xd9, 0x54, 0x5b, 0x07, 0x76, 0xf2, 0x4c, 0xb1, 0x52, 0x5b, 0x07,
0x30, 0x46, 0x8d, 0x7a, 0x5d, 0xa9, 0x60, 0xe3, 0x2c, 0x8a, 0x9f, 0x7b, 0x0a, 0x9c, 0xe6, 0x3a,
0x9b, 0x6d, 0xa9, 0x5e, 0x24, 0xb2, 0x82, 0xb5, 0xc3, 0x26, 0x99, 0x52, 0xe8, 0x27, 0xa9, 0x32,
0x46, 0xdd, 0x7e, 0xe3, 0x0c, 0xbd, 0xbe, 0x9d, 0x89, 0x0e, 0x1d, 0xe9, 0x12, 0x05, 0xd9, 0x87,
0xf1, 0xe6, 0x07, 0x19, 0xb4, 0x54, 0xa8, 0xa5, 0x36, 0x18, 0x7a, 0x83, 0x1d, 0x3c, 0xc5, 0xc0,
0x4e, 0x5e, 0x13, 0xab, 0xb0, 0x0b, 0x63, 0xf6, 0x1b, 0x05, 0xed, 0xb7, 0x46, 0x32, 0x9f, 0xd7,
0x69, 0x0f, 0xb1, 0x1f, 0x22, 0x75, 0xc6, 0x36, 0x4e, 0x31, 0x34, 0x7d, 0x11, 0x04, 0x03, 0x28,
0xd1, 0xb9, 0xd5, 0xd7, 0x46, 0xf5, 0xe4, 0xc7, 0x68, 0x4c, 0x37, 0x3f, 0xed, 0xb0, 0x6a, 0x32,
0x8c, 0x33, 0xd3, 0x92, 0xe3, 0x01, 0x86, 0xbe, 0xb4, 0xc2, 0x69, 0x8f, 0xb6, 0x50, 0xba, 0x41,
0x38, 0x39, 0xd3, 0xa1, 0x11, 0xb1, 0xb5, 0xd0, 0x7e, 0x3e, 0xa4, 0xf7, 0x62, 0x6b, 0xa7, 0x0f,
0x13, 0x39, 0x98, 0xfb, 0x32, 0x49, 0x0b, 0x63, 0x51, 0xdc, 0x5a, 0xe8, 0xb7, 0x02, 0x14, 0x34,
0xaf, 0xa7, 0x9a, 0x37, 0x18, 0xcb, 0x3f, 0x1f, 0xad, 0xad, 0xf9, 0x88, 0x1c, 0x23, 0x8f, 0xb7,
0x02, 0xd5, 0x11, 0x01, 0x38, 0xb4, 0x21, 0xd8, 0x07, 0x1f, 0x6f, 0xbe, 0x38, 0xc1, 0x66, 0xcf,
0x7d, 0x2c, 0x92, 0xc9, 0xd9, 0x61, 0x2d, 0xa0, 0x57, 0xb9, 0xca, 0x1e, 0xca, 0x90, 0xfb, 0x56,
0x02, 0x87, 0x16, 0xcc, 0x8c, 0x7c, 0x6e, 0x37, 0x18, 0xe7, 0xd7, 0xd8, 0xe5, 0x9c, 0x78, 0xff,
0x46, 0x40, 0x6d, 0xb9, 0x91, 0x31, 0x9c, 0x5f, 0x0d, 0xca, 0x14, 0xad, 0x8c, 0x4a, 0x95, 0x9e,
0x7c, 0xda, 0xe5, 0x5f, 0xb6, 0xc9, 0xc8, 0x83, 0x49, 0xfa, 0xda, 0xca, 0x6d, 0xcc, 0x52, 0x06,
0xa6, 0x28, 0x8e, 0x19, 0x21, 0x1d, 0x47, 0xd3, 0x23, 0x60, 0x3a, 0x96, 0x2a, 0x14, 0xdc, 0x0c,
0xa4, 0x7e, 0x94, 0xb7, 0x02, 0x46, 0xdf, 0x00, 0xe7, 0x42, 0x90, 0xf4, 0x9c, 0xea, 0x08, 0xc5,
0x62, 0x6d, 0x34, 0x42, 0x06, 0x50, 0xa3, 0x1d, 0x68, 0x24, 0x2e, 0xc9, 0x8d, 0x99, 0x11, 0xe5,
0xe9, 0x84, 0xab, 0xd3, 0xb6, 0x93, 0xaf, 0xe7, 0x76, 0x36, 0xce, 0x8e, 0x60, 0xb6, 0xf7, 0x01,
0x8c, 0xa8, 0x2b, 0x0c, 0x71, 0x98, 0x1b, 0x75, 0xd4, 0x26, 0x09, 0xf0, 0x91, 0xe8, 0x26, 0x76,
0xef, 0xdf, 0x0b, 0x31, 0xd6, 0x27, 0x32, 0x82, 0xf9, 0x91, 0xa0, 0x25, 0xed, 0xc7, 0xe6, 0xc5,
0xc2, 0x48, 0x28, 0xc8, 0xf4, 0xfc, 0xd2, 0x85, 0xd1, 0x07, 0xb3, 0x0d, 0x20, 0xa7, 0x2e, 0x8e,
0x50, 0x77, 0x45, 0x28, 0xba, 0x05, 0x85, 0x17, 0x47, 0x14, 0x16, 0x3a, 0x4f, 0xe3, 0x3d, 0x8a,
0xcd, 0x65, 0x7f, 0x6d, 0xdc, 0xc6, 0x33, 0x73, 0x5b, 0x75, 0xee, 0xf0, 0x6b, 0xab, 0xc9, 0x5f,
0x92, 0xab, 0xc3, 0xbf, 0x24, 0x57, 0x77, 0x51, 0x6b, 0x12, 0x19, 0xd9, 0xfc, 0x68, 0xfc, 0x79,
0xca, 0xfe, 0x67, 0xf3, 0xc8, 0x83, 0xff, 0x09, 0x2b, 0xfc, 0x07, 0xe3, 0xce, 0x46, 0x85, 0xd3,
0x7e, 0xe7, 0xce, 0xfa, 0x0e, 0xab, 0x4b, 0x35, 0xbc, 0xd7, 0x8d, 0x23, 0x6f, 0xbd, 0xda, 0xb2,
0xf7, 0x0e, 0x48, 0xc6, 0x81, 0xf3, 0xa1, 0x95, 0xae, 0x34, 0x27, 0xfd, 0x0e, 0x49, 0xbb, 0x9e,
0xb0, 0x3d, 0x21, 0x55, 0xfa, 0xeb, 0xba, 0x88, 0xe4, 0xf5, 0x44, 0x4d, 0xd4, 0xf9, 0xbc, 0xe3,
0x74, 0x26, 0xad, 0xe6, 0xa7, 0xff, 0x19, 0x00, 0x00, 0xff, 0xff, 0x05, 0x17, 0xce, 0xdd, 0x67,
0x15, 0x00, 0x00,
// 2554 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xd9, 0x73, 0x23, 0x47,
0x19, 0xf7, 0x58, 0xb2, 0x65, 0xb5, 0x64, 0xb9, 0xdd, 0xf6, 0x7a, 0x95, 0x3d, 0xb2, 0x8e, 0x49,
0xc0, 0x88, 0xc4, 0x9b, 0x6c, 0xaa, 0x80, 0xa2, 0x2a, 0x14, 0xb6, 0x64, 0x7b, 0x5d, 0xf1, 0xc5,
0xd8, 0x1b, 0x28, 0xaa, 0x60, 0xab, 0x35, 0xf3, 0x59, 0xee, 0xdd, 0xd1, 0xf4, 0x30, 0xdd, 0xf2,
0x5a, 0x3c, 0x85, 0x00, 0x79, 0xe1, 0x05, 0xc2, 0x3f, 0xc0, 0x1f, 0x00, 0x14, 0x67, 0xe0, 0x01,
0x28, 0x6e, 0x12, 0xae, 0x67, 0x6e, 0x78, 0x84, 0x77, 0xce, 0x6c, 0x0e, 0xea, 0xeb, 0x9e, 0x4b,
0xde, 0x0d, 0x3c, 0xf0, 0xa6, 0xfe, 0x7d, 0x67, 0x7f, 0xfd, 0x5d, 0x23, 0x52, 0xf7, 0x64, 0xbf,
0x2f, 0xc3, 0x95, 0x28, 0x96, 0x5a, 0xb2, 0xb9, 0xbe, 0x08, 0x4e, 0x06, 0xca, 0x9e, 0x56, 0x2c,
0xe9, 0xc2, 0x62, 0x4f, 0xca, 0x5e, 0x00, 0x57, 0x0d, 0xd8, 0x1d, 0x1c, 0x5d, 0xf5, 0x41, 0x79,
0xb1, 0x88, 0xb4, 0x8c, 0x2d, 0xe3, 0xd2, 0x4d, 0x32, 0x79, 0xa0, 0xb9, 0x1e, 0x28, 0xf6, 0x14,
0x21, 0x10, 0xc7, 0x32, 0xbe, 0xe9, 0x49, 0x1f, 0x9a, 0xce, 0xa2, 0xb3, 0xdc, 0xb8, 0xf6, 0xe0,
0xca, 0x7d, 0xb4, 0xae, 0xac, 0x23, 0x5b, 0x5b, 0xfa, 0xe0, 0x56, 0x21, 0xfd, 0xc9, 0x16, 0xc8,
0x64, 0x0c, 0x5c, 0xc9, 0xb0, 0x39, 0xbe, 0xe8, 0x2c, 0x57, 0xdd, 0xe4, 0xb4, 0xf4, 0x4e, 0x52,
0x7f, 0x1a, 0x86, 0xcf, 0xf0, 0x60, 0x00, 0xfb, 0x5c, 0xc4, 0x8c, 0x92, 0xd2, 0x6d, 0x18, 0x1a,
0xfd, 0x55, 0x17, 0x7f, 0xb2, 0x79, 0x32, 0x71, 0x82, 0xe4, 0x44, 0xd0, 0x1e, 0x96, 0x9e, 0x24,
0xb5, 0xa7, 0x61, 0xd8, 0xe1, 0x9a, 0xbf, 0x89, 0x18, 0x23, 0x65, 0x9f, 0x6b, 0x6e, 0xa4, 0xea,
0xae, 0xf9, 0xbd, 0x74, 0x89, 0x94, 0xd7, 0x02, 0xd9, 0xcd, 0x55, 0x3a, 0x86, 0x98, 0xa8, 0x3c,
0x21, 0x74, 0x3f, 0xe0, 0x1e, 0x1c, 0xcb, 0xc0, 0x87, 0xd8, 0xb8, 0x84, 0x7a, 0x35, 0xef, 0xa5,
0x7a, 0x35, 0xef, 0xb1, 0x77, 0x93, 0xb2, 0x1e, 0x46, 0xd6, 0x9b, 0xc6, 0xb5, 0x87, 0xef, 0x1b,
0x81, 0x82, 0x9a, 0xc3, 0x61, 0x04, 0xae, 0x91, 0xc0, 0x10, 0x18, 0x43, 0xaa, 0x59, 0x5a, 0x2c,
0x2d, 0xd7, 0xdd, 0xe4, 0xb4, 0xf4, 0xe1, 0x11, 0xbb, 0x9b, 0xb1, 0x1c, 0x44, 0x6c, 0x8b, 0xd4,
0xa3, 0x1c, 0x53, 0x4d, 0x67, 0xb1, 0xb4, 0x5c, 0xbb, 0xf6, 0xc8, 0xff, 0xb2, 0x66, 0x9c, 0x76,
0x47, 0x44, 0x97, 0x1e, 0x23, 0x95, 0x55, 0xdf, 0x8f, 0x41, 0x29, 0xd6, 0x20, 0xe3, 0x22, 0x4a,
0x2e, 0x33, 0x2e, 0x22, 0x8c, 0x51, 0x24, 0x63, 0x6d, 0xee, 0x52, 0x72, 0xcd, 0xef, 0xa5, 0x17,
0x1c, 0x52, 0xd9, 0x51, 0xbd, 0x35, 0xae, 0x80, 0xbd, 0x8b, 0x4c, 0xf5, 0x55, 0xef, 0xa6, 0xb9,
0xaf, 0x7d, 0xf1, 0x4b, 0xf7, 0xf5, 0x60, 0x47, 0xf5, 0xcc, 0x3d, 0x2b, 0x7d, 0xfb, 0x03, 0x03,
0xdc, 0x57, 0xbd, 0xad, 0x4e, 0xa2, 0xd9, 0x1e, 0xd8, 0x25, 0x52, 0xd5, 0xa2, 0x0f, 0x4a, 0xf3,
0x7e, 0xd4, 0x2c, 0x2d, 0x3a, 0xcb, 0x65, 0x37, 0x07, 0xd8, 0x05, 0x32, 0xa5, 0xe4, 0x20, 0xf6,
0x60, 0xab, 0xd3, 0x2c, 0x1b, 0xb1, 0xec, 0xbc, 0xf4, 0x14, 0xa9, 0xee, 0xa8, 0xde, 0x75, 0xe0,
0x3e, 0xc4, 0xec, 0x71, 0x52, 0xee, 0x72, 0x65, 0x3d, 0xaa, 0xbd, 0xb9, 0x47, 0x78, 0x03, 0xd7,
0x70, 0x2e, 0x7d, 0x84, 0xd4, 0x3b, 0x3b, 0xdb, 0xff, 0x87, 0x06, 0x74, 0x5d, 0x1d, 0xf3, 0xd8,
0xdf, 0xe5, 0xfd, 0x34, 0x11, 0x73, 0x60, 0xe9, 0xae, 0x43, 0xea, 0xfb, 0xb1, 0x38, 0x11, 0x01,
0xf4, 0x60, 0xfd, 0x54, 0xb3, 0xf7, 0x91, 0x9a, 0xec, 0xde, 0x02, 0x4f, 0x17, 0x63, 0x77, 0xe5,
0xbe, 0x76, 0xf6, 0x0c, 0x9f, 0x09, 0x1f, 0x91, 0xd9, 0x6f, 0xb6, 0x47, 0x68, 0xa2, 0x21, 0x4a,
0x15, 0xff, 0xd7, 0x94, 0xb3, 0x6a, 0x32, 0x27, 0xdc, 0x19, 0x39, 0x0a, 0xb0, 0x16, 0x99, 0x4d,
0x14, 0x86, 0xbc, 0x0f, 0x37, 0x45, 0xe8, 0xc3, 0xa9, 0x79, 0x84, 0x89, 0x94, 0x17, 0xaf, 0xb2,
0x85, 0x30, 0x7b, 0x94, 0xb0, 0x7b, 0x78, 0x95, 0x79, 0x94, 0x09, 0x97, 0x9e, 0x61, 0x56, 0xad,
0xe7, 0xaa, 0xa4, 0x9a, 0xd5, 0x3c, 0xab, 0x91, 0xca, 0xc1, 0xc0, 0xf3, 0x40, 0x29, 0x3a, 0xc6,
0xe6, 0xc8, 0xcc, 0x8d, 0x10, 0x4e, 0x23, 0xf0, 0x34, 0xf8, 0x86, 0x87, 0x3a, 0x6c, 0x96, 0x4c,
0xb7, 0x65, 0x18, 0x82, 0xa7, 0x37, 0xb8, 0x08, 0xc0, 0xa7, 0xe3, 0x6c, 0x9e, 0xd0, 0x7d, 0x88,
0xfb, 0x42, 0x29, 0x21, 0xc3, 0x0e, 0x84, 0x02, 0x7c, 0x5a, 0x62, 0xe7, 0xc9, 0x5c, 0x5b, 0x06,
0x01, 0x78, 0x5a, 0xc8, 0x70, 0x57, 0xea, 0xf5, 0x53, 0xa1, 0xb4, 0xa2, 0x65, 0x54, 0xbb, 0x15,
0x04, 0xd0, 0xe3, 0xc1, 0x6a, 0xdc, 0x1b, 0xf4, 0x21, 0xd4, 0x74, 0x02, 0x75, 0x24, 0x60, 0x47,
0xf4, 0x21, 0x44, 0x4d, 0xb4, 0x52, 0x40, 0x8d, 0xb7, 0x18, 0x5b, 0x3a, 0xc5, 0x1e, 0x20, 0xe7,
0x12, 0xb4, 0x60, 0x80, 0xf7, 0x81, 0x56, 0xd9, 0x0c, 0xa9, 0x25, 0xa4, 0xc3, 0xbd, 0xfd, 0xa7,
0x29, 0x29, 0x68, 0x70, 0xe5, 0x1d, 0x17, 0x3c, 0x19, 0xfb, 0xb4, 0x56, 0x70, 0xe1, 0x19, 0xf0,
0xb4, 0x8c, 0xb7, 0x3a, 0xb4, 0x8e, 0x0e, 0x27, 0xe0, 0x01, 0xf0, 0xd8, 0x3b, 0x76, 0x41, 0x0d,
0x02, 0x4d, 0xa7, 0x19, 0x25, 0xf5, 0x0d, 0x11, 0xc0, 0xae, 0xd4, 0x1b, 0x72, 0x10, 0xfa, 0xb4,
0xc1, 0x1a, 0x84, 0xec, 0x80, 0xe6, 0x49, 0x04, 0x66, 0xd0, 0x6c, 0x9b, 0x7b, 0xc7, 0x90, 0x00,
0x94, 0x2d, 0x10, 0xd6, 0xe6, 0x61, 0x28, 0x75, 0x3b, 0x06, 0xae, 0x61, 0xc3, 0x54, 0x33, 0x9d,
0x45, 0x77, 0x46, 0x70, 0x11, 0x00, 0x65, 0x39, 0x77, 0x07, 0x02, 0xc8, 0xb8, 0xe7, 0x72, 0xee,
0x04, 0x47, 0xee, 0x79, 0x74, 0x7e, 0x6d, 0x20, 0x02, 0xdf, 0x84, 0xc4, 0x3e, 0xcb, 0x39, 0xf4,
0x31, 0x71, 0x7e, 0x77, 0x7b, 0xeb, 0xe0, 0x90, 0x2e, 0xb0, 0x73, 0x64, 0x36, 0x41, 0x76, 0x40,
0xc7, 0xc2, 0x33, 0xc1, 0x3b, 0x8f, 0xae, 0xee, 0x0d, 0xf4, 0xde, 0xd1, 0x0e, 0xf4, 0x65, 0x3c,
0xa4, 0x4d, 0x7c, 0x50, 0xa3, 0x29, 0x7d, 0x22, 0xfa, 0x00, 0x5a, 0x58, 0xef, 0x47, 0x7a, 0x98,
0x87, 0x97, 0x5e, 0x60, 0x17, 0xc9, 0xf9, 0x1b, 0x91, 0xcf, 0x35, 0x6c, 0xf5, 0xb1, 0xd5, 0x1c,
0x72, 0x75, 0x1b, 0xaf, 0x3b, 0x88, 0x81, 0x5e, 0x64, 0x17, 0xc8, 0xc2, 0xe8, 0x5b, 0x64, 0xc1,
0xba, 0x84, 0x82, 0xf6, 0xb6, 0xed, 0x18, 0x7c, 0x08, 0xb5, 0xe0, 0x41, 0x2a, 0x78, 0x39, 0xd7,
0x7a, 0x2f, 0xf1, 0x41, 0x24, 0xda, 0x9b, 0xdf, 0x4b, 0xbc, 0xc2, 0x9a, 0x64, 0x7e, 0x13, 0xf4,
0xbd, 0x94, 0x45, 0xa4, 0x6c, 0x0b, 0x65, 0x48, 0x37, 0x14, 0xc4, 0x2a, 0xa5, 0x3c, 0xc4, 0x18,
0x69, 0x6c, 0x82, 0x46, 0x30, 0xc5, 0x96, 0x30, 0x4e, 0xd6, 0x3d, 0x57, 0x06, 0x90, 0xc2, 0x6f,
0xc1, 0x18, 0x74, 0x62, 0x19, 0x15, 0xc1, 0x87, 0xf1, 0x9a, 0x7b, 0x11, 0xc4, 0x5c, 0x03, 0xea,
0x28, 0xd2, 0x1e, 0x41, 0x3d, 0x07, 0x80, 0x11, 0x28, 0xc2, 0x6f, 0xcd, 0xe1, 0xa2, 0xd5, 0xb7,
0x61, 0x0e, 0x27, 0xdc, 0x60, 0xfb, 0x64, 0x4a, 0x5a, 0xc6, 0x5b, 0x27, 0x46, 0xb2, 0xfa, 0x4f,
0x89, 0x6f, 0xc7, 0x54, 0xb1, 0x72, 0x9b, 0x31, 0x0f, 0x75, 0x8a, 0xb7, 0xd8, 0x43, 0xe4, 0xb2,
0x0b, 0x47, 0x31, 0xa8, 0xe3, 0x7d, 0x19, 0x08, 0x6f, 0xb8, 0x15, 0x1e, 0xc9, 0x2c, 0x25, 0x91,
0xe5, 0x1d, 0xe8, 0x09, 0x86, 0xc5, 0xd2, 0x53, 0xf8, 0x51, 0x8c, 0xc9, 0xae, 0xd4, 0x07, 0xd8,
0x0e, 0xb7, 0x4d, 0x83, 0xa5, 0x8f, 0xa1, 0x95, 0x5d, 0xe9, 0x42, 0x14, 0x08, 0x8f, 0xaf, 0x9e,
0x70, 0x11, 0xf0, 0x6e, 0x00, 0x74, 0x05, 0x83, 0x72, 0x00, 0x3d, 0x2c, 0xd9, 0xec, 0x7d, 0xaf,
0xb2, 0x69, 0x52, 0xdd, 0x90, 0xb1, 0x07, 0x1d, 0x08, 0x87, 0xf4, 0x71, 0x3c, 0xba, 0x5c, 0xc3,
0xb6, 0xe8, 0x0b, 0x4d, 0x9f, 0xc0, 0x7c, 0xc3, 0x39, 0xdf, 0x96, 0x32, 0xf6, 0x77, 0x57, 0xa9,
0xcf, 0x18, 0x99, 0xee, 0x74, 0x5c, 0xf8, 0xe8, 0x00, 0x94, 0x76, 0xb9, 0x07, 0xf4, 0x2f, 0x95,
0x96, 0x47, 0x88, 0xc9, 0x41, 0xdc, 0x56, 0x00, 0x3d, 0xca, 0x4f, 0xbb, 0x32, 0x04, 0x3a, 0xc6,
0xea, 0x64, 0xea, 0x46, 0x28, 0x94, 0x1a, 0x80, 0x4f, 0x1d, 0xac, 0xbf, 0xad, 0x70, 0x3f, 0x96,
0x3d, 0x1c, 0x8c, 0x74, 0x1c, 0xa9, 0x1b, 0x22, 0x14, 0xea, 0xd8, 0x74, 0x1e, 0x42, 0x26, 0x93,
0x42, 0x2c, 0xb3, 0x2a, 0x99, 0x70, 0x41, 0xc7, 0x43, 0x3a, 0xd1, 0x7a, 0xce, 0x21, 0xf5, 0xc4,
0x7b, 0x6b, 0x67, 0x9e, 0xd0, 0xe2, 0x39, 0xb7, 0x94, 0x95, 0x82, 0x83, 0x0d, 0x71, 0x33, 0x96,
0x77, 0x44, 0xd8, 0xa3, 0xe3, 0xa8, 0xf8, 0x00, 0x78, 0x60, 0x8c, 0xd4, 0x48, 0x65, 0x23, 0x18,
0x18, 0x8b, 0x65, 0x63, 0x1f, 0x0f, 0xc8, 0x36, 0x81, 0x24, 0x4c, 0x9d, 0x08, 0x7c, 0x3a, 0x89,
0xe1, 0xb0, 0x05, 0x83, 0xb4, 0x4a, 0xeb, 0xbd, 0x64, 0xe6, 0xcc, 0x7e, 0xc1, 0xa6, 0x48, 0x39,
0x31, 0x4d, 0x49, 0x7d, 0x4d, 0x84, 0x3c, 0x1e, 0xda, 0xae, 0x44, 0x7d, 0x8c, 0xde, 0x46, 0x20,
0xb9, 0x4e, 0x00, 0x68, 0xbd, 0x38, 0x6d, 0x06, 0xbc, 0x11, 0x9c, 0x26, 0xd5, 0x1b, 0xa1, 0x0f,
0x47, 0x22, 0x04, 0x9f, 0x8e, 0x99, 0x6e, 0x61, 0xeb, 0x2c, 0x2f, 0x5b, 0x0c, 0x77, 0x03, 0x9d,
0x29, 0x60, 0x80, 0x25, 0x7f, 0x9d, 0xab, 0x02, 0x74, 0x84, 0x2f, 0xde, 0x31, 0xeb, 0x63, 0xb7,
0x28, 0xde, 0x33, 0x2f, 0x7e, 0x2c, 0xef, 0xe4, 0x98, 0xa2, 0xc7, 0x68, 0x69, 0x13, 0xf4, 0xc1,
0x50, 0x69, 0xe8, 0xb7, 0x65, 0x78, 0x24, 0x7a, 0x8a, 0x0a, 0xb4, 0xb4, 0x2d, 0xb9, 0x5f, 0x10,
0xbf, 0x85, 0x39, 0xe7, 0x42, 0x00, 0x5c, 0x15, 0xb5, 0xde, 0x36, 0xfd, 0xd2, 0xb8, 0xba, 0x1a,
0x08, 0xae, 0x68, 0x80, 0x57, 0x41, 0x2f, 0xed, 0xb1, 0x8f, 0xef, 0xbb, 0x1a, 0x68, 0x88, 0xed,
0x39, 0x64, 0xf3, 0x64, 0xc6, 0xf2, 0xef, 0xf3, 0x58, 0x0b, 0xa3, 0xe4, 0x25, 0xc7, 0x64, 0x52,
0x2c, 0xa3, 0x1c, 0x7b, 0x19, 0xc7, 0x53, 0xfd, 0x3a, 0x57, 0x39, 0xf4, 0x33, 0x87, 0x2d, 0x90,
0xd9, 0xf4, 0x6a, 0x39, 0xfe, 0x73, 0x87, 0xcd, 0x91, 0x06, 0x5e, 0x2d, 0xc3, 0x14, 0xfd, 0x85,
0x01, 0xf1, 0x12, 0x05, 0xf0, 0x97, 0x46, 0x43, 0x72, 0x8b, 0x02, 0xfe, 0x2b, 0x63, 0x0c, 0x35,
0x24, 0x49, 0xa4, 0xe8, 0x2b, 0x0e, 0x7a, 0x9a, 0x1a, 0x4b, 0x60, 0x7a, 0xd7, 0x30, 0xa2, 0xd6,
0x8c, 0xf1, 0x55, 0xc3, 0x98, 0xe8, 0xcc, 0xd0, 0xd7, 0x0c, 0x7a, 0x9d, 0x87, 0xbe, 0x3c, 0x3a,
0xca, 0xd0, 0xd7, 0x1d, 0xd6, 0x24, 0x73, 0x28, 0xbe, 0xc6, 0x03, 0x1e, 0x7a, 0x39, 0xff, 0x1b,
0x0e, 0x3b, 0x47, 0xe8, 0x19, 0x73, 0x8a, 0x3e, 0x3b, 0xce, 0x68, 0x1a, 0x5f, 0x53, 0x47, 0xf4,
0x0b, 0xe3, 0x26, 0x56, 0x09, 0xa3, 0xc5, 0xbe, 0x38, 0xce, 0x1a, 0x36, 0xe8, 0xf6, 0xfc, 0xa5,
0x71, 0x56, 0x23, 0x93, 0x5b, 0xa1, 0x82, 0x58, 0xd3, 0xcf, 0x60, 0x7e, 0x4f, 0xda, 0xde, 0x4b,
0x3f, 0x8b, 0x15, 0x35, 0x61, 0xf2, 0x9b, 0xbe, 0x80, 0x73, 0x9d, 0xb9, 0xa0, 0x20, 0xf4, 0x0b,
0xb5, 0xa3, 0xe8, 0xe7, 0x8c, 0x84, 0x1d, 0x9c, 0xf4, 0x6f, 0x25, 0x13, 0x9a, 0xe2, 0x14, 0xfd,
0x7b, 0x09, 0x5d, 0xd8, 0x04, 0x9d, 0x57, 0x36, 0xfd, 0x47, 0x89, 0x5d, 0x20, 0xe7, 0x52, 0xcc,
0xcc, 0xb4, 0xac, 0xa6, 0xff, 0x59, 0x62, 0x97, 0xc8, 0x79, 0x6c, 0xf0, 0x59, 0xde, 0xa0, 0x90,
0x50, 0x5a, 0x78, 0x8a, 0xfe, 0xab, 0xc4, 0x2e, 0x92, 0x85, 0x4d, 0xd0, 0xd9, 0x7b, 0x14, 0x88,
0xff, 0x2e, 0xb1, 0x69, 0x32, 0x85, 0x55, 0x2f, 0xe0, 0x04, 0xe8, 0x2b, 0x25, 0x7c, 0xd4, 0xf4,
0x98, 0xb8, 0x73, 0xb7, 0x84, 0xa1, 0xfe, 0x00, 0xd7, 0xde, 0x71, 0xa7, 0xdf, 0x3e, 0xe6, 0x61,
0x08, 0x81, 0xa2, 0xaf, 0x96, 0x30, 0xa0, 0x2e, 0xf4, 0xe5, 0x09, 0x14, 0xe0, 0xd7, 0xcc, 0xa5,
0x0d, 0xf3, 0xfb, 0x07, 0x10, 0x0f, 0x33, 0xc2, 0xeb, 0x25, 0x7c, 0x1a, 0xcb, 0x3f, 0x4a, 0x79,
0xa3, 0xc4, 0x2e, 0x93, 0xa6, 0x6d, 0x16, 0xe9, 0xc3, 0x20, 0xb1, 0x07, 0xd8, 0x98, 0xe9, 0xb3,
0xe5, 0x4c, 0x63, 0x07, 0x02, 0xcd, 0x33, 0xb9, 0x8f, 0x97, 0xd1, 0x2f, 0x2c, 0xae, 0xbc, 0x1f,
0x2b, 0xfa, 0x5c, 0x19, 0x5f, 0x74, 0x13, 0x74, 0xd2, 0x92, 0x15, 0xfd, 0x04, 0xae, 0x51, 0x8d,
0x1b, 0xa1, 0x1a, 0x74, 0x33, 0x47, 0xe9, 0x27, 0x53, 0xe1, 0x8e, 0x50, 0x3a, 0x16, 0xdd, 0x81,
0xc9, 0xf4, 0x4f, 0x95, 0xf1, 0x52, 0x07, 0xc3, 0xd0, 0x1b, 0x81, 0x9f, 0x37, 0x3a, 0x13, 0xdf,
0x8c, 0x53, 0xbf, 0x2e, 0xb3, 0x19, 0x42, 0x6c, 0x55, 0x1b, 0xe0, 0x37, 0xa9, 0x3e, 0xdc, 0x9b,
0x4e, 0x20, 0x36, 0x43, 0x85, 0xfe, 0x36, 0x73, 0xb1, 0xd0, 0x3b, 0xe9, 0xef, 0x8c, 0x43, 0xc9,
0x56, 0x33, 0x08, 0x6d, 0xa1, 0x7f, 0x7b, 0x02, 0xf3, 0x00, 0x73, 0x2c, 0x83, 0xbe, 0x33, 0x91,
0x48, 0xa7, 0x88, 0xd1, 0xf9, 0xdd, 0x09, 0x7c, 0xb2, 0x43, 0xd1, 0x87, 0x43, 0xe1, 0xdd, 0xa6,
0x5f, 0xae, 0xa2, 0x32, 0x13, 0xd1, 0x5d, 0xe9, 0x83, 0xcd, 0xb0, 0xaf, 0x54, 0x31, 0x61, 0xb1,
0x0e, 0x6c, 0xc2, 0x7e, 0xd5, 0x9c, 0x93, 0x41, 0xb2, 0xd5, 0xa1, 0x5f, 0xc3, 0xed, 0x8f, 0x24,
0xe7, 0xc3, 0x83, 0x3d, 0xfa, 0xf5, 0x2a, 0x9a, 0x5a, 0x0d, 0x02, 0xe9, 0x71, 0x9d, 0x55, 0xe3,
0x37, 0xaa, 0x58, 0xce, 0x05, 0xdf, 0x93, 0xac, 0x79, 0xb1, 0x6a, 0xc2, 0x64, 0x71, 0x93, 0xec,
0x1d, 0x6c, 0xca, 0xdf, 0x34, 0x5a, 0x71, 0x82, 0xa1, 0x27, 0x87, 0x9a, 0x7e, 0xcb, 0xf0, 0x9d,
0x5d, 0x68, 0xe8, 0xef, 0x6b, 0x49, 0x7e, 0x17, 0xb0, 0x3f, 0xd4, 0x6c, 0x7d, 0x8e, 0x6e, 0x30,
0xf4, 0x8f, 0x06, 0x3e, 0xbb, 0xf5, 0xd0, 0x3f, 0xd5, 0xd0, 0xb1, 0xe2, 0xe2, 0x82, 0xeb, 0xbb,
0xa2, 0x7f, 0xae, 0xa1, 0x07, 0xf9, 0x8a, 0x42, 0xbf, 0x57, 0xc7, 0x60, 0xa5, 0xcb, 0x09, 0xfd,
0x7e, 0x1d, 0xaf, 0x79, 0x66, 0x2d, 0xa1, 0x3f, 0xa8, 0x9b, 0xc7, 0xcc, 0x16, 0x12, 0xfa, 0xc3,
0x02, 0x80, 0x5c, 0xf4, 0x47, 0x75, 0xd3, 0x01, 0x47, 0x96, 0x10, 0xfa, 0xe3, 0x3a, 0xfa, 0x76,
0x76, 0xfd, 0xa0, 0x3f, 0xa9, 0xdb, 0x64, 0xc9, 0x16, 0x0f, 0xfa, 0xd3, 0x3a, 0x56, 0xe0, 0xfd,
0x57, 0x0e, 0xfa, 0x92, 0xb1, 0x95, 0x2f, 0x1b, 0xf4, 0xe5, 0x7a, 0x6b, 0x89, 0x54, 0x3a, 0x2a,
0x30, 0x73, 0xab, 0x42, 0x4a, 0x1d, 0x15, 0xd0, 0x31, 0x6c, 0xf3, 0x6b, 0x52, 0x06, 0xeb, 0xa7,
0x51, 0xfc, 0xcc, 0x13, 0xd4, 0x69, 0xad, 0x91, 0x99, 0xb6, 0xec, 0x47, 0x3c, 0x2b, 0x77, 0x33,
0xaa, 0xec, 0x8c, 0x03, 0xdf, 0x26, 0xda, 0x18, 0xce, 0x8a, 0xf5, 0x53, 0xf0, 0x06, 0x66, 0xa2,
0x3a, 0x78, 0x44, 0x21, 0x0c, 0xb2, 0x4f, 0xc7, 0x5b, 0x1f, 0x24, 0xb4, 0x2d, 0x43, 0x25, 0x94,
0x86, 0xd0, 0x1b, 0x6e, 0xc3, 0x09, 0x04, 0x66, 0x6e, 0xeb, 0x58, 0x86, 0x3d, 0x3a, 0x66, 0xbe,
0x70, 0xc0, 0x7c, 0xa9, 0xd8, 0xe9, 0xbe, 0x86, 0x5b, 0x8c, 0xf9, 0x8c, 0x69, 0x10, 0xb2, 0x7e,
0x02, 0xa1, 0x1e, 0xf0, 0x20, 0x18, 0xd2, 0x12, 0x9e, 0xdb, 0x03, 0xa5, 0x65, 0x5f, 0x7c, 0x0c,
0x87, 0x7c, 0xeb, 0xd3, 0x0e, 0xa9, 0xd9, 0x51, 0x9e, 0xb9, 0x66, 0x8f, 0xfb, 0x10, 0xfa, 0xc2,
0x28, 0xc7, 0x2d, 0xdc, 0x40, 0xc9, 0xfe, 0xe1, 0xe4, 0x4c, 0x07, 0x9a, 0xc7, 0xc6, 0x43, 0xf3,
0xf1, 0x91, 0xc8, 0xc5, 0xc6, 0x4f, 0x9f, 0x4e, 0xe4, 0x60, 0x7e, 0x97, 0x49, 0x5c, 0x37, 0x8b,
0xea, 0x56, 0x43, 0xbf, 0x1d, 0x00, 0xc7, 0x69, 0x5f, 0x69, 0x5d, 0x23, 0x24, 0xff, 0xf8, 0x34,
0xbe, 0xe6, 0x03, 0x76, 0x0c, 0x6f, 0xbc, 0x19, 0xc8, 0x2e, 0x0f, 0xa8, 0x83, 0xfb, 0x85, 0x79,
0xf0, 0xf1, 0xd6, 0xf3, 0x13, 0x64, 0xe6, 0xcc, 0xa7, 0x26, 0xba, 0x9c, 0x1d, 0x56, 0x03, 0x7c,
0x95, 0xcb, 0xe4, 0x81, 0x0c, 0xb9, 0x67, 0xa1, 0x70, 0x70, 0x3d, 0xcd, 0xc8, 0x67, 0x36, 0x8b,
0x71, 0x76, 0x85, 0x5c, 0xcc, 0x89, 0xf7, 0xee, 0x13, 0xd8, 0xd4, 0x9b, 0x19, 0xc3, 0xd9, 0xc5,
0xa2, 0x8c, 0xd1, 0xca, 0xa8, 0x58, 0xe9, 0xf6, 0xc3, 0x30, 0xff, 0x2e, 0xb6, 0x03, 0x93, 0x4e,
0xe2, 0xb7, 0x5a, 0xee, 0x63, 0x96, 0x32, 0xb4, 0x82, 0x71, 0xcc, 0x08, 0xc9, 0x30, 0x9b, 0x1a,
0x01, 0x93, 0xa1, 0x56, 0xc5, 0xe0, 0x66, 0x20, 0x76, 0xb3, 0xbc, 0x15, 0x10, 0xfc, 0x82, 0x38,
0x13, 0x02, 0xdb, 0x73, 0x6a, 0x23, 0x14, 0x83, 0x75, 0x40, 0x73, 0x11, 0xd0, 0x3a, 0x6e, 0x50,
0x23, 0x71, 0xb1, 0x12, 0xd3, 0x23, 0xc6, 0x93, 0xf9, 0xd8, 0xc0, 0x5d, 0x29, 0x5f, 0xee, 0xcd,
0x64, 0x9d, 0x19, 0xc1, 0x4c, 0xef, 0xa3, 0x74, 0xc4, 0x5c, 0x61, 0x05, 0xa0, 0xb3, 0xa3, 0x17,
0x35, 0x49, 0x42, 0xd9, 0x48, 0x74, 0xad, 0xdf, 0x7b, 0x77, 0x42, 0x88, 0xd5, 0xb1, 0x88, 0xe8,
0xdc, 0x48, 0xd0, 0x6c, 0xfb, 0x31, 0x79, 0x31, 0x3f, 0x12, 0x0a, 0x74, 0x3d, 0x17, 0x3a, 0x37,
0xfa, 0x60, 0xa6, 0x01, 0xe4, 0xd4, 0x85, 0x11, 0xea, 0x0e, 0x0f, 0x79, 0xaf, 0x60, 0xf0, 0xfc,
0x88, 0xc1, 0x42, 0xe7, 0x69, 0xbe, 0x47, 0x92, 0xd9, 0xec, 0x8f, 0x91, 0x9b, 0x70, 0xaa, 0x6f,
0xca, 0xee, 0x2d, 0x76, 0x65, 0xc5, 0xfe, 0xa1, 0xb9, 0x92, 0xfe, 0xa1, 0xb9, 0xb2, 0x03, 0x4a,
0xa1, 0xca, 0xc8, 0xe4, 0x47, 0xf3, 0xaf, 0x15, 0xf3, 0x8f, 0xcf, 0x43, 0xf7, 0xff, 0x1f, 0xad,
0xf0, 0x0f, 0x8e, 0x3b, 0x13, 0x15, 0x4e, 0x7b, 0xdd, 0x5b, 0x6b, 0xdb, 0xa4, 0x21, 0x64, 0x2a,
0xd7, 0x8b, 0x23, 0x6f, 0xad, 0xd6, 0x36, 0x72, 0xfb, 0xa8, 0x63, 0xdf, 0xf9, 0xd0, 0x72, 0x4f,
0xe8, 0xe3, 0x41, 0x17, 0xb5, 0x5d, 0xb5, 0x6c, 0x8f, 0x09, 0x99, 0xfc, 0xba, 0xca, 0x23, 0x71,
0xd5, 0x9a, 0x89, 0xba, 0x9f, 0x77, 0x9c, 0xee, 0xa4, 0xb1, 0xfc, 0xe4, 0x7f, 0x02, 0x00, 0x00,
0xff, 0xff, 0xe4, 0xe3, 0x40, 0x8a, 0xa5, 0x15, 0x00, 0x00,
}

View File

@ -6935,6 +6935,120 @@ func (m *OperatePrivilegeRequest) GetType() OperatePrivilegeType {
return OperatePrivilegeType_Grant
}
type CreateFunctionRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
// The unique function name in rootcoord.(Required)
FunctionName string `protobuf:"bytes,2,opt,name=function_name,json=functionName,proto3" json:"function_name,omitempty"`
// wat file after base64.(Required)
WatBodyBase64 string `protobuf:"bytes,3,opt,name=wat_body_base64,json=watBodyBase64,proto3" json:"wat_body_base64,omitempty"`
// list of function parameter types.(Required)
ArgTypes []schemapb.DataType `protobuf:"varint,4,rep,packed,name=arg_types,json=argTypes,proto3,enum=milvus.proto.schema.DataType" json:"arg_types,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CreateFunctionRequest) Reset() { *m = CreateFunctionRequest{} }
func (m *CreateFunctionRequest) String() string { return proto.CompactTextString(m) }
func (*CreateFunctionRequest) ProtoMessage() {}
func (*CreateFunctionRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{110}
}
func (m *CreateFunctionRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CreateFunctionRequest.Unmarshal(m, b)
}
func (m *CreateFunctionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CreateFunctionRequest.Marshal(b, m, deterministic)
}
func (m *CreateFunctionRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_CreateFunctionRequest.Merge(m, src)
}
func (m *CreateFunctionRequest) XXX_Size() int {
return xxx_messageInfo_CreateFunctionRequest.Size(m)
}
func (m *CreateFunctionRequest) XXX_DiscardUnknown() {
xxx_messageInfo_CreateFunctionRequest.DiscardUnknown(m)
}
var xxx_messageInfo_CreateFunctionRequest proto.InternalMessageInfo
func (m *CreateFunctionRequest) GetBase() *commonpb.MsgBase {
if m != nil {
return m.Base
}
return nil
}
func (m *CreateFunctionRequest) GetFunctionName() string {
if m != nil {
return m.FunctionName
}
return ""
}
func (m *CreateFunctionRequest) GetWatBodyBase64() string {
if m != nil {
return m.WatBodyBase64
}
return ""
}
func (m *CreateFunctionRequest) GetArgTypes() []schemapb.DataType {
if m != nil {
return m.ArgTypes
}
return nil
}
type DropFunctionRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
// The unique function name in rootcoord.(Required)
FunctionName string `protobuf:"bytes,2,opt,name=function_name,json=functionName,proto3" json:"function_name,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *DropFunctionRequest) Reset() { *m = DropFunctionRequest{} }
func (m *DropFunctionRequest) String() string { return proto.CompactTextString(m) }
func (*DropFunctionRequest) ProtoMessage() {}
func (*DropFunctionRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{111}
}
func (m *DropFunctionRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DropFunctionRequest.Unmarshal(m, b)
}
func (m *DropFunctionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_DropFunctionRequest.Marshal(b, m, deterministic)
}
func (m *DropFunctionRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_DropFunctionRequest.Merge(m, src)
}
func (m *DropFunctionRequest) XXX_Size() int {
return xxx_messageInfo_DropFunctionRequest.Size(m)
}
func (m *DropFunctionRequest) XXX_DiscardUnknown() {
xxx_messageInfo_DropFunctionRequest.DiscardUnknown(m)
}
var xxx_messageInfo_DropFunctionRequest proto.InternalMessageInfo
func (m *DropFunctionRequest) GetBase() *commonpb.MsgBase {
if m != nil {
return m.Base
}
return nil
}
func (m *DropFunctionRequest) GetFunctionName() string {
if m != nil {
return m.FunctionName
}
return ""
}
type MilvusExt struct {
Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
@ -6946,7 +7060,7 @@ func (m *MilvusExt) Reset() { *m = MilvusExt{} }
func (m *MilvusExt) String() string { return proto.CompactTextString(m) }
func (*MilvusExt) ProtoMessage() {}
func (*MilvusExt) Descriptor() ([]byte, []int) {
return fileDescriptor_02345ba45cc0e303, []int{110}
return fileDescriptor_02345ba45cc0e303, []int{112}
}
func (m *MilvusExt) XXX_Unmarshal(b []byte) error {
@ -7100,6 +7214,8 @@ func init() {
proto.RegisterType((*SelectGrantRequest)(nil), "milvus.proto.milvus.SelectGrantRequest")
proto.RegisterType((*SelectGrantResponse)(nil), "milvus.proto.milvus.SelectGrantResponse")
proto.RegisterType((*OperatePrivilegeRequest)(nil), "milvus.proto.milvus.OperatePrivilegeRequest")
proto.RegisterType((*CreateFunctionRequest)(nil), "milvus.proto.milvus.CreateFunctionRequest")
proto.RegisterType((*DropFunctionRequest)(nil), "milvus.proto.milvus.DropFunctionRequest")
proto.RegisterType((*MilvusExt)(nil), "milvus.proto.milvus.MilvusExt")
proto.RegisterExtension(E_MilvusExtObj)
}
@ -7107,338 +7223,345 @@ func init() {
func init() { proto.RegisterFile("milvus.proto", fileDescriptor_02345ba45cc0e303) }
var fileDescriptor_02345ba45cc0e303 = []byte{
// 5293 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x7d, 0x4b, 0x6c, 0x1c, 0x47,
0x7a, 0x30, 0x7b, 0xde, 0xf3, 0xcd, 0x83, 0xc3, 0xe2, 0x6b, 0x3c, 0x92, 0x2c, 0xaa, 0x6d, 0xd9,
0xb4, 0xb4, 0xa6, 0x6c, 0xca, 0x8f, 0xb5, 0xec, 0xb5, 0x2d, 0x89, 0xb6, 0x44, 0x58, 0x0f, 0xba,
0x29, 0x7b, 0xb1, 0xbf, 0x7f, 0xa3, 0xd1, 0x9c, 0x2e, 0x0e, 0xdb, 0xea, 0xe9, 0x1e, 0x75, 0xf7,
0x90, 0xa2, 0x73, 0x59, 0x60, 0xb3, 0x8b, 0x0d, 0xb2, 0x59, 0x23, 0xcf, 0x45, 0x0e, 0x79, 0x20,
0xd8, 0x1c, 0x82, 0x6c, 0x82, 0x38, 0x09, 0x10, 0x60, 0x73, 0xc8, 0xdd, 0x48, 0x90, 0xec, 0x21,
0x48, 0x16, 0xc9, 0x71, 0x91, 0x20, 0x87, 0x00, 0x39, 0xe4, 0x96, 0x04, 0x09, 0xea, 0xd1, 0x3d,
0xd5, 0x3d, 0xd5, 0xc3, 0xa1, 0xc6, 0x32, 0x29, 0xf3, 0x34, 0xfd, 0xd5, 0x57, 0x55, 0x5f, 0x7d,
0xf5, 0xbd, 0xaa, 0xea, 0xab, 0x22, 0x54, 0xbb, 0x96, 0xbd, 0xdb, 0xf7, 0x57, 0x7a, 0x9e, 0x1b,
0xb8, 0x68, 0x56, 0xfc, 0x5a, 0x61, 0x1f, 0xad, 0x6a, 0xdb, 0xed, 0x76, 0x5d, 0x87, 0x01, 0x5b,
0x55, 0xbf, 0xbd, 0x83, 0xbb, 0x06, 0xff, 0x5a, 0xea, 0xb8, 0x6e, 0xc7, 0xc6, 0x17, 0xe8, 0xd7,
0x56, 0x7f, 0xfb, 0x82, 0x89, 0xfd, 0xb6, 0x67, 0xf5, 0x02, 0xd7, 0x63, 0x18, 0xea, 0x6f, 0x2b,
0x80, 0xae, 0x7a, 0xd8, 0x08, 0xf0, 0x65, 0xdb, 0x32, 0x7c, 0x0d, 0xdf, 0xeb, 0x63, 0x3f, 0x40,
0xcf, 0x41, 0x6e, 0xcb, 0xf0, 0x71, 0x53, 0x59, 0x52, 0x96, 0x2b, 0xab, 0x27, 0x57, 0x62, 0x1d,
0xf3, 0x0e, 0x6f, 0xfa, 0x9d, 0x2b, 0x86, 0x8f, 0x35, 0x8a, 0x89, 0x16, 0xa1, 0x68, 0x6e, 0xe9,
0x8e, 0xd1, 0xc5, 0xcd, 0xcc, 0x92, 0xb2, 0x5c, 0xd6, 0x0a, 0xe6, 0xd6, 0x2d, 0xa3, 0x8b, 0xd1,
0xd3, 0x30, 0xdd, 0x76, 0x6d, 0x1b, 0xb7, 0x03, 0xcb, 0x75, 0x18, 0x42, 0x96, 0x22, 0xd4, 0x07,
0x60, 0x8a, 0x38, 0x07, 0x79, 0x83, 0xd0, 0xd0, 0xcc, 0xd1, 0x62, 0xf6, 0xa1, 0xfa, 0xd0, 0x58,
0xf3, 0xdc, 0xde, 0xc3, 0xa2, 0x2e, 0xea, 0x34, 0x2b, 0x76, 0xfa, 0x5b, 0x0a, 0xcc, 0x5c, 0xb6,
0x03, 0xec, 0x1d, 0x53, 0xa6, 0xfc, 0x28, 0x03, 0x8b, 0x6c, 0xd6, 0xae, 0x46, 0xe8, 0x47, 0x49,
0xe5, 0x02, 0x14, 0x98, 0xdc, 0x51, 0x32, 0xab, 0x1a, 0xff, 0x42, 0xa7, 0x00, 0xfc, 0x1d, 0xc3,
0x33, 0x7d, 0xdd, 0xe9, 0x77, 0x9b, 0xf9, 0x25, 0x65, 0x39, 0xaf, 0x95, 0x19, 0xe4, 0x56, 0xbf,
0x8b, 0x34, 0x98, 0x69, 0xbb, 0x8e, 0x6f, 0xf9, 0x01, 0x76, 0xda, 0xfb, 0xba, 0x8d, 0x77, 0xb1,
0xdd, 0x2c, 0x2c, 0x29, 0xcb, 0xf5, 0xd5, 0xb3, 0x52, 0xba, 0xaf, 0x0e, 0xb0, 0x6f, 0x10, 0x64,
0xad, 0xd1, 0x4e, 0x40, 0x2e, 0xa1, 0xcf, 0x5e, 0x9f, 0x2e, 0x29, 0x0d, 0xa5, 0xf9, 0xbf, 0xe1,
0x9f, 0xa2, 0xfe, 0x8e, 0x02, 0xf3, 0x44, 0x88, 0x8e, 0x05, 0xb3, 0x42, 0x0a, 0x33, 0x22, 0x85,
0x7f, 0xa0, 0xc0, 0xdc, 0x75, 0xc3, 0x3f, 0x1e, 0xb3, 0x79, 0x0a, 0x20, 0xb0, 0xba, 0x58, 0xf7,
0x03, 0xa3, 0xdb, 0xa3, 0x33, 0x9a, 0xd3, 0xca, 0x04, 0xb2, 0x49, 0x00, 0xea, 0x37, 0xa0, 0x7a,
0xc5, 0x75, 0x6d, 0x0d, 0xfb, 0x3d, 0xd7, 0xf1, 0x31, 0xba, 0x08, 0x05, 0x3f, 0x30, 0x82, 0xbe,
0xcf, 0x89, 0x3c, 0x21, 0x25, 0x72, 0x93, 0xa2, 0x68, 0x1c, 0x95, 0xc8, 0xf5, 0xae, 0x61, 0xf7,
0x19, 0x8d, 0x25, 0x8d, 0x7d, 0xa8, 0x1f, 0x40, 0x7d, 0x33, 0xf0, 0x2c, 0xa7, 0xf3, 0x39, 0x36,
0x5e, 0x0e, 0x1b, 0xff, 0x17, 0x05, 0x1e, 0x5b, 0xa3, 0xf6, 0x6f, 0xeb, 0x98, 0xa8, 0x8d, 0x0a,
0xd5, 0x01, 0x64, 0x7d, 0x8d, 0xb2, 0x3a, 0xab, 0xc5, 0x60, 0x89, 0xc9, 0xc8, 0x27, 0x26, 0x23,
0x14, 0xa6, 0xac, 0x28, 0x4c, 0xdf, 0xcc, 0x43, 0x4b, 0x36, 0xd0, 0x49, 0x58, 0xfa, 0xb5, 0x48,
0xc3, 0x33, 0xb4, 0x52, 0x42, 0x3f, 0xb9, 0xd7, 0x19, 0xf4, 0xb6, 0x49, 0x01, 0x91, 0x21, 0x48,
0x8e, 0x34, 0x2b, 0x19, 0xe9, 0x2a, 0xcc, 0xef, 0x5a, 0x5e, 0xd0, 0x37, 0x6c, 0xbd, 0xbd, 0x63,
0x38, 0x0e, 0xb6, 0x29, 0xef, 0x88, 0xe9, 0xcb, 0x2e, 0x97, 0xb5, 0x59, 0x5e, 0x78, 0x95, 0x95,
0x11, 0x06, 0xfa, 0xe8, 0x05, 0x58, 0xe8, 0xed, 0xec, 0xfb, 0x56, 0x7b, 0xa8, 0x52, 0x9e, 0x56,
0x9a, 0x0b, 0x4b, 0x63, 0xb5, 0xce, 0xc3, 0x4c, 0x9b, 0x5a, 0x4f, 0x53, 0x27, 0x9c, 0x64, 0xac,
0x2d, 0x50, 0xd6, 0x36, 0x78, 0xc1, 0x9d, 0x10, 0x4e, 0xc8, 0x0a, 0x91, 0xfb, 0x41, 0x5b, 0xa8,
0x50, 0xa4, 0x15, 0x66, 0x79, 0xe1, 0x7b, 0x41, 0x7b, 0x50, 0x27, 0x6e, 0xf7, 0x4a, 0x49, 0xbb,
0xd7, 0x84, 0x22, 0xb5, 0xe3, 0xd8, 0x6f, 0x96, 0x29, 0x99, 0xe1, 0x27, 0x5a, 0x87, 0x69, 0x3f,
0x30, 0xbc, 0x40, 0xef, 0xb9, 0xbe, 0x45, 0xf8, 0xe2, 0x37, 0x61, 0x29, 0xbb, 0x5c, 0x59, 0x5d,
0x92, 0x4e, 0xd2, 0x3b, 0x78, 0x7f, 0xcd, 0x08, 0x8c, 0x0d, 0xc3, 0xf2, 0xb4, 0x3a, 0xad, 0xb8,
0x11, 0xd6, 0x93, 0x1b, 0xd7, 0xca, 0x44, 0xc6, 0x55, 0x26, 0xd9, 0x55, 0x99, 0x64, 0xab, 0x7f,
0xa9, 0xc0, 0xfc, 0x0d, 0xd7, 0x30, 0x8f, 0x87, 0x9e, 0x9d, 0x85, 0xba, 0x87, 0x7b, 0xb6, 0xd5,
0x36, 0xc8, 0x7c, 0x6c, 0x61, 0x8f, 0x6a, 0x5a, 0x5e, 0xab, 0x71, 0xe8, 0x2d, 0x0a, 0xbc, 0x54,
0xfc, 0xec, 0xf5, 0x5c, 0x23, 0xdf, 0xcc, 0xaa, 0x3f, 0x50, 0xa0, 0xa9, 0x61, 0x1b, 0x1b, 0xfe,
0xf1, 0x30, 0x14, 0x8c, 0xb2, 0x42, 0x33, 0xab, 0xfe, 0xbb, 0x02, 0x73, 0xd7, 0x70, 0x40, 0x94,
0xd3, 0xf2, 0x03, 0xab, 0x7d, 0xa4, 0xb1, 0xc9, 0xd3, 0x30, 0xdd, 0x33, 0xbc, 0xc0, 0x8a, 0xf0,
0x42, 0x55, 0xad, 0x47, 0x60, 0xa6, 0x6f, 0x17, 0x60, 0xb6, 0xd3, 0x37, 0x3c, 0xc3, 0x09, 0x30,
0x16, 0x14, 0x88, 0x19, 0x33, 0x14, 0x15, 0x45, 0xfa, 0xc3, 0xc6, 0x0b, 0xcd, 0xac, 0xfa, 0x6d,
0x05, 0xe6, 0x13, 0xe3, 0x9d, 0xc4, 0x8a, 0xbd, 0x0c, 0x79, 0xf2, 0xcb, 0x6f, 0x66, 0xa8, 0x52,
0x9d, 0x49, 0x53, 0xaa, 0xf7, 0x89, 0xc3, 0xa0, 0x5a, 0xc5, 0xf0, 0x49, 0x40, 0xf8, 0xf8, 0x35,
0x1c, 0x08, 0xf6, 0xed, 0x38, 0xcc, 0xc0, 0x80, 0x4f, 0x9f, 0x28, 0x70, 0x3a, 0x95, 0xbe, 0x23,
0xe1, 0xd8, 0x7f, 0x2a, 0xb0, 0xb0, 0xb9, 0xe3, 0xee, 0x0d, 0x48, 0x7a, 0x18, 0x9c, 0x8a, 0x7b,
0xc7, 0x6c, 0xc2, 0x3b, 0xa2, 0xe7, 0x21, 0x17, 0xec, 0xf7, 0x30, 0x55, 0xf7, 0xfa, 0xea, 0xa9,
0x15, 0xc9, 0xfa, 0x69, 0x85, 0x10, 0x79, 0x67, 0xbf, 0x87, 0x35, 0x8a, 0x8a, 0x9e, 0x81, 0x46,
0x82, 0xf7, 0xa1, 0x2f, 0x99, 0x8e, 0x33, 0xdf, 0x0f, 0x7d, 0x6f, 0x4e, 0xf4, 0xbd, 0xff, 0x91,
0x81, 0xc5, 0xa1, 0x61, 0x4f, 0x32, 0x01, 0x32, 0x7a, 0x32, 0x52, 0x7a, 0x88, 0x99, 0x13, 0x50,
0x2d, 0x93, 0x2c, 0x6a, 0xb2, 0xcb, 0x59, 0xad, 0x26, 0xb8, 0x59, 0xd3, 0x47, 0xcf, 0x02, 0x1a,
0xf2, 0x7e, 0x4c, 0x73, 0x73, 0xda, 0x4c, 0xd2, 0xfd, 0x51, 0x17, 0x2b, 0xf5, 0x7f, 0x8c, 0x2d,
0x39, 0x6d, 0x4e, 0xe2, 0x00, 0x7d, 0xf4, 0x3c, 0xcc, 0x59, 0xce, 0x4d, 0xdc, 0x75, 0xbd, 0x7d,
0xbd, 0x87, 0xbd, 0x36, 0x76, 0x02, 0xa3, 0x83, 0xfd, 0x66, 0x81, 0x52, 0x34, 0x1b, 0x96, 0x6d,
0x0c, 0x8a, 0xd0, 0x4b, 0xb0, 0x78, 0xaf, 0x8f, 0xbd, 0x7d, 0xdd, 0xc7, 0xde, 0xae, 0xd5, 0xc6,
0xba, 0xb1, 0x6b, 0x58, 0xb6, 0xb1, 0x65, 0xe3, 0x66, 0x71, 0x29, 0xbb, 0x5c, 0xd2, 0xe6, 0x69,
0xf1, 0x26, 0x2b, 0xbd, 0x1c, 0x16, 0xaa, 0x7f, 0xa6, 0xc0, 0x02, 0x5b, 0x0c, 0x6d, 0x84, 0x66,
0xe7, 0x88, 0x9d, 0x4d, 0xdc, 0x2a, 0xf2, 0xa5, 0x5b, 0x2d, 0x66, 0x14, 0xd5, 0x4f, 0x15, 0x98,
0x23, 0x6b, 0x92, 0x47, 0x89, 0xe6, 0x3f, 0x51, 0x60, 0xf6, 0xba, 0xe1, 0x3f, 0x4a, 0x24, 0xff,
0x13, 0x0f, 0x44, 0x22, 0x9a, 0x1f, 0x0d, 0x8f, 0x39, 0x1c, 0xb1, 0xe4, 0x25, 0x11, 0x8b, 0xfa,
0x17, 0x83, 0x40, 0xe5, 0xd1, 0x1a, 0xa0, 0xfa, 0x63, 0x05, 0x4e, 0x5d, 0xc3, 0x41, 0x44, 0xf5,
0xf1, 0x88, 0x68, 0xc6, 0x14, 0xaa, 0xef, 0xb3, 0x68, 0x40, 0x4a, 0xfc, 0x91, 0x38, 0xdb, 0x5f,
0xcc, 0xc0, 0x3c, 0xf1, 0x3a, 0xc7, 0x43, 0x08, 0xc6, 0x59, 0xd6, 0x4a, 0x04, 0x25, 0x2f, 0xd5,
0x84, 0xd0, 0x85, 0x17, 0xc6, 0x76, 0xe1, 0xea, 0x9f, 0x66, 0x58, 0xe8, 0x21, 0x72, 0x63, 0x92,
0x69, 0x91, 0xd0, 0x9a, 0x91, 0xd2, 0xaa, 0x42, 0x35, 0x82, 0xac, 0xaf, 0x85, 0xee, 0x37, 0x06,
0x3b, 0xae, 0xde, 0x57, 0xfd, 0x9e, 0x02, 0x0b, 0xe1, 0xa6, 0xc1, 0x26, 0xee, 0x74, 0xb1, 0x13,
0x3c, 0xb8, 0x0c, 0x25, 0x25, 0x20, 0x23, 0x91, 0x80, 0x93, 0x50, 0xf6, 0x59, 0x3f, 0xd1, 0x7e,
0xc0, 0x00, 0xa0, 0xfe, 0x95, 0x02, 0x8b, 0x43, 0xe4, 0x4c, 0x32, 0x89, 0x4d, 0x28, 0x5a, 0x8e,
0x89, 0xef, 0x47, 0xd4, 0x84, 0x9f, 0xa4, 0x64, 0xab, 0x6f, 0xd9, 0x66, 0x44, 0x46, 0xf8, 0x89,
0xce, 0x40, 0x15, 0x3b, 0x24, 0xc6, 0xd0, 0x29, 0x2e, 0x15, 0xe4, 0x92, 0x56, 0x61, 0xb0, 0x75,
0x02, 0x22, 0x95, 0xb7, 0x2d, 0x4c, 0x2b, 0xe7, 0x59, 0x65, 0xfe, 0xa9, 0xfe, 0x92, 0x02, 0xb3,
0x44, 0x0a, 0x39, 0xf5, 0xfe, 0xc3, 0xe5, 0xe6, 0x12, 0x54, 0x04, 0x31, 0xe3, 0x03, 0x11, 0x41,
0xea, 0x5d, 0x98, 0x8b, 0x93, 0x33, 0x09, 0x37, 0x1f, 0x07, 0x88, 0xe6, 0x8a, 0x69, 0x43, 0x56,
0x13, 0x20, 0xea, 0xaf, 0x67, 0xc2, 0x63, 0x05, 0xca, 0xa6, 0x23, 0xde, 0xcd, 0xa4, 0x53, 0x22,
0xda, 0xf3, 0x32, 0x85, 0xd0, 0xe2, 0x35, 0xa8, 0xe2, 0xfb, 0x81, 0x67, 0xe8, 0x3d, 0xc3, 0x33,
0xba, 0x4c, 0xad, 0xc6, 0x32, 0xbd, 0x15, 0x5a, 0x6d, 0x83, 0xd6, 0x22, 0x9d, 0x50, 0x11, 0x61,
0x9d, 0x14, 0x58, 0x27, 0x14, 0x32, 0x58, 0xa7, 0x55, 0x9a, 0x59, 0xf5, 0x27, 0x24, 0xea, 0xe3,
0x62, 0x7d, 0xdc, 0x39, 0x13, 0x1f, 0x53, 0x5e, 0x3a, 0xa6, 0x6a, 0x33, 0xab, 0xfe, 0xbe, 0x02,
0x0d, 0x3a, 0x96, 0x35, 0x7e, 0xb8, 0x64, 0xb9, 0x4e, 0xa2, 0xb2, 0x92, 0xa8, 0x3c, 0x42, 0x1b,
0x5f, 0x81, 0x02, 0x9f, 0x89, 0xec, 0xb8, 0x33, 0xc1, 0x2b, 0x1c, 0x30, 0x1e, 0xf5, 0xf7, 0x14,
0x98, 0x4f, 0xf0, 0x7e, 0x12, 0x15, 0xb8, 0x03, 0x88, 0x8d, 0xd0, 0x1c, 0x0c, 0x3b, 0xf4, 0xdc,
0x67, 0xa5, 0x6e, 0x2a, 0xc9, 0x24, 0x6d, 0xc6, 0x4a, 0x40, 0x7c, 0xf5, 0xa7, 0x0a, 0x9c, 0xbc,
0x86, 0x03, 0x8a, 0x7a, 0x85, 0x98, 0xa1, 0x0d, 0xcf, 0xed, 0x78, 0xd8, 0xf7, 0xbf, 0x04, 0x82,
0xf2, 0x1b, 0x2c, 0xe6, 0x93, 0x8d, 0x6d, 0x92, 0x89, 0x38, 0x03, 0x55, 0xda, 0x19, 0x36, 0x75,
0xcf, 0xdd, 0xf3, 0xb9, 0x40, 0x55, 0x38, 0x4c, 0x73, 0xf7, 0xa8, 0x64, 0x04, 0x6e, 0x60, 0xd8,
0x0c, 0x81, 0x3b, 0x1b, 0x0a, 0x21, 0xc5, 0x54, 0x2b, 0x43, 0xc2, 0x48, 0xe3, 0xf8, 0x4b, 0xc0,
0xec, 0x1f, 0xb2, 0x9d, 0x33, 0x71, 0x4c, 0x93, 0x30, 0xf9, 0x45, 0x16, 0x9a, 0xb2, 0x51, 0xd5,
0x57, 0x4f, 0x4b, 0xeb, 0x08, 0x9d, 0x31, 0x6c, 0x74, 0x1a, 0x2a, 0xdb, 0x86, 0x65, 0xeb, 0x1e,
0x36, 0x7c, 0xd7, 0xe1, 0x23, 0x06, 0x02, 0xd2, 0x28, 0x44, 0xfd, 0x1b, 0x85, 0x9d, 0xef, 0x7e,
0x19, 0x8c, 0x61, 0xad, 0x99, 0x55, 0x7f, 0x94, 0x81, 0xda, 0xba, 0xe3, 0x63, 0x2f, 0x38, 0xfe,
0xeb, 0x18, 0xf4, 0x06, 0x54, 0xe8, 0x08, 0x7d, 0xdd, 0x34, 0x02, 0x83, 0xbb, 0xbe, 0xc7, 0xa5,
0x27, 0x3b, 0x6f, 0x13, 0xbc, 0x35, 0x23, 0x30, 0x34, 0xc6, 0x26, 0x9f, 0xfc, 0x46, 0x27, 0xa0,
0xbc, 0x63, 0xf8, 0x3b, 0xfa, 0x5d, 0xbc, 0xcf, 0x82, 0xcb, 0x9a, 0x56, 0x22, 0x80, 0x77, 0xf0,
0xbe, 0x8f, 0x1e, 0x83, 0x92, 0xd3, 0xef, 0x32, 0x95, 0x2b, 0x2e, 0x29, 0xcb, 0x35, 0xad, 0xe8,
0xf4, 0xbb, 0x44, 0xe1, 0x18, 0xbb, 0x4a, 0xcd, 0xac, 0xfa, 0xd7, 0x19, 0xa8, 0xdf, 0xec, 0x93,
0xe5, 0x13, 0x3d, 0xa0, 0xea, 0xdb, 0xc1, 0x83, 0x89, 0xe7, 0x39, 0xc8, 0xb2, 0x40, 0x84, 0xd4,
0x68, 0x4a, 0x47, 0xb0, 0xbe, 0xe6, 0x6b, 0x04, 0x89, 0x1e, 0xce, 0xf4, 0xdb, 0x6d, 0x1e, 0xd3,
0x65, 0x29, 0xd5, 0x65, 0x02, 0x61, 0x11, 0xdd, 0x09, 0x28, 0x63, 0xcf, 0x8b, 0x22, 0x3e, 0x3a,
0x26, 0xec, 0x79, 0xac, 0x50, 0x85, 0xaa, 0xd1, 0xbe, 0xeb, 0xb8, 0x7b, 0x36, 0x36, 0x3b, 0xd8,
0xa4, 0x82, 0x50, 0xd2, 0x62, 0x30, 0x26, 0x2a, 0x44, 0x02, 0xf4, 0xb6, 0x13, 0xd0, 0x58, 0x20,
0x4b, 0x44, 0x85, 0x40, 0xae, 0x3a, 0x01, 0x29, 0x36, 0xb1, 0x8d, 0x03, 0x4c, 0x8b, 0x8b, 0xac,
0x98, 0x41, 0x78, 0x71, 0xbf, 0x17, 0xd5, 0x2e, 0xb1, 0x62, 0x06, 0x21, 0xc5, 0x27, 0xa1, 0x3c,
0xd8, 0x40, 0x2f, 0x0f, 0xf6, 0x3b, 0x29, 0x40, 0xfd, 0x99, 0x02, 0xb5, 0x35, 0xda, 0xd4, 0x23,
0x20, 0x7d, 0x08, 0x72, 0xf8, 0x7e, 0xcf, 0xe3, 0xca, 0x44, 0x7f, 0x8f, 0x14, 0x28, 0x26, 0x35,
0xe5, 0x66, 0x56, 0xfd, 0x4e, 0x0e, 0x6a, 0x9b, 0xd8, 0xf0, 0xda, 0x3b, 0x8f, 0xc4, 0x66, 0x4e,
0x03, 0xb2, 0xa6, 0x6f, 0xf3, 0x71, 0x92, 0x9f, 0xe8, 0x3c, 0xcc, 0xf4, 0x6c, 0xa3, 0x8d, 0x77,
0x5c, 0xdb, 0xc4, 0x9e, 0xde, 0xf1, 0xdc, 0x3e, 0x3b, 0x80, 0xac, 0x6a, 0x0d, 0xa1, 0xe0, 0x1a,
0x81, 0xa3, 0x97, 0xa1, 0x64, 0xfa, 0xb6, 0x4e, 0x57, 0xc1, 0x45, 0x6a, 0x7d, 0xe5, 0xe3, 0x5b,
0xf3, 0x6d, 0xba, 0x08, 0x2e, 0x9a, 0xec, 0x07, 0x7a, 0x02, 0x6a, 0x6e, 0x3f, 0xe8, 0xf5, 0x03,
0x9d, 0xa9, 0x6c, 0xb3, 0x44, 0xc9, 0xab, 0x32, 0x20, 0xd5, 0x68, 0x1f, 0xbd, 0x0d, 0x35, 0x9f,
0xb2, 0x32, 0x0c, 0x80, 0xcb, 0xe3, 0x86, 0x5d, 0x55, 0x56, 0x8f, 0x47, 0xc0, 0xcf, 0x40, 0x23,
0xf0, 0x8c, 0x5d, 0x6c, 0x0b, 0x07, 0x3c, 0x40, 0xe5, 0x73, 0x9a, 0xc1, 0x07, 0xa7, 0xa3, 0x29,
0xc7, 0x41, 0x95, 0xb4, 0xe3, 0x20, 0x54, 0x87, 0x8c, 0x73, 0x8f, 0x9e, 0x34, 0x66, 0xb5, 0x8c,
0x73, 0x8f, 0x09, 0x42, 0xbd, 0x99, 0x55, 0xdf, 0x81, 0xdc, 0x75, 0x2b, 0xa0, 0x1c, 0x26, 0xea,
0xaf, 0xd0, 0x75, 0x08, 0x55, 0xf2, 0xc7, 0xa0, 0xe4, 0xb9, 0x7b, 0xcc, 0xae, 0x91, 0x98, 0xac,
0xaa, 0x15, 0x3d, 0x77, 0x8f, 0x1a, 0x2d, 0x9a, 0xac, 0xe2, 0x7a, 0x98, 0x45, 0x98, 0x19, 0x8d,
0x7f, 0xa9, 0x7f, 0xac, 0x0c, 0xa4, 0x8a, 0x58, 0x22, 0xff, 0xc1, 0x4c, 0xd1, 0x1b, 0x50, 0xf4,
0x58, 0xfd, 0x91, 0x47, 0xe5, 0x62, 0x4f, 0xd4, 0xae, 0x86, 0xb5, 0xc6, 0x16, 0x40, 0xb2, 0xc2,
0xac, 0xbe, 0x6d, 0xf7, 0xfd, 0x87, 0xa1, 0x05, 0xb2, 0x63, 0x87, 0xac, 0xfc, 0x18, 0x84, 0xce,
0xc6, 0xf4, 0x52, 0x56, 0xfd, 0xaf, 0x1c, 0xd4, 0x38, 0x3d, 0x93, 0x84, 0x1a, 0xa9, 0x34, 0x6d,
0x42, 0x85, 0xf4, 0xad, 0xfb, 0xb8, 0x13, 0xee, 0xae, 0x54, 0x56, 0x57, 0xa5, 0xa1, 0x76, 0x8c,
0x0c, 0x9a, 0x96, 0xb0, 0x49, 0x2b, 0xbd, 0xe5, 0x04, 0xde, 0xbe, 0x06, 0xed, 0x08, 0x80, 0xda,
0x30, 0xb3, 0x4d, 0x90, 0x75, 0xb1, 0xe9, 0x1c, 0x6d, 0xfa, 0xe5, 0x31, 0x9a, 0xa6, 0x5f, 0xc9,
0xf6, 0xa7, 0xb7, 0xe3, 0x50, 0xf4, 0x21, 0x9b, 0x52, 0xdd, 0xc7, 0x06, 0xd7, 0x0f, 0xee, 0x6c,
0x5f, 0x1c, 0x9b, 0x7a, 0x83, 0x29, 0x10, 0xeb, 0xa0, 0xd6, 0x16, 0x61, 0xad, 0x0f, 0x61, 0x3a,
0x41, 0x02, 0xd1, 0x88, 0xbb, 0x78, 0x9f, 0x2f, 0xbc, 0xc8, 0x4f, 0xf4, 0x82, 0x98, 0x14, 0x93,
0xe6, 0xe6, 0x6f, 0xb8, 0x4e, 0xe7, 0xb2, 0xe7, 0x19, 0xfb, 0x3c, 0x69, 0xe6, 0x52, 0xe6, 0xab,
0x4a, 0x6b, 0x0b, 0xe6, 0x64, 0xc3, 0xfc, 0x5c, 0xfb, 0x78, 0x13, 0xd0, 0xf0, 0x38, 0x25, 0x3d,
0xc4, 0x52, 0x7b, 0xb2, 0x42, 0x0b, 0xea, 0x27, 0x59, 0xa8, 0xbe, 0xdb, 0xc7, 0xde, 0xfe, 0x51,
0xfa, 0x84, 0xd0, 0xa7, 0xe5, 0x04, 0x9f, 0x36, 0x64, 0x86, 0xf3, 0x12, 0x33, 0x2c, 0x71, 0x26,
0x05, 0xa9, 0x33, 0x91, 0xd9, 0xd9, 0xe2, 0xa1, 0xec, 0x6c, 0x29, 0xd5, 0xce, 0xae, 0x41, 0x95,
0x9d, 0xc0, 0x1d, 0xd6, 0x15, 0x54, 0x68, 0x35, 0xe6, 0x09, 0x98, 0x3d, 0x68, 0x34, 0xb3, 0xea,
0x1f, 0x29, 0xd1, 0x8c, 0x4c, 0x64, 0x4f, 0x63, 0x41, 0x6a, 0xe6, 0xd0, 0x41, 0xea, 0xd8, 0xf6,
0xf4, 0x53, 0x05, 0xca, 0xef, 0xe3, 0x76, 0xe0, 0x7a, 0x44, 0x67, 0x25, 0xd5, 0x94, 0x31, 0x56,
0x0e, 0x99, 0xe4, 0xca, 0xe1, 0x22, 0x94, 0x2c, 0x53, 0x37, 0x88, 0xc0, 0xd3, 0x7e, 0x47, 0xc5,
0xa7, 0x45, 0xcb, 0xa4, 0x9a, 0x31, 0xfe, 0x39, 0xca, 0x0f, 0x14, 0xa8, 0x32, 0x9a, 0x7d, 0x56,
0xf3, 0x55, 0xa1, 0x3b, 0x45, 0xa6, 0x85, 0xfc, 0x23, 0x1a, 0xe8, 0xf5, 0xa9, 0x41, 0xb7, 0x97,
0x01, 0x08, 0x93, 0x79, 0x75, 0xa6, 0xc4, 0x4b, 0x52, 0x6a, 0x59, 0x75, 0xca, 0xf0, 0xeb, 0x53,
0x5a, 0x99, 0xd4, 0xa2, 0x4d, 0x5c, 0x29, 0x42, 0x9e, 0xd6, 0x56, 0xff, 0x5b, 0x81, 0xd9, 0xab,
0x86, 0xdd, 0x5e, 0xb3, 0xfc, 0xc0, 0x70, 0xda, 0x13, 0x44, 0xa4, 0x97, 0xa0, 0xe8, 0xf6, 0x74,
0x1b, 0x6f, 0x07, 0x9c, 0xa4, 0x33, 0x23, 0x46, 0xc4, 0xd8, 0xa0, 0x15, 0xdc, 0xde, 0x0d, 0xbc,
0x1d, 0xa0, 0xd7, 0xa0, 0xe4, 0xf6, 0x74, 0xcf, 0xea, 0xec, 0x04, 0x9c, 0xfb, 0x63, 0x54, 0x2e,
0xba, 0x3d, 0x8d, 0xd4, 0x10, 0x36, 0xa3, 0x72, 0x87, 0xdc, 0x8c, 0x52, 0x7f, 0x32, 0x34, 0xfc,
0x09, 0x74, 0xe0, 0x12, 0x94, 0x2c, 0x27, 0xd0, 0x4d, 0xcb, 0x0f, 0x59, 0x70, 0x4a, 0x2e, 0x43,
0x4e, 0x40, 0x47, 0x40, 0xe7, 0xd4, 0x09, 0x48, 0xdf, 0xe8, 0x4d, 0x80, 0x6d, 0xdb, 0x35, 0x78,
0x6d, 0xc6, 0x83, 0xd3, 0x72, 0xf5, 0x21, 0x68, 0x61, 0xfd, 0x32, 0xad, 0x44, 0x5a, 0x18, 0x4c,
0xe9, 0xdf, 0x2a, 0x30, 0xbf, 0x81, 0x3d, 0x96, 0x13, 0x16, 0xf0, 0x9d, 0xe4, 0x75, 0x67, 0xdb,
0x8d, 0x6f, 0xe6, 0x2b, 0x89, 0xcd, 0xfc, 0xcf, 0x67, 0x03, 0x3b, 0xb6, 0x9e, 0x64, 0x47, 0x4a,
0xe1, 0x7a, 0x32, 0x3c, 0x38, 0x63, 0x0b, 0xf3, 0x7a, 0xca, 0x34, 0x71, 0x7a, 0xc5, 0xfd, 0x09,
0xf5, 0x57, 0x59, 0xde, 0x8c, 0x74, 0x50, 0x0f, 0x2e, 0xb0, 0x0b, 0xc0, 0x1d, 0x47, 0xc2, 0x8d,
0x3c, 0x05, 0x09, 0xdb, 0x91, 0x62, 0x88, 0x7e, 0x53, 0x81, 0xa5, 0x74, 0xaa, 0x26, 0x89, 0xad,
0xde, 0x84, 0xbc, 0xe5, 0x6c, 0xbb, 0xe1, 0x3e, 0xe5, 0x39, 0xa9, 0x2e, 0xc8, 0xfb, 0x65, 0x15,
0xd5, 0xbf, 0xcb, 0x40, 0xe3, 0x5d, 0x96, 0x87, 0xf1, 0x85, 0x4f, 0x7f, 0x17, 0x77, 0x75, 0xdf,
0xfa, 0x18, 0x87, 0xd3, 0xdf, 0xc5, 0xdd, 0x4d, 0xeb, 0x63, 0x1c, 0x93, 0x8c, 0x7c, 0x5c, 0x32,
0x46, 0x6f, 0xcc, 0x8b, 0xfb, 0xd0, 0xc5, 0xf8, 0x3e, 0xf4, 0x02, 0x14, 0x1c, 0xd7, 0xc4, 0xeb,
0x6b, 0x7c, 0x0d, 0xce, 0xbf, 0x06, 0xa2, 0x56, 0x3e, 0x9c, 0xa8, 0x91, 0xae, 0x68, 0x13, 0x26,
0x4b, 0xe9, 0x24, 0x34, 0xb2, 0x4f, 0xf5, 0xfb, 0x0a, 0xb4, 0xae, 0xe1, 0x20, 0xc9, 0xd5, 0xa3,
0x93, 0xbf, 0x4f, 0x14, 0x38, 0x21, 0x25, 0x68, 0x12, 0xd1, 0x7b, 0x35, 0x2e, 0x7a, 0xf2, 0x2d,
0xf2, 0xa1, 0x2e, 0xb9, 0xd4, 0x3d, 0x0f, 0xd5, 0xb5, 0x7e, 0xb7, 0x1b, 0xc5, 0x76, 0x67, 0xa0,
0xea, 0xb1, 0x9f, 0x6c, 0x5d, 0xcc, 0x3c, 0x73, 0x85, 0xc3, 0xc8, 0xea, 0x57, 0x3d, 0x0f, 0x35,
0x5e, 0x85, 0x53, 0xdd, 0x82, 0x92, 0xc7, 0x7f, 0x73, 0xfc, 0xe8, 0x5b, 0x9d, 0x87, 0x59, 0x0d,
0x77, 0x88, 0xd0, 0x7b, 0x37, 0x2c, 0xe7, 0x2e, 0xef, 0x46, 0xfd, 0x96, 0x02, 0x73, 0x71, 0x38,
0x6f, 0xeb, 0x25, 0x28, 0x1a, 0xa6, 0xe9, 0x61, 0xdf, 0x1f, 0x39, 0x2d, 0x97, 0x19, 0x8e, 0x16,
0x22, 0x0b, 0x9c, 0xcb, 0x8c, 0xcd, 0x39, 0x55, 0x87, 0x99, 0x6b, 0x38, 0xb8, 0x89, 0x03, 0x6f,
0xa2, 0xf4, 0x88, 0x26, 0x59, 0x98, 0xd2, 0xca, 0x5c, 0x2c, 0xc2, 0x4f, 0xf5, 0x7b, 0x0a, 0x20,
0xb1, 0x87, 0x49, 0xa6, 0x59, 0xe4, 0x72, 0x26, 0xce, 0x65, 0x96, 0xa0, 0xd6, 0xed, 0xb9, 0x0e,
0x76, 0x02, 0x31, 0x10, 0xab, 0x45, 0x50, 0x2a, 0x7e, 0x3f, 0x53, 0x00, 0xdd, 0x70, 0x0d, 0xf3,
0x8a, 0x61, 0x4f, 0x16, 0x38, 0x9c, 0x02, 0xf0, 0xbd, 0xb6, 0xce, 0xf5, 0x38, 0xc3, 0xed, 0x92,
0xd7, 0xbe, 0xc5, 0x54, 0xf9, 0x34, 0x54, 0x4c, 0x3f, 0xe0, 0xc5, 0xe1, 0x69, 0x3d, 0x98, 0x7e,
0xc0, 0xca, 0x69, 0x9e, 0x38, 0x59, 0xb1, 0x61, 0x53, 0x17, 0x0e, 0x3b, 0x73, 0x14, 0xad, 0xc1,
0x0a, 0x36, 0x23, 0xb8, 0x44, 0xb9, 0xf2, 0xe9, 0x39, 0x9b, 0x33, 0xcd, 0xbc, 0xba, 0x0d, 0x8b,
0x37, 0x0d, 0xa7, 0x6f, 0xd8, 0x57, 0xdd, 0x6e, 0xcf, 0x88, 0xe5, 0x18, 0x27, 0x2d, 0xa6, 0x22,
0xb1, 0x98, 0x8f, 0xb3, 0xd4, 0x47, 0x16, 0xf4, 0xd3, 0xc1, 0xe5, 0x34, 0x01, 0xc2, 0xfa, 0x29,
0x36, 0x15, 0xd5, 0x87, 0xe6, 0x70, 0x3f, 0x93, 0x4c, 0x31, 0xa5, 0x2e, 0x6c, 0x4a, 0xb4, 0xe7,
0x03, 0x98, 0xfa, 0x06, 0x3c, 0x46, 0xf3, 0x51, 0x43, 0x50, 0xec, 0x58, 0x25, 0xd9, 0x80, 0x22,
0x69, 0xe0, 0x0f, 0x33, 0xd4, 0x28, 0x0e, 0xb5, 0x30, 0x09, 0xe1, 0x97, 0xe2, 0x87, 0x18, 0x4f,
0xa6, 0xa4, 0xc1, 0xc7, 0x7b, 0xe4, 0xe6, 0x7b, 0x19, 0xa6, 0xf1, 0x7d, 0xdc, 0xee, 0x07, 0x96,
0xd3, 0xd9, 0xb0, 0x0d, 0xe7, 0x96, 0xcb, 0x9d, 0x54, 0x12, 0x8c, 0x9e, 0x84, 0x1a, 0x99, 0x06,
0xb7, 0x1f, 0x70, 0x3c, 0xe6, 0xad, 0xe2, 0x40, 0xd2, 0x1e, 0x19, 0xaf, 0x8d, 0x03, 0x6c, 0x72,
0x3c, 0xe6, 0xba, 0x92, 0x60, 0xc2, 0xad, 0x6d, 0xc3, 0xb2, 0x23, 0x34, 0xb6, 0xa3, 0x1c, 0x83,
0x0d, 0xb1, 0x9b, 0x80, 0xfd, 0xc3, 0xb0, 0xfb, 0x1f, 0x94, 0x04, 0xbb, 0x79, 0x0b, 0x47, 0xc5,
0xee, 0xeb, 0x00, 0x5d, 0xec, 0x75, 0xf0, 0x3a, 0x75, 0x19, 0x6c, 0xab, 0x67, 0x59, 0xea, 0x32,
0x06, 0x0d, 0xdc, 0x0c, 0x2b, 0x68, 0x42, 0x5d, 0xf5, 0x1a, 0xcc, 0x4a, 0x50, 0x88, 0x35, 0xf4,
0xdd, 0xbe, 0xd7, 0xc6, 0xe1, 0xb6, 0x61, 0xf8, 0x49, 0xbc, 0x67, 0x60, 0x78, 0x1d, 0x1c, 0x70,
0xc1, 0xe6, 0x5f, 0xea, 0x4b, 0xf4, 0x90, 0x90, 0xee, 0x84, 0xc4, 0xa4, 0x39, 0x9e, 0x0b, 0xa1,
0x0c, 0xe5, 0x42, 0x6c, 0xd3, 0x83, 0x38, 0xb1, 0xde, 0x84, 0x79, 0x2c, 0x74, 0x77, 0x09, 0x9b,
0xfc, 0xea, 0x54, 0xf8, 0xa9, 0xfe, 0x8f, 0x02, 0xb5, 0xf5, 0x6e, 0xcf, 0x1d, 0x1c, 0x3d, 0x8d,
0xbd, 0x84, 0x1d, 0xde, 0xb1, 0xcf, 0xc8, 0x76, 0xec, 0x9f, 0x80, 0x5a, 0xfc, 0x92, 0x0d, 0xdb,
0x11, 0xac, 0xb6, 0xc5, 0xcb, 0x35, 0x27, 0xa0, 0xec, 0xb9, 0x7b, 0x3a, 0x31, 0xc0, 0x26, 0xcf,
0x98, 0x29, 0x79, 0xee, 0x1e, 0x31, 0xcb, 0x26, 0x9a, 0x83, 0xfc, 0xb6, 0x65, 0x47, 0xc9, 0x5e,
0xec, 0x03, 0xbd, 0x4a, 0x16, 0x78, 0xec, 0xfc, 0xbc, 0x30, 0xee, 0x3a, 0x2b, 0xac, 0xc1, 0xec,
0x1c, 0x6a, 0x2a, 0xea, 0x07, 0x50, 0x0f, 0x87, 0x3f, 0xe1, 0xe5, 0xb1, 0xc0, 0xf0, 0xef, 0x86,
0x59, 0x2d, 0xec, 0x43, 0x3d, 0xcf, 0x4e, 0x53, 0x69, 0xfb, 0xb1, 0xd9, 0x47, 0x90, 0x23, 0x18,
0x5c, 0xa9, 0xe8, 0x6f, 0xf5, 0x5f, 0x33, 0xb0, 0x90, 0xc4, 0x9e, 0x84, 0xa4, 0x97, 0xe2, 0x8a,
0x24, 0xbf, 0x0b, 0x24, 0xf6, 0xc6, 0x95, 0x88, 0x4f, 0x45, 0xdb, 0xed, 0x3b, 0x01, 0xb7, 0x56,
0x64, 0x2a, 0xae, 0x92, 0x6f, 0xb4, 0x08, 0x45, 0xcb, 0xd4, 0x6d, 0xb2, 0x28, 0x64, 0x2e, 0xad,
0x60, 0x99, 0x37, 0xc8, 0x82, 0xf1, 0xe5, 0x30, 0x50, 0x1b, 0x3b, 0x15, 0x86, 0xe1, 0xa3, 0x3a,
0x64, 0x2c, 0x93, 0x9b, 0xa7, 0x8c, 0x65, 0x52, 0x71, 0x11, 0xf3, 0xd1, 0x79, 0x88, 0x2d, 0xba,
0x31, 0x93, 0x38, 0x61, 0xae, 0x2b, 0x34, 0x63, 0xbd, 0x14, 0x57, 0x1f, 0x93, 0xca, 0x13, 0xcb,
0x71, 0xd3, 0x03, 0x9f, 0x06, 0xdd, 0x59, 0xad, 0xc4, 0x00, 0x77, 0x7c, 0xf5, 0xeb, 0xb0, 0x40,
0x68, 0x66, 0x63, 0xbf, 0x43, 0x66, 0xea, 0xd0, 0xb2, 0x3f, 0x07, 0x79, 0xdb, 0xea, 0x5a, 0xa1,
0xb6, 0xb3, 0x0f, 0xf5, 0x97, 0x15, 0x58, 0x1c, 0x6a, 0x79, 0x92, 0x39, 0xbc, 0x2c, 0x8a, 0x55,
0x65, 0xf5, 0xbc, 0xd4, 0x96, 0xc9, 0x85, 0x26, 0x94, 0xc1, 0x5f, 0x63, 0x61, 0x9a, 0xc6, 0x52,
0x80, 0x1f, 0x72, 0x42, 0xd9, 0x32, 0x34, 0xf6, 0xac, 0x60, 0x47, 0xa7, 0xb7, 0xd6, 0x68, 0x8c,
0xc4, 0x12, 0x27, 0x4a, 0x5a, 0x9d, 0xc0, 0x37, 0x09, 0x98, 0xc4, 0x49, 0xbe, 0xfa, 0x5d, 0x05,
0x66, 0x63, 0x64, 0x4d, 0xc2, 0xa6, 0xd7, 0x48, 0xf8, 0xc8, 0x1a, 0xe2, 0x9c, 0x5a, 0x92, 0x72,
0x8a, 0xf7, 0x46, 0xad, 0x7d, 0x54, 0x43, 0xfd, 0xa9, 0x02, 0x15, 0xa1, 0x84, 0xac, 0x4b, 0x79,
0xd9, 0x60, 0x5d, 0x1a, 0x01, 0xc6, 0x62, 0xc3, 0x13, 0x30, 0xb0, 0x81, 0xc2, 0x95, 0x0a, 0x21,
0xa7, 0xd3, 0xf4, 0xd1, 0x75, 0xa8, 0x33, 0x36, 0x45, 0xa4, 0x4b, 0xb7, 0x8b, 0xa2, 0x6c, 0x55,
0xc3, 0x33, 0x39, 0x95, 0x5a, 0xcd, 0x17, 0xbe, 0xd8, 0x99, 0xb9, 0x6b, 0x62, 0xda, 0x53, 0x7e,
0x68, 0x95, 0x58, 0x15, 0xab, 0x92, 0x48, 0xdb, 0xc6, 0x86, 0x89, 0xbd, 0x68, 0x6c, 0xd1, 0x37,
0xd1, 0x2a, 0xf6, 0x5b, 0x27, 0x2b, 0x0f, 0x6e, 0xcd, 0x81, 0x81, 0xc8, 0xa2, 0x04, 0x3d, 0x05,
0xd3, 0x66, 0x37, 0x76, 0x65, 0x32, 0x8c, 0xc5, 0xcd, 0xae, 0x70, 0x57, 0x32, 0x46, 0x50, 0x2e,
0x4e, 0xd0, 0xb7, 0x07, 0x97, 0xd0, 0x3d, 0x6c, 0x62, 0x27, 0xb0, 0x0c, 0xfb, 0xc1, 0x65, 0xb2,
0x05, 0xa5, 0xbe, 0x8f, 0x3d, 0xc1, 0xf9, 0x44, 0xdf, 0xa4, 0xac, 0x67, 0xf8, 0xfe, 0x9e, 0xeb,
0x99, 0x9c, 0xca, 0xe8, 0x7b, 0x44, 0x82, 0x2c, 0xbb, 0xb8, 0x2c, 0x4f, 0x90, 0x7d, 0x09, 0x16,
0xbb, 0xae, 0x69, 0x6d, 0x5b, 0xb2, 0xbc, 0x5a, 0x52, 0x6d, 0x3e, 0x2c, 0x8e, 0xd5, 0x0b, 0xaf,
0xfc, 0xcc, 0x8a, 0x57, 0x7e, 0x7e, 0x98, 0x81, 0xc5, 0xf7, 0x7a, 0xe6, 0x17, 0xc0, 0x87, 0x25,
0xa8, 0xb8, 0xb6, 0xb9, 0x11, 0x67, 0x85, 0x08, 0x22, 0x18, 0x0e, 0xde, 0x8b, 0x30, 0xd8, 0x31,
0x84, 0x08, 0x1a, 0x99, 0x50, 0xfc, 0x40, 0xfc, 0x2a, 0x8c, 0xe2, 0x57, 0xf9, 0xb3, 0xd7, 0x0b,
0xa5, 0x4c, 0x63, 0xae, 0x99, 0x51, 0x7f, 0x0e, 0x16, 0x59, 0x6a, 0xc2, 0x43, 0xe6, 0x52, 0x38,
0x47, 0xf3, 0xe2, 0x1c, 0x7d, 0x04, 0xf3, 0xc4, 0x9a, 0x93, 0xae, 0xdf, 0xf3, 0xb1, 0x37, 0xa1,
0x91, 0x3a, 0x09, 0xe5, 0xb0, 0xb7, 0x30, 0x15, 0x7c, 0x00, 0x50, 0xff, 0x3f, 0xcc, 0x25, 0xfa,
0x7a, 0xc0, 0x51, 0x86, 0x23, 0x59, 0x10, 0x47, 0xb2, 0x04, 0xa0, 0xb9, 0x36, 0x7e, 0xcb, 0x09,
0xac, 0x60, 0x9f, 0x44, 0x1f, 0x82, 0x6b, 0xa3, 0xbf, 0x09, 0x06, 0xe9, 0x77, 0x04, 0xc6, 0xaf,
0x28, 0x30, 0xc3, 0x34, 0x97, 0x34, 0xf5, 0xe0, 0xb3, 0xf0, 0x32, 0x14, 0x30, 0xed, 0x85, 0xef,
0x66, 0x9c, 0x96, 0x9b, 0xea, 0x88, 0x5c, 0x8d, 0xa3, 0x4b, 0xd5, 0x28, 0x80, 0xe9, 0x35, 0xcf,
0xed, 0x4d, 0x46, 0x11, 0x8d, 0x78, 0x6c, 0x2c, 0xc6, 0xb0, 0x25, 0x02, 0xb8, 0x95, 0x26, 0x18,
0x7f, 0xaf, 0xc0, 0xc2, 0xed, 0x1e, 0xf6, 0x8c, 0x00, 0x13, 0xa6, 0x4d, 0xd6, 0xfb, 0x28, 0xdd,
0x8d, 0x51, 0x96, 0x8d, 0x53, 0x86, 0x5e, 0x8b, 0xdd, 0x53, 0x94, 0xaf, 0x73, 0x12, 0x54, 0x0e,
0xee, 0x3b, 0x84, 0xe3, 0x5a, 0x14, 0xc7, 0xf5, 0x63, 0x05, 0x66, 0x36, 0x31, 0xf1, 0x63, 0x93,
0x0d, 0xe9, 0x22, 0xe4, 0x08, 0x95, 0xe3, 0x4e, 0x30, 0x45, 0x46, 0xe7, 0x60, 0xc6, 0x72, 0xda,
0x76, 0xdf, 0xc4, 0x3a, 0x19, 0xbf, 0x4e, 0xc2, 0x43, 0x1e, 0x3c, 0x4c, 0xf3, 0x02, 0x32, 0x0c,
0xe2, 0xa2, 0xa5, 0x32, 0x7e, 0x9f, 0xc9, 0x78, 0x94, 0x10, 0xc6, 0x48, 0x50, 0x0e, 0x43, 0xc2,
0x8b, 0x90, 0x27, 0x5d, 0x87, 0x41, 0x84, 0xbc, 0xd6, 0x40, 0x4d, 0x34, 0x86, 0xad, 0xfe, 0xbc,
0x02, 0x48, 0x64, 0xdb, 0x24, 0x56, 0xe2, 0x15, 0x31, 0x11, 0x24, 0x3b, 0x92, 0x74, 0x36, 0xd2,
0x28, 0x05, 0x44, 0xfd, 0x34, 0x9a, 0x3d, 0x3a, 0xdd, 0x93, 0xcc, 0x1e, 0x19, 0xd7, 0xc8, 0xd9,
0x13, 0x98, 0x40, 0x91, 0xc5, 0xd9, 0xa3, 0x12, 0x2b, 0x99, 0x3d, 0x42, 0x33, 0x9d, 0x3d, 0x6e,
0xdf, 0x9b, 0xcd, 0x0c, 0x99, 0x34, 0x46, 0x6c, 0x38, 0x69, 0xb4, 0x67, 0xe5, 0x30, 0x3d, 0xbf,
0x08, 0x79, 0xd2, 0xe3, 0xc1, 0xfc, 0x0a, 0x27, 0x8d, 0x62, 0x0b, 0x93, 0xc6, 0x09, 0x78, 0xf8,
0x93, 0x36, 0x18, 0xe9, 0x60, 0xd2, 0x54, 0xa8, 0xde, 0xde, 0xfa, 0x08, 0xb7, 0x83, 0x11, 0x96,
0xf7, 0x2c, 0x4c, 0x6f, 0x78, 0xd6, 0xae, 0x65, 0xe3, 0xce, 0x28, 0x13, 0xfe, 0x5d, 0x05, 0x6a,
0xd7, 0x3c, 0xc3, 0x09, 0xdc, 0xd0, 0x8c, 0x3f, 0x10, 0x3f, 0xaf, 0x40, 0xb9, 0x17, 0xf6, 0xc6,
0x65, 0xe0, 0x49, 0xf9, 0x89, 0x4f, 0x9c, 0x26, 0x6d, 0x50, 0x4d, 0x7d, 0x1f, 0xe6, 0x28, 0x25,
0x49, 0xb2, 0x5f, 0x87, 0x12, 0x35, 0xe6, 0x16, 0xdf, 0x40, 0xa9, 0xac, 0xaa, 0xf2, 0x25, 0x8d,
0x38, 0x0c, 0x2d, 0xaa, 0xa3, 0xfe, 0xb3, 0x02, 0x15, 0x5a, 0x36, 0x18, 0xe0, 0xe1, 0xb5, 0xfc,
0x15, 0x28, 0xb8, 0x94, 0xe5, 0x23, 0x0f, 0x86, 0xc5, 0x59, 0xd1, 0x78, 0x05, 0x12, 0x21, 0xb3,
0x5f, 0xa2, 0x45, 0x06, 0x06, 0xe2, 0x36, 0xb9, 0xd8, 0x61, 0xb4, 0x53, 0xb3, 0x3c, 0xde, 0xf8,
0xc2, 0x2a, 0x74, 0xad, 0xc6, 0x64, 0x92, 0x22, 0x3c, 0xb8, 0x0a, 0x7f, 0x35, 0xe1, 0x63, 0x97,
0xd2, 0xa9, 0x90, 0x3b, 0xd9, 0x98, 0x65, 0x25, 0x6b, 0xb5, 0x18, 0x59, 0x13, 0xae, 0xd5, 0x22,
0x11, 0x18, 0xb5, 0x56, 0x13, 0x89, 0x1b, 0x08, 0xc0, 0x3f, 0x2a, 0xb0, 0xc8, 0x7d, 0x5a, 0x24,
0x5b, 0x47, 0xc0, 0x26, 0xf4, 0x35, 0xee, 0x7b, 0xb3, 0xd4, 0xf7, 0x3e, 0x33, 0xca, 0xf7, 0x46,
0x74, 0x1e, 0xe0, 0x7c, 0xcf, 0x42, 0xf9, 0x26, 0xad, 0xf8, 0xd6, 0xfd, 0x00, 0x35, 0xa1, 0xb8,
0x8b, 0x3d, 0xdf, 0x72, 0x1d, 0xae, 0xe2, 0xe1, 0xe7, 0xb9, 0x33, 0x50, 0x0a, 0x6f, 0x2e, 0xa2,
0x22, 0x64, 0x2f, 0xdb, 0x76, 0x63, 0x0a, 0x55, 0xa1, 0xb4, 0xce, 0xaf, 0xe7, 0x35, 0x94, 0x73,
0x6f, 0xc2, 0xac, 0xc4, 0xef, 0xa3, 0x19, 0xa8, 0x5d, 0x36, 0x69, 0x74, 0x79, 0xc7, 0x25, 0xc0,
0xc6, 0x14, 0x5a, 0x00, 0xa4, 0xe1, 0xae, 0xbb, 0x4b, 0x11, 0xdf, 0xf6, 0xdc, 0x2e, 0x85, 0x2b,
0xe7, 0x9e, 0x85, 0x39, 0x19, 0xf5, 0xa8, 0x0c, 0x79, 0xca, 0x8d, 0xc6, 0x14, 0x02, 0x28, 0x68,
0x78, 0xd7, 0xbd, 0x8b, 0x1b, 0xca, 0xea, 0x9f, 0x9f, 0x83, 0x1a, 0xa3, 0x9d, 0xdf, 0xb3, 0x47,
0x3a, 0x34, 0x92, 0x4f, 0x8d, 0xa1, 0xaf, 0xc8, 0x77, 0x62, 0xe5, 0x2f, 0x92, 0xb5, 0x46, 0x09,
0x93, 0x3a, 0x85, 0x3e, 0x80, 0x7a, 0xfc, 0x71, 0x2e, 0x24, 0x3f, 0x96, 0x96, 0xbe, 0xe0, 0x75,
0x50, 0xe3, 0x3a, 0xd4, 0x62, 0xef, 0x6a, 0x21, 0xf9, 0x04, 0xcb, 0xde, 0xde, 0x6a, 0xc9, 0xad,
0x89, 0xf8, 0xf6, 0x15, 0xa3, 0x3e, 0xfe, 0xd0, 0x4d, 0x0a, 0xf5, 0xd2, 0xd7, 0x70, 0x0e, 0xa2,
0xde, 0x80, 0x99, 0xa1, 0x77, 0x68, 0xd0, 0xb3, 0x29, 0x1b, 0x22, 0xf2, 0xf7, 0x6a, 0x0e, 0xea,
0x62, 0x0f, 0xd0, 0xf0, 0x5b, 0x51, 0x68, 0x45, 0x3e, 0x03, 0x69, 0xaf, 0x67, 0xb5, 0x2e, 0x8c,
0x8d, 0x1f, 0x31, 0xee, 0x3b, 0x0a, 0x2c, 0xa6, 0x3c, 0x59, 0x82, 0x2e, 0xa6, 0xed, 0x8e, 0x8d,
0x78, 0x80, 0xa5, 0xf5, 0xc2, 0xe1, 0x2a, 0x45, 0x84, 0x38, 0x30, 0x9d, 0x78, 0xb1, 0x03, 0x9d,
0x4f, 0xbd, 0x66, 0x3c, 0xfc, 0x9c, 0x49, 0xeb, 0x2b, 0xe3, 0x21, 0x47, 0xfd, 0x7d, 0x08, 0xd3,
0x89, 0xe7, 0x2a, 0x52, 0xfa, 0x93, 0x3f, 0x6a, 0x71, 0xd0, 0x84, 0x7e, 0x03, 0x6a, 0xb1, 0x77,
0x25, 0x52, 0x24, 0x5e, 0xf6, 0xf6, 0xc4, 0x41, 0x4d, 0x7f, 0x08, 0x55, 0xf1, 0xf9, 0x07, 0xb4,
0x9c, 0xa6, 0x4b, 0x43, 0x0d, 0x1f, 0x46, 0x95, 0x06, 0xd7, 0xb6, 0x47, 0xa8, 0xd2, 0xd0, 0x4d,
0xf7, 0xf1, 0x55, 0x49, 0x68, 0x7f, 0xa4, 0x2a, 0x1d, 0xba, 0x8b, 0x6f, 0x29, 0x74, 0xdb, 0x5f,
0xf2, 0x2c, 0x00, 0x5a, 0x4d, 0x93, 0xcd, 0xf4, 0x07, 0x10, 0x5a, 0x17, 0x0f, 0x55, 0x27, 0xe2,
0xe2, 0x5d, 0xa8, 0xc7, 0x2f, 0xbf, 0xa7, 0x70, 0x51, 0xfa, 0x5e, 0x40, 0xeb, 0xfc, 0x58, 0xb8,
0x51, 0x67, 0xef, 0x41, 0x45, 0x78, 0x3d, 0x14, 0x3d, 0x3d, 0x42, 0x8e, 0xc5, 0xa7, 0x34, 0x0f,
0xe2, 0xe4, 0xbb, 0x50, 0x8e, 0x1e, 0xfd, 0x44, 0x67, 0x53, 0xe5, 0xf7, 0x30, 0x4d, 0x6e, 0x02,
0x0c, 0x5e, 0xf4, 0x44, 0x4f, 0x49, 0xdb, 0x1c, 0x7a, 0xf2, 0xf3, 0xa0, 0x46, 0xa3, 0xe1, 0xb3,
0xdb, 0x41, 0xa3, 0x86, 0x2f, 0x5e, 0x70, 0x3b, 0xa8, 0xd9, 0x1d, 0xa8, 0xc5, 0x2e, 0xaa, 0xa6,
0xa9, 0xb0, 0xe4, 0x22, 0x71, 0xeb, 0xdc, 0x38, 0xa8, 0xd1, 0xfc, 0xed, 0x40, 0x2d, 0x76, 0x49,
0x30, 0xa5, 0x27, 0xd9, 0xe5, 0xc8, 0x94, 0x9e, 0xa4, 0x77, 0x0e, 0xd5, 0x29, 0xf4, 0x4d, 0xe1,
0x3e, 0x62, 0xec, 0xf2, 0x27, 0x7a, 0x7e, 0x64, 0x3b, 0xb2, 0x4b, 0xb0, 0xad, 0xd5, 0xc3, 0x54,
0x89, 0x48, 0xe0, 0x52, 0xc5, 0x58, 0x9a, 0x2e, 0x55, 0x87, 0x99, 0xa9, 0x4d, 0x28, 0xb0, 0xdb,
0x7e, 0x48, 0x4d, 0xb9, 0xf2, 0x2b, 0x5c, 0x05, 0x6c, 0x3d, 0x21, 0xc5, 0x89, 0xdf, 0x7f, 0x63,
0x8d, 0xb2, 0x9d, 0xd2, 0x94, 0x46, 0x63, 0x37, 0xbc, 0xc6, 0x6d, 0x54, 0x83, 0x02, 0xbb, 0x72,
0x92, 0xd2, 0x68, 0xec, 0x3e, 0x55, 0x6b, 0x34, 0x0e, 0x5b, 0xef, 0x4e, 0xa1, 0x0d, 0xc8, 0xd3,
0x63, 0x6d, 0x74, 0x66, 0xd4, 0x35, 0x86, 0x51, 0x2d, 0xc6, 0x6e, 0x3a, 0xa8, 0x53, 0xe8, 0x36,
0xe4, 0x69, 0x0a, 0x58, 0x4a, 0x8b, 0x62, 0x7e, 0x7f, 0x6b, 0x24, 0x4a, 0x48, 0xa2, 0x09, 0x55,
0x31, 0x0b, 0x37, 0xc5, 0x65, 0x49, 0xf2, 0x94, 0x5b, 0xe3, 0x60, 0x86, 0xbd, 0x30, 0x35, 0x1a,
0x1c, 0xf1, 0xa7, 0xab, 0xd1, 0x50, 0xfa, 0x40, 0xba, 0x1a, 0x0d, 0x67, 0x0c, 0xa8, 0x53, 0xe8,
0x17, 0x14, 0x68, 0xa6, 0xa5, 0x86, 0xa2, 0xd4, 0x08, 0x68, 0x54, 0x7e, 0x6b, 0xeb, 0xc5, 0x43,
0xd6, 0x8a, 0x68, 0xf9, 0x98, 0x9e, 0xfb, 0x0d, 0x25, 0x83, 0x5e, 0x48, 0x6b, 0x2f, 0x25, 0xc1,
0xb1, 0xf5, 0xdc, 0xf8, 0x15, 0xa2, 0xbe, 0xb7, 0xa0, 0x22, 0x9c, 0x39, 0xa6, 0x58, 0xde, 0xe1,
0xc3, 0xd2, 0x94, 0x59, 0x95, 0x1c, 0x5f, 0x32, 0xf1, 0xa6, 0x19, 0x84, 0x29, 0xc2, 0x28, 0x26,
0x24, 0xa6, 0x88, 0x77, 0x2c, 0x01, 0x51, 0x9d, 0x42, 0x18, 0xaa, 0x62, 0x3a, 0x61, 0x8a, 0x34,
0x4a, 0x32, 0x11, 0x5b, 0xcf, 0x8c, 0x81, 0x19, 0x75, 0xa3, 0x03, 0x0c, 0xd2, 0xf9, 0x52, 0x7c,
0xdd, 0x50, 0x46, 0x61, 0xeb, 0xe9, 0x03, 0xf1, 0x44, 0xb7, 0x2f, 0x24, 0xe8, 0xa5, 0x70, 0x7f,
0x38, 0x85, 0x6f, 0x8c, 0xb5, 0xc8, 0x70, 0xca, 0x57, 0xca, 0x5a, 0x24, 0x35, 0xbb, 0xac, 0x75,
0x61, 0x6c, 0xfc, 0x68, 0x3c, 0xf7, 0xa0, 0x91, 0x4c, 0x91, 0x4b, 0x59, 0xe3, 0xa6, 0x64, 0xec,
0xb5, 0x9e, 0x1d, 0x13, 0x5b, 0xf4, 0x87, 0x27, 0x86, 0x69, 0xfa, 0xba, 0x15, 0xec, 0xd0, 0xcc,
0xab, 0x71, 0x46, 0x2d, 0x26, 0x79, 0x8d, 0x33, 0xea, 0x58, 0x4a, 0x17, 0x77, 0x5e, 0x34, 0xdb,
0x20, 0xcd, 0x79, 0x89, 0xc9, 0x44, 0x29, 0x7e, 0x26, 0x9e, 0x71, 0xc3, 0xc2, 0xcf, 0x78, 0x16,
0x03, 0x3a, 0x37, 0x56, 0xaa, 0xc3, 0xa8, 0xf0, 0x53, 0x9e, 0x16, 0xc1, 0x96, 0x6e, 0x89, 0x24,
0x8d, 0x94, 0xa5, 0x94, 0x3c, 0x49, 0x24, 0x65, 0xe9, 0x96, 0x92, 0xf7, 0x41, 0x15, 0xab, 0x91,
0x3c, 0xf1, 0x1e, 0xbd, 0x17, 0x92, 0x3c, 0xea, 0x3c, 0x78, 0xbb, 0xa2, 0x91, 0x3c, 0x4a, 0x4e,
0xe9, 0x20, 0xe5, 0xc4, 0x79, 0x8c, 0x0e, 0x92, 0xa7, 0xb0, 0x29, 0x1d, 0xa4, 0x1c, 0xd6, 0x8e,
0x11, 0xbb, 0xc6, 0x4e, 0x3f, 0x53, 0x5c, 0xa1, 0xec, 0x84, 0x34, 0xc5, 0x15, 0x4a, 0x0f, 0x6e,
0x59, 0x44, 0x3f, 0x38, 0xc4, 0x4c, 0xb1, 0x72, 0x43, 0xa7, 0x9c, 0x07, 0x91, 0x7f, 0x1b, 0x4a,
0xe1, 0x29, 0x24, 0x7a, 0x32, 0x35, 0x44, 0x3c, 0x44, 0x83, 0x1f, 0xc2, 0x74, 0x62, 0x07, 0x2f,
0x45, 0x44, 0xe5, 0xa7, 0x90, 0x07, 0xcf, 0x27, 0x0c, 0xce, 0xab, 0x52, 0x98, 0x30, 0x74, 0x0e,
0x98, 0x62, 0xea, 0x87, 0x0f, 0xbe, 0xc4, 0x0e, 0x08, 0x61, 0x23, 0x3b, 0x10, 0x8e, 0xaa, 0x46,
0x76, 0x20, 0x1e, 0xd2, 0x30, 0x89, 0x4c, 0x6e, 0x50, 0xa6, 0x48, 0x64, 0xca, 0x6e, 0xf1, 0x41,
0x2c, 0xda, 0x82, 0x8a, 0xb0, 0xe5, 0x8d, 0x46, 0x91, 0x26, 0xee, 0xd5, 0xa7, 0x84, 0x0a, 0x92,
0xdd, 0x73, 0x75, 0x6a, 0xb5, 0x0f, 0xd5, 0x0d, 0xcf, 0xbd, 0x1f, 0x3e, 0x4e, 0xfa, 0x05, 0x39,
0xfa, 0x4b, 0x6d, 0xa8, 0x33, 0x04, 0x1d, 0xdf, 0x0f, 0x74, 0x77, 0xeb, 0x23, 0x74, 0x72, 0x85,
0xfd, 0xcb, 0x8f, 0x95, 0xf0, 0x5f, 0x7e, 0xac, 0xbc, 0x6d, 0xd9, 0xf8, 0x36, 0xcf, 0xae, 0xfc,
0xb7, 0xe2, 0x88, 0x1b, 0x81, 0xd1, 0x96, 0xb5, 0xc6, 0xff, 0xeb, 0xc8, 0x5b, 0xf7, 0x83, 0xdb,
0x5b, 0x1f, 0x5d, 0x79, 0xff, 0xb3, 0xd7, 0x8b, 0x90, 0x5f, 0x5d, 0x79, 0x7e, 0xe5, 0x39, 0xa8,
0x5b, 0x11, 0x7a, 0xc7, 0xeb, 0xb5, 0xaf, 0x54, 0x58, 0xa5, 0x0d, 0xd2, 0xce, 0x86, 0xf2, 0xff,
0x96, 0x3b, 0x56, 0xb0, 0xd3, 0xdf, 0x22, 0x53, 0x70, 0x81, 0xa1, 0x3d, 0x6b, 0xb9, 0xfc, 0xd7,
0x05, 0xa3, 0x67, 0xf1, 0x9f, 0xbd, 0xad, 0xdf, 0x55, 0x94, 0xad, 0x02, 0xed, 0xfd, 0xe2, 0xff,
0x05, 0x00, 0x00, 0xff, 0xff, 0xe6, 0x9c, 0xc8, 0xa5, 0xe4, 0x64, 0x00, 0x00,
// 5401 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x3d, 0x4b, 0x6c, 0x1c, 0x47,
0x76, 0xec, 0xf9, 0xcf, 0x9b, 0x0f, 0x87, 0xc5, 0xdf, 0x78, 0x24, 0x59, 0x54, 0xdb, 0xb2, 0x69,
0x69, 0x4d, 0xd9, 0x94, 0x2d, 0xaf, 0x65, 0xaf, 0x6d, 0x49, 0xb4, 0x24, 0xc2, 0xfa, 0xd0, 0x4d,
0xd9, 0xc6, 0xc6, 0x31, 0x1a, 0xcd, 0xe9, 0xe2, 0xb0, 0xad, 0x9e, 0xee, 0x71, 0x77, 0x0f, 0x29,
0x3a, 0x97, 0x05, 0x36, 0xbb, 0xd8, 0x20, 0x9b, 0x35, 0xf2, 0x5d, 0xe4, 0x90, 0x0f, 0x82, 0xcd,
0x21, 0xc8, 0x26, 0x88, 0x93, 0x43, 0x80, 0xcd, 0x21, 0x77, 0x23, 0x41, 0xb2, 0x01, 0x82, 0x64,
0x91, 0x1c, 0x17, 0x09, 0x12, 0x20, 0x40, 0x0e, 0xb9, 0x25, 0x41, 0x82, 0xfa, 0x74, 0x4f, 0x75,
0x4f, 0xf5, 0x70, 0xa8, 0xb1, 0x2c, 0xca, 0x3c, 0x4d, 0xbf, 0xfa, 0xbd, 0x7a, 0xf5, 0x7e, 0x55,
0xef, 0x55, 0x11, 0xaa, 0x5d, 0xcb, 0xde, 0xed, 0xfb, 0x2b, 0x3d, 0xcf, 0x0d, 0x5c, 0x34, 0x2b,
0x7e, 0xad, 0xb0, 0x8f, 0x56, 0xb5, 0xed, 0x76, 0xbb, 0xae, 0xc3, 0x80, 0xad, 0xaa, 0xdf, 0xde,
0xc1, 0x5d, 0x83, 0x7f, 0x2d, 0x75, 0x5c, 0xb7, 0x63, 0xe3, 0x73, 0xf4, 0x6b, 0xab, 0xbf, 0x7d,
0xce, 0xc4, 0x7e, 0xdb, 0xb3, 0x7a, 0x81, 0xeb, 0xb1, 0x1a, 0xea, 0x6f, 0x2b, 0x80, 0xae, 0x78,
0xd8, 0x08, 0xf0, 0x25, 0xdb, 0x32, 0x7c, 0x0d, 0x7f, 0xd4, 0xc7, 0x7e, 0x80, 0x9e, 0x83, 0xdc,
0x96, 0xe1, 0xe3, 0xa6, 0xb2, 0xa4, 0x2c, 0x57, 0x56, 0x8f, 0xaf, 0xc4, 0x06, 0xe6, 0x03, 0xde,
0xf4, 0x3b, 0x97, 0x0d, 0x1f, 0x6b, 0xb4, 0x26, 0x5a, 0x84, 0xa2, 0xb9, 0xa5, 0x3b, 0x46, 0x17,
0x37, 0x33, 0x4b, 0xca, 0x72, 0x59, 0x2b, 0x98, 0x5b, 0xb7, 0x8c, 0x2e, 0x46, 0x4f, 0xc3, 0x74,
0xdb, 0xb5, 0x6d, 0xdc, 0x0e, 0x2c, 0xd7, 0x61, 0x15, 0xb2, 0xb4, 0x42, 0x7d, 0x00, 0xa6, 0x15,
0xe7, 0x20, 0x6f, 0x10, 0x1c, 0x9a, 0x39, 0x5a, 0xcc, 0x3e, 0x54, 0x1f, 0x1a, 0x6b, 0x9e, 0xdb,
0x7b, 0x50, 0xd8, 0x45, 0x83, 0x66, 0xc5, 0x41, 0x7f, 0x4b, 0x81, 0x99, 0x4b, 0x76, 0x80, 0xbd,
0x23, 0x4a, 0x94, 0x1f, 0x66, 0x60, 0x91, 0xad, 0xda, 0x95, 0xa8, 0xfa, 0xc3, 0xc4, 0x72, 0x01,
0x0a, 0x8c, 0xef, 0x28, 0x9a, 0x55, 0x8d, 0x7f, 0xa1, 0x13, 0x00, 0xfe, 0x8e, 0xe1, 0x99, 0xbe,
0xee, 0xf4, 0xbb, 0xcd, 0xfc, 0x92, 0xb2, 0x9c, 0xd7, 0xca, 0x0c, 0x72, 0xab, 0xdf, 0x45, 0x1a,
0xcc, 0xb4, 0x5d, 0xc7, 0xb7, 0xfc, 0x00, 0x3b, 0xed, 0x7d, 0xdd, 0xc6, 0xbb, 0xd8, 0x6e, 0x16,
0x96, 0x94, 0xe5, 0xfa, 0xea, 0x69, 0x29, 0xde, 0x57, 0x06, 0xb5, 0x6f, 0x90, 0xca, 0x5a, 0xa3,
0x9d, 0x80, 0x5c, 0x44, 0x9f, 0xbd, 0x36, 0x5d, 0x52, 0x1a, 0x4a, 0xf3, 0xff, 0xc2, 0x3f, 0x45,
0xfd, 0x1d, 0x05, 0xe6, 0x09, 0x13, 0x1d, 0x09, 0x62, 0x85, 0x18, 0x66, 0x44, 0x0c, 0xff, 0x40,
0x81, 0xb9, 0xeb, 0x86, 0x7f, 0x34, 0x56, 0xf3, 0x04, 0x40, 0x60, 0x75, 0xb1, 0xee, 0x07, 0x46,
0xb7, 0x47, 0x57, 0x34, 0xa7, 0x95, 0x09, 0x64, 0x93, 0x00, 0xd4, 0xaf, 0x43, 0xf5, 0xb2, 0xeb,
0xda, 0x1a, 0xf6, 0x7b, 0xae, 0xe3, 0x63, 0x74, 0x1e, 0x0a, 0x7e, 0x60, 0x04, 0x7d, 0x9f, 0x23,
0x79, 0x4c, 0x8a, 0xe4, 0x26, 0xad, 0xa2, 0xf1, 0xaa, 0x84, 0xaf, 0x77, 0x0d, 0xbb, 0xcf, 0x70,
0x2c, 0x69, 0xec, 0x43, 0x7d, 0x1f, 0xea, 0x9b, 0x81, 0x67, 0x39, 0x9d, 0xcf, 0xb1, 0xf3, 0x72,
0xd8, 0xf9, 0xbf, 0x28, 0xf0, 0xd8, 0x1a, 0xd5, 0x7f, 0x5b, 0x47, 0x44, 0x6c, 0x54, 0xa8, 0x0e,
0x20, 0xeb, 0x6b, 0x94, 0xd4, 0x59, 0x2d, 0x06, 0x4b, 0x2c, 0x46, 0x3e, 0xb1, 0x18, 0x21, 0x33,
0x65, 0x45, 0x66, 0xfa, 0x46, 0x1e, 0x5a, 0xb2, 0x89, 0x4e, 0x42, 0xd2, 0xaf, 0x45, 0x12, 0x9e,
0xa1, 0x8d, 0x12, 0xf2, 0xc9, 0xad, 0xce, 0x60, 0xb4, 0x4d, 0x0a, 0x88, 0x14, 0x41, 0x72, 0xa6,
0x59, 0xc9, 0x4c, 0x57, 0x61, 0x7e, 0xd7, 0xf2, 0x82, 0xbe, 0x61, 0xeb, 0xed, 0x1d, 0xc3, 0x71,
0xb0, 0x4d, 0x69, 0x47, 0x54, 0x5f, 0x76, 0xb9, 0xac, 0xcd, 0xf2, 0xc2, 0x2b, 0xac, 0x8c, 0x10,
0xd0, 0x47, 0x2f, 0xc0, 0x42, 0x6f, 0x67, 0xdf, 0xb7, 0xda, 0x43, 0x8d, 0xf2, 0xb4, 0xd1, 0x5c,
0x58, 0x1a, 0x6b, 0x75, 0x16, 0x66, 0xda, 0x54, 0x7b, 0x9a, 0x3a, 0xa1, 0x24, 0x23, 0x6d, 0x81,
0x92, 0xb6, 0xc1, 0x0b, 0xee, 0x84, 0x70, 0x82, 0x56, 0x58, 0xb9, 0x1f, 0xb4, 0x85, 0x06, 0x45,
0xda, 0x60, 0x96, 0x17, 0xbe, 0x13, 0xb4, 0x07, 0x6d, 0xe2, 0x7a, 0xaf, 0x94, 0xd4, 0x7b, 0x4d,
0x28, 0x52, 0x3d, 0x8e, 0xfd, 0x66, 0x99, 0xa2, 0x19, 0x7e, 0xa2, 0x75, 0x98, 0xf6, 0x03, 0xc3,
0x0b, 0xf4, 0x9e, 0xeb, 0x5b, 0x84, 0x2e, 0x7e, 0x13, 0x96, 0xb2, 0xcb, 0x95, 0xd5, 0x25, 0xe9,
0x22, 0xbd, 0x85, 0xf7, 0xd7, 0x8c, 0xc0, 0xd8, 0x30, 0x2c, 0x4f, 0xab, 0xd3, 0x86, 0x1b, 0x61,
0x3b, 0xb9, 0x72, 0xad, 0x4c, 0xa4, 0x5c, 0x65, 0x9c, 0x5d, 0x95, 0x71, 0xb6, 0xfa, 0x17, 0x0a,
0xcc, 0xdf, 0x70, 0x0d, 0xf3, 0x68, 0xc8, 0xd9, 0x69, 0xa8, 0x7b, 0xb8, 0x67, 0x5b, 0x6d, 0x83,
0xac, 0xc7, 0x16, 0xf6, 0xa8, 0xa4, 0xe5, 0xb5, 0x1a, 0x87, 0xde, 0xa2, 0xc0, 0x8b, 0xc5, 0xcf,
0x5e, 0xcb, 0x35, 0xf2, 0xcd, 0xac, 0xfa, 0x7d, 0x05, 0x9a, 0x1a, 0xb6, 0xb1, 0xe1, 0x1f, 0x0d,
0x45, 0xc1, 0x30, 0x2b, 0x34, 0xb3, 0xea, 0x7f, 0x28, 0x30, 0x77, 0x0d, 0x07, 0x44, 0x38, 0x2d,
0x3f, 0xb0, 0xda, 0x0f, 0xd5, 0x37, 0x79, 0x1a, 0xa6, 0x7b, 0x86, 0x17, 0x58, 0x51, 0xbd, 0x50,
0x54, 0xeb, 0x11, 0x98, 0xc9, 0xdb, 0x39, 0x98, 0xed, 0xf4, 0x0d, 0xcf, 0x70, 0x02, 0x8c, 0x05,
0x01, 0x62, 0xca, 0x0c, 0x45, 0x45, 0x91, 0xfc, 0xb0, 0xf9, 0x42, 0x33, 0xab, 0x7e, 0x4b, 0x81,
0xf9, 0xc4, 0x7c, 0x27, 0xd1, 0x62, 0x2f, 0x41, 0x9e, 0xfc, 0xf2, 0x9b, 0x19, 0x2a, 0x54, 0xa7,
0xd2, 0x84, 0xea, 0x5d, 0x62, 0x30, 0xa8, 0x54, 0xb1, 0xfa, 0xc4, 0x21, 0x7c, 0xfc, 0x1a, 0x0e,
0x04, 0xfd, 0x76, 0x14, 0x56, 0x60, 0x40, 0xa7, 0x4f, 0x14, 0x38, 0x99, 0x8a, 0xdf, 0x43, 0xa1,
0xd8, 0x7f, 0x29, 0xb0, 0xb0, 0xb9, 0xe3, 0xee, 0x0d, 0x50, 0x7a, 0x10, 0x94, 0x8a, 0x5b, 0xc7,
0x6c, 0xc2, 0x3a, 0xa2, 0xe7, 0x21, 0x17, 0xec, 0xf7, 0x30, 0x15, 0xf7, 0xfa, 0xea, 0x89, 0x15,
0xc9, 0xfe, 0x69, 0x85, 0x20, 0x79, 0x67, 0xbf, 0x87, 0x35, 0x5a, 0x15, 0x3d, 0x03, 0x8d, 0x04,
0xed, 0x43, 0x5b, 0x32, 0x1d, 0x27, 0xbe, 0x1f, 0xda, 0xde, 0x9c, 0x68, 0x7b, 0xff, 0x33, 0x03,
0x8b, 0x43, 0xd3, 0x9e, 0x64, 0x01, 0x64, 0xf8, 0x64, 0xa4, 0xf8, 0x10, 0x35, 0x27, 0x54, 0xb5,
0x4c, 0xb2, 0xa9, 0xc9, 0x2e, 0x67, 0xb5, 0x9a, 0x60, 0x66, 0x4d, 0x1f, 0x3d, 0x0b, 0x68, 0xc8,
0xfa, 0x31, 0xc9, 0xcd, 0x69, 0x33, 0x49, 0xf3, 0x47, 0x4d, 0xac, 0xd4, 0xfe, 0x31, 0xb2, 0xe4,
0xb4, 0x39, 0x89, 0x01, 0xf4, 0xd1, 0xf3, 0x30, 0x67, 0x39, 0x37, 0x71, 0xd7, 0xf5, 0xf6, 0xf5,
0x1e, 0xf6, 0xda, 0xd8, 0x09, 0x8c, 0x0e, 0xf6, 0x9b, 0x05, 0x8a, 0xd1, 0x6c, 0x58, 0xb6, 0x31,
0x28, 0x42, 0x17, 0x60, 0xf1, 0xa3, 0x3e, 0xf6, 0xf6, 0x75, 0x1f, 0x7b, 0xbb, 0x56, 0x1b, 0xeb,
0xc6, 0xae, 0x61, 0xd9, 0xc6, 0x96, 0x8d, 0x9b, 0xc5, 0xa5, 0xec, 0x72, 0x49, 0x9b, 0xa7, 0xc5,
0x9b, 0xac, 0xf4, 0x52, 0x58, 0xa8, 0xfe, 0x99, 0x02, 0x0b, 0x6c, 0x33, 0xb4, 0x11, 0xaa, 0x9d,
0x87, 0x6c, 0x6c, 0xe2, 0x5a, 0x91, 0x6f, 0xdd, 0x6a, 0x31, 0xa5, 0xa8, 0x7e, 0xaa, 0xc0, 0x1c,
0xd9, 0x93, 0x3c, 0x4a, 0x38, 0xff, 0x89, 0x02, 0xb3, 0xd7, 0x0d, 0xff, 0x51, 0x42, 0xf9, 0x9f,
0xb8, 0x23, 0x12, 0xe1, 0xfc, 0x68, 0x58, 0xcc, 0x61, 0x8f, 0x25, 0x2f, 0xf1, 0x58, 0xd4, 0x3f,
0x1f, 0x38, 0x2a, 0x8f, 0xd6, 0x04, 0xd5, 0x1f, 0x29, 0x70, 0xe2, 0x1a, 0x0e, 0x22, 0xac, 0x8f,
0x86, 0x47, 0x33, 0x26, 0x53, 0x7d, 0x8f, 0x79, 0x03, 0x52, 0xe4, 0x1f, 0x8a, 0xb1, 0xfd, 0xc5,
0x0c, 0xcc, 0x13, 0xab, 0x73, 0x34, 0x98, 0x60, 0x9c, 0x6d, 0xad, 0x84, 0x51, 0xf2, 0x52, 0x49,
0x08, 0x4d, 0x78, 0x61, 0x6c, 0x13, 0xae, 0xfe, 0x69, 0x86, 0xb9, 0x1e, 0x22, 0x35, 0x26, 0x59,
0x16, 0x09, 0xae, 0x19, 0x29, 0xae, 0x2a, 0x54, 0x23, 0xc8, 0xfa, 0x5a, 0x68, 0x7e, 0x63, 0xb0,
0xa3, 0x6a, 0x7d, 0xd5, 0xef, 0x2a, 0xb0, 0x10, 0x1e, 0x1a, 0x6c, 0xe2, 0x4e, 0x17, 0x3b, 0xc1,
0xfd, 0xf3, 0x50, 0x92, 0x03, 0x32, 0x12, 0x0e, 0x38, 0x0e, 0x65, 0x9f, 0x8d, 0x13, 0x9d, 0x07,
0x0c, 0x00, 0xea, 0x5f, 0x2a, 0xb0, 0x38, 0x84, 0xce, 0x24, 0x8b, 0xd8, 0x84, 0xa2, 0xe5, 0x98,
0xf8, 0x5e, 0x84, 0x4d, 0xf8, 0x49, 0x4a, 0xb6, 0xfa, 0x96, 0x6d, 0x46, 0x68, 0x84, 0x9f, 0xe8,
0x14, 0x54, 0xb1, 0x43, 0x7c, 0x0c, 0x9d, 0xd6, 0xa5, 0x8c, 0x5c, 0xd2, 0x2a, 0x0c, 0xb6, 0x4e,
0x40, 0xa4, 0xf1, 0xb6, 0x85, 0x69, 0xe3, 0x3c, 0x6b, 0xcc, 0x3f, 0xd5, 0x5f, 0x52, 0x60, 0x96,
0x70, 0x21, 0xc7, 0xde, 0x7f, 0xb0, 0xd4, 0x5c, 0x82, 0x8a, 0xc0, 0x66, 0x7c, 0x22, 0x22, 0x48,
0xbd, 0x0b, 0x73, 0x71, 0x74, 0x26, 0xa1, 0xe6, 0xe3, 0x00, 0xd1, 0x5a, 0x31, 0x69, 0xc8, 0x6a,
0x02, 0x44, 0xfd, 0xf5, 0x4c, 0x18, 0x56, 0xa0, 0x64, 0x7a, 0xc8, 0xa7, 0x99, 0x74, 0x49, 0x44,
0x7d, 0x5e, 0xa6, 0x10, 0x5a, 0xbc, 0x06, 0x55, 0x7c, 0x2f, 0xf0, 0x0c, 0xbd, 0x67, 0x78, 0x46,
0x97, 0x89, 0xd5, 0x58, 0xaa, 0xb7, 0x42, 0x9b, 0x6d, 0xd0, 0x56, 0x64, 0x10, 0xca, 0x22, 0x6c,
0x90, 0x02, 0x1b, 0x84, 0x42, 0x06, 0xfb, 0xb4, 0x4a, 0x33, 0xab, 0xfe, 0x98, 0x78, 0x7d, 0x9c,
0xad, 0x8f, 0x3a, 0x65, 0xe2, 0x73, 0xca, 0x4b, 0xe7, 0x54, 0x6d, 0x66, 0xd5, 0xdf, 0x57, 0xa0,
0x41, 0xe7, 0xb2, 0xc6, 0x83, 0x4b, 0x96, 0xeb, 0x24, 0x1a, 0x2b, 0x89, 0xc6, 0x23, 0xa4, 0xf1,
0x65, 0x28, 0xf0, 0x95, 0xc8, 0x8e, 0xbb, 0x12, 0xbc, 0xc1, 0x01, 0xf3, 0x51, 0x7f, 0x4f, 0x81,
0xf9, 0x04, 0xed, 0x27, 0x11, 0x81, 0x3b, 0x80, 0xd8, 0x0c, 0xcd, 0xc1, 0xb4, 0x43, 0xcb, 0x7d,
0x5a, 0x6a, 0xa6, 0x92, 0x44, 0xd2, 0x66, 0xac, 0x04, 0xc4, 0x57, 0x7f, 0xa2, 0xc0, 0xf1, 0x6b,
0x38, 0xa0, 0x55, 0x2f, 0x13, 0x35, 0xb4, 0xe1, 0xb9, 0x1d, 0x0f, 0xfb, 0xfe, 0x97, 0x80, 0x51,
0x7e, 0x83, 0xf9, 0x7c, 0xb2, 0xb9, 0x4d, 0xb2, 0x10, 0xa7, 0xa0, 0x4a, 0x07, 0xc3, 0xa6, 0xee,
0xb9, 0x7b, 0x3e, 0x67, 0xa8, 0x0a, 0x87, 0x69, 0xee, 0x1e, 0xe5, 0x8c, 0xc0, 0x0d, 0x0c, 0x9b,
0x55, 0xe0, 0xc6, 0x86, 0x42, 0x48, 0x31, 0x95, 0xca, 0x10, 0x31, 0xd2, 0x39, 0xfe, 0x12, 0x10,
0xfb, 0x07, 0xec, 0xe4, 0x4c, 0x9c, 0xd3, 0x24, 0x44, 0x7e, 0x91, 0xb9, 0xa6, 0x6c, 0x56, 0xf5,
0xd5, 0x93, 0xd2, 0x36, 0xc2, 0x60, 0xac, 0x36, 0x3a, 0x09, 0x95, 0x6d, 0xc3, 0xb2, 0x75, 0x0f,
0x1b, 0xbe, 0xeb, 0xf0, 0x19, 0x03, 0x01, 0x69, 0x14, 0xa2, 0xfe, 0xb5, 0xc2, 0xe2, 0xbb, 0x5f,
0x06, 0x65, 0x58, 0x6b, 0x66, 0xd5, 0x1f, 0x66, 0xa0, 0xb6, 0xee, 0xf8, 0xd8, 0x0b, 0x8e, 0xfe,
0x3e, 0x06, 0xbd, 0x0e, 0x15, 0x3a, 0x43, 0x5f, 0x37, 0x8d, 0xc0, 0xe0, 0xa6, 0xef, 0x71, 0x69,
0x64, 0xe7, 0x2a, 0xa9, 0xb7, 0x66, 0x04, 0x86, 0xc6, 0xc8, 0xe4, 0x93, 0xdf, 0xe8, 0x18, 0x94,
0x77, 0x0c, 0x7f, 0x47, 0xbf, 0x8b, 0xf7, 0x99, 0x73, 0x59, 0xd3, 0x4a, 0x04, 0xf0, 0x16, 0xde,
0xf7, 0xd1, 0x63, 0x50, 0x72, 0xfa, 0x5d, 0x26, 0x72, 0xc5, 0x25, 0x65, 0xb9, 0xa6, 0x15, 0x9d,
0x7e, 0x97, 0x08, 0x1c, 0x23, 0x57, 0xa9, 0x99, 0x55, 0xff, 0x2a, 0x03, 0xf5, 0x9b, 0x7d, 0xb2,
0x7d, 0xa2, 0x01, 0xaa, 0xbe, 0x1d, 0xdc, 0x1f, 0x7b, 0x9e, 0x81, 0x2c, 0x73, 0x44, 0x48, 0x8b,
0xa6, 0x74, 0x06, 0xeb, 0x6b, 0xbe, 0x46, 0x2a, 0xd1, 0xe0, 0x4c, 0xbf, 0xdd, 0xe6, 0x3e, 0x5d,
0x96, 0x62, 0x5d, 0x26, 0x10, 0xe6, 0xd1, 0x1d, 0x83, 0x32, 0xf6, 0xbc, 0xc8, 0xe3, 0xa3, 0x73,
0xc2, 0x9e, 0xc7, 0x0a, 0x55, 0xa8, 0x1a, 0xed, 0xbb, 0x8e, 0xbb, 0x67, 0x63, 0xb3, 0x83, 0x4d,
0xca, 0x08, 0x25, 0x2d, 0x06, 0x63, 0xac, 0x42, 0x38, 0x40, 0x6f, 0x3b, 0x01, 0xf5, 0x05, 0xb2,
0x84, 0x55, 0x08, 0xe4, 0x8a, 0x13, 0x90, 0x62, 0x13, 0xdb, 0x38, 0xc0, 0xb4, 0xb8, 0xc8, 0x8a,
0x19, 0x84, 0x17, 0xf7, 0x7b, 0x51, 0xeb, 0x12, 0x2b, 0x66, 0x10, 0x52, 0x7c, 0x1c, 0xca, 0x83,
0x03, 0xf4, 0xf2, 0xe0, 0xbc, 0x93, 0x02, 0xd4, 0x9f, 0x2a, 0x50, 0x5b, 0xa3, 0x5d, 0x3d, 0x02,
0xdc, 0x87, 0x20, 0x87, 0xef, 0xf5, 0x3c, 0x2e, 0x4c, 0xf4, 0xf7, 0x48, 0x86, 0x62, 0x5c, 0x53,
0x6e, 0x66, 0xd5, 0x6f, 0xe7, 0xa0, 0xb6, 0x89, 0x0d, 0xaf, 0xbd, 0xf3, 0x48, 0x1c, 0xe6, 0x34,
0x20, 0x6b, 0xfa, 0x36, 0x9f, 0x27, 0xf9, 0x89, 0xce, 0xc2, 0x4c, 0xcf, 0x36, 0xda, 0x78, 0xc7,
0xb5, 0x4d, 0xec, 0xe9, 0x1d, 0xcf, 0xed, 0xb3, 0x00, 0x64, 0x55, 0x6b, 0x08, 0x05, 0xd7, 0x08,
0x1c, 0xbd, 0x04, 0x25, 0xd3, 0xb7, 0x75, 0xba, 0x0b, 0x2e, 0x52, 0xed, 0x2b, 0x9f, 0xdf, 0x9a,
0x6f, 0xd3, 0x4d, 0x70, 0xd1, 0x64, 0x3f, 0xd0, 0x13, 0x50, 0x73, 0xfb, 0x41, 0xaf, 0x1f, 0xe8,
0x4c, 0x64, 0x9b, 0x25, 0x8a, 0x5e, 0x95, 0x01, 0xa9, 0x44, 0xfb, 0xe8, 0x2a, 0xd4, 0x7c, 0x4a,
0xca, 0xd0, 0x01, 0x2e, 0x8f, 0xeb, 0x76, 0x55, 0x59, 0x3b, 0xee, 0x01, 0x3f, 0x03, 0x8d, 0xc0,
0x33, 0x76, 0xb1, 0x2d, 0x04, 0x78, 0x80, 0xf2, 0xe7, 0x34, 0x83, 0x0f, 0xa2, 0xa3, 0x29, 0xe1,
0xa0, 0x4a, 0x5a, 0x38, 0x08, 0xd5, 0x21, 0xe3, 0x7c, 0x44, 0x23, 0x8d, 0x59, 0x2d, 0xe3, 0x7c,
0xc4, 0x18, 0xa1, 0xde, 0xcc, 0xaa, 0x6f, 0x41, 0xee, 0xba, 0x15, 0x50, 0x0a, 0x13, 0xf1, 0x57,
0xe8, 0x3e, 0x84, 0x0a, 0xf9, 0x63, 0x50, 0xf2, 0xdc, 0x3d, 0xa6, 0xd7, 0x88, 0x4f, 0x56, 0xd5,
0x8a, 0x9e, 0xbb, 0x47, 0x95, 0x16, 0x4d, 0x56, 0x71, 0x3d, 0xcc, 0x3c, 0xcc, 0x8c, 0xc6, 0xbf,
0xd4, 0x3f, 0x56, 0x06, 0x5c, 0x45, 0x34, 0x91, 0x7f, 0x7f, 0xaa, 0xe8, 0x75, 0x28, 0x7a, 0xac,
0xfd, 0xc8, 0x50, 0xb9, 0x38, 0x12, 0xd5, 0xab, 0x61, 0xab, 0xb1, 0x19, 0x90, 0xec, 0x30, 0xab,
0x57, 0xed, 0xbe, 0xff, 0x20, 0xa4, 0x40, 0x16, 0x76, 0xc8, 0xca, 0xc3, 0x20, 0x74, 0x35, 0xa6,
0x97, 0xb2, 0xea, 0x7f, 0xe7, 0xa0, 0xc6, 0xf1, 0x99, 0xc4, 0xd5, 0x48, 0xc5, 0x69, 0x13, 0x2a,
0x64, 0x6c, 0xdd, 0xc7, 0x9d, 0xf0, 0x74, 0xa5, 0xb2, 0xba, 0x2a, 0x75, 0xb5, 0x63, 0x68, 0xd0,
0xb4, 0x84, 0x4d, 0xda, 0xe8, 0x4d, 0x27, 0xf0, 0xf6, 0x35, 0x68, 0x47, 0x00, 0xd4, 0x86, 0x99,
0x6d, 0x52, 0x59, 0x17, 0xbb, 0xce, 0xd1, 0xae, 0x5f, 0x1a, 0xa3, 0x6b, 0xfa, 0x95, 0xec, 0x7f,
0x7a, 0x3b, 0x0e, 0x45, 0x1f, 0xb0, 0x25, 0xd5, 0x7d, 0x6c, 0x70, 0xf9, 0xe0, 0xc6, 0xf6, 0xc5,
0xb1, 0xb1, 0x37, 0x98, 0x00, 0xb1, 0x01, 0x6a, 0x6d, 0x11, 0xd6, 0xfa, 0x00, 0xa6, 0x13, 0x28,
0x10, 0x89, 0xb8, 0x8b, 0xf7, 0xf9, 0xc6, 0x8b, 0xfc, 0x44, 0x2f, 0x88, 0x49, 0x31, 0x69, 0x66,
0xfe, 0x86, 0xeb, 0x74, 0x2e, 0x79, 0x9e, 0xb1, 0xcf, 0x93, 0x66, 0x2e, 0x66, 0xbe, 0xaa, 0xb4,
0xb6, 0x60, 0x4e, 0x36, 0xcd, 0xcf, 0x75, 0x8c, 0x37, 0x00, 0x0d, 0xcf, 0x53, 0x32, 0x42, 0x2c,
0xb5, 0x27, 0x2b, 0xf4, 0xa0, 0x7e, 0x92, 0x85, 0xea, 0xdb, 0x7d, 0xec, 0xed, 0x3f, 0x4c, 0x9b,
0x10, 0xda, 0xb4, 0x9c, 0x60, 0xd3, 0x86, 0xd4, 0x70, 0x5e, 0xa2, 0x86, 0x25, 0xc6, 0xa4, 0x20,
0x35, 0x26, 0x32, 0x3d, 0x5b, 0x3c, 0x94, 0x9e, 0x2d, 0xa5, 0xea, 0xd9, 0x35, 0xa8, 0xb2, 0x08,
0xdc, 0x61, 0x4d, 0x41, 0x85, 0x36, 0x63, 0x96, 0x80, 0xe9, 0x83, 0x46, 0x33, 0xab, 0xfe, 0x91,
0x12, 0xad, 0xc8, 0x44, 0xfa, 0x34, 0xe6, 0xa4, 0x66, 0x0e, 0xed, 0xa4, 0x8e, 0xad, 0x4f, 0x3f,
0x55, 0xa0, 0xfc, 0x2e, 0x6e, 0x07, 0xae, 0x47, 0x64, 0x56, 0xd2, 0x4c, 0x19, 0x63, 0xe7, 0x90,
0x49, 0xee, 0x1c, 0xce, 0x43, 0xc9, 0x32, 0x75, 0x83, 0x30, 0x3c, 0x1d, 0x77, 0x94, 0x7f, 0x5a,
0xb4, 0x4c, 0x2a, 0x19, 0xe3, 0xc7, 0x51, 0xbe, 0xaf, 0x40, 0x95, 0xe1, 0xec, 0xb3, 0x96, 0xaf,
0x08, 0xc3, 0x29, 0x32, 0x29, 0xe4, 0x1f, 0xd1, 0x44, 0xaf, 0x4f, 0x0d, 0x86, 0xbd, 0x04, 0x40,
0x88, 0xcc, 0x9b, 0x33, 0x21, 0x5e, 0x92, 0x62, 0xcb, 0x9a, 0x53, 0x82, 0x5f, 0x9f, 0xd2, 0xca,
0xa4, 0x15, 0xed, 0xe2, 0x72, 0x11, 0xf2, 0xb4, 0xb5, 0xfa, 0x3f, 0x0a, 0xcc, 0x5e, 0x31, 0xec,
0xf6, 0x9a, 0xe5, 0x07, 0x86, 0xd3, 0x9e, 0xc0, 0x23, 0xbd, 0x08, 0x45, 0xb7, 0xa7, 0xdb, 0x78,
0x3b, 0xe0, 0x28, 0x9d, 0x1a, 0x31, 0x23, 0x46, 0x06, 0xad, 0xe0, 0xf6, 0x6e, 0xe0, 0xed, 0x00,
0xbd, 0x0a, 0x25, 0xb7, 0xa7, 0x7b, 0x56, 0x67, 0x27, 0xe0, 0xd4, 0x1f, 0xa3, 0x71, 0xd1, 0xed,
0x69, 0xa4, 0x85, 0x70, 0x18, 0x95, 0x3b, 0xe4, 0x61, 0x94, 0xfa, 0xe3, 0xa1, 0xe9, 0x4f, 0x20,
0x03, 0x17, 0xa1, 0x64, 0x39, 0x81, 0x6e, 0x5a, 0x7e, 0x48, 0x82, 0x13, 0x72, 0x1e, 0x72, 0x02,
0x3a, 0x03, 0xba, 0xa6, 0x4e, 0x40, 0xc6, 0x46, 0x6f, 0x00, 0x6c, 0xdb, 0xae, 0xc1, 0x5b, 0x33,
0x1a, 0x9c, 0x94, 0x8b, 0x0f, 0xa9, 0x16, 0xb6, 0x2f, 0xd3, 0x46, 0xa4, 0x87, 0xc1, 0x92, 0xfe,
0x8d, 0x02, 0xf3, 0x1b, 0xd8, 0x63, 0x39, 0x61, 0x01, 0x3f, 0x49, 0x5e, 0x77, 0xb6, 0xdd, 0xf8,
0x61, 0xbe, 0x92, 0x38, 0xcc, 0xff, 0x7c, 0x0e, 0xb0, 0x63, 0xfb, 0x49, 0x16, 0x52, 0x0a, 0xf7,
0x93, 0x61, 0xe0, 0x8c, 0x6d, 0xcc, 0xeb, 0x29, 0xcb, 0xc4, 0xf1, 0x15, 0xcf, 0x27, 0xd4, 0x5f,
0x65, 0x79, 0x33, 0xd2, 0x49, 0xdd, 0x3f, 0xc3, 0x2e, 0x00, 0x37, 0x1c, 0x09, 0x33, 0xf2, 0x14,
0x24, 0x74, 0x47, 0x8a, 0x22, 0xfa, 0x4d, 0x05, 0x96, 0xd2, 0xb1, 0x9a, 0xc4, 0xb7, 0x7a, 0x03,
0xf2, 0x96, 0xb3, 0xed, 0x86, 0xe7, 0x94, 0x67, 0xa4, 0xb2, 0x20, 0x1f, 0x97, 0x35, 0x54, 0xff,
0x36, 0x03, 0x8d, 0xb7, 0x59, 0x1e, 0xc6, 0x17, 0xbe, 0xfc, 0x5d, 0xdc, 0xd5, 0x7d, 0xeb, 0x63,
0x1c, 0x2e, 0x7f, 0x17, 0x77, 0x37, 0xad, 0x8f, 0x71, 0x8c, 0x33, 0xf2, 0x71, 0xce, 0x18, 0x7d,
0x30, 0x2f, 0x9e, 0x43, 0x17, 0xe3, 0xe7, 0xd0, 0x0b, 0x50, 0x70, 0x5c, 0x13, 0xaf, 0xaf, 0xf1,
0x3d, 0x38, 0xff, 0x1a, 0xb0, 0x5a, 0xf9, 0x70, 0xac, 0x46, 0x86, 0xa2, 0x5d, 0x98, 0x2c, 0xa5,
0x93, 0xe0, 0xc8, 0x3e, 0xd5, 0xef, 0x29, 0xd0, 0xba, 0x86, 0x83, 0x24, 0x55, 0x1f, 0x1e, 0xff,
0x7d, 0xa2, 0xc0, 0x31, 0x29, 0x42, 0x93, 0xb0, 0xde, 0x2b, 0x71, 0xd6, 0x93, 0x1f, 0x91, 0x0f,
0x0d, 0xc9, 0xb9, 0xee, 0x79, 0xa8, 0xae, 0xf5, 0xbb, 0xdd, 0xc8, 0xb7, 0x3b, 0x05, 0x55, 0x8f,
0xfd, 0x64, 0xfb, 0x62, 0x66, 0x99, 0x2b, 0x1c, 0x46, 0x76, 0xbf, 0xea, 0x59, 0xa8, 0xf1, 0x26,
0x1c, 0xeb, 0x16, 0x94, 0x3c, 0xfe, 0x9b, 0xd7, 0x8f, 0xbe, 0xd5, 0x79, 0x98, 0xd5, 0x70, 0x87,
0x30, 0xbd, 0x77, 0xc3, 0x72, 0xee, 0xf2, 0x61, 0xd4, 0x6f, 0x2a, 0x30, 0x17, 0x87, 0xf3, 0xbe,
0x2e, 0x40, 0xd1, 0x30, 0x4d, 0x0f, 0xfb, 0xfe, 0xc8, 0x65, 0xb9, 0xc4, 0xea, 0x68, 0x61, 0x65,
0x81, 0x72, 0x99, 0xb1, 0x29, 0xa7, 0xea, 0x30, 0x73, 0x0d, 0x07, 0x37, 0x71, 0xe0, 0x4d, 0x94,
0x1e, 0xd1, 0x24, 0x1b, 0x53, 0xda, 0x98, 0xb3, 0x45, 0xf8, 0xa9, 0x7e, 0x57, 0x01, 0x24, 0x8e,
0x30, 0xc9, 0x32, 0x8b, 0x54, 0xce, 0xc4, 0xa9, 0xcc, 0x12, 0xd4, 0xba, 0x3d, 0xd7, 0xc1, 0x4e,
0x20, 0x3a, 0x62, 0xb5, 0x08, 0x4a, 0xd9, 0xef, 0xa7, 0x0a, 0xa0, 0x1b, 0xae, 0x61, 0x5e, 0x36,
0xec, 0xc9, 0x1c, 0x87, 0x13, 0x00, 0xbe, 0xd7, 0xd6, 0xb9, 0x1c, 0x67, 0xb8, 0x5e, 0xf2, 0xda,
0xb7, 0x98, 0x28, 0x9f, 0x84, 0x8a, 0xe9, 0x07, 0xbc, 0x38, 0x8c, 0xd6, 0x83, 0xe9, 0x07, 0xac,
0x9c, 0xe6, 0x89, 0x93, 0x1d, 0x1b, 0x36, 0x75, 0x21, 0xd8, 0x99, 0xa3, 0xd5, 0x1a, 0xac, 0x60,
0x33, 0x82, 0x4b, 0x84, 0x2b, 0x9f, 0x9e, 0xb3, 0x39, 0xd3, 0xcc, 0xab, 0xdb, 0xb0, 0x78, 0xd3,
0x70, 0xfa, 0x86, 0x7d, 0xc5, 0xed, 0xf6, 0x8c, 0x58, 0x8e, 0x71, 0x52, 0x63, 0x2a, 0x12, 0x8d,
0xf9, 0x38, 0x4b, 0x7d, 0x64, 0x4e, 0x3f, 0x9d, 0x5c, 0x4e, 0x13, 0x20, 0x6c, 0x9c, 0x62, 0x53,
0x51, 0x7d, 0x68, 0x0e, 0x8f, 0x33, 0xc9, 0x12, 0x53, 0xec, 0xc2, 0xae, 0x44, 0x7d, 0x3e, 0x80,
0xa9, 0xaf, 0xc3, 0x63, 0x34, 0x1f, 0x35, 0x04, 0xc5, 0xc2, 0x2a, 0xc9, 0x0e, 0x14, 0x49, 0x07,
0x7f, 0x98, 0xa1, 0x4a, 0x71, 0xa8, 0x87, 0x49, 0x10, 0xbf, 0x18, 0x0f, 0x62, 0x3c, 0x99, 0x92,
0x06, 0x1f, 0x1f, 0x91, 0xab, 0xef, 0x65, 0x98, 0xc6, 0xf7, 0x70, 0xbb, 0x1f, 0x58, 0x4e, 0x67,
0xc3, 0x36, 0x9c, 0x5b, 0x2e, 0x37, 0x52, 0x49, 0x30, 0x7a, 0x12, 0x6a, 0x64, 0x19, 0xdc, 0x7e,
0xc0, 0xeb, 0x31, 0x6b, 0x15, 0x07, 0x92, 0xfe, 0xc8, 0x7c, 0x6d, 0x1c, 0x60, 0x93, 0xd7, 0x63,
0xa6, 0x2b, 0x09, 0x26, 0xd4, 0xda, 0x36, 0x2c, 0x3b, 0xaa, 0xc6, 0x4e, 0x94, 0x63, 0xb0, 0x21,
0x72, 0x13, 0xb0, 0x7f, 0x18, 0x72, 0xff, 0x83, 0x92, 0x20, 0x37, 0xef, 0xe1, 0x61, 0x91, 0xfb,
0x3a, 0x40, 0x17, 0x7b, 0x1d, 0xbc, 0x4e, 0x4d, 0x06, 0x3b, 0xea, 0x59, 0x96, 0x9a, 0x8c, 0x41,
0x07, 0x37, 0xc3, 0x06, 0x9a, 0xd0, 0x56, 0xbd, 0x06, 0xb3, 0x92, 0x2a, 0x44, 0x1b, 0xfa, 0x6e,
0xdf, 0x6b, 0xe3, 0xf0, 0xd8, 0x30, 0xfc, 0x24, 0xd6, 0x33, 0x30, 0xbc, 0x0e, 0x0e, 0x38, 0x63,
0xf3, 0x2f, 0xf5, 0x02, 0x0d, 0x12, 0xd2, 0x93, 0x90, 0x18, 0x37, 0xc7, 0x73, 0x21, 0x94, 0xa1,
0x5c, 0x88, 0x6d, 0x1a, 0x88, 0x13, 0xdb, 0x4d, 0x98, 0xc7, 0x42, 0x4f, 0x97, 0xb0, 0xc9, 0xaf,
0x4e, 0x85, 0x9f, 0xea, 0xff, 0x2a, 0x50, 0x5b, 0xef, 0xf6, 0xdc, 0x41, 0xe8, 0x69, 0xec, 0x2d,
0xec, 0xf0, 0x89, 0x7d, 0x46, 0x76, 0x62, 0xff, 0x04, 0xd4, 0xe2, 0x97, 0x6c, 0xd8, 0x89, 0x60,
0xb5, 0x2d, 0x5e, 0xae, 0x39, 0x06, 0x65, 0xcf, 0xdd, 0xd3, 0x89, 0x02, 0x36, 0x79, 0xc6, 0x4c,
0xc9, 0x73, 0xf7, 0x88, 0x5a, 0x36, 0xd1, 0x1c, 0xe4, 0xb7, 0x2d, 0x3b, 0x4a, 0xf6, 0x62, 0x1f,
0xe8, 0x15, 0xb2, 0xc1, 0x63, 0xf1, 0xf3, 0xc2, 0xb8, 0xfb, 0xac, 0xb0, 0x05, 0xd3, 0x73, 0xa8,
0xa9, 0xa8, 0xef, 0x43, 0x3d, 0x9c, 0xfe, 0x84, 0x97, 0xc7, 0x02, 0xc3, 0xbf, 0x1b, 0x66, 0xb5,
0xb0, 0x0f, 0xf5, 0x2c, 0x8b, 0xa6, 0xd2, 0xfe, 0x63, 0xab, 0x8f, 0x20, 0x47, 0x6a, 0x70, 0xa1,
0xa2, 0xbf, 0xd5, 0x7f, 0xcd, 0xc0, 0x42, 0xb2, 0xf6, 0x24, 0x28, 0x5d, 0x88, 0x0b, 0x92, 0xfc,
0x2e, 0x90, 0x38, 0x1a, 0x17, 0x22, 0xbe, 0x14, 0x6d, 0xb7, 0xef, 0x04, 0x5c, 0x5b, 0x91, 0xa5,
0xb8, 0x42, 0xbe, 0xd1, 0x22, 0x14, 0x2d, 0x53, 0xb7, 0xc9, 0xa6, 0x90, 0x99, 0xb4, 0x82, 0x65,
0xde, 0x20, 0x1b, 0xc6, 0x97, 0x42, 0x47, 0x6d, 0xec, 0x54, 0x18, 0x56, 0x1f, 0xd5, 0x21, 0x63,
0x99, 0x5c, 0x3d, 0x65, 0x2c, 0x93, 0xb2, 0x8b, 0x98, 0x8f, 0xce, 0x5d, 0x6c, 0xd1, 0x8c, 0x99,
0xc4, 0x08, 0x73, 0x59, 0xa1, 0x19, 0xeb, 0xa5, 0xb8, 0xf8, 0x98, 0x94, 0x9f, 0x58, 0x8e, 0x9b,
0x1e, 0xf8, 0xd4, 0xe9, 0xce, 0x6a, 0x25, 0x06, 0xb8, 0xe3, 0xab, 0xef, 0xc1, 0x02, 0xc1, 0x99,
0xcd, 0xfd, 0x0e, 0x59, 0xa9, 0x43, 0xf3, 0xfe, 0x1c, 0xe4, 0x6d, 0xab, 0x6b, 0x85, 0xd2, 0xce,
0x3e, 0xd4, 0x5f, 0x56, 0x60, 0x71, 0xa8, 0xe7, 0x49, 0xd6, 0xf0, 0x92, 0xc8, 0x56, 0x95, 0xd5,
0xb3, 0x52, 0x5d, 0x26, 0x67, 0x9a, 0x90, 0x07, 0x7f, 0x8d, 0xb9, 0x69, 0x1a, 0x4b, 0x01, 0x7e,
0xc0, 0x09, 0x65, 0xcb, 0xd0, 0xd8, 0xb3, 0x82, 0x1d, 0x9d, 0xde, 0x5a, 0xa3, 0x3e, 0x12, 0x4b,
0x9c, 0x28, 0x69, 0x75, 0x02, 0xdf, 0x24, 0x60, 0xe2, 0x27, 0xf9, 0xea, 0x77, 0x14, 0x98, 0x8d,
0xa1, 0x35, 0x09, 0x99, 0x5e, 0x25, 0xee, 0x23, 0xeb, 0x88, 0x53, 0x6a, 0x49, 0x4a, 0x29, 0x3e,
0x1a, 0xd5, 0xf6, 0x51, 0x0b, 0xf5, 0x27, 0x0a, 0x54, 0x84, 0x12, 0xb2, 0x2f, 0xe5, 0x65, 0x83,
0x7d, 0x69, 0x04, 0x18, 0x8b, 0x0c, 0x4f, 0xc0, 0x40, 0x07, 0x0a, 0x57, 0x2a, 0x84, 0x9c, 0x4e,
0xd3, 0x47, 0xd7, 0xa1, 0xce, 0xc8, 0x14, 0xa1, 0x2e, 0x3d, 0x2e, 0x8a, 0xb2, 0x55, 0x0d, 0xcf,
0xe4, 0x58, 0x6a, 0x35, 0x5f, 0xf8, 0x62, 0x31, 0x73, 0xd7, 0xc4, 0x74, 0xa4, 0xfc, 0xd0, 0x2e,
0xb1, 0x2a, 0x36, 0x25, 0x9e, 0xb6, 0x8d, 0x0d, 0x13, 0x7b, 0xd1, 0xdc, 0xa2, 0x6f, 0x22, 0x55,
0xec, 0xb7, 0x4e, 0x76, 0x1e, 0x5c, 0x9b, 0x03, 0x03, 0x91, 0x4d, 0x09, 0x7a, 0x0a, 0xa6, 0xcd,
0x6e, 0xec, 0xca, 0x64, 0xe8, 0x8b, 0x9b, 0x5d, 0xe1, 0xae, 0x64, 0x0c, 0xa1, 0x5c, 0x1c, 0xa1,
0x6f, 0x0d, 0x2e, 0xa1, 0x7b, 0xd8, 0xc4, 0x4e, 0x60, 0x19, 0xf6, 0xfd, 0xf3, 0x64, 0x0b, 0x4a,
0x7d, 0x1f, 0x7b, 0x82, 0xf1, 0x89, 0xbe, 0x49, 0x59, 0xcf, 0xf0, 0xfd, 0x3d, 0xd7, 0x33, 0x39,
0x96, 0xd1, 0xf7, 0x88, 0x04, 0x59, 0x76, 0x71, 0x59, 0x9e, 0x20, 0x7b, 0x01, 0x16, 0xbb, 0xae,
0x69, 0x6d, 0x5b, 0xb2, 0xbc, 0x5a, 0xd2, 0x6c, 0x3e, 0x2c, 0x8e, 0xb5, 0x0b, 0xaf, 0xfc, 0xcc,
0x8a, 0x57, 0x7e, 0x7e, 0x90, 0x81, 0xc5, 0x77, 0x7a, 0xe6, 0x17, 0x40, 0x87, 0x25, 0xa8, 0xb8,
0xb6, 0xb9, 0x11, 0x27, 0x85, 0x08, 0x22, 0x35, 0x1c, 0xbc, 0x17, 0xd5, 0x60, 0x61, 0x08, 0x11,
0x34, 0x32, 0xa1, 0xf8, 0xbe, 0xe8, 0x55, 0x18, 0x45, 0xaf, 0xf2, 0x67, 0xaf, 0x15, 0x4a, 0x99,
0xc6, 0x5c, 0x33, 0xa3, 0xfe, 0x1c, 0x2c, 0xb2, 0xd4, 0x84, 0x07, 0x4c, 0xa5, 0x70, 0x8d, 0xe6,
0xc5, 0x35, 0xfa, 0x10, 0xe6, 0x89, 0x36, 0x27, 0x43, 0xbf, 0xe3, 0x63, 0x6f, 0x42, 0x25, 0x75,
0x1c, 0xca, 0xe1, 0x68, 0x61, 0x2a, 0xf8, 0x00, 0xa0, 0xfe, 0x2c, 0xcc, 0x25, 0xc6, 0xba, 0xcf,
0x59, 0x86, 0x33, 0x59, 0x10, 0x67, 0xb2, 0x04, 0xa0, 0xb9, 0x36, 0x7e, 0xd3, 0x09, 0xac, 0x60,
0x9f, 0x78, 0x1f, 0x82, 0x69, 0xa3, 0xbf, 0x49, 0x0d, 0x32, 0xee, 0x88, 0x1a, 0xbf, 0xa2, 0xc0,
0x0c, 0x93, 0x5c, 0xd2, 0xd5, 0xfd, 0xaf, 0xc2, 0x4b, 0x50, 0xc0, 0x74, 0x14, 0x7e, 0x9a, 0x71,
0x52, 0xae, 0xaa, 0x23, 0x74, 0x35, 0x5e, 0x5d, 0x2a, 0x46, 0x01, 0x4c, 0xaf, 0x79, 0x6e, 0x6f,
0x32, 0x8c, 0xa8, 0xc7, 0x63, 0x63, 0xd1, 0x87, 0x2d, 0x11, 0xc0, 0xad, 0x34, 0xc6, 0xf8, 0x7b,
0x05, 0x16, 0x6e, 0xf7, 0xb0, 0x67, 0x04, 0x98, 0x10, 0x6d, 0xb2, 0xd1, 0x47, 0xc9, 0x6e, 0x0c,
0xb3, 0x6c, 0x1c, 0x33, 0xf4, 0x6a, 0xec, 0x9e, 0xa2, 0x7c, 0x9f, 0x93, 0xc0, 0x72, 0x70, 0xdf,
0x21, 0x9c, 0xd7, 0xa2, 0x38, 0xaf, 0x1f, 0x29, 0x30, 0xb3, 0x89, 0x89, 0x1d, 0x9b, 0x6c, 0x4a,
0xe7, 0x21, 0x47, 0xb0, 0x1c, 0x77, 0x81, 0x69, 0x65, 0x74, 0x06, 0x66, 0x2c, 0xa7, 0x6d, 0xf7,
0x4d, 0xac, 0x93, 0xf9, 0xeb, 0xc4, 0x3d, 0xe4, 0xce, 0xc3, 0x34, 0x2f, 0x20, 0xd3, 0x20, 0x26,
0x5a, 0xca, 0xe3, 0xf7, 0x18, 0x8f, 0x47, 0x09, 0x61, 0x0c, 0x05, 0xe5, 0x30, 0x28, 0xbc, 0x08,
0x79, 0x32, 0x74, 0xe8, 0x44, 0xc8, 0x5b, 0x0d, 0xc4, 0x44, 0x63, 0xb5, 0xd5, 0x9f, 0x57, 0x00,
0x89, 0x64, 0x9b, 0x44, 0x4b, 0xbc, 0x2c, 0x26, 0x82, 0x64, 0x47, 0xa2, 0xce, 0x66, 0x1a, 0xa5,
0x80, 0xa8, 0x9f, 0x46, 0xab, 0x47, 0x97, 0x7b, 0x92, 0xd5, 0x23, 0xf3, 0x1a, 0xb9, 0x7a, 0x02,
0x11, 0x68, 0x65, 0x71, 0xf5, 0x28, 0xc7, 0x4a, 0x56, 0x8f, 0xe0, 0x4c, 0x57, 0x8f, 0xeb, 0xf7,
0x66, 0x33, 0x43, 0x16, 0x8d, 0x21, 0x1b, 0x2e, 0x1a, 0x1d, 0x59, 0x39, 0xcc, 0xc8, 0x2f, 0x42,
0x9e, 0x8c, 0x78, 0x30, 0xbd, 0xc2, 0x45, 0xa3, 0xb5, 0x85, 0x45, 0xe3, 0x08, 0x3c, 0xf8, 0x45,
0x1b, 0xcc, 0x74, 0xb0, 0x68, 0x2a, 0x54, 0x6f, 0x6f, 0x7d, 0x88, 0xdb, 0xc1, 0x08, 0xcd, 0x7b,
0x1a, 0xa6, 0x37, 0x3c, 0x6b, 0xd7, 0xb2, 0x71, 0x67, 0x94, 0x0a, 0xff, 0x8e, 0x02, 0xb5, 0x6b,
0x9e, 0xe1, 0x04, 0x6e, 0xa8, 0xc6, 0xef, 0x8b, 0x9e, 0x97, 0xa1, 0xdc, 0x0b, 0x47, 0xe3, 0x3c,
0xf0, 0xa4, 0x3c, 0xe2, 0x13, 0xc7, 0x49, 0x1b, 0x34, 0x53, 0xdf, 0x85, 0x39, 0x8a, 0x49, 0x12,
0xed, 0xd7, 0xa0, 0x44, 0x95, 0xb9, 0xc5, 0x0f, 0x50, 0x2a, 0xab, 0xaa, 0x7c, 0x4b, 0x23, 0x4e,
0x43, 0x8b, 0xda, 0xa8, 0xff, 0xac, 0x40, 0x85, 0x96, 0x0d, 0x26, 0x78, 0x78, 0x29, 0x7f, 0x19,
0x0a, 0x2e, 0x25, 0xf9, 0xc8, 0xc0, 0xb0, 0xb8, 0x2a, 0x1a, 0x6f, 0x40, 0x3c, 0x64, 0xf6, 0x4b,
0xd4, 0xc8, 0xc0, 0x40, 0x5c, 0x27, 0x17, 0x3b, 0x0c, 0x77, 0xaa, 0x96, 0xc7, 0x9b, 0x5f, 0xd8,
0x84, 0xee, 0xd5, 0x18, 0x4f, 0xd2, 0x0a, 0xf7, 0x2f, 0xc2, 0x5f, 0x4d, 0xd8, 0xd8, 0xa5, 0x74,
0x2c, 0xe4, 0x46, 0x36, 0xa6, 0x59, 0xc9, 0x5e, 0x2d, 0x86, 0xd6, 0x84, 0x7b, 0xb5, 0x88, 0x05,
0x46, 0xed, 0xd5, 0x44, 0xe4, 0x06, 0x0c, 0xf0, 0x8f, 0x0a, 0x2c, 0x72, 0x9b, 0x16, 0xf1, 0xd6,
0x43, 0x20, 0x13, 0xfa, 0x1a, 0xb7, 0xbd, 0x59, 0x6a, 0x7b, 0x9f, 0x19, 0x65, 0x7b, 0x23, 0x3c,
0x0f, 0x30, 0xbe, 0x7f, 0xa7, 0xc0, 0x3c, 0xf3, 0xaf, 0xae, 0xf6, 0x9d, 0x09, 0x1f, 0x0f, 0x79,
0x02, 0x6a, 0xdb, 0xbc, 0x13, 0xd1, 0xab, 0xa9, 0x86, 0x40, 0x1e, 0xd8, 0x9b, 0xde, 0x33, 0x02,
0x7d, 0xcb, 0x35, 0xf7, 0xe9, 0xc1, 0xdb, 0x85, 0x17, 0xc2, 0xdd, 0xdc, 0x9e, 0x11, 0x5c, 0x76,
0xcd, 0xfd, 0xcb, 0x14, 0x88, 0x2e, 0x42, 0xd9, 0xf0, 0x3a, 0x34, 0x64, 0xc6, 0xb6, 0x73, 0xf5,
0x94, 0x44, 0x82, 0x35, 0x23, 0x30, 0xe8, 0x24, 0x4b, 0x86, 0xd7, 0x21, 0x3f, 0x7c, 0xd5, 0x86,
0x59, 0xe2, 0x9f, 0x7d, 0x31, 0x33, 0x52, 0x4f, 0x43, 0xf9, 0x26, 0xed, 0xe9, 0xcd, 0x7b, 0x01,
0x6a, 0x42, 0x71, 0x17, 0x7b, 0xbe, 0xe5, 0x3a, 0x5c, 0x4b, 0x86, 0x9f, 0x67, 0x4e, 0x41, 0x29,
0xbc, 0xfc, 0x89, 0x8a, 0x90, 0xbd, 0x64, 0xdb, 0x8d, 0x29, 0x54, 0x85, 0xd2, 0x3a, 0xbf, 0xe1,
0xd8, 0x50, 0xce, 0xbc, 0x01, 0xb3, 0x12, 0xd7, 0x09, 0xcd, 0x40, 0xed, 0x92, 0x49, 0x1d, 0xf4,
0x3b, 0x2e, 0x01, 0x36, 0xa6, 0xd0, 0x02, 0x20, 0x0d, 0x77, 0xdd, 0x5d, 0x5a, 0xf1, 0xaa, 0xe7,
0x76, 0x29, 0x5c, 0x39, 0xf3, 0x2c, 0xcc, 0xc9, 0x18, 0x00, 0x95, 0x21, 0x4f, 0x19, 0xaa, 0x31,
0x85, 0x00, 0x0a, 0x1a, 0xde, 0x75, 0xef, 0xe2, 0x86, 0xb2, 0xfa, 0xef, 0x67, 0xa1, 0xc6, 0x70,
0xe7, 0x4f, 0x15, 0x20, 0x1d, 0x1a, 0xc9, 0xd7, 0xda, 0xd0, 0x57, 0xe4, 0x87, 0xd9, 0xf2, 0x47,
0xdd, 0x5a, 0xa3, 0xe4, 0x51, 0x9d, 0x42, 0xef, 0x43, 0x3d, 0xfe, 0xbe, 0x19, 0x92, 0x47, 0xf6,
0xa5, 0x8f, 0xa0, 0x1d, 0xd4, 0xb9, 0x0e, 0xb5, 0xd8, 0xd3, 0x64, 0x48, 0x2e, 0x23, 0xb2, 0xe7,
0xcb, 0x5a, 0x72, 0x85, 0x2c, 0x3e, 0x1f, 0xc6, 0xb0, 0x8f, 0xbf, 0x15, 0x94, 0x82, 0xbd, 0xf4,
0x41, 0xa1, 0x83, 0xb0, 0x37, 0x60, 0x66, 0xe8, 0x29, 0x1f, 0xf4, 0x6c, 0xca, 0x99, 0x92, 0xfc,
0xc9, 0x9f, 0x83, 0x86, 0xd8, 0x03, 0x34, 0xfc, 0xdc, 0x16, 0x5a, 0x91, 0xaf, 0x40, 0xda, 0x03,
0x64, 0xad, 0x73, 0x63, 0xd7, 0x8f, 0x08, 0xf7, 0x6d, 0x05, 0x16, 0x53, 0x5e, 0x7d, 0x41, 0xe7,
0xd3, 0x0e, 0x18, 0x47, 0xbc, 0x61, 0xd3, 0x7a, 0xe1, 0x70, 0x8d, 0x22, 0x44, 0x1c, 0x98, 0x4e,
0x3c, 0x7a, 0x82, 0xce, 0xa6, 0xde, 0xd4, 0x1e, 0x7e, 0x11, 0xa6, 0xf5, 0x95, 0xf1, 0x2a, 0x47,
0xe3, 0x7d, 0x00, 0xd3, 0x89, 0x17, 0x3f, 0x52, 0xc6, 0x93, 0xbf, 0x0b, 0x72, 0xd0, 0x82, 0x7e,
0x1d, 0x6a, 0xb1, 0xa7, 0x39, 0x52, 0x38, 0x5e, 0xf6, 0x7c, 0xc7, 0x41, 0x5d, 0x7f, 0x00, 0x55,
0xf1, 0x05, 0x0d, 0xb4, 0x9c, 0x26, 0x4b, 0x43, 0x1d, 0x1f, 0x46, 0x94, 0x06, 0x37, 0xdf, 0x47,
0x88, 0xd2, 0xd0, 0x63, 0x01, 0xe3, 0x8b, 0x92, 0xd0, 0xff, 0x48, 0x51, 0x3a, 0xf4, 0x10, 0xdf,
0x54, 0x68, 0xe4, 0x44, 0xf2, 0xb2, 0x02, 0x5a, 0x4d, 0xe3, 0xcd, 0xf4, 0x37, 0x24, 0x5a, 0xe7,
0x0f, 0xd5, 0x26, 0xa2, 0xe2, 0x5d, 0xa8, 0xc7, 0xdf, 0x0f, 0x48, 0xa1, 0xa2, 0xf4, 0xc9, 0x85,
0xd6, 0xd9, 0xb1, 0xea, 0x46, 0x83, 0xbd, 0x03, 0x15, 0xe1, 0x01, 0x56, 0xf4, 0xf4, 0x08, 0x3e,
0x16, 0x5f, 0x23, 0x3d, 0x88, 0x92, 0x6f, 0x43, 0x39, 0x7a, 0x37, 0x15, 0x9d, 0x4e, 0xe5, 0xdf,
0xc3, 0x74, 0xb9, 0x09, 0x30, 0x78, 0x14, 0x15, 0x3d, 0x25, 0xed, 0x73, 0xe8, 0xd5, 0xd4, 0x83,
0x3a, 0x8d, 0xa6, 0xcf, 0x2e, 0x58, 0x8d, 0x9a, 0xbe, 0x78, 0x47, 0xf0, 0xa0, 0x6e, 0x77, 0xa0,
0x16, 0xbb, 0xeb, 0x9b, 0x26, 0xc2, 0x92, 0xbb, 0xd8, 0xad, 0x33, 0xe3, 0x54, 0x8d, 0xd6, 0x6f,
0x07, 0x6a, 0xb1, 0x7b, 0x96, 0x29, 0x23, 0xc9, 0xee, 0x97, 0xa6, 0x8c, 0x24, 0xbd, 0xb6, 0xa9,
0x4e, 0xa1, 0x6f, 0x08, 0x57, 0x3a, 0x63, 0xf7, 0x67, 0xd1, 0xf3, 0x23, 0xfb, 0x91, 0xdd, 0x23,
0x6e, 0xad, 0x1e, 0xa6, 0x49, 0x84, 0x02, 0xe7, 0x2a, 0x46, 0xd2, 0x74, 0xae, 0x3a, 0xcc, 0x4a,
0x6d, 0x42, 0x81, 0x5d, 0x98, 0x44, 0x6a, 0xca, 0xad, 0x69, 0xe1, 0x36, 0x65, 0xeb, 0x09, 0x69,
0x9d, 0xf8, 0x15, 0x42, 0xd6, 0x29, 0x3b, 0x6c, 0x4e, 0xe9, 0x34, 0x76, 0x49, 0x6e, 0xdc, 0x4e,
0x35, 0x28, 0xb0, 0x5b, 0x3b, 0x29, 0x9d, 0xc6, 0xae, 0xa4, 0xb5, 0x46, 0xd7, 0x61, 0x47, 0x06,
0x53, 0x68, 0x03, 0xf2, 0x34, 0x33, 0x00, 0x9d, 0x1a, 0x75, 0x13, 0x64, 0x54, 0x8f, 0xb1, 0xcb,
0x22, 0xea, 0x14, 0xba, 0x0d, 0x79, 0x9a, 0x45, 0x97, 0xd2, 0xa3, 0x78, 0x45, 0xa2, 0x35, 0xb2,
0x4a, 0x88, 0xa2, 0x09, 0x55, 0x31, 0x91, 0x39, 0xc5, 0x64, 0x49, 0x52, 0xbd, 0x5b, 0xe3, 0xd4,
0x0c, 0x47, 0x61, 0x62, 0x34, 0xc8, 0x92, 0x48, 0x17, 0xa3, 0xa1, 0x0c, 0x8c, 0x74, 0x31, 0x1a,
0x4e, 0xba, 0x50, 0xa7, 0xd0, 0x2f, 0x28, 0xd0, 0x4c, 0xcb, 0xae, 0x45, 0xa9, 0x1e, 0xd0, 0xa8,
0x14, 0xe1, 0xd6, 0x8b, 0x87, 0x6c, 0x15, 0xe1, 0xf2, 0x31, 0x0d, 0x9d, 0x0e, 0xe5, 0xd3, 0x9e,
0x4b, 0xeb, 0x2f, 0x25, 0x47, 0xb4, 0xf5, 0xdc, 0xf8, 0x0d, 0xa2, 0xb1, 0xb7, 0xa0, 0x22, 0x84,
0x6d, 0x53, 0x34, 0xef, 0x70, 0xbc, 0x39, 0x65, 0x55, 0x25, 0x11, 0x60, 0xc6, 0xde, 0x34, 0x09,
0x33, 0x85, 0x19, 0xc5, 0x9c, 0xce, 0x14, 0xf6, 0x8e, 0xe5, 0x70, 0xaa, 0x53, 0x08, 0x43, 0x55,
0xcc, 0xc8, 0x4c, 0xe1, 0x46, 0x49, 0x32, 0x67, 0xeb, 0x99, 0x31, 0x6a, 0x46, 0xc3, 0xe8, 0x00,
0x83, 0x8c, 0xc8, 0x14, 0x5b, 0x37, 0x94, 0x94, 0xd9, 0x7a, 0xfa, 0xc0, 0x7a, 0xa2, 0xd9, 0x17,
0x72, 0x1c, 0x53, 0xa8, 0x3f, 0x9c, 0x05, 0x39, 0xc6, 0x5e, 0x64, 0x38, 0x6b, 0x2e, 0x65, 0x2f,
0x92, 0x9a, 0xa0, 0xd7, 0x3a, 0x37, 0x76, 0xfd, 0x68, 0x3e, 0x1f, 0x41, 0x23, 0x99, 0x65, 0x98,
0xb2, 0xc7, 0x4d, 0x49, 0x7a, 0x6c, 0x3d, 0x3b, 0x66, 0x6d, 0xd1, 0x1e, 0x1e, 0x1b, 0xc6, 0xe9,
0x3d, 0x2b, 0xd8, 0xa1, 0xc9, 0x6b, 0xe3, 0xcc, 0x5a, 0xcc, 0x93, 0x1b, 0x67, 0xd6, 0xb1, 0xac,
0x38, 0x6e, 0xbc, 0x68, 0xc2, 0x46, 0x9a, 0xf1, 0x12, 0xf3, 0xb1, 0x52, 0xec, 0x4c, 0x3c, 0x69,
0x89, 0xb9, 0x9f, 0xf1, 0x44, 0x10, 0x74, 0x66, 0xac, 0x6c, 0x91, 0x51, 0xee, 0xa7, 0x3c, 0xb3,
0x84, 0x6d, 0xdd, 0x12, 0x79, 0x2e, 0x29, 0x5b, 0x29, 0x79, 0x9e, 0x4d, 0xca, 0xd6, 0x2d, 0x25,
0x75, 0x86, 0x0a, 0x56, 0x23, 0x99, 0x34, 0x30, 0xfa, 0x2c, 0x24, 0x19, 0x2d, 0x3e, 0xf8, 0xb8,
0xa2, 0x91, 0x8c, 0xc6, 0xa7, 0x0c, 0x90, 0x12, 0xb4, 0x1f, 0x63, 0x80, 0x64, 0x20, 0x3b, 0x65,
0x80, 0x94, 0x78, 0xf7, 0x18, 0xbe, 0x6b, 0x2c, 0x80, 0x9c, 0x62, 0x0a, 0x65, 0x41, 0xe6, 0x14,
0x53, 0x28, 0x8d, 0x7d, 0x33, 0x8f, 0x7e, 0x10, 0x07, 0x4e, 0xd1, 0x72, 0x43, 0x81, 0xe2, 0x83,
0xd0, 0xbf, 0x0d, 0xa5, 0x30, 0x90, 0x8b, 0x9e, 0x4c, 0x75, 0x11, 0x0f, 0xd1, 0xe1, 0x07, 0x30,
0x9d, 0x38, 0xc1, 0x4b, 0x61, 0x51, 0x79, 0x20, 0xf7, 0xe0, 0xf5, 0x84, 0x41, 0xc8, 0x2f, 0x85,
0x08, 0x43, 0xa1, 0xd4, 0x14, 0x55, 0x3f, 0x1c, 0x3b, 0x14, 0x07, 0x20, 0x88, 0x8d, 0x1c, 0x40,
0x88, 0xf6, 0x8d, 0x1c, 0x40, 0x8c, 0x73, 0x31, 0x8e, 0x4c, 0x1e, 0x50, 0xa6, 0x70, 0x64, 0xca,
0x81, 0xfb, 0x41, 0x24, 0xda, 0x82, 0x8a, 0x10, 0x35, 0x40, 0xa3, 0x50, 0x13, 0xc3, 0x1d, 0x29,
0xae, 0x82, 0x24, 0x00, 0xc1, 0x8e, 0x2e, 0xe2, 0x67, 0xe6, 0x29, 0x5a, 0x4f, 0x7a, 0xb0, 0x7e,
0xd0, 0x04, 0xde, 0x83, 0xaa, 0x78, 0x78, 0x9d, 0xe2, 0x35, 0x48, 0xce, 0xb7, 0x0f, 0xe8, 0x78,
0xb5, 0x0f, 0xd5, 0x0d, 0xcf, 0xbd, 0x17, 0xbe, 0x4a, 0xfb, 0x05, 0xb9, 0x27, 0x17, 0xdb, 0x50,
0x67, 0x15, 0x74, 0x7c, 0x2f, 0xd0, 0xdd, 0xad, 0x0f, 0xd1, 0xf1, 0x15, 0xf6, 0xbf, 0x5e, 0x56,
0xc2, 0xff, 0xf5, 0xb2, 0x72, 0xd5, 0xb2, 0xf1, 0x6d, 0x9e, 0x56, 0xfb, 0x6f, 0xc5, 0x11, 0x57,
0x41, 0xa3, 0x83, 0x76, 0x8d, 0xff, 0xbb, 0x99, 0x37, 0xef, 0x05, 0xb7, 0xb7, 0x3e, 0xbc, 0xfc,
0xee, 0x67, 0xaf, 0x15, 0x21, 0xbf, 0xba, 0xf2, 0xfc, 0xca, 0x73, 0x50, 0xb7, 0xa2, 0xea, 0x1d,
0xaf, 0xd7, 0xbe, 0x5c, 0x61, 0x8d, 0x36, 0x48, 0x3f, 0x1b, 0xca, 0xcf, 0x2c, 0x77, 0xac, 0x60,
0xa7, 0xbf, 0x45, 0xc8, 0x73, 0x8e, 0x55, 0x7b, 0xd6, 0x72, 0xf9, 0xaf, 0x73, 0x46, 0xcf, 0xe2,
0x3f, 0x7b, 0x5b, 0xbf, 0xab, 0x28, 0x5b, 0x05, 0x3a, 0xfa, 0xf9, 0xff, 0x0f, 0x00, 0x00, 0xff,
0xff, 0xe2, 0x63, 0x2f, 0x59, 0xdd, 0x66, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -7512,6 +7635,8 @@ type MilvusServiceClient interface {
SelectUser(ctx context.Context, in *SelectUserRequest, opts ...grpc.CallOption) (*SelectUserResponse, error)
OperatePrivilege(ctx context.Context, in *OperatePrivilegeRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
SelectGrant(ctx context.Context, in *SelectGrantRequest, opts ...grpc.CallOption) (*SelectGrantResponse, error)
CreateFunction(ctx context.Context, in *CreateFunctionRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
DropFunction(ctx context.Context, in *DropFunctionRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
}
type milvusServiceClient struct {
@ -8008,6 +8133,24 @@ func (c *milvusServiceClient) SelectGrant(ctx context.Context, in *SelectGrantRe
return out, nil
}
func (c *milvusServiceClient) CreateFunction(ctx context.Context, in *CreateFunctionRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
out := new(commonpb.Status)
err := c.cc.Invoke(ctx, "/milvus.proto.milvus.MilvusService/CreateFunction", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *milvusServiceClient) DropFunction(ctx context.Context, in *DropFunctionRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
out := new(commonpb.Status)
err := c.cc.Invoke(ctx, "/milvus.proto.milvus.MilvusService/DropFunction", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// MilvusServiceServer is the server API for MilvusService service.
type MilvusServiceServer interface {
CreateCollection(context.Context, *CreateCollectionRequest) (*commonpb.Status, error)
@ -8069,6 +8212,8 @@ type MilvusServiceServer interface {
SelectUser(context.Context, *SelectUserRequest) (*SelectUserResponse, error)
OperatePrivilege(context.Context, *OperatePrivilegeRequest) (*commonpb.Status, error)
SelectGrant(context.Context, *SelectGrantRequest) (*SelectGrantResponse, error)
CreateFunction(context.Context, *CreateFunctionRequest) (*commonpb.Status, error)
DropFunction(context.Context, *DropFunctionRequest) (*commonpb.Status, error)
}
// UnimplementedMilvusServiceServer can be embedded to have forward compatible implementations.
@ -8237,6 +8382,12 @@ func (*UnimplementedMilvusServiceServer) OperatePrivilege(ctx context.Context, r
func (*UnimplementedMilvusServiceServer) SelectGrant(ctx context.Context, req *SelectGrantRequest) (*SelectGrantResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method SelectGrant not implemented")
}
func (*UnimplementedMilvusServiceServer) CreateFunction(ctx context.Context, req *CreateFunctionRequest) (*commonpb.Status, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateFunction not implemented")
}
func (*UnimplementedMilvusServiceServer) DropFunction(ctx context.Context, req *DropFunctionRequest) (*commonpb.Status, error) {
return nil, status.Errorf(codes.Unimplemented, "method DropFunction not implemented")
}
func RegisterMilvusServiceServer(s *grpc.Server, srv MilvusServiceServer) {
s.RegisterService(&_MilvusService_serviceDesc, srv)
@ -9214,6 +9365,42 @@ func _MilvusService_SelectGrant_Handler(srv interface{}, ctx context.Context, de
return interceptor(ctx, in, info, handler)
}
func _MilvusService_CreateFunction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CreateFunctionRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MilvusServiceServer).CreateFunction(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.milvus.MilvusService/CreateFunction",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MilvusServiceServer).CreateFunction(ctx, req.(*CreateFunctionRequest))
}
return interceptor(ctx, in, info, handler)
}
func _MilvusService_DropFunction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DropFunctionRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MilvusServiceServer).DropFunction(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.milvus.MilvusService/DropFunction",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MilvusServiceServer).DropFunction(ctx, req.(*DropFunctionRequest))
}
return interceptor(ctx, in, info, handler)
}
var _MilvusService_serviceDesc = grpc.ServiceDesc{
ServiceName: "milvus.proto.milvus.MilvusService",
HandlerType: (*MilvusServiceServer)(nil),
@ -9434,6 +9621,14 @@ var _MilvusService_serviceDesc = grpc.ServiceDesc{
MethodName: "SelectGrant",
Handler: _MilvusService_SelectGrant_Handler,
},
{
MethodName: "CreateFunction",
Handler: _MilvusService_CreateFunction_Handler,
},
{
MethodName: "DropFunction",
Handler: _MilvusService_DropFunction_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "milvus.proto",

View File

@ -29,3 +29,4 @@ add_subdirectory( index )
add_subdirectory( query )
add_subdirectory( segcore )
add_subdirectory( indexbuilder )
add_subdirectory( wasm )

View File

@ -398,7 +398,7 @@ const char descriptor_table_protodef_common_2eproto[] PROTOBUF_SECTION_VARIABLE(
"Sealed\020\003\022\013\n\007Flushed\020\004\022\014\n\010Flushing\020\005\022\013\n\007D"
"ropped\020\006\022\r\n\tImporting\020\007*>\n\017PlaceholderTy"
"pe\022\010\n\004None\020\000\022\020\n\014BinaryVector\020d\022\017\n\013FloatV"
"ector\020e*\370\014\n\007MsgType\022\r\n\tUndefined\020\000\022\024\n\020Cr"
"ector\020e*\266\r\n\007MsgType\022\r\n\tUndefined\020\000\022\024\n\020Cr"
"eateCollection\020d\022\022\n\016DropCollection\020e\022\021\n\r"
"HasCollection\020f\022\026\n\022DescribeCollection\020g\022"
"\023\n\017ShowCollections\020h\022\024\n\020GetSystemConfigs"
@ -427,50 +427,51 @@ const char descriptor_table_protodef_common_2eproto[] PROTOBUF_SECTION_VARIABLE(
"\004\022\023\n\016UnsubDmChannel\020\204\004\022\024\n\017GetDistributio"
"n\020\205\004\022\025\n\020SyncDistribution\020\206\004\022\020\n\013SegmentIn"
"fo\020\330\004\022\017\n\nSystemInfo\020\331\004\022\024\n\017GetRecoveryInf"
"o\020\332\004\022\024\n\017GetSegmentState\020\333\004\022\r\n\010TimeTick\020\260"
"\t\022\023\n\016QueryNodeStats\020\261\t\022\016\n\tLoadIndex\020\262\t\022\016"
"\n\tRequestID\020\263\t\022\017\n\nRequestTSO\020\264\t\022\024\n\017Alloc"
"ateSegment\020\265\t\022\026\n\021SegmentStatistics\020\266\t\022\025\n"
"\020SegmentFlushDone\020\267\t\022\017\n\nDataNodeTt\020\270\t\022\025\n"
"\020CreateCredential\020\334\013\022\022\n\rGetCredential\020\335\013"
"\022\025\n\020DeleteCredential\020\336\013\022\025\n\020UpdateCredent"
"ial\020\337\013\022\026\n\021ListCredUsernames\020\340\013\022\017\n\nCreate"
"Role\020\300\014\022\r\n\010DropRole\020\301\014\022\024\n\017OperateUserRol"
"e\020\302\014\022\017\n\nSelectRole\020\303\014\022\017\n\nSelectUser\020\304\014\022\023"
"\n\016SelectResource\020\305\014\022\025\n\020OperatePrivilege\020"
"\306\014\022\020\n\013SelectGrant\020\307\014\022\033\n\026RefreshPolicyInf"
"oCache\020\310\014\022\017\n\nListPolicy\020\311\014*\"\n\007DslType\022\007\n"
"\003Dsl\020\000\022\016\n\nBoolExprV1\020\001*B\n\017CompactionStat"
"e\022\021\n\rUndefiedState\020\000\022\r\n\tExecuting\020\001\022\r\n\tC"
"ompleted\020\002*X\n\020ConsistencyLevel\022\n\n\006Strong"
"\020\000\022\013\n\007Session\020\001\022\013\n\007Bounded\020\002\022\016\n\nEventual"
"ly\020\003\022\016\n\nCustomized\020\004*\213\001\n\013ImportState\022\021\n\r"
"ImportPending\020\000\022\020\n\014ImportFailed\020\001\022\021\n\rImp"
"ortStarted\020\002\022\023\n\017ImportPersisted\020\005\022\023\n\017Imp"
"ortCompleted\020\006\022\032\n\026ImportFailedAndCleaned"
"\020\007*2\n\nObjectType\022\016\n\nCollection\020\000\022\n\n\006Glob"
"al\020\001\022\010\n\004User\020\002*\206\005\n\017ObjectPrivilege\022\020\n\014Pr"
"ivilegeAll\020\000\022\035\n\031PrivilegeCreateCollectio"
"n\020\001\022\033\n\027PrivilegeDropCollection\020\002\022\037\n\033Priv"
"ilegeDescribeCollection\020\003\022\034\n\030PrivilegeSh"
"owCollections\020\004\022\021\n\rPrivilegeLoad\020\005\022\024\n\020Pr"
"ivilegeRelease\020\006\022\027\n\023PrivilegeCompaction\020"
"\007\022\023\n\017PrivilegeInsert\020\010\022\023\n\017PrivilegeDelet"
"e\020\t\022\032\n\026PrivilegeGetStatistics\020\n\022\030\n\024Privi"
"legeCreateIndex\020\013\022\030\n\024PrivilegeIndexDetai"
"l\020\014\022\026\n\022PrivilegeDropIndex\020\r\022\023\n\017Privilege"
"Search\020\016\022\022\n\016PrivilegeFlush\020\017\022\022\n\016Privileg"
"eQuery\020\020\022\030\n\024PrivilegeLoadBalance\020\021\022\023\n\017Pr"
"ivilegeImport\020\022\022\034\n\030PrivilegeCreateOwners"
"hip\020\023\022\027\n\023PrivilegeUpdateUser\020\024\022\032\n\026Privil"
"egeDropOwnership\020\025\022\034\n\030PrivilegeSelectOwn"
"ership\020\026\022\034\n\030PrivilegeManageOwnership\020\027\022\027"
"\n\023PrivilegeSelectUser\020\030:^\n\021privilege_ext"
"_obj\022\037.google.protobuf.MessageOptions\030\351\007"
" \001(\0132!.milvus.proto.common.PrivilegeExtB"
"L\n\016io.milvus.grpcB\013CommonProtoP\001Z(github"
".com/milvus-io/milvus/api/commonpb\240\001\001b\006p"
"roto3"
"o\020\332\004\022\024\n\017GetSegmentState\020\333\004\022\023\n\016CreateFunc"
"tion\020\274\005\022\021\n\014DropFunction\020\275\005\022\024\n\017GetFunctio"
"nInfo\020\276\005\022\r\n\010TimeTick\020\260\t\022\023\n\016QueryNodeStat"
"s\020\261\t\022\016\n\tLoadIndex\020\262\t\022\016\n\tRequestID\020\263\t\022\017\n\n"
"RequestTSO\020\264\t\022\024\n\017AllocateSegment\020\265\t\022\026\n\021S"
"egmentStatistics\020\266\t\022\025\n\020SegmentFlushDone\020"
"\267\t\022\017\n\nDataNodeTt\020\270\t\022\025\n\020CreateCredential\020"
"\334\013\022\022\n\rGetCredential\020\335\013\022\025\n\020DeleteCredenti"
"al\020\336\013\022\025\n\020UpdateCredential\020\337\013\022\026\n\021ListCred"
"Usernames\020\340\013\022\017\n\nCreateRole\020\300\014\022\r\n\010DropRol"
"e\020\301\014\022\024\n\017OperateUserRole\020\302\014\022\017\n\nSelectRole"
"\020\303\014\022\017\n\nSelectUser\020\304\014\022\023\n\016SelectResource\020\305"
"\014\022\025\n\020OperatePrivilege\020\306\014\022\020\n\013SelectGrant\020"
"\307\014\022\033\n\026RefreshPolicyInfoCache\020\310\014\022\017\n\nListP"
"olicy\020\311\014*\"\n\007DslType\022\007\n\003Dsl\020\000\022\016\n\nBoolExpr"
"V1\020\001*B\n\017CompactionState\022\021\n\rUndefiedState"
"\020\000\022\r\n\tExecuting\020\001\022\r\n\tCompleted\020\002*X\n\020Cons"
"istencyLevel\022\n\n\006Strong\020\000\022\013\n\007Session\020\001\022\013\n"
"\007Bounded\020\002\022\016\n\nEventually\020\003\022\016\n\nCustomized"
"\020\004*\213\001\n\013ImportState\022\021\n\rImportPending\020\000\022\020\n"
"\014ImportFailed\020\001\022\021\n\rImportStarted\020\002\022\023\n\017Im"
"portPersisted\020\005\022\023\n\017ImportCompleted\020\006\022\032\n\026"
"ImportFailedAndCleaned\020\007*2\n\nObjectType\022\016"
"\n\nCollection\020\000\022\n\n\006Global\020\001\022\010\n\004User\020\002*\206\005\n"
"\017ObjectPrivilege\022\020\n\014PrivilegeAll\020\000\022\035\n\031Pr"
"ivilegeCreateCollection\020\001\022\033\n\027PrivilegeDr"
"opCollection\020\002\022\037\n\033PrivilegeDescribeColle"
"ction\020\003\022\034\n\030PrivilegeShowCollections\020\004\022\021\n"
"\rPrivilegeLoad\020\005\022\024\n\020PrivilegeRelease\020\006\022\027"
"\n\023PrivilegeCompaction\020\007\022\023\n\017PrivilegeInse"
"rt\020\010\022\023\n\017PrivilegeDelete\020\t\022\032\n\026PrivilegeGe"
"tStatistics\020\n\022\030\n\024PrivilegeCreateIndex\020\013\022"
"\030\n\024PrivilegeIndexDetail\020\014\022\026\n\022PrivilegeDr"
"opIndex\020\r\022\023\n\017PrivilegeSearch\020\016\022\022\n\016Privil"
"egeFlush\020\017\022\022\n\016PrivilegeQuery\020\020\022\030\n\024Privil"
"egeLoadBalance\020\021\022\023\n\017PrivilegeImport\020\022\022\034\n"
"\030PrivilegeCreateOwnership\020\023\022\027\n\023Privilege"
"UpdateUser\020\024\022\032\n\026PrivilegeDropOwnership\020\025"
"\022\034\n\030PrivilegeSelectOwnership\020\026\022\034\n\030Privil"
"egeManageOwnership\020\027\022\027\n\023PrivilegeSelectU"
"ser\020\030:^\n\021privilege_ext_obj\022\037.google.prot"
"obuf.MessageOptions\030\351\007 \001(\0132!.milvus.prot"
"o.common.PrivilegeExtBL\n\016io.milvus.grpcB"
"\013CommonProtoP\001Z(github.com/milvus-io/mil"
"vus/api/commonpb\240\001\001b\006proto3"
;
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_common_2eproto_deps[1] = {
&::descriptor_table_google_2fprotobuf_2fdescriptor_2eproto,
@ -491,7 +492,7 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_com
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_common_2eproto_once;
static bool descriptor_table_common_2eproto_initialized = false;
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_common_2eproto = {
&descriptor_table_common_2eproto_initialized, descriptor_table_protodef_common_2eproto, "common.proto", 5245,
&descriptor_table_common_2eproto_initialized, descriptor_table_protodef_common_2eproto, "common.proto", 5307,
&descriptor_table_common_2eproto_once, descriptor_table_common_2eproto_sccs, descriptor_table_common_2eproto_deps, 11, 1,
schemas, file_default_instances, TableStruct_common_2eproto::offsets,
file_level_metadata_common_2eproto, 11, file_level_enum_descriptors_common_2eproto, file_level_service_descriptors_common_2eproto,
@ -680,6 +681,9 @@ bool MsgType_IsValid(int value) {
case 601:
case 602:
case 603:
case 700:
case 701:
case 702:
case 1200:
case 1201:
case 1202:

View File

@ -329,6 +329,9 @@ enum MsgType : int {
SystemInfo = 601,
GetRecoveryInfo = 602,
GetSegmentState = 603,
CreateFunction = 700,
DropFunction = 701,
GetFunctionInfo = 702,
TimeTick = 1200,
QueryNodeStats = 1201,
LoadIndex = 1202,

File diff suppressed because it is too large Load Diff

View File

@ -49,7 +49,7 @@ struct TableStruct_plan_2eproto {
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[]
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[17]
static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[19]
PROTOBUF_SECTION_VARIABLE(protodesc_cold);
static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
@ -98,6 +98,12 @@ extern QueryInfoDefaultTypeInternal _QueryInfo_default_instance_;
class TermExpr;
class TermExprDefaultTypeInternal;
extern TermExprDefaultTypeInternal _TermExpr_default_instance_;
class UdfExpr;
class UdfExprDefaultTypeInternal;
extern UdfExprDefaultTypeInternal _UdfExpr_default_instance_;
class UdfParams;
class UdfParamsDefaultTypeInternal;
extern UdfParamsDefaultTypeInternal _UdfParams_default_instance_;
class UnaryExpr;
class UnaryExprDefaultTypeInternal;
extern UnaryExprDefaultTypeInternal _UnaryExpr_default_instance_;
@ -127,6 +133,8 @@ template<> ::milvus::proto::plan::GenericValue* Arena::CreateMaybeMessage<::milv
template<> ::milvus::proto::plan::PlanNode* Arena::CreateMaybeMessage<::milvus::proto::plan::PlanNode>(Arena*);
template<> ::milvus::proto::plan::QueryInfo* Arena::CreateMaybeMessage<::milvus::proto::plan::QueryInfo>(Arena*);
template<> ::milvus::proto::plan::TermExpr* Arena::CreateMaybeMessage<::milvus::proto::plan::TermExpr>(Arena*);
template<> ::milvus::proto::plan::UdfExpr* Arena::CreateMaybeMessage<::milvus::proto::plan::UdfExpr>(Arena*);
template<> ::milvus::proto::plan::UdfParams* Arena::CreateMaybeMessage<::milvus::proto::plan::UdfParams>(Arena*);
template<> ::milvus::proto::plan::UnaryExpr* Arena::CreateMaybeMessage<::milvus::proto::plan::UnaryExpr>(Arena*);
template<> ::milvus::proto::plan::UnaryRangeExpr* Arena::CreateMaybeMessage<::milvus::proto::plan::UnaryRangeExpr>(Arena*);
template<> ::milvus::proto::plan::ValueExpr* Arena::CreateMaybeMessage<::milvus::proto::plan::ValueExpr>(Arena*);
@ -2471,6 +2479,343 @@ class BinaryArithOpEvalRangeExpr :
};
// -------------------------------------------------------------------
class UdfParams :
public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:milvus.proto.plan.UdfParams) */ {
public:
UdfParams();
virtual ~UdfParams();
UdfParams(const UdfParams& from);
UdfParams(UdfParams&& from) noexcept
: UdfParams() {
*this = ::std::move(from);
}
inline UdfParams& operator=(const UdfParams& from) {
CopyFrom(from);
return *this;
}
inline UdfParams& operator=(UdfParams&& from) noexcept {
if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
if (this != &from) InternalSwap(&from);
} else {
CopyFrom(from);
}
return *this;
}
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
return GetDescriptor();
}
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor;
}
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection;
}
static const UdfParams& default_instance();
enum ValCase {
kValue = 1,
kColumnInfo = 2,
VAL_NOT_SET = 0,
};
static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY
static inline const UdfParams* internal_default_instance() {
return reinterpret_cast<const UdfParams*>(
&_UdfParams_default_instance_);
}
static constexpr int kIndexInFileMessages =
14;
friend void swap(UdfParams& a, UdfParams& b) {
a.Swap(&b);
}
inline void Swap(UdfParams* other) {
if (other == this) return;
InternalSwap(other);
}
// implements Message ----------------------------------------------
inline UdfParams* New() const final {
return CreateMaybeMessage<UdfParams>(nullptr);
}
UdfParams* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
return CreateMaybeMessage<UdfParams>(arena);
}
void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
void CopyFrom(const UdfParams& from);
void MergeFrom(const UdfParams& from);
PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
size_t ByteSizeLong() const final;
#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
#else
bool MergePartialFromCodedStream(
::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
void SerializeWithCachedSizes(
::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
int GetCachedSize() const final { return _cached_size_.Get(); }
private:
inline void SharedCtor();
inline void SharedDtor();
void SetCachedSize(int size) const final;
void InternalSwap(UdfParams* other);
friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
return "milvus.proto.plan.UdfParams";
}
private:
inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
return nullptr;
}
inline void* MaybeArenaPtr() const {
return nullptr;
}
public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_plan_2eproto);
return ::descriptor_table_plan_2eproto.file_level_metadata[kIndexInFileMessages];
}
public:
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
enum : int {
kValueFieldNumber = 1,
kColumnInfoFieldNumber = 2,
};
// .milvus.proto.plan.GenericValue value = 1;
bool has_value() const;
void clear_value();
const ::milvus::proto::plan::GenericValue& value() const;
::milvus::proto::plan::GenericValue* release_value();
::milvus::proto::plan::GenericValue* mutable_value();
void set_allocated_value(::milvus::proto::plan::GenericValue* value);
// .milvus.proto.plan.ColumnInfo column_info = 2;
bool has_column_info() const;
void clear_column_info();
const ::milvus::proto::plan::ColumnInfo& column_info() const;
::milvus::proto::plan::ColumnInfo* release_column_info();
::milvus::proto::plan::ColumnInfo* mutable_column_info();
void set_allocated_column_info(::milvus::proto::plan::ColumnInfo* column_info);
void clear_val();
ValCase val_case() const;
// @@protoc_insertion_point(class_scope:milvus.proto.plan.UdfParams)
private:
class _Internal;
void set_has_value();
void set_has_column_info();
inline bool has_val() const;
inline void clear_has_val();
::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
union ValUnion {
ValUnion() {}
::milvus::proto::plan::GenericValue* value_;
::milvus::proto::plan::ColumnInfo* column_info_;
} val_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
::PROTOBUF_NAMESPACE_ID::uint32 _oneof_case_[1];
friend struct ::TableStruct_plan_2eproto;
};
// -------------------------------------------------------------------
class UdfExpr :
public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:milvus.proto.plan.UdfExpr) */ {
public:
UdfExpr();
virtual ~UdfExpr();
UdfExpr(const UdfExpr& from);
UdfExpr(UdfExpr&& from) noexcept
: UdfExpr() {
*this = ::std::move(from);
}
inline UdfExpr& operator=(const UdfExpr& from) {
CopyFrom(from);
return *this;
}
inline UdfExpr& operator=(UdfExpr&& from) noexcept {
if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
if (this != &from) InternalSwap(&from);
} else {
CopyFrom(from);
}
return *this;
}
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
return GetDescriptor();
}
static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
return GetMetadataStatic().descriptor;
}
static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
return GetMetadataStatic().reflection;
}
static const UdfExpr& default_instance();
static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY
static inline const UdfExpr* internal_default_instance() {
return reinterpret_cast<const UdfExpr*>(
&_UdfExpr_default_instance_);
}
static constexpr int kIndexInFileMessages =
15;
friend void swap(UdfExpr& a, UdfExpr& b) {
a.Swap(&b);
}
inline void Swap(UdfExpr* other) {
if (other == this) return;
InternalSwap(other);
}
// implements Message ----------------------------------------------
inline UdfExpr* New() const final {
return CreateMaybeMessage<UdfExpr>(nullptr);
}
UdfExpr* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
return CreateMaybeMessage<UdfExpr>(arena);
}
void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
void CopyFrom(const UdfExpr& from);
void MergeFrom(const UdfExpr& from);
PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
bool IsInitialized() const final;
size_t ByteSizeLong() const final;
#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
#else
bool MergePartialFromCodedStream(
::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
void SerializeWithCachedSizes(
::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
int GetCachedSize() const final { return _cached_size_.Get(); }
private:
inline void SharedCtor();
inline void SharedDtor();
void SetCachedSize(int size) const final;
void InternalSwap(UdfExpr* other);
friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
return "milvus.proto.plan.UdfExpr";
}
private:
inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
return nullptr;
}
inline void* MaybeArenaPtr() const {
return nullptr;
}
public:
::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
private:
static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_plan_2eproto);
return ::descriptor_table_plan_2eproto.file_level_metadata[kIndexInFileMessages];
}
public:
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
enum : int {
kUdfParamsFieldNumber = 2,
kArgTypesFieldNumber = 4,
kUdfFuncNameFieldNumber = 1,
kWasmBodyFieldNumber = 3,
};
// repeated .milvus.proto.plan.UdfParams udf_params = 2;
int udf_params_size() const;
void clear_udf_params();
::milvus::proto::plan::UdfParams* mutable_udf_params(int index);
::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::plan::UdfParams >*
mutable_udf_params();
const ::milvus::proto::plan::UdfParams& udf_params(int index) const;
::milvus::proto::plan::UdfParams* add_udf_params();
const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::plan::UdfParams >&
udf_params() const;
// repeated .milvus.proto.schema.DataType arg_types = 4;
int arg_types_size() const;
void clear_arg_types();
::milvus::proto::schema::DataType arg_types(int index) const;
void set_arg_types(int index, ::milvus::proto::schema::DataType value);
void add_arg_types(::milvus::proto::schema::DataType value);
const ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>& arg_types() const;
::PROTOBUF_NAMESPACE_ID::RepeatedField<int>* mutable_arg_types();
// string udf_func_name = 1;
void clear_udf_func_name();
const std::string& udf_func_name() const;
void set_udf_func_name(const std::string& value);
void set_udf_func_name(std::string&& value);
void set_udf_func_name(const char* value);
void set_udf_func_name(const char* value, size_t size);
std::string* mutable_udf_func_name();
std::string* release_udf_func_name();
void set_allocated_udf_func_name(std::string* udf_func_name);
// string wasm_body = 3;
void clear_wasm_body();
const std::string& wasm_body() const;
void set_wasm_body(const std::string& value);
void set_wasm_body(std::string&& value);
void set_wasm_body(const char* value);
void set_wasm_body(const char* value, size_t size);
std::string* mutable_wasm_body();
std::string* release_wasm_body();
void set_allocated_wasm_body(std::string* wasm_body);
// @@protoc_insertion_point(class_scope:milvus.proto.plan.UdfExpr)
private:
class _Internal;
::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::plan::UdfParams > udf_params_;
::PROTOBUF_NAMESPACE_ID::RepeatedField<int> arg_types_;
mutable std::atomic<int> _arg_types_cached_byte_size_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr udf_func_name_;
::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr wasm_body_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
friend struct ::TableStruct_plan_2eproto;
};
// -------------------------------------------------------------------
class Expr :
public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:milvus.proto.plan.Expr) */ {
public:
@ -2518,6 +2863,7 @@ class Expr :
kBinaryArithExpr = 8,
kValueExpr = 9,
kColumnExpr = 10,
kUdfExpr = 11,
EXPR_NOT_SET = 0,
};
@ -2527,7 +2873,7 @@ class Expr :
&_Expr_default_instance_);
}
static constexpr int kIndexInFileMessages =
14;
16;
friend void swap(Expr& a, Expr& b) {
a.Swap(&b);
@ -2608,6 +2954,7 @@ class Expr :
kBinaryArithExprFieldNumber = 8,
kValueExprFieldNumber = 9,
kColumnExprFieldNumber = 10,
kUdfExprFieldNumber = 11,
};
// .milvus.proto.plan.TermExpr term_expr = 1;
bool has_term_expr() const;
@ -2689,6 +3036,14 @@ class Expr :
::milvus::proto::plan::ColumnExpr* mutable_column_expr();
void set_allocated_column_expr(::milvus::proto::plan::ColumnExpr* column_expr);
// .milvus.proto.plan.UdfExpr udf_expr = 11;
bool has_udf_expr() const;
void clear_udf_expr();
const ::milvus::proto::plan::UdfExpr& udf_expr() const;
::milvus::proto::plan::UdfExpr* release_udf_expr();
::milvus::proto::plan::UdfExpr* mutable_udf_expr();
void set_allocated_udf_expr(::milvus::proto::plan::UdfExpr* udf_expr);
void clear_expr();
ExprCase expr_case() const;
// @@protoc_insertion_point(class_scope:milvus.proto.plan.Expr)
@ -2704,6 +3059,7 @@ class Expr :
void set_has_binary_arith_expr();
void set_has_value_expr();
void set_has_column_expr();
void set_has_udf_expr();
inline bool has_expr() const;
inline void clear_has_expr();
@ -2721,6 +3077,7 @@ class Expr :
::milvus::proto::plan::BinaryArithExpr* binary_arith_expr_;
::milvus::proto::plan::ValueExpr* value_expr_;
::milvus::proto::plan::ColumnExpr* column_expr_;
::milvus::proto::plan::UdfExpr* udf_expr_;
} expr_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
::PROTOBUF_NAMESPACE_ID::uint32 _oneof_case_[1];
@ -2771,7 +3128,7 @@ class VectorANNS :
&_VectorANNS_default_instance_);
}
static constexpr int kIndexInFileMessages =
15;
17;
friend void swap(VectorANNS& a, VectorANNS& b) {
a.Swap(&b);
@ -2948,7 +3305,7 @@ class PlanNode :
&_PlanNode_default_instance_);
}
static constexpr int kIndexInFileMessages =
16;
18;
friend void swap(PlanNode& a, PlanNode& b) {
a.Swap(&b);
@ -4701,6 +5058,267 @@ inline void BinaryArithOpEvalRangeExpr::set_allocated_value(::milvus::proto::pla
// -------------------------------------------------------------------
// UdfParams
// .milvus.proto.plan.GenericValue value = 1;
inline bool UdfParams::has_value() const {
return val_case() == kValue;
}
inline void UdfParams::set_has_value() {
_oneof_case_[0] = kValue;
}
inline void UdfParams::clear_value() {
if (has_value()) {
delete val_.value_;
clear_has_val();
}
}
inline ::milvus::proto::plan::GenericValue* UdfParams::release_value() {
// @@protoc_insertion_point(field_release:milvus.proto.plan.UdfParams.value)
if (has_value()) {
clear_has_val();
::milvus::proto::plan::GenericValue* temp = val_.value_;
val_.value_ = nullptr;
return temp;
} else {
return nullptr;
}
}
inline const ::milvus::proto::plan::GenericValue& UdfParams::value() const {
// @@protoc_insertion_point(field_get:milvus.proto.plan.UdfParams.value)
return has_value()
? *val_.value_
: *reinterpret_cast< ::milvus::proto::plan::GenericValue*>(&::milvus::proto::plan::_GenericValue_default_instance_);
}
inline ::milvus::proto::plan::GenericValue* UdfParams::mutable_value() {
if (!has_value()) {
clear_val();
set_has_value();
val_.value_ = CreateMaybeMessage< ::milvus::proto::plan::GenericValue >(
GetArenaNoVirtual());
}
// @@protoc_insertion_point(field_mutable:milvus.proto.plan.UdfParams.value)
return val_.value_;
}
// .milvus.proto.plan.ColumnInfo column_info = 2;
inline bool UdfParams::has_column_info() const {
return val_case() == kColumnInfo;
}
inline void UdfParams::set_has_column_info() {
_oneof_case_[0] = kColumnInfo;
}
inline void UdfParams::clear_column_info() {
if (has_column_info()) {
delete val_.column_info_;
clear_has_val();
}
}
inline ::milvus::proto::plan::ColumnInfo* UdfParams::release_column_info() {
// @@protoc_insertion_point(field_release:milvus.proto.plan.UdfParams.column_info)
if (has_column_info()) {
clear_has_val();
::milvus::proto::plan::ColumnInfo* temp = val_.column_info_;
val_.column_info_ = nullptr;
return temp;
} else {
return nullptr;
}
}
inline const ::milvus::proto::plan::ColumnInfo& UdfParams::column_info() const {
// @@protoc_insertion_point(field_get:milvus.proto.plan.UdfParams.column_info)
return has_column_info()
? *val_.column_info_
: *reinterpret_cast< ::milvus::proto::plan::ColumnInfo*>(&::milvus::proto::plan::_ColumnInfo_default_instance_);
}
inline ::milvus::proto::plan::ColumnInfo* UdfParams::mutable_column_info() {
if (!has_column_info()) {
clear_val();
set_has_column_info();
val_.column_info_ = CreateMaybeMessage< ::milvus::proto::plan::ColumnInfo >(
GetArenaNoVirtual());
}
// @@protoc_insertion_point(field_mutable:milvus.proto.plan.UdfParams.column_info)
return val_.column_info_;
}
inline bool UdfParams::has_val() const {
return val_case() != VAL_NOT_SET;
}
inline void UdfParams::clear_has_val() {
_oneof_case_[0] = VAL_NOT_SET;
}
inline UdfParams::ValCase UdfParams::val_case() const {
return UdfParams::ValCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------
// UdfExpr
// string udf_func_name = 1;
inline void UdfExpr::clear_udf_func_name() {
udf_func_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& UdfExpr::udf_func_name() const {
// @@protoc_insertion_point(field_get:milvus.proto.plan.UdfExpr.udf_func_name)
return udf_func_name_.GetNoArena();
}
inline void UdfExpr::set_udf_func_name(const std::string& value) {
udf_func_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
// @@protoc_insertion_point(field_set:milvus.proto.plan.UdfExpr.udf_func_name)
}
inline void UdfExpr::set_udf_func_name(std::string&& value) {
udf_func_name_.SetNoArena(
&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
// @@protoc_insertion_point(field_set_rvalue:milvus.proto.plan.UdfExpr.udf_func_name)
}
inline void UdfExpr::set_udf_func_name(const char* value) {
GOOGLE_DCHECK(value != nullptr);
udf_func_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
// @@protoc_insertion_point(field_set_char:milvus.proto.plan.UdfExpr.udf_func_name)
}
inline void UdfExpr::set_udf_func_name(const char* value, size_t size) {
udf_func_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
::std::string(reinterpret_cast<const char*>(value), size));
// @@protoc_insertion_point(field_set_pointer:milvus.proto.plan.UdfExpr.udf_func_name)
}
inline std::string* UdfExpr::mutable_udf_func_name() {
// @@protoc_insertion_point(field_mutable:milvus.proto.plan.UdfExpr.udf_func_name)
return udf_func_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* UdfExpr::release_udf_func_name() {
// @@protoc_insertion_point(field_release:milvus.proto.plan.UdfExpr.udf_func_name)
return udf_func_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void UdfExpr::set_allocated_udf_func_name(std::string* udf_func_name) {
if (udf_func_name != nullptr) {
} else {
}
udf_func_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), udf_func_name);
// @@protoc_insertion_point(field_set_allocated:milvus.proto.plan.UdfExpr.udf_func_name)
}
// repeated .milvus.proto.plan.UdfParams udf_params = 2;
inline int UdfExpr::udf_params_size() const {
return udf_params_.size();
}
inline void UdfExpr::clear_udf_params() {
udf_params_.Clear();
}
inline ::milvus::proto::plan::UdfParams* UdfExpr::mutable_udf_params(int index) {
// @@protoc_insertion_point(field_mutable:milvus.proto.plan.UdfExpr.udf_params)
return udf_params_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::plan::UdfParams >*
UdfExpr::mutable_udf_params() {
// @@protoc_insertion_point(field_mutable_list:milvus.proto.plan.UdfExpr.udf_params)
return &udf_params_;
}
inline const ::milvus::proto::plan::UdfParams& UdfExpr::udf_params(int index) const {
// @@protoc_insertion_point(field_get:milvus.proto.plan.UdfExpr.udf_params)
return udf_params_.Get(index);
}
inline ::milvus::proto::plan::UdfParams* UdfExpr::add_udf_params() {
// @@protoc_insertion_point(field_add:milvus.proto.plan.UdfExpr.udf_params)
return udf_params_.Add();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::plan::UdfParams >&
UdfExpr::udf_params() const {
// @@protoc_insertion_point(field_list:milvus.proto.plan.UdfExpr.udf_params)
return udf_params_;
}
// string wasm_body = 3;
inline void UdfExpr::clear_wasm_body() {
wasm_body_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& UdfExpr::wasm_body() const {
// @@protoc_insertion_point(field_get:milvus.proto.plan.UdfExpr.wasm_body)
return wasm_body_.GetNoArena();
}
inline void UdfExpr::set_wasm_body(const std::string& value) {
wasm_body_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
// @@protoc_insertion_point(field_set:milvus.proto.plan.UdfExpr.wasm_body)
}
inline void UdfExpr::set_wasm_body(std::string&& value) {
wasm_body_.SetNoArena(
&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
// @@protoc_insertion_point(field_set_rvalue:milvus.proto.plan.UdfExpr.wasm_body)
}
inline void UdfExpr::set_wasm_body(const char* value) {
GOOGLE_DCHECK(value != nullptr);
wasm_body_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
// @@protoc_insertion_point(field_set_char:milvus.proto.plan.UdfExpr.wasm_body)
}
inline void UdfExpr::set_wasm_body(const char* value, size_t size) {
wasm_body_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
::std::string(reinterpret_cast<const char*>(value), size));
// @@protoc_insertion_point(field_set_pointer:milvus.proto.plan.UdfExpr.wasm_body)
}
inline std::string* UdfExpr::mutable_wasm_body() {
// @@protoc_insertion_point(field_mutable:milvus.proto.plan.UdfExpr.wasm_body)
return wasm_body_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* UdfExpr::release_wasm_body() {
// @@protoc_insertion_point(field_release:milvus.proto.plan.UdfExpr.wasm_body)
return wasm_body_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void UdfExpr::set_allocated_wasm_body(std::string* wasm_body) {
if (wasm_body != nullptr) {
} else {
}
wasm_body_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), wasm_body);
// @@protoc_insertion_point(field_set_allocated:milvus.proto.plan.UdfExpr.wasm_body)
}
// repeated .milvus.proto.schema.DataType arg_types = 4;
inline int UdfExpr::arg_types_size() const {
return arg_types_.size();
}
inline void UdfExpr::clear_arg_types() {
arg_types_.Clear();
}
inline ::milvus::proto::schema::DataType UdfExpr::arg_types(int index) const {
// @@protoc_insertion_point(field_get:milvus.proto.plan.UdfExpr.arg_types)
return static_cast< ::milvus::proto::schema::DataType >(arg_types_.Get(index));
}
inline void UdfExpr::set_arg_types(int index, ::milvus::proto::schema::DataType value) {
arg_types_.Set(index, value);
// @@protoc_insertion_point(field_set:milvus.proto.plan.UdfExpr.arg_types)
}
inline void UdfExpr::add_arg_types(::milvus::proto::schema::DataType value) {
arg_types_.Add(value);
// @@protoc_insertion_point(field_add:milvus.proto.plan.UdfExpr.arg_types)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>&
UdfExpr::arg_types() const {
// @@protoc_insertion_point(field_list:milvus.proto.plan.UdfExpr.arg_types)
return arg_types_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField<int>*
UdfExpr::mutable_arg_types() {
// @@protoc_insertion_point(field_mutable_list:milvus.proto.plan.UdfExpr.arg_types)
return &arg_types_;
}
// -------------------------------------------------------------------
// Expr
// .milvus.proto.plan.TermExpr term_expr = 1;
@ -5113,6 +5731,47 @@ inline ::milvus::proto::plan::ColumnExpr* Expr::mutable_column_expr() {
return expr_.column_expr_;
}
// .milvus.proto.plan.UdfExpr udf_expr = 11;
inline bool Expr::has_udf_expr() const {
return expr_case() == kUdfExpr;
}
inline void Expr::set_has_udf_expr() {
_oneof_case_[0] = kUdfExpr;
}
inline void Expr::clear_udf_expr() {
if (has_udf_expr()) {
delete expr_.udf_expr_;
clear_has_expr();
}
}
inline ::milvus::proto::plan::UdfExpr* Expr::release_udf_expr() {
// @@protoc_insertion_point(field_release:milvus.proto.plan.Expr.udf_expr)
if (has_udf_expr()) {
clear_has_expr();
::milvus::proto::plan::UdfExpr* temp = expr_.udf_expr_;
expr_.udf_expr_ = nullptr;
return temp;
} else {
return nullptr;
}
}
inline const ::milvus::proto::plan::UdfExpr& Expr::udf_expr() const {
// @@protoc_insertion_point(field_get:milvus.proto.plan.Expr.udf_expr)
return has_udf_expr()
? *expr_.udf_expr_
: *reinterpret_cast< ::milvus::proto::plan::UdfExpr*>(&::milvus::proto::plan::_UdfExpr_default_instance_);
}
inline ::milvus::proto::plan::UdfExpr* Expr::mutable_udf_expr() {
if (!has_udf_expr()) {
clear_expr();
set_has_udf_expr();
expr_.udf_expr_ = CreateMaybeMessage< ::milvus::proto::plan::UdfExpr >(
GetArenaNoVirtual());
}
// @@protoc_insertion_point(field_mutable:milvus.proto.plan.Expr.udf_expr)
return expr_.udf_expr_;
}
inline bool Expr::has_expr() const {
return expr_case() != EXPR_NOT_SET;
}
@ -5467,6 +6126,10 @@ inline PlanNode::NodeCase PlanNode::node_case() const {
// -------------------------------------------------------------------
// -------------------------------------------------------------------
// -------------------------------------------------------------------
// @@protoc_insertion_point(namespace_scope)

View File

@ -31,4 +31,5 @@ set(MILVUS_QUERY_SRCS
PlanProto.cpp
)
add_library(milvus_query ${MILVUS_QUERY_SRCS})
target_link_libraries(milvus_query milvus_index)
target_link_libraries(milvus_query milvus_index milvus_wasm)

View File

@ -23,6 +23,7 @@
#include <string>
#include <utility>
#include <vector>
#include <boost/variant.hpp>
#include "common/Schema.h"
#include "pb/plan.pb.h"
@ -200,4 +201,37 @@ struct CompareExpr : Expr {
accept(ExprVisitor&) override;
};
struct UdfExpr : Expr {
// Term: d in [1, 2],
// parameter contains fieldID, data_type.
// Udf : UDF "funcName" [Int8Field, 2, Int16Field, 4],
// parameter contains func_name, udf_args, wasm_body
// udf_args don't need to check field_id and data_type
using param = boost::variant<bool, int8_t, int16_t, int32_t, int64_t, float, double, FieldId>;
// function name
const std::string func_name_;
// function parameter
const std::vector<param> values_;
const std::vector<bool> is_field_;
// function body
const std::string wasm_body_;
// function argument types
const std::vector<DataType> arg_types_;
UdfExpr(const std::string func_name,
const std::vector<param>& values,
const std::vector<bool>& is_field,
const std::string wasm_body,
const std::vector<DataType>& arg_types)
: func_name_(func_name),
values_(values),
is_field_(is_field),
wasm_body_(wasm_body),
arg_types_(arg_types) {
}
public:
void
accept(ExprVisitor&) override;
};
} // namespace milvus::query

View File

@ -75,5 +75,4 @@ struct BinaryRangeExprImpl : BinaryRangeExpr {
upper_value_(upper_value) {
}
};
} // namespace milvus::query

View File

@ -12,6 +12,7 @@
#include <google/protobuf/text_format.h>
#include <string>
#include <boost/variant.hpp>
#include "ExprImpl.h"
#include "PlanProto.h"
@ -411,6 +412,59 @@ ProtoParser::ParseBinaryArithOpEvalRangeExpr(const proto::plan::BinaryArithOpEva
return result;
}
ExprPtr
ProtoParser::ParseUdfExpr(const proto::plan::UdfExpr &expr_pb) {
using param = boost::variant<bool, int8_t, int16_t, int32_t, int64_t, float, double, FieldId>;
auto func_name = expr_pb.udf_func_name();
auto udf_params = expr_pb.udf_params();
auto size = udf_params.size();
std::vector<param> values;
auto wasm_body = expr_pb.wasm_body();
auto expr_args = expr_pb.arg_types();
std::vector<DataType> arg_types;
std::vector<bool> is_field;
for (int i = 0; i < size; ++i) {
arg_types.emplace_back(static_cast<DataType>(expr_args[i]));
}
// TODO(wang ziyu): Add assert check about data_type transformer between values and arg_types
for (int i = 0; i < size; ++i) {
if (udf_params[i].has_column_info()) {
auto& column_info = udf_params[i].column_info();
auto field_id = FieldId(column_info.field_id());
auto data_type = schema[field_id].get_data_type();
Assert(data_type == static_cast<DataType>(column_info.data_type()));
AssertInfo(arg_types[i] == data_type,
"[ExecExprVisitor]Column data type not equal to argument type");
values.emplace_back(field_id);
is_field.emplace_back(true);
} else if (udf_params[i].has_value()) {
auto& value_proto = udf_params[i].value();
is_field.emplace_back(false);
switch (value_proto.val_case()) {
case proto::plan::GenericValue::kBoolVal:
values.emplace_back(value_proto.bool_val());
break;
case proto::plan::GenericValue::kInt64Val:
values.emplace_back(value_proto.int64_val());
break;
case proto::plan::GenericValue::kFloatVal:
values.emplace_back(value_proto.float_val());
break;
default: {
PanicInfo("unsupported data type");
}
}
} else {
PanicInfo("unsupported data type");
}
}
return std::make_unique<UdfExpr>(func_name, values, is_field, wasm_body, arg_types);
}
ExprPtr
ProtoParser::ParseExpr(const proto::plan::Expr& expr_pb) {
using ppe = proto::plan::Expr;
@ -436,6 +490,9 @@ ProtoParser::ParseExpr(const proto::plan::Expr& expr_pb) {
case ppe::kBinaryArithOpEvalRangeExpr: {
return ParseBinaryArithOpEvalRangeExpr(expr_pb.binary_arith_op_eval_range_expr());
}
case ppe::kUdfExpr: {
return ParseUdfExpr(expr_pb.udf_expr());
}
default:
PanicInfo("unsupported expr proto node");
}

View File

@ -50,6 +50,9 @@ class ProtoParser {
ExprPtr
ParseBinaryExpr(const proto::plan::BinaryExpr& expr_pb);
ExprPtr
ParseUdfExpr(const proto::plan::UdfExpr& expr_pb);
ExprPtr
ParseExpr(const proto::plan::Expr& expr_pb);

View File

@ -44,6 +44,9 @@ class ExecExprVisitor : public ExprVisitor {
void
visit(CompareExpr& expr) override;
void
visit(UdfExpr& expr) override;
public:
ExecExprVisitor(const segcore::SegmentInternalInterface& segment, int64_t row_count, Timestamp timestamp)
: segment_(segment), row_count_(row_count), timestamp_(timestamp) {
@ -88,6 +91,9 @@ class ExecExprVisitor : public ExprVisitor {
auto
ExecCompareExprDispatcher(CompareExpr& expr, CmpFunc cmp_func) -> BitsetType;
auto
ExecUdfVisitorDispatcher(UdfExpr& expr_raw) -> BitsetType;
private:
const segcore::SegmentInternalInterface& segment_;
Timestamp timestamp_;

View File

@ -49,4 +49,9 @@ CompareExpr::accept(ExprVisitor& visitor) {
visitor.visit(*this);
}
void
UdfExpr::accept(ExprVisitor& visitor) {
visitor.visit(*this);
}
} // namespace milvus::query

View File

@ -39,5 +39,8 @@ class ExprVisitor {
virtual void
visit(CompareExpr&) = 0;
virtual void
visit(UdfExpr&) = 0;
};
} // namespace milvus::query

View File

@ -39,6 +39,9 @@ class ExtractInfoExprVisitor : public ExprVisitor {
void
visit(CompareExpr& expr) override;
void
visit(UdfExpr& expr) override;
public:
explicit ExtractInfoExprVisitor(ExtractedPlanInfo& plan_info) : plan_info_(plan_info) {
}

View File

@ -40,6 +40,9 @@ class ShowExprVisitor : public ExprVisitor {
void
visit(CompareExpr& expr) override;
void
visit(UdfExpr& expr) override;
public:
Json

View File

@ -44,6 +44,9 @@ class VerifyExprVisitor : public ExprVisitor {
void
visit(CompareExpr& expr) override;
void
visit(UdfExpr& expr) override;
public:
};
} // namespace milvus::query

View File

@ -20,6 +20,7 @@
#include "segcore/SegmentGrowingImpl.h"
#include "query/Utils.h"
#include "query/Relational.h"
#include "wasm/WasmFunctionManager.h"
namespace milvus::query {
// THIS CONTAINS EXTRA BODY FOR VISITOR
@ -66,6 +67,14 @@ class ExecExprVisitor : ExprVisitor {
auto
ExecCompareExprDispatcher(CompareExpr& expr, CmpFunc cmp_func) -> BitsetType;
template <typename T, typename IndexFunc, typename ElementFunc>
auto
ExecUdfVisitorImpl(FieldId field_id, IndexFunc index_func, ElementFunc element_func) -> BitsetType;
template <typename T>
auto
ExecUdfVisitorDispatcher(UdfExpr& expr_raw) -> BitsetType;
private:
const segcore::SegmentInternalInterface& segment_;
int64_t row_count_;
@ -884,4 +893,169 @@ ExecExprVisitor::visit(TermExpr& expr) {
AssertInfo(res.size() == row_count_, "[ExecExprVisitor]Size of results not equal row count");
bitset_opt_ = std::move(res);
}
#pragma clang diagnostic push
#pragma ide diagnostic ignored "Simplify"
auto
ExecExprVisitor::ExecUdfVisitorDispatcher(UdfExpr& expr) -> BitsetType {
using param = boost::variant<bool, int8_t, int16_t, int32_t, int64_t, float, double, FieldId>;
using number = boost::variant<bool, int8_t, int16_t, int32_t, int64_t, float, double, std::string>;
// function name
const std::string func_name = expr.func_name_;
// function body
const std::string wasm_body = expr.wasm_body_;
WasmFunctionManager& wasmFunctionManager = WasmFunctionManager::getInstance();
wasmFunctionManager.RegisterFunction(func_name, func_name, wasm_body);
// function parameter
const std::vector<param> values = expr.values_;
const std::vector<DataType> value_types = expr.arg_types_;
const std::vector<bool> is_field = expr.is_field_;
auto params_size = values.size();
std::vector<wasmtime::Val> params;
params.reserve(params_size);
std::deque<BitsetType> bitsets;
auto size_per_chunk = segment_.size_per_chunk();
auto num_chunk = upper_div(row_count_, size_per_chunk);
for (int i = 0; i < params_size; ++i) {
if (is_field[i]) {
auto field_id = boost::get<FieldId>(values[i]);
auto data_barrier = segment_.num_chunk_data(field_id);
AssertInfo(data_barrier == num_chunk, "data_barrier not equal to num_chunk");
}
}
for (int64_t chunk_id = 0; chunk_id < num_chunk; ++chunk_id) {
auto size = chunk_id == num_chunk - 1 ? row_count_ - chunk_id * size_per_chunk : size_per_chunk;
auto getChunkData = [&, chunk_id](DataType type, FieldId field_id) -> std::function<const number(int)> {
switch (type) {
case DataType::BOOL: {
auto chunk_data = segment_.chunk_data<bool>(field_id, chunk_id).data();
return [chunk_data](int i) -> const number { return chunk_data[i]; };
}
case DataType::INT8: {
auto chunk_data = segment_.chunk_data<int8_t>(field_id, chunk_id).data();
return [chunk_data](int i) -> const number { return chunk_data[i]; };
}
case DataType::INT16: {
auto chunk_data = segment_.chunk_data<int16_t>(field_id, chunk_id).data();
return [chunk_data](int i) -> const number { return chunk_data[i]; };
}
case DataType::INT32: {
auto chunk_data = segment_.chunk_data<int32_t>(field_id, chunk_id).data();
return [chunk_data](int i) -> const number { return chunk_data[i]; };
}
case DataType::INT64: {
auto chunk_data = segment_.chunk_data<int64_t>(field_id, chunk_id).data();
return [chunk_data](int i) -> const number { return chunk_data[i]; };
}
case DataType::FLOAT: {
auto chunk_data = segment_.chunk_data<float>(field_id, chunk_id).data();
return [chunk_data](int i) -> const number { return chunk_data[i]; };
}
case DataType::DOUBLE: {
auto chunk_data = segment_.chunk_data<double>(field_id, chunk_id).data();
return [chunk_data](int i) -> const number { return chunk_data[i]; };
}
default:
PanicInfo("unsupported datatype");
}
};
BitsetType bitset(size);
for (int i = 0; i < size; ++i) {
for (int param_index = 0; param_index < params_size; ++param_index) {
if (is_field[param_index]) {
auto field_id = boost::get<FieldId>(values[param_index]);
auto data_barrier = segment_.num_chunk_data(field_id);
auto data_type = value_types[param_index];
auto chunkData = getChunkData(data_type, field_id);
switch (data_type) {
case DataType::BOOL:
params.emplace_back(boost::get<bool>(chunkData(i)));
break;
case DataType::INT8:
params.emplace_back(boost::get<int8_t>(chunkData(i)));
break;
case DataType::INT16:
params.emplace_back(boost::get<int16_t>(chunkData(i)));
break;
case DataType::INT32:
params.emplace_back(boost::get<int32_t>(chunkData(i)));
break;
case DataType::INT64:
params.emplace_back(boost::get<int64_t>(chunkData(i)));
break;
case DataType::FLOAT:
params.emplace_back(boost::get<float>(chunkData(i)));
break;
case DataType::DOUBLE:
params.emplace_back(boost::get<double>(chunkData(i)));
break;
default: {
PanicInfo("unsupported data type");
}
}
} else {
auto data_type = value_types[param_index];
auto value = values[param_index];
switch (data_type) {
case DataType::BOOL:
params.emplace_back(boost::get<bool>(value));
break;
case DataType::INT8:
params.emplace_back(boost::get<int8_t>(value));
break;
case DataType::INT16:
params.emplace_back(boost::get<int16_t>(value));
break;
case DataType::INT32:
params.emplace_back(boost::get<int32_t>(value));
break;
case DataType::INT64:
params.emplace_back(boost::get<int64_t>(value));
break;
case DataType::FLOAT:
params.emplace_back(boost::get<float>(value));
break;
case DataType::DOUBLE:
params.emplace_back(boost::get<double>(value));
break;
default: {
PanicInfo("unsupported data type");
}
}
}
}
bool is_in = wasmFunctionManager.runElemFunc(func_name, params);
bitset[i] = is_in;
params.clear();
}
bitsets.emplace_back(std::move(bitset));
}
auto final_result = Assemble(bitsets);
AssertInfo(final_result.size() == row_count_, "[ExecExprVisitor]Final result size not equal to row count");
return final_result;
}
#pragma clang diagnostic pop
void
ExecExprVisitor::visit(UdfExpr& expr) {
auto& schema = segment_.get_schema();
auto values = expr.values_;
auto is_field = expr.is_field_;
auto arg_types = expr.arg_types_;
auto size = values.size();
for (int i = 0; i < size; ++i) {
if (is_field[i]) {
auto field_id = boost::get<FieldId>(values[i]);
auto &field_meta = schema[field_id];
AssertInfo(arg_types[i] == field_meta.get_data_type(),
"[ExecExprVisitor]field Data type not equal to field mata type");
}
}
BitsetType res;
res = ExecUdfVisitorDispatcher(expr);
AssertInfo(res.size() == row_count_, "[ExecExprVisitor]Size of results not equal row count");
bitset_opt_ = std::move(res);
}
} // namespace milvus::query

View File

@ -64,4 +64,15 @@ ExtractInfoExprVisitor::visit(BinaryArithOpEvalRangeExpr& expr) {
plan_info_.add_involved_field(expr.field_id_);
}
void
ExtractInfoExprVisitor::visit(UdfExpr& expr) {
auto value = expr.values_;
auto size = value.size();
for (int i = 0; i < size; ++i) {
if (expr.is_field_[i]) {
plan_info_.add_involved_field(boost::get<FieldId>(value[i]));
}
}
}
} // namespace milvus::query

View File

@ -297,4 +297,9 @@ ShowExprVisitor::visit(BinaryArithOpEvalRangeExpr& expr) {
}
}
void
ShowExprVisitor::visit(UdfExpr& expr) {
// TODO
}
} // namespace milvus::query

View File

@ -47,4 +47,9 @@ VerifyExprVisitor::visit(CompareExpr& expr) {
// TODO
}
void
VerifyExprVisitor::visit(UdfExpr& expr) {
// TODO
}
} // namespace milvus::query

View File

@ -0,0 +1,25 @@
# Copyright (C) 2019-2020 Zilliz. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
# or implied. See the License for the specific language governing permissions and limitations under the License
option( EMBEDDED_MILVUS "Enable embedded Milvus" OFF )
if ( EMBEDDED_MILVUS )
add_compile_definitions( EMBEDDED_MILVUS )
endif()
#WasmFunctionManager
set(MILVUS_WASM_SRCS
WasmFunctionManager.cpp
)
add_library(milvus_wasm ${MILVUS_WASM_SRCS})
target_link_libraries(milvus_wasm PUBLIC wasmtime)

View File

@ -0,0 +1,63 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License
//
// Created by wzy on 22-8-6.
//
#include <fstream>
#include <iostream>
#include <sstream>
#include "WasmFunctionManager.h"
namespace milvus {
bool WasmFunctionManager::RegisterFunction(std::string functionName,
std::string functionHandler,
const std::string &base64OrOtherString) {
auto funcBody = funcMap.find(functionName);
if (funcBody != funcMap.end()) {
return false;
}
auto watString = myBase64Decode(base64OrOtherString);
auto wasmRuntime = createInstanceAndFunction(watString, functionHandler);
modules.emplace(functionName, wasmRuntime);
funcMap.emplace(functionName, base64OrOtherString);
return true;
}
WasmtimeRunInstance WasmFunctionManager::createInstanceAndFunction(const std::string &watString,
const std::string &functionHandler) {
auto module = wasmtime::Module::compile(*engine, watString).unwrap();
auto instance = wasmtime::Instance::create(store, module, {}).unwrap();
auto function_obj = instance.get(store, functionHandler);
wasmtime::Func *func = std::get_if<wasmtime::Func>(&*function_obj);
return WasmtimeRunInstance(*func, instance);
}
bool WasmFunctionManager::runElemFunc(const std::string functionName, std::vector<wasmtime::Val> args) {
auto module = modules.at(functionName);
auto results = module.func.call(store, args).unwrap();
return results[0].i32();
}
bool WasmFunctionManager::DeleteFunction(std::string functionName) {
auto funcBody = funcMap.find(functionName);
if (funcBody == funcMap.end()) {
return false;
}
modules.erase(functionName);
return true;
}
} // namespace milvus

View File

@ -0,0 +1,160 @@
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License
//
// Created by wzy on 22-8-6.
//
#ifndef MILVUS_WASMFUNCTION_H
#define MILVUS_WASMFUNCTION_H
#include <wasmtime/wasmtime.hh>
#include <unordered_map>
#include <cassert>
#include <boost/variant.hpp>
#include <limits>
#include <string>
#include <vector>
namespace milvus {
enum class WasmFunctionParamType {
INT32 = 1,
INT64 = 2,
FLOAT = 3,
STRING = 4,
};
struct WasmtimeRunInstance {
wasmtime::Func func;
wasmtime::Instance instance;
WasmtimeRunInstance(const wasmtime::Func &func, const wasmtime::Instance &instance)
: func(func), instance(instance) {}
};
class WasmFunctionManager {
private:
// wasmtime
wasmtime::Engine *engine;
wasmtime::Store *store;
std::unordered_map<std::string, std::string> funcMap;
std::unordered_map<std::string, WasmtimeRunInstance> modules;
WasmFunctionManager() {
engine = new wasmtime::Engine;
store = new wasmtime::Store(*engine);
}
~WasmFunctionManager() {
delete (store);
delete (engine);
}
WasmFunctionManager(const WasmFunctionManager&);
WasmFunctionManager& operator=(const WasmFunctionManager&);
// base64 tool
constexpr static const char b64_table[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
constexpr static const char reverse_table[128] = {
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64, 64, 64, 64,
64, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64,
64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64
};
public:
static WasmFunctionManager& getInstance() {
static WasmFunctionManager instance;
return instance;
}
WasmtimeRunInstance createInstanceAndFunction(const std::string &watString,
const std::string &functionHandler);
bool RegisterFunction(std::string functionName,
std::string functionHandler,
const std::string &base64OrOtherString);
bool runElemFunc(const std::string functionName, std::vector<wasmtime::Val> args);
bool DeleteFunction(std::string functionName);
// base64 tool
static std::string myBase64Encode(const ::std::string &bindata) {
using ::std::string;
using ::std::numeric_limits;
if (bindata.size() > (numeric_limits<string::size_type>::max() / 4u) * 3u) {
throw ::std::length_error("Converting too large a string to base64.");
}
const ::std::size_t binlen = bindata.size();
// Use = signs so the end is properly padded.
string retval((((binlen + 2) / 3) * 4), '=');
::std::size_t outpos = 0;
int bits_collected = 0;
unsigned int accumulator = 0;
const string::const_iterator binend = bindata.end();
for (string::const_iterator i = bindata.begin(); i != binend; ++i) {
accumulator = (accumulator << 8) | (*i & 0xffu);
bits_collected += 8;
while (bits_collected >= 6) {
bits_collected -= 6;
retval[outpos++] = b64_table[(accumulator >> bits_collected) & 0x3fu];
}
}
if (bits_collected > 0) { // Any trailing bits that are missing.
assert(bits_collected < 6);
accumulator <<= 6 - bits_collected;
retval[outpos++] = b64_table[accumulator & 0x3fu];
}
assert(outpos >= (retval.size() - 2));
assert(outpos <= retval.size());
return retval;
}
static std::string myBase64Decode(const ::std::string &ascdata) {
using ::std::string;
string retval;
const string::const_iterator last = ascdata.end();
int bits_collected = 0;
unsigned int accumulator = 0;
for (string::const_iterator i = ascdata.begin(); i != last; ++i) {
const int c = *i;
if (::std::isspace(c) || c == '=') {
// Skip whitespace and padding. Be liberal in what you accept.
continue;
}
if ((c > 127) || (c < 0) || (reverse_table[c] > 63)) {
throw ::std::invalid_argument("This contains characters not legal in a base64 encoded string.");
}
accumulator = (accumulator << 6) | reverse_table[c];
bits_collected += 6;
if (bits_collected >= 8) {
bits_collected -= 8;
retval += static_cast<char>((accumulator >> bits_collected) & 0xffu);
}
}
return retval;
}
};
} // namespace milvus
#endif //MILVUS_WASMFUNCTION_H

View File

@ -84,3 +84,7 @@ endif()
#if ( LINUX )
# add_subdirectory( rapidxml )
#endif()
# ******************************* Thirdparty wasmtime ********************************
add_subdirectory( wasmtime )

View File

@ -0,0 +1,167 @@
# Licensed to the LF AI & Data foundation under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set(WASMTIME_VERSION "v1.0.0")
set(WASMTIME_GIT_URL "git@github.com:bytecodealliance/wasmtime.git")
set(WASMTIME_GIT_COMMIT_HASH "9db8498faecf32dfc5c3fa923ac09250656d8f04")
macro(build_wasmtime)
message(STATUS "Building wasmtime-${WASMTIME_VERSION} from source")
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
set (WASMTIME_DIR "${CMAKE_CURRENT_BINARY_DIR}/src")
message (${WASMTIME_DIR})
message (wasmtime-crate CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR})
if(CMAKE_BUILD_TYPE STREQUAL "Release")
set(WASMTIME_BUILD_TYPE_FLAG "--release")
set(WASMTIME_BUILD_TYPE "release")
else()
set(WASMTIME_BUILD_TYPE "debug")
endif()
if(BUILD_SHARED_LIBS)
if(WIN32)
set(WASMTIME_INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different
${WASMTIME_DIR}/target/${WASMTIME_BUILD_TYPE}/wasmtime.dll
${CMAKE_BINARY_DIR})
elseif(APPLE)
set(WASMTIME_INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different
${WASMTIME_DIR}/target/${WASMTIME_BUILD_TYPE}/libwasmtime.dylib
${CMAKE_BINARY_DIR})
else()
set(WASMTIME_INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different
${WASMTIME_DIR}/target/${WASMTIME_BUILD_TYPE}/libwasmtime.so
${CMAKE_BINARY_DIR})
endif()
else()
set(WASMTIME_INSTALL_COMMAND "")
endif()
if(BUILD_SHARED_LIBS)
if(WIN32)
set(WASMTIME_BUILD_PRODUCT
${WASMTIME_DIR}/target/${WASMTIME_BUILD_TYPE}/wasmtime.dll.lib)
elseif(APPLE)
set(WASMTIME_BUILD_PRODUCT
${WASMTIME_DIR}/target/${WASMTIME_BUILD_TYPE}/libwasmtime.dylib)
else()
set(WASMTIME_BUILD_PRODUCT
${WASMTIME_DIR}/target/${WASMTIME_BUILD_TYPE}/libwasmtime.so)
endif()
else()
if(WIN32)
set(WASMTIME_BUILD_PRODUCT
${WASMTIME_DIR}/target/${WASMTIME_BUILD_TYPE}/wasmtime.lib)
elseif(ANDROID)
set(WASMTIME_BUILD_PRODUCT
${WASMTIME_DIR}/target/${ANDROID_TARGET}/${WASMTIME_BUILD_TYPE}/libwasmtime.a)
else()
set(WASMTIME_BUILD_PRODUCT
${WASMTIME_DIR}/target/${WASMTIME_BUILD_TYPE}/libwasmtime.a)
endif()
endif()
set (WASMTIME_BUILD_COMMAND cargo build ${WASMTIME_BUILD_TYPE_FLAG})
ExternalProject_Add(
wasmtime-crate
GIT_REPOSITORY ${WASMTIME_GIT_URL}
GIT_TAG ${WASMTIME_GIT_COMMIT_HASH}
DOWNLOAD_DIR ${THIRDPARTY_DOWNLOAD_PATH}
SOURCE_DIR ${WASMTIME_DIR}
SOURCE_SUBDIR "crates/c-api"
CONFIGURE_COMMAND ""
BUILD_IN_SOURCE 1
BUILD_COMMAND ${WASMTIME_BUILD_COMMAND}
BUILD_BYPRODUCTS ${WASMTIME_BUILD_PRODUCT}
INSTALL_COMMAND "${WASMTIME_INSTALL_COMMAND}"
${EP_LOG_OPTIONS}
)
ExternalProject_Get_Property(
wasmtime-crate
DOWNLOAD_DIR
CONFIGURE_COMMAND
BUILD_IN_SOURCE
BUILD_COMMAND
BUILD_BYPRODUCTS
INSTALL_COMMAND
GIT_REPOSITORY
GIT_TAG
SOURCE_DIR
SOURCE_SUBDIR
)
MESSAGE("wasmtime-crate DOWNLOAD_DIR ${DOWNLOAD_DIR}")
MESSAGE("wasmtime-crate CONFIGURE_COMMAND ${CONFIGURE_COMMAND}")
MESSAGE("wasmtime-crate BUILD_IN_SOURCE ${BUILD_IN_SOURCE}")
MESSAGE("wasmtime-crate BUILD_COMMAND ${BUILD_COMMAND}")
MESSAGE("wasmtime-crate BUILD_BYPRODUCTS ${BUILD_BYPRODUCTS}")
MESSAGE("wasmtime-crate INSTALL_COMMAND ${INSTALL_COMMAND}")
MESSAGE("wasmtime-crate GIT_REPOSITORY ${GIT_REPOSITORY}")
MESSAGE("wasmtime-crate GIT_TAG ${GIT_TAG}")
MESSAGE("wasmtime-crate SOURCE_DIR ${SOURCE_DIR}")
MESSAGE("wasmtime-crate SOURCE_SUBDIR ${SOURCE_SUBDIR}")
add_library(wasmtime INTERFACE)
add_dependencies(wasmtime wasmtime-crate)
if (BUILD_SHARED_LIBS)
if (NOT WIN32)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath='$ORIGIN'")
endif ()
target_link_libraries(wasmtime INTERFACE ${WASMTIME_BUILD_PRODUCT})
else ()
if (WIN32)
target_compile_options(wasmtime INTERFACE -DWASM_API_EXTERN= -DWASI_API_EXTERN=)
target_link_libraries(wasmtime INTERFACE ${WASMTIME_BUILD_PRODUCT}
ws2_32 advapi32 userenv ntdll shell32 ole32 bcrypt)
elseif (APPLE OR ANDROID)
target_link_libraries(wasmtime INTERFACE ${WASMTIME_BUILD_PRODUCT})
else ()
target_link_libraries(wasmtime INTERFACE ${WASMTIME_BUILD_PRODUCT}
pthread dl m)
endif ()
endif ()
target_include_directories(wasmtime INTERFACE
${WASMTIME_DIR}/crates/c-api/include ${WASMTIME_DIR}/crates/c-api/wasm-c-api/include
)
get_target_property(WASMTIME_INTERFACE_INCLUDE_DIRECTORIES wasmtime INTERFACE_INCLUDE_DIRECTORIES)
endmacro()
set(WASMTIME_SOURCE "AUTO")
if (WASMTIME_SOURCE STREQUAL "AUTO")
message(STATUS "Using wasmtime form system")
find_package(wasmtime)
message(STATUS "wasmtime libraries: ${WASMTIME_LIBRARIES}")
message(STATUS "wasmtime found: ${WASMTIME_FOUND}")
if (WASMTIME_FOUND)
add_library(wasmtime)
else ()
build_wasmtime()
endif ()
elseif (WASMTIME_SOURCE STREQUAL "BUNDLED")
message(STATUS "build wasmtime")
build_wasmtime()
elseif (WASMTIME_SOURCE STREQUAL "SYSTEM")
find_package(wasmtime)
add_library(wasmtime)
endif ()

File diff suppressed because it is too large Load Diff

View File

@ -96,6 +96,7 @@ target_link_libraries(all_tests
milvus_segcore
milvus_indexbuilder
pthread
wasmtime
)
install(TARGETS all_tests DESTINATION unittest)

View File

@ -1438,3 +1438,173 @@ TEST(Expr, TestBinaryArithOpEvalRangeWithScalarSortIndex) {
}
}
}
TEST(Expr, TestUdfExpr) {
using namespace milvus::query;
using namespace milvus::segcore;
// Add test cases for UdfExpr EQ of various data types
std::tuple<std::string, std::function<bool(int64_t, int64_t)>, std::string> testcase1 =
{R"(
udf_func_name: "less_than"
udf_params: <
column_info: <
field_id: %2%
data_type: Int64
>
>
udf_params: <
value: <
int64_val: 2000
>
>
wasm_body: "KG1vZHVsZQogICh0eXBlICg7MDspIChmdW5jIChwYXJhbSBpNjQgaTY0KSAocmVzdWx0IGkzMikpKQogIChmdW5jICRsZXNzX3RoYW4gKHR5cGUgMCkgKHBhcmFtIGk2NCBpNjQpIChyZXN1bHQgaTMyKQogICAgKGxvY2FsIGkzMiBpMzIgaTMyIGk2NCBpNjQgaTMyIGkzMiBpMzIpCiAgICBnbG9iYWwuZ2V0ICRfX3N0YWNrX3BvaW50ZXIKICAgIGxvY2FsLnNldCAyCiAgICBpMzIuY29uc3QgMTYKICAgIGxvY2FsLnNldCAzCiAgICBsb2NhbC5nZXQgMgogICAgbG9jYWwuZ2V0IDMKICAgIGkzMi5zdWIKICAgIGxvY2FsLnNldCA0CiAgICBsb2NhbC5nZXQgNAogICAgbG9jYWwuZ2V0IDAKICAgIGk2NC5zdG9yZQogICAgbG9jYWwuZ2V0IDQKICAgIGxvY2FsLmdldCAxCiAgICBpNjQuc3RvcmUgb2Zmc2V0PTgKICAgIGxvY2FsLmdldCAwCiAgICBsb2NhbC5zZXQgNQogICAgbG9jYWwuZ2V0IDEKICAgIGxvY2FsLnNldCA2CiAgICBsb2NhbC5nZXQgNQogICAgbG9jYWwuZ2V0IDYKICAgIGk2NC5sdF9zCiAgICBsb2NhbC5zZXQgNwogICAgaTMyLmNvbnN0IDEKICAgIGxvY2FsLnNldCA4CiAgICBsb2NhbC5nZXQgNwogICAgbG9jYWwuZ2V0IDgKICAgIGkzMi5hbmQKICAgIGxvY2FsLnNldCA5CiAgICBsb2NhbC5nZXQgOQogICAgcmV0dXJuKQogICh0YWJsZSAoOzA7KSAxIDEgZnVuY3JlZikKICAobWVtb3J5ICg7MDspIDE2KQogIChnbG9iYWwgJF9fc3RhY2tfcG9pbnRlciAobXV0IGkzMikgKGkzMi5jb25zdCAxMDQ4NTc2KSkKICAoZ2xvYmFsICg7MTspIGkzMiAoaTMyLmNvbnN0IDEwNDg1NzYpKQogIChnbG9iYWwgKDsyOykgaTMyIChpMzIuY29uc3QgMTA0ODU3NikpCiAgKGV4cG9ydCAibWVtb3J5IiAobWVtb3J5IDApKQogIChleHBvcnQgImxlc3NfdGhhbiIgKGZ1bmMgJGxlc3NfdGhhbikpCiAgKGV4cG9ydCAiX19kYXRhX2VuZCIgKGdsb2JhbCAxKSkKICAoZXhwb3J0ICJfX2hlYXBfYmFzZSIgKGdsb2JhbCAyKSkpCg=="
arg_types: Int64
arg_types: Int64
)", [](int64_t a, int64_t b) { return a < b; }, "less_than"};
std::tuple<std::string, std::function<bool(int8_t, int16_t, int32_t, int64_t, int64_t)>, std::string> testcase2 =
{R"(
udf_func_name: "multiple_columns"
udf_params: <
column_info: <
field_id: %2%
data_type: Int8
>
>
udf_params: <
column_info: <
field_id: %3%
data_type: Int16
>
>
udf_params: <
column_info: <
field_id: %4%
data_type: Int32
>
>
udf_params: <
column_info: <
field_id: %5%
data_type: Int64
>
>
udf_params: <
value: <
int64_val: 2000
>
>
wasm_body: "KG1vZHVsZQogICh0eXBlICg7MDspIChmdW5jIChwYXJhbSBpMzIgaTMyIGkzMiBpNjQgaTY0KSAocmVzdWx0IGkzMikpKQogIChmdW5jICRtdWx0aXBsZV9jb2x1bW5zICh0eXBlIDApIChwYXJhbSBpMzIgaTMyIGkzMiBpNjQgaTY0KSAocmVzdWx0IGkzMikKICAgIGxvY2FsLmdldCAxCiAgICBpNjQuZXh0ZW5kX2kzMl91CiAgICBpNjQuY29uc3QgNDgKICAgIGk2NC5zaGwKICAgIGk2NC5jb25zdCA0OAogICAgaTY0LnNocl9zCiAgICBsb2NhbC5nZXQgMAogICAgaTY0LmV4dGVuZF9pMzJfdQogICAgaTY0LmNvbnN0IDU2CiAgICBpNjQuc2hsCiAgICBpNjQuY29uc3QgNTYKICAgIGk2NC5zaHJfcwogICAgaTY0LmFkZAogICAgbG9jYWwuZ2V0IDIKICAgIGk2NC5leHRlbmRfaTMyX3MKICAgIGk2NC5hZGQKICAgIGxvY2FsLmdldCAzCiAgICBpNjQuYWRkCiAgICBsb2NhbC5nZXQgNAogICAgaTY0Lmd0X3MpCiAgKHRhYmxlICg7MDspIDEgMSBmdW5jcmVmKQogIChtZW1vcnkgKDswOykgMTYpCiAgKGdsb2JhbCAkX19zdGFja19wb2ludGVyIChtdXQgaTMyKSAoaTMyLmNvbnN0IDEwNDg1NzYpKQogIChnbG9iYWwgKDsxOykgaTMyIChpMzIuY29uc3QgMTA0ODU3NikpCiAgKGdsb2JhbCAoOzI7KSBpMzIgKGkzMi5jb25zdCAxMDQ4NTc2KSkKICAoZXhwb3J0ICJtZW1vcnkiIChtZW1vcnkgMCkpCiAgKGV4cG9ydCAibXVsdGlwbGVfY29sdW1ucyIgKGZ1bmMgJG11bHRpcGxlX2NvbHVtbnMpKQogIChleHBvcnQgIl9fZGF0YV9lbmQiIChnbG9iYWwgMSkpCiAgKGV4cG9ydCAiX19oZWFwX2Jhc2UiIChnbG9iYWwgMikpKQ=="
arg_types: Int8
arg_types: Int16
arg_types: Int32
arg_types: Int64
arg_types: Int64
)", [](int8_t a, int16_t b, int32_t c, int64_t d, int64_t e) { return a + b + c + d > e; }, "multi_columns"};
std::string serialized_expr_plan = R"(
vector_anns: <
field_id: %1%
predicates: <
udf_expr: <
@@@@@
>
>
query_info: <
topk: 10
round_decimal: 3
metric_type: "L2"
search_params: "{\"nprobe\": 10}"
>
placeholder_tag: "$0"
>)";
auto schema = std::make_shared<Schema>();
auto vec_fid = schema->AddDebugField("fakevec", DataType::VECTOR_FLOAT, 16, knowhere::metric::L2);
auto i8_fid = schema->AddDebugField("age8", DataType::INT8);
auto i16_fid = schema->AddDebugField("age16", DataType::INT16);
auto i32_fid = schema->AddDebugField("age32", DataType::INT32);
auto i64_fid = schema->AddDebugField("age64", DataType::INT64);
auto float_fid = schema->AddDebugField("age_float", DataType::FLOAT);
auto double_fid = schema->AddDebugField("age_double", DataType::DOUBLE);
schema->set_primary_field_id(i64_fid);
auto seg = CreateGrowingSegment(schema);
int N = 1000;
std::vector<int8_t> age8_col;
std::vector<int16_t> age16_col;
std::vector<int32_t> age32_col;
std::vector<int64_t> age64_col;
std::vector<float> age_float_col;
std::vector<double> age_double_col;
int num_iters = 100;
for (int iter = 0; iter < num_iters; ++iter) {
auto raw_data = DataGen(schema, N, iter);
auto new_age8_col = raw_data.get_col<int8_t>(i8_fid);
auto new_age16_col = raw_data.get_col<int16_t>(i16_fid);
auto new_age32_col = raw_data.get_col<int32_t>(i32_fid);
auto new_age64_col = raw_data.get_col<int64_t>(i64_fid);
auto new_age_float_col = raw_data.get_col<float>(float_fid);
auto new_age_double_col = raw_data.get_col<double>(double_fid);
age8_col.insert(age8_col.end(), new_age8_col.begin(), new_age8_col.end());
age16_col.insert(age16_col.end(), new_age16_col.begin(), new_age16_col.end());
age32_col.insert(age32_col.end(), new_age32_col.begin(), new_age32_col.end());
age64_col.insert(age64_col.end(), new_age64_col.begin(), new_age64_col.end());
age_float_col.insert(age_float_col.end(), new_age_float_col.begin(), new_age_float_col.end());
age_double_col.insert(age_double_col.end(), new_age_double_col.begin(), new_age_double_col.end());
seg->PreInsert(N);
seg->Insert(iter * N, N, raw_data.row_ids_.data(), raw_data.timestamps_.data(), raw_data.raw_);
}
auto seg_promote = dynamic_cast<SegmentGrowingImpl*>(seg.get());
ExecExprVisitor visitor(*seg_promote, seg_promote->get_row_count(), MAX_TIMESTAMP);
// testcase1
auto clause1 = std::get<0>(testcase1);
auto ref_func1 = std::get<1>(testcase1);
auto udf_name1 = std::get<2>(testcase1);
auto loc = serialized_expr_plan.find("@@@@@");
auto expr_plan = serialized_expr_plan;
expr_plan.replace(loc, 5, clause1);
boost::format expr = boost::format(expr_plan) % vec_fid.get() % i64_fid.get();
auto binary_plan = translate_text_plan_to_binary_plan(expr.str().data());
auto plan = CreateSearchPlanByExpr(*schema, binary_plan.data(), binary_plan.size());
auto final = visitor.call_child(*plan->plan_node_->predicate_.value());
EXPECT_EQ(final.size(), N * num_iters);
for (int i = 0; i < N * num_iters; ++i) {
auto ans = final[i];
auto val1 = age64_col[i];
auto val2 = 2000;
auto ref = ref_func1(val1, val2);
ASSERT_EQ(ans, ref) << clause1 << "@" << udf_name1 << "@" << i << "!!" <<
boost::format("[%1%, %2%]") % val1 % val2;
}
// testcase2
auto clause2= std::get<0>(testcase2);
auto ref_func2 = std::get<1>(testcase2);
auto udf_name2 = std::get<2>(testcase2);
loc = serialized_expr_plan.find("@@@@@");
expr_plan = serialized_expr_plan;
expr_plan.replace(loc, 5, clause2);
boost::format expr2 = boost::format(expr_plan) % vec_fid.get() % i8_fid.get() % i16_fid.get() % i32_fid.get() % i64_fid.get();
binary_plan = translate_text_plan_to_binary_plan(expr2.str().data());
plan = CreateSearchPlanByExpr(*schema, binary_plan.data(), binary_plan.size());
final = visitor.call_child(*plan->plan_node_->predicate_.value());
EXPECT_EQ(final.size(), N * num_iters);
for (int i = 0; i < N * num_iters; ++i) {
auto ans = final[i];
auto val1 = age8_col[i];
auto val2 = age16_col[i];
auto val3 = age32_col[i];
auto val4 = age64_col[i];
auto val5 = 2000;
auto ref = ref_func2(val1, val2, val3, val4, val5);
ASSERT_EQ(ans, ref) << clause2 << "@" << i << "!!" <<
boost::format("[%1%, %2%, %3%, %4%, %5%]") % val1 % val2 % val3 % val4 % val5;
}
}

View File

@ -107,7 +107,7 @@ vector_anns: <
auto proto_text = fmt1.str();
planpb::PlanNode node_proto;
google::protobuf::TextFormat::ParseFromString(proto_text, &node_proto);
// std::cout << node_proto.DebugString();
// std::cout << node_proto.DebugString();
auto plan = ProtoParser(*schema).CreatePlan(node_proto);
ShowPlanNodeVisitor visitor;
@ -148,6 +148,59 @@ vector_anns: <
plan->check_identical(*ref_plan);
}
TEST_P(PlanProtoTest, UdfExpr) {
FieldName vec_field_name = FieldName("FloatVectorField");
FieldId vec_float_field_id = schema->get_field_id(vec_field_name);
auto field_name = std::get<0>(GetParam());
auto field_id = schema->get_field_id(FieldName(field_name));
auto data_type = schema->operator[](field_id).get_data_type();
auto data_type_str = spb::DataType_Name(int(data_type));
string value_tag = "bool_val";
if (datatype_is_floating(data_type)) {
value_tag = "float_val";
} else if (datatype_is_integer(data_type)) {
value_tag = "int64_val";
}
auto proto_text = R"(
vector_anns: <
field_id: 102
predicates: <
udf_expr: <
udf_func_name: "larger_than"
udf_params: <
column_info: <
field_id: 101
data_type: Double
>
>
udf_params: <
value: <
int64_val: 2000
>
>
wasm_body: "not implemented"
arg_types: Int16
arg_types: Double
>
>
query_info: <
topk: 3
metric_type: "L2"
search_params: "{\"nprobe\":10}"
round_decimal: -1
>
placeholder_tag: "$0"
>
output_field_ids: 101
)";
planpb::PlanNode node_proto;
google::protobuf::TextFormat::ParseFromString(proto_text, &node_proto);
// TODO (ziyu wang): Add udf plan proto unittest
}
TEST_P(PlanProtoTest, TermExpr) {
// xxx.query(predicates = "int64field in [1, 2, 3]", topk = 10, ...)
FieldName vec_field_name = FieldName("FloatVectorField");

View File

@ -266,6 +266,18 @@ type mockRootCoordService struct {
cnt int64
}
func (m *mockRootCoordService) CreateFunction(ctx context.Context, req *milvuspb.CreateFunctionRequest) (*commonpb.Status, error) {
panic("implement me")
}
func (m *mockRootCoordService) DropFunction(ctx context.Context, req *milvuspb.DropFunctionRequest) (*commonpb.Status, error) {
panic("implement me")
}
func (m *mockRootCoordService) GetFunctionInfo(ctx context.Context, req *rootcoordpb.GetFunctionInfoRequest) (*rootcoordpb.GetFunctionInfoResponse, error) {
panic("implement me")
}
func (m *mockRootCoordService) CreateAlias(ctx context.Context, req *milvuspb.CreateAliasRequest) (*commonpb.Status, error) {
panic("implement me")
}

View File

@ -709,6 +709,16 @@ func (s *Server) LoadBalance(ctx context.Context, request *milvuspb.LoadBalanceR
return s.proxy.LoadBalance(ctx, request)
}
// CreateFunction notifies Proxy to create function
func (s *Server) CreateFunction(ctx context.Context, request *milvuspb.CreateFunctionRequest) (*commonpb.Status, error) {
return s.proxy.CreateFunction(ctx, request)
}
// DropFunction notifies Proxy to drop function
func (s *Server) DropFunction(ctx context.Context, request *milvuspb.DropFunctionRequest) (*commonpb.Status, error) {
return s.proxy.DropFunction(ctx, request)
}
// CreateAlias notifies Proxy to create alias
func (s *Server) CreateAlias(ctx context.Context, request *milvuspb.CreateAliasRequest) (*commonpb.Status, error) {
return s.proxy.CreateAlias(ctx, request)

View File

@ -432,6 +432,18 @@ func (m *MockQueryCoord) ShowConfigurations(ctx context.Context, req *internalpb
return nil, nil
}
func (m *MockRootCoord) CreateFunction(ctx context.Context, req *milvuspb.CreateFunctionRequest) (*commonpb.Status, error) {
return nil, nil
}
func (m *MockRootCoord) DropFunction(ctx context.Context, request *milvuspb.DropFunctionRequest) (*commonpb.Status, error) {
return nil, nil
}
func (m *MockRootCoord) GetFunctionInfo(ctx context.Context, request *rootcoordpb.GetFunctionInfoRequest) (*rootcoordpb.GetFunctionInfoResponse, error) {
return nil, nil
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
type MockDataCoord struct {
MockBase
@ -868,6 +880,14 @@ func (m *MockProxy) RefreshPolicyInfoCache(ctx context.Context, req *proxypb.Ref
return nil, nil
}
func (m *MockProxy) CreateFunction(ctx context.Context, request *milvuspb.CreateFunctionRequest) (*commonpb.Status, error) {
return nil, nil
}
func (m *MockProxy) DropFunction(ctx context.Context, request *milvuspb.DropFunctionRequest) (*commonpb.Status, error) {
return nil, nil
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
type WaitOption struct {

View File

@ -652,3 +652,42 @@ func (c *Client) ListPolicy(ctx context.Context, req *internalpb.ListPolicyReque
}
return ret.(*internalpb.ListPolicyResponse), err
}
func (c *Client) CreateFunction(ctx context.Context, req *milvuspb.CreateFunctionRequest) (*commonpb.Status, error) {
ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) {
if !funcutil.CheckCtxValid(ctx) {
return nil, ctx.Err()
}
return client.(rootcoordpb.RootCoordClient).CreateFunction(ctx, req)
})
if err != nil || ret == nil {
return nil, err
}
return ret.(*commonpb.Status), err
}
func (c *Client) DropFunction(ctx context.Context, req *milvuspb.DropFunctionRequest) (*commonpb.Status, error) {
ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) {
if !funcutil.CheckCtxValid(ctx) {
return nil, ctx.Err()
}
return client.(rootcoordpb.RootCoordClient).DropFunction(ctx, req)
})
if err != nil || ret == nil {
return nil, err
}
return ret.(*commonpb.Status), err
}
func (c *Client) GetFunctionInfo(ctx context.Context, req *rootcoordpb.GetFunctionInfoRequest) (*rootcoordpb.GetFunctionInfoResponse, error) {
ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) {
if !funcutil.CheckCtxValid(ctx) {
return nil, ctx.Err()
}
return client.(rootcoordpb.RootCoordClient).GetFunctionInfo(ctx, req)
})
if err != nil || ret == nil {
return nil, err
}
return ret.(*rootcoordpb.GetFunctionInfoResponse), err
}

View File

@ -212,6 +212,10 @@ func Test_NewClient(t *testing.T) {
r, err := client.ShowConfigurations(ctx, nil)
retCheck(retNotNil, r, err)
}
{
r, err := client.CreateFunction(ctx, nil)
retCheck(retNotNil, r, err)
}
}
client.grpcClient = &mock.GRPCClientBase{
@ -410,6 +414,7 @@ func Test_NewClient(t *testing.T) {
rTimeout, err := client.ListPolicy(shortCtx, nil)
retCheck(rTimeout, err)
}
// clean up
err = client.Stop()
assert.Nil(t, err)

View File

@ -491,3 +491,15 @@ func (s *Server) SelectGrant(ctx context.Context, request *milvuspb.SelectGrantR
func (s *Server) ListPolicy(ctx context.Context, request *internalpb.ListPolicyRequest) (*internalpb.ListPolicyResponse, error) {
return s.rootCoord.ListPolicy(ctx, request)
}
func (s *Server) CreateFunction(ctx context.Context, request *milvuspb.CreateFunctionRequest) (*commonpb.Status, error) {
return s.rootCoord.CreateFunction(ctx, request)
}
func (s *Server) DropFunction(ctx context.Context, request *milvuspb.DropFunctionRequest) (*commonpb.Status, error) {
return s.rootCoord.DropFunction(ctx, request)
}
func (s *Server) GetFunctionInfo(ctx context.Context, request *rootcoordpb.GetFunctionInfoRequest) (*rootcoordpb.GetFunctionInfoResponse, error) {
return s.rootCoord.GetFunctionInfo(ctx, request)
}

View File

@ -313,6 +313,53 @@ func (_c *RootCoord_CreateCredential_Call) Return(_a0 *commonpb.Status, _a1 erro
return _c
}
// CreateFunction provides a mock function with given fields: ctx, req
func (_m *RootCoord) CreateFunction(ctx context.Context, req *milvuspb.CreateFunctionRequest) (*commonpb.Status, error) {
ret := _m.Called(ctx, req)
var r0 *commonpb.Status
if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.CreateFunctionRequest) *commonpb.Status); ok {
r0 = rf(ctx, req)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*commonpb.Status)
}
}
var r1 error
if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.CreateFunctionRequest) error); ok {
r1 = rf(ctx, req)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// RootCoord_CreateFunction_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateFunction'
type RootCoord_CreateFunction_Call struct {
*mock.Call
}
// CreateFunction is a helper method to define mock.On call
// - ctx context.Context
// - req *milvuspb.CreateFunctionRequest
func (_e *RootCoord_Expecter) CreateFunction(ctx interface{}, req interface{}) *RootCoord_CreateFunction_Call {
return &RootCoord_CreateFunction_Call{Call: _e.mock.On("CreateFunction", ctx, req)}
}
func (_c *RootCoord_CreateFunction_Call) Run(run func(ctx context.Context, req *milvuspb.CreateFunctionRequest)) *RootCoord_CreateFunction_Call {
_c.Call.Run(func(args mock.Arguments) {
run(args[0].(context.Context), args[1].(*milvuspb.CreateFunctionRequest))
})
return _c
}
func (_c *RootCoord_CreateFunction_Call) Return(_a0 *commonpb.Status, _a1 error) *RootCoord_CreateFunction_Call {
_c.Call.Return(_a0, _a1)
return _c
}
// CreatePartition provides a mock function with given fields: ctx, req
func (_m *RootCoord) CreatePartition(ctx context.Context, req *milvuspb.CreatePartitionRequest) (*commonpb.Status, error) {
ret := _m.Called(ctx, req)
@ -595,6 +642,53 @@ func (_c *RootCoord_DropCollection_Call) Return(_a0 *commonpb.Status, _a1 error)
return _c
}
// DropFunction provides a mock function with given fields: ctx, request
func (_m *RootCoord) DropFunction(ctx context.Context, request *milvuspb.DropFunctionRequest) (*commonpb.Status, error) {
ret := _m.Called(ctx, request)
var r0 *commonpb.Status
if rf, ok := ret.Get(0).(func(context.Context, *milvuspb.DropFunctionRequest) *commonpb.Status); ok {
r0 = rf(ctx, request)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*commonpb.Status)
}
}
var r1 error
if rf, ok := ret.Get(1).(func(context.Context, *milvuspb.DropFunctionRequest) error); ok {
r1 = rf(ctx, request)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// RootCoord_DropFunction_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DropFunction'
type RootCoord_DropFunction_Call struct {
*mock.Call
}
// DropFunction is a helper method to define mock.On call
// - ctx context.Context
// - request *milvuspb.DropFunctionRequest
func (_e *RootCoord_Expecter) DropFunction(ctx interface{}, request interface{}) *RootCoord_DropFunction_Call {
return &RootCoord_DropFunction_Call{Call: _e.mock.On("DropFunction", ctx, request)}
}
func (_c *RootCoord_DropFunction_Call) Run(run func(ctx context.Context, request *milvuspb.DropFunctionRequest)) *RootCoord_DropFunction_Call {
_c.Call.Run(func(args mock.Arguments) {
run(args[0].(context.Context), args[1].(*milvuspb.DropFunctionRequest))
})
return _c
}
func (_c *RootCoord_DropFunction_Call) Return(_a0 *commonpb.Status, _a1 error) *RootCoord_DropFunction_Call {
_c.Call.Return(_a0, _a1)
return _c
}
// DropPartition provides a mock function with given fields: ctx, req
func (_m *RootCoord) DropPartition(ctx context.Context, req *milvuspb.DropPartitionRequest) (*commonpb.Status, error) {
ret := _m.Called(ctx, req)
@ -782,6 +876,53 @@ func (_c *RootCoord_GetCredential_Call) Return(_a0 *rootcoordpb.GetCredentialRes
return _c
}
// GetFunctionInfo provides a mock function with given fields: ctx, request
func (_m *RootCoord) GetFunctionInfo(ctx context.Context, request *rootcoordpb.GetFunctionInfoRequest) (*rootcoordpb.GetFunctionInfoResponse, error) {
ret := _m.Called(ctx, request)
var r0 *rootcoordpb.GetFunctionInfoResponse
if rf, ok := ret.Get(0).(func(context.Context, *rootcoordpb.GetFunctionInfoRequest) *rootcoordpb.GetFunctionInfoResponse); ok {
r0 = rf(ctx, request)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*rootcoordpb.GetFunctionInfoResponse)
}
}
var r1 error
if rf, ok := ret.Get(1).(func(context.Context, *rootcoordpb.GetFunctionInfoRequest) error); ok {
r1 = rf(ctx, request)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// RootCoord_GetFunctionInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetFunctionInfo'
type RootCoord_GetFunctionInfo_Call struct {
*mock.Call
}
// GetFunctionInfo is a helper method to define mock.On call
// - ctx context.Context
// - request *rootcoordpb.GetFunctionInfoRequest
func (_e *RootCoord_Expecter) GetFunctionInfo(ctx interface{}, request interface{}) *RootCoord_GetFunctionInfo_Call {
return &RootCoord_GetFunctionInfo_Call{Call: _e.mock.On("GetFunctionInfo", ctx, request)}
}
func (_c *RootCoord_GetFunctionInfo_Call) Run(run func(ctx context.Context, request *rootcoordpb.GetFunctionInfoRequest)) *RootCoord_GetFunctionInfo_Call {
_c.Call.Run(func(args mock.Arguments) {
run(args[0].(context.Context), args[1].(*rootcoordpb.GetFunctionInfoRequest))
})
return _c
}
func (_c *RootCoord_GetFunctionInfo_Call) Return(_a0 *rootcoordpb.GetFunctionInfoResponse, _a1 error) *RootCoord_GetFunctionInfo_Call {
_c.Call.Return(_a0, _a1)
return _c
}
// GetImportState provides a mock function with given fields: ctx, req
func (_m *RootCoord) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) {
ret := _m.Called(ctx, req)

View File

@ -7,6 +7,7 @@ expr:
| StringLiteral # String
| Identifier # Identifier
| '(' expr ')' # Parens
| UDF StringLiteral ('[' expr (',' expr)* ','? ']') # Udf
| expr LIKE StringLiteral # Like
| expr POW expr # Power
| op = (ADD | SUB | BNOT | NOT) expr # Unary
@ -24,7 +25,8 @@ expr:
| expr BXOR expr # BitXor
| expr BOR expr # BitOr
| expr AND expr # LogicalAnd
| expr OR expr # LogicalOr;
| expr OR expr # LogicalOr
;
// typeName: ty = (BOOL | INT8 | INT16 | INT32 | INT64 | FLOAT | DOUBLE);
@ -45,6 +47,8 @@ NE: '!=';
LIKE: 'like' | 'LIKE';
UDF: 'udf' | 'UDF';
ADD: '+';
SUB: '-';
MUL: '*';

View File

@ -12,6 +12,7 @@ null
'=='
'!='
null
null
'+'
'-'
'*'
@ -52,6 +53,7 @@ GE
EQ
NE
LIKE
UDF
ADD
SUB
MUL
@ -83,4 +85,4 @@ expr
atn:
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 39, 89, 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, 5, 2, 17, 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, 71, 10, 2, 12, 2, 14, 2, 74, 11, 2, 3, 2, 5, 2, 77, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 84, 10, 2, 12, 2, 14, 2, 87, 11, 2, 3, 2, 2, 3, 2, 3, 2, 2, 11, 4, 2, 15, 16, 28, 29, 3, 2, 17, 19, 3, 2, 15, 16, 3, 2, 21, 22, 3, 2, 8, 9, 3, 2, 10, 11, 3, 2, 8, 11, 3, 2, 12, 13, 3, 2, 30, 31, 2, 111, 2, 16, 3, 2, 2, 2, 4, 5, 8, 2, 1, 2, 5, 17, 7, 34, 2, 2, 6, 17, 7, 35, 2, 2, 7, 17, 7, 33, 2, 2, 8, 17, 7, 37, 2, 2, 9, 17, 7, 36, 2, 2, 10, 11, 7, 3, 2, 2, 11, 12, 5, 2, 2, 2, 12, 13, 7, 4, 2, 2, 13, 17, 3, 2, 2, 2, 14, 15, 9, 2, 2, 2, 15, 17, 5, 2, 2, 17, 16, 4, 3, 2, 2, 2, 16, 6, 3, 2, 2, 2, 16, 7, 3, 2, 2, 2, 16, 8, 3, 2, 2, 2, 16, 9, 3, 2, 2, 2, 16, 10, 3, 2, 2, 2, 16, 14, 3, 2, 2, 2, 17, 85, 3, 2, 2, 2, 18, 19, 12, 18, 2, 2, 19, 20, 7, 20, 2, 2, 20, 84, 5, 2, 2, 19, 21, 22, 12, 16, 2, 2, 22, 23, 9, 3, 2, 2, 23, 84, 5, 2, 2, 17, 24, 25, 12, 15, 2, 2, 25, 26, 9, 4, 2, 2, 26, 84, 5, 2, 2, 16, 27, 28, 12, 14, 2, 2, 28, 29, 9, 5, 2, 2, 29, 84, 5, 2, 2, 15, 30, 31, 12, 11, 2, 2, 31, 32, 9, 6, 2, 2, 32, 33, 7, 36, 2, 2, 33, 34, 9, 6, 2, 2, 34, 84, 5, 2, 2, 12, 35, 36, 12, 10, 2, 2, 36, 37, 9, 7, 2, 2, 37, 38, 7, 36, 2, 2, 38, 39, 9, 7, 2, 2, 39, 84, 5, 2, 2, 11, 40, 41, 12, 9, 2, 2, 41, 42, 9, 8, 2, 2, 42, 84, 5, 2, 2, 10, 43, 44, 12, 8, 2, 2, 44, 45, 9, 9, 2, 2, 45, 84, 5, 2, 2, 9, 46, 47, 12, 7, 2, 2, 47, 48, 7, 23, 2, 2, 48, 84, 5, 2, 2, 8, 49, 50, 12, 6, 2, 2, 50, 51, 7, 25, 2, 2, 51, 84, 5, 2, 2, 7, 52, 53, 12, 5, 2, 2, 53, 54, 7, 24, 2, 2, 54, 84, 5, 2, 2, 6, 55, 56, 12, 4, 2, 2, 56, 57, 7, 26, 2, 2, 57, 84, 5, 2, 2, 5, 58, 59, 12, 3, 2, 2, 59, 60, 7, 27, 2, 2, 60, 84, 5, 2, 2, 4, 61, 62, 12, 19, 2, 2, 62, 63, 7, 14, 2, 2, 63, 84, 7, 37, 2, 2, 64, 65, 12, 13, 2, 2, 65, 66, 9, 10, 2, 2, 66, 67, 7, 5, 2, 2, 67, 72, 5, 2, 2, 2, 68, 69, 7, 6, 2, 2, 69, 71, 5, 2, 2, 2, 70, 68, 3, 2, 2, 2, 71, 74, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 76, 3, 2, 2, 2, 74, 72, 3, 2, 2, 2, 75, 77, 7, 6, 2, 2, 76, 75, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 78, 3, 2, 2, 2, 78, 79, 7, 7, 2, 2, 79, 84, 3, 2, 2, 2, 80, 81, 12, 12, 2, 2, 81, 82, 9, 10, 2, 2, 82, 84, 7, 32, 2, 2, 83, 18, 3, 2, 2, 2, 83, 21, 3, 2, 2, 2, 83, 24, 3, 2, 2, 2, 83, 27, 3, 2, 2, 2, 83, 30, 3, 2, 2, 2, 83, 35, 3, 2, 2, 2, 83, 40, 3, 2, 2, 2, 83, 43, 3, 2, 2, 2, 83, 46, 3, 2, 2, 2, 83, 49, 3, 2, 2, 2, 83, 52, 3, 2, 2, 2, 83, 55, 3, 2, 2, 2, 83, 58, 3, 2, 2, 2, 83, 61, 3, 2, 2, 2, 83, 64, 3, 2, 2, 2, 83, 80, 3, 2, 2, 2, 84, 87, 3, 2, 2, 2, 85, 83, 3, 2, 2, 2, 85, 86, 3, 2, 2, 2, 86, 3, 3, 2, 2, 2, 87, 85, 3, 2, 2, 2, 7, 16, 72, 76, 83, 85]
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 40, 105, 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, 7, 2, 21, 10, 2, 12, 2, 14, 2, 24, 11, 2, 3, 2, 5, 2, 27, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 33, 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, 87, 10, 2, 12, 2, 14, 2, 90, 11, 2, 3, 2, 5, 2, 93, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 100, 10, 2, 12, 2, 14, 2, 103, 11, 2, 3, 2, 2, 3, 2, 3, 2, 2, 11, 4, 2, 16, 17, 29, 30, 3, 2, 18, 20, 3, 2, 16, 17, 3, 2, 22, 23, 3, 2, 8, 9, 3, 2, 10, 11, 3, 2, 8, 11, 3, 2, 12, 13, 3, 2, 31, 32, 2, 130, 2, 32, 3, 2, 2, 2, 4, 5, 8, 2, 1, 2, 5, 33, 7, 35, 2, 2, 6, 33, 7, 36, 2, 2, 7, 33, 7, 34, 2, 2, 8, 33, 7, 38, 2, 2, 9, 33, 7, 37, 2, 2, 10, 11, 7, 3, 2, 2, 11, 12, 5, 2, 2, 2, 12, 13, 7, 4, 2, 2, 13, 33, 3, 2, 2, 2, 14, 15, 7, 15, 2, 2, 15, 16, 7, 38, 2, 2, 16, 17, 7, 5, 2, 2, 17, 22, 5, 2, 2, 2, 18, 19, 7, 6, 2, 2, 19, 21, 5, 2, 2, 2, 20, 18, 3, 2, 2, 2, 21, 24, 3, 2, 2, 2, 22, 20, 3, 2, 2, 2, 22, 23, 3, 2, 2, 2, 23, 26, 3, 2, 2, 2, 24, 22, 3, 2, 2, 2, 25, 27, 7, 6, 2, 2, 26, 25, 3, 2, 2, 2, 26, 27, 3, 2, 2, 2, 27, 28, 3, 2, 2, 2, 28, 29, 7, 7, 2, 2, 29, 33, 3, 2, 2, 2, 30, 31, 9, 2, 2, 2, 31, 33, 5, 2, 2, 17, 32, 4, 3, 2, 2, 2, 32, 6, 3, 2, 2, 2, 32, 7, 3, 2, 2, 2, 32, 8, 3, 2, 2, 2, 32, 9, 3, 2, 2, 2, 32, 10, 3, 2, 2, 2, 32, 14, 3, 2, 2, 2, 32, 30, 3, 2, 2, 2, 33, 101, 3, 2, 2, 2, 34, 35, 12, 18, 2, 2, 35, 36, 7, 21, 2, 2, 36, 100, 5, 2, 2, 19, 37, 38, 12, 16, 2, 2, 38, 39, 9, 3, 2, 2, 39, 100, 5, 2, 2, 17, 40, 41, 12, 15, 2, 2, 41, 42, 9, 4, 2, 2, 42, 100, 5, 2, 2, 16, 43, 44, 12, 14, 2, 2, 44, 45, 9, 5, 2, 2, 45, 100, 5, 2, 2, 15, 46, 47, 12, 11, 2, 2, 47, 48, 9, 6, 2, 2, 48, 49, 7, 37, 2, 2, 49, 50, 9, 6, 2, 2, 50, 100, 5, 2, 2, 12, 51, 52, 12, 10, 2, 2, 52, 53, 9, 7, 2, 2, 53, 54, 7, 37, 2, 2, 54, 55, 9, 7, 2, 2, 55, 100, 5, 2, 2, 11, 56, 57, 12, 9, 2, 2, 57, 58, 9, 8, 2, 2, 58, 100, 5, 2, 2, 10, 59, 60, 12, 8, 2, 2, 60, 61, 9, 9, 2, 2, 61, 100, 5, 2, 2, 9, 62, 63, 12, 7, 2, 2, 63, 64, 7, 24, 2, 2, 64, 100, 5, 2, 2, 8, 65, 66, 12, 6, 2, 2, 66, 67, 7, 26, 2, 2, 67, 100, 5, 2, 2, 7, 68, 69, 12, 5, 2, 2, 69, 70, 7, 25, 2, 2, 70, 100, 5, 2, 2, 6, 71, 72, 12, 4, 2, 2, 72, 73, 7, 27, 2, 2, 73, 100, 5, 2, 2, 5, 74, 75, 12, 3, 2, 2, 75, 76, 7, 28, 2, 2, 76, 100, 5, 2, 2, 4, 77, 78, 12, 19, 2, 2, 78, 79, 7, 14, 2, 2, 79, 100, 7, 38, 2, 2, 80, 81, 12, 13, 2, 2, 81, 82, 9, 10, 2, 2, 82, 83, 7, 5, 2, 2, 83, 88, 5, 2, 2, 2, 84, 85, 7, 6, 2, 2, 85, 87, 5, 2, 2, 2, 86, 84, 3, 2, 2, 2, 87, 90, 3, 2, 2, 2, 88, 86, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 92, 3, 2, 2, 2, 90, 88, 3, 2, 2, 2, 91, 93, 7, 6, 2, 2, 92, 91, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 95, 7, 7, 2, 2, 95, 100, 3, 2, 2, 2, 96, 97, 12, 12, 2, 2, 97, 98, 9, 10, 2, 2, 98, 100, 7, 33, 2, 2, 99, 34, 3, 2, 2, 2, 99, 37, 3, 2, 2, 2, 99, 40, 3, 2, 2, 2, 99, 43, 3, 2, 2, 2, 99, 46, 3, 2, 2, 2, 99, 51, 3, 2, 2, 2, 99, 56, 3, 2, 2, 2, 99, 59, 3, 2, 2, 2, 99, 62, 3, 2, 2, 2, 99, 65, 3, 2, 2, 2, 99, 68, 3, 2, 2, 2, 99, 71, 3, 2, 2, 2, 99, 74, 3, 2, 2, 2, 99, 77, 3, 2, 2, 2, 99, 80, 3, 2, 2, 2, 99, 96, 3, 2, 2, 2, 100, 103, 3, 2, 2, 2, 101, 99, 3, 2, 2, 2, 101, 102, 3, 2, 2, 2, 102, 3, 3, 2, 2, 2, 103, 101, 3, 2, 2, 2, 9, 22, 26, 32, 88, 92, 99, 101]

View File

@ -10,31 +10,32 @@ GE=9
EQ=10
NE=11
LIKE=12
ADD=13
SUB=14
MUL=15
DIV=16
MOD=17
POW=18
SHL=19
SHR=20
BAND=21
BOR=22
BXOR=23
AND=24
OR=25
BNOT=26
NOT=27
IN=28
NIN=29
EmptyTerm=30
BooleanConstant=31
IntegerConstant=32
FloatingConstant=33
Identifier=34
StringLiteral=35
Whitespace=36
Newline=37
UDF=13
ADD=14
SUB=15
MUL=16
DIV=17
MOD=18
POW=19
SHL=20
SHR=21
BAND=22
BOR=23
BXOR=24
AND=25
OR=26
BNOT=27
NOT=28
IN=29
NIN=30
EmptyTerm=31
BooleanConstant=32
IntegerConstant=33
FloatingConstant=34
Identifier=35
StringLiteral=36
Whitespace=37
Newline=38
'('=1
')'=2
'['=3
@ -46,17 +47,17 @@ Newline=37
'>='=9
'=='=10
'!='=11
'+'=13
'-'=14
'*'=15
'/'=16
'%'=17
'**'=18
'<<'=19
'>>'=20
'&'=21
'|'=22
'^'=23
'~'=26
'in'=28
'not in'=29
'+'=14
'-'=15
'*'=16
'/'=17
'%'=18
'**'=19
'<<'=20
'>>'=21
'&'=22
'|'=23
'^'=24
'~'=27
'in'=29
'not in'=30

File diff suppressed because one or more lines are too long

View File

@ -10,31 +10,32 @@ GE=9
EQ=10
NE=11
LIKE=12
ADD=13
SUB=14
MUL=15
DIV=16
MOD=17
POW=18
SHL=19
SHR=20
BAND=21
BOR=22
BXOR=23
AND=24
OR=25
BNOT=26
NOT=27
IN=28
NIN=29
EmptyTerm=30
BooleanConstant=31
IntegerConstant=32
FloatingConstant=33
Identifier=34
StringLiteral=35
Whitespace=36
Newline=37
UDF=13
ADD=14
SUB=15
MUL=16
DIV=17
MOD=18
POW=19
SHL=20
SHR=21
BAND=22
BOR=23
BXOR=24
AND=25
OR=26
BNOT=27
NOT=28
IN=29
NIN=30
EmptyTerm=31
BooleanConstant=32
IntegerConstant=33
FloatingConstant=34
Identifier=35
StringLiteral=36
Whitespace=37
Newline=38
'('=1
')'=2
'['=3
@ -46,17 +47,17 @@ Newline=37
'>='=9
'=='=10
'!='=11
'+'=13
'-'=14
'*'=15
'/'=16
'%'=17
'**'=18
'<<'=19
'>>'=20
'&'=21
'|'=22
'^'=23
'~'=26
'in'=28
'not in'=29
'+'=14
'-'=15
'*'=16
'/'=17
'%'=18
'**'=19
'<<'=20
'>>'=21
'&'=22
'|'=23
'^'=24
'~'=27
'in'=29
'not in'=30

View File

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

View File

@ -15,58 +15,66 @@ var _ = reflect.Copy
var _ = strconv.Itoa
var parserATN = []uint16{
3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 39, 89, 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, 5, 2, 17, 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, 71, 10, 2, 12,
2, 14, 2, 74, 11, 2, 3, 2, 5, 2, 77, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
2, 7, 2, 84, 10, 2, 12, 2, 14, 2, 87, 11, 2, 3, 2, 2, 3, 2, 3, 2, 2, 11,
4, 2, 15, 16, 28, 29, 3, 2, 17, 19, 3, 2, 15, 16, 3, 2, 21, 22, 3, 2, 8,
9, 3, 2, 10, 11, 3, 2, 8, 11, 3, 2, 12, 13, 3, 2, 30, 31, 2, 111, 2, 16,
3, 2, 2, 2, 4, 5, 8, 2, 1, 2, 5, 17, 7, 34, 2, 2, 6, 17, 7, 35, 2, 2, 7,
17, 7, 33, 2, 2, 8, 17, 7, 37, 2, 2, 9, 17, 7, 36, 2, 2, 10, 11, 7, 3,
2, 2, 11, 12, 5, 2, 2, 2, 12, 13, 7, 4, 2, 2, 13, 17, 3, 2, 2, 2, 14, 15,
9, 2, 2, 2, 15, 17, 5, 2, 2, 17, 16, 4, 3, 2, 2, 2, 16, 6, 3, 2, 2, 2,
16, 7, 3, 2, 2, 2, 16, 8, 3, 2, 2, 2, 16, 9, 3, 2, 2, 2, 16, 10, 3, 2,
2, 2, 16, 14, 3, 2, 2, 2, 17, 85, 3, 2, 2, 2, 18, 19, 12, 18, 2, 2, 19,
20, 7, 20, 2, 2, 20, 84, 5, 2, 2, 19, 21, 22, 12, 16, 2, 2, 22, 23, 9,
3, 2, 2, 23, 84, 5, 2, 2, 17, 24, 25, 12, 15, 2, 2, 25, 26, 9, 4, 2, 2,
26, 84, 5, 2, 2, 16, 27, 28, 12, 14, 2, 2, 28, 29, 9, 5, 2, 2, 29, 84,
5, 2, 2, 15, 30, 31, 12, 11, 2, 2, 31, 32, 9, 6, 2, 2, 32, 33, 7, 36, 2,
2, 33, 34, 9, 6, 2, 2, 34, 84, 5, 2, 2, 12, 35, 36, 12, 10, 2, 2, 36, 37,
9, 7, 2, 2, 37, 38, 7, 36, 2, 2, 38, 39, 9, 7, 2, 2, 39, 84, 5, 2, 2, 11,
40, 41, 12, 9, 2, 2, 41, 42, 9, 8, 2, 2, 42, 84, 5, 2, 2, 10, 43, 44, 12,
8, 2, 2, 44, 45, 9, 9, 2, 2, 45, 84, 5, 2, 2, 9, 46, 47, 12, 7, 2, 2, 47,
48, 7, 23, 2, 2, 48, 84, 5, 2, 2, 8, 49, 50, 12, 6, 2, 2, 50, 51, 7, 25,
2, 2, 51, 84, 5, 2, 2, 7, 52, 53, 12, 5, 2, 2, 53, 54, 7, 24, 2, 2, 54,
84, 5, 2, 2, 6, 55, 56, 12, 4, 2, 2, 56, 57, 7, 26, 2, 2, 57, 84, 5, 2,
2, 5, 58, 59, 12, 3, 2, 2, 59, 60, 7, 27, 2, 2, 60, 84, 5, 2, 2, 4, 61,
62, 12, 19, 2, 2, 62, 63, 7, 14, 2, 2, 63, 84, 7, 37, 2, 2, 64, 65, 12,
13, 2, 2, 65, 66, 9, 10, 2, 2, 66, 67, 7, 5, 2, 2, 67, 72, 5, 2, 2, 2,
68, 69, 7, 6, 2, 2, 69, 71, 5, 2, 2, 2, 70, 68, 3, 2, 2, 2, 71, 74, 3,
2, 2, 2, 72, 70, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 76, 3, 2, 2, 2, 74,
72, 3, 2, 2, 2, 75, 77, 7, 6, 2, 2, 76, 75, 3, 2, 2, 2, 76, 77, 3, 2, 2,
2, 77, 78, 3, 2, 2, 2, 78, 79, 7, 7, 2, 2, 79, 84, 3, 2, 2, 2, 80, 81,
12, 12, 2, 2, 81, 82, 9, 10, 2, 2, 82, 84, 7, 32, 2, 2, 83, 18, 3, 2, 2,
2, 83, 21, 3, 2, 2, 2, 83, 24, 3, 2, 2, 2, 83, 27, 3, 2, 2, 2, 83, 30,
3, 2, 2, 2, 83, 35, 3, 2, 2, 2, 83, 40, 3, 2, 2, 2, 83, 43, 3, 2, 2, 2,
83, 46, 3, 2, 2, 2, 83, 49, 3, 2, 2, 2, 83, 52, 3, 2, 2, 2, 83, 55, 3,
2, 2, 2, 83, 58, 3, 2, 2, 2, 83, 61, 3, 2, 2, 2, 83, 64, 3, 2, 2, 2, 83,
80, 3, 2, 2, 2, 84, 87, 3, 2, 2, 2, 85, 83, 3, 2, 2, 2, 85, 86, 3, 2, 2,
2, 86, 3, 3, 2, 2, 2, 87, 85, 3, 2, 2, 2, 7, 16, 72, 76, 83, 85,
3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 40, 105,
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, 7, 2, 21, 10, 2, 12, 2, 14, 2, 24,
11, 2, 3, 2, 5, 2, 27, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 33, 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, 87, 10, 2, 12, 2, 14, 2, 90, 11, 2, 3, 2,
5, 2, 93, 10, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 100, 10, 2, 12, 2,
14, 2, 103, 11, 2, 3, 2, 2, 3, 2, 3, 2, 2, 11, 4, 2, 16, 17, 29, 30, 3,
2, 18, 20, 3, 2, 16, 17, 3, 2, 22, 23, 3, 2, 8, 9, 3, 2, 10, 11, 3, 2,
8, 11, 3, 2, 12, 13, 3, 2, 31, 32, 2, 130, 2, 32, 3, 2, 2, 2, 4, 5, 8,
2, 1, 2, 5, 33, 7, 35, 2, 2, 6, 33, 7, 36, 2, 2, 7, 33, 7, 34, 2, 2, 8,
33, 7, 38, 2, 2, 9, 33, 7, 37, 2, 2, 10, 11, 7, 3, 2, 2, 11, 12, 5, 2,
2, 2, 12, 13, 7, 4, 2, 2, 13, 33, 3, 2, 2, 2, 14, 15, 7, 15, 2, 2, 15,
16, 7, 38, 2, 2, 16, 17, 7, 5, 2, 2, 17, 22, 5, 2, 2, 2, 18, 19, 7, 6,
2, 2, 19, 21, 5, 2, 2, 2, 20, 18, 3, 2, 2, 2, 21, 24, 3, 2, 2, 2, 22, 20,
3, 2, 2, 2, 22, 23, 3, 2, 2, 2, 23, 26, 3, 2, 2, 2, 24, 22, 3, 2, 2, 2,
25, 27, 7, 6, 2, 2, 26, 25, 3, 2, 2, 2, 26, 27, 3, 2, 2, 2, 27, 28, 3,
2, 2, 2, 28, 29, 7, 7, 2, 2, 29, 33, 3, 2, 2, 2, 30, 31, 9, 2, 2, 2, 31,
33, 5, 2, 2, 17, 32, 4, 3, 2, 2, 2, 32, 6, 3, 2, 2, 2, 32, 7, 3, 2, 2,
2, 32, 8, 3, 2, 2, 2, 32, 9, 3, 2, 2, 2, 32, 10, 3, 2, 2, 2, 32, 14, 3,
2, 2, 2, 32, 30, 3, 2, 2, 2, 33, 101, 3, 2, 2, 2, 34, 35, 12, 18, 2, 2,
35, 36, 7, 21, 2, 2, 36, 100, 5, 2, 2, 19, 37, 38, 12, 16, 2, 2, 38, 39,
9, 3, 2, 2, 39, 100, 5, 2, 2, 17, 40, 41, 12, 15, 2, 2, 41, 42, 9, 4, 2,
2, 42, 100, 5, 2, 2, 16, 43, 44, 12, 14, 2, 2, 44, 45, 9, 5, 2, 2, 45,
100, 5, 2, 2, 15, 46, 47, 12, 11, 2, 2, 47, 48, 9, 6, 2, 2, 48, 49, 7,
37, 2, 2, 49, 50, 9, 6, 2, 2, 50, 100, 5, 2, 2, 12, 51, 52, 12, 10, 2,
2, 52, 53, 9, 7, 2, 2, 53, 54, 7, 37, 2, 2, 54, 55, 9, 7, 2, 2, 55, 100,
5, 2, 2, 11, 56, 57, 12, 9, 2, 2, 57, 58, 9, 8, 2, 2, 58, 100, 5, 2, 2,
10, 59, 60, 12, 8, 2, 2, 60, 61, 9, 9, 2, 2, 61, 100, 5, 2, 2, 9, 62, 63,
12, 7, 2, 2, 63, 64, 7, 24, 2, 2, 64, 100, 5, 2, 2, 8, 65, 66, 12, 6, 2,
2, 66, 67, 7, 26, 2, 2, 67, 100, 5, 2, 2, 7, 68, 69, 12, 5, 2, 2, 69, 70,
7, 25, 2, 2, 70, 100, 5, 2, 2, 6, 71, 72, 12, 4, 2, 2, 72, 73, 7, 27, 2,
2, 73, 100, 5, 2, 2, 5, 74, 75, 12, 3, 2, 2, 75, 76, 7, 28, 2, 2, 76, 100,
5, 2, 2, 4, 77, 78, 12, 19, 2, 2, 78, 79, 7, 14, 2, 2, 79, 100, 7, 38,
2, 2, 80, 81, 12, 13, 2, 2, 81, 82, 9, 10, 2, 2, 82, 83, 7, 5, 2, 2, 83,
88, 5, 2, 2, 2, 84, 85, 7, 6, 2, 2, 85, 87, 5, 2, 2, 2, 86, 84, 3, 2, 2,
2, 87, 90, 3, 2, 2, 2, 88, 86, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 92,
3, 2, 2, 2, 90, 88, 3, 2, 2, 2, 91, 93, 7, 6, 2, 2, 92, 91, 3, 2, 2, 2,
92, 93, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 95, 7, 7, 2, 2, 95, 100, 3,
2, 2, 2, 96, 97, 12, 12, 2, 2, 97, 98, 9, 10, 2, 2, 98, 100, 7, 33, 2,
2, 99, 34, 3, 2, 2, 2, 99, 37, 3, 2, 2, 2, 99, 40, 3, 2, 2, 2, 99, 43,
3, 2, 2, 2, 99, 46, 3, 2, 2, 2, 99, 51, 3, 2, 2, 2, 99, 56, 3, 2, 2, 2,
99, 59, 3, 2, 2, 2, 99, 62, 3, 2, 2, 2, 99, 65, 3, 2, 2, 2, 99, 68, 3,
2, 2, 2, 99, 71, 3, 2, 2, 2, 99, 74, 3, 2, 2, 2, 99, 77, 3, 2, 2, 2, 99,
80, 3, 2, 2, 2, 99, 96, 3, 2, 2, 2, 100, 103, 3, 2, 2, 2, 101, 99, 3, 2,
2, 2, 101, 102, 3, 2, 2, 2, 102, 3, 3, 2, 2, 2, 103, 101, 3, 2, 2, 2, 9,
22, 26, 32, 88, 92, 99, 101,
}
var literalNames = []string{
"", "'('", "')'", "'['", "','", "']'", "'<'", "'<='", "'>'", "'>='", "'=='",
"'!='", "", "'+'", "'-'", "'*'", "'/'", "'%'", "'**'", "'<<'", "'>>'",
"'!='", "", "", "'+'", "'-'", "'*'", "'/'", "'%'", "'**'", "'<<'", "'>>'",
"'&'", "'|'", "'^'", "", "", "'~'", "", "'in'", "'not in'",
}
var symbolicNames = []string{
"", "", "", "", "", "", "LT", "LE", "GT", "GE", "EQ", "NE", "LIKE", "ADD",
"SUB", "MUL", "DIV", "MOD", "POW", "SHL", "SHR", "BAND", "BOR", "BXOR",
"AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm", "BooleanConstant",
"", "", "", "", "", "", "LT", "LE", "GT", "GE", "EQ", "NE", "LIKE", "UDF",
"ADD", "SUB", "MUL", "DIV", "MOD", "POW", "SHL", "SHR", "BAND", "BOR",
"BXOR", "AND", "OR", "BNOT", "NOT", "IN", "NIN", "EmptyTerm", "BooleanConstant",
"IntegerConstant", "FloatingConstant", "Identifier", "StringLiteral", "Whitespace",
"Newline",
}
@ -119,31 +127,32 @@ const (
PlanParserEQ = 10
PlanParserNE = 11
PlanParserLIKE = 12
PlanParserADD = 13
PlanParserSUB = 14
PlanParserMUL = 15
PlanParserDIV = 16
PlanParserMOD = 17
PlanParserPOW = 18
PlanParserSHL = 19
PlanParserSHR = 20
PlanParserBAND = 21
PlanParserBOR = 22
PlanParserBXOR = 23
PlanParserAND = 24
PlanParserOR = 25
PlanParserBNOT = 26
PlanParserNOT = 27
PlanParserIN = 28
PlanParserNIN = 29
PlanParserEmptyTerm = 30
PlanParserBooleanConstant = 31
PlanParserIntegerConstant = 32
PlanParserFloatingConstant = 33
PlanParserIdentifier = 34
PlanParserStringLiteral = 35
PlanParserWhitespace = 36
PlanParserNewline = 37
PlanParserUDF = 13
PlanParserADD = 14
PlanParserSUB = 15
PlanParserMUL = 16
PlanParserDIV = 17
PlanParserMOD = 18
PlanParserPOW = 19
PlanParserSHL = 20
PlanParserSHR = 21
PlanParserBAND = 22
PlanParserBOR = 23
PlanParserBXOR = 24
PlanParserAND = 25
PlanParserOR = 26
PlanParserBNOT = 27
PlanParserNOT = 28
PlanParserIN = 29
PlanParserNIN = 30
PlanParserEmptyTerm = 31
PlanParserBooleanConstant = 32
PlanParserIntegerConstant = 33
PlanParserFloatingConstant = 34
PlanParserIdentifier = 35
PlanParserStringLiteral = 36
PlanParserWhitespace = 37
PlanParserNewline = 38
)
// PlanParserRULE_expr is the PlanParser rule.
@ -1129,6 +1138,65 @@ func (s *LikeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} {
}
}
type UdfContext struct {
*ExprContext
}
func NewUdfContext(parser antlr.Parser, ctx antlr.ParserRuleContext) *UdfContext {
var p = new(UdfContext)
p.ExprContext = NewEmptyExprContext()
p.parser = parser
p.CopyFrom(ctx.(*ExprContext))
return p
}
func (s *UdfContext) GetRuleContext() antlr.RuleContext {
return s
}
func (s *UdfContext) UDF() antlr.TerminalNode {
return s.GetToken(PlanParserUDF, 0)
}
func (s *UdfContext) StringLiteral() antlr.TerminalNode {
return s.GetToken(PlanParserStringLiteral, 0)
}
func (s *UdfContext) 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 *UdfContext) Expr(i int) IExprContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*IExprContext)(nil)).Elem(), i)
if t == nil {
return nil
}
return t.(IExprContext)
}
func (s *UdfContext) Accept(visitor antlr.ParseTreeVisitor) interface{} {
switch t := visitor.(type) {
case PlanVisitor:
return t.VisitUdf(s)
default:
return t.VisitChildren(s)
}
}
type BitAndContext struct {
*ExprContext
}
@ -1478,7 +1546,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
var _alt int
p.EnterOuterAlt(localctx, 1)
p.SetState(14)
p.SetState(30)
p.GetErrorHandler().Sync(p)
switch p.GetTokenStream().LA(1) {
@ -1545,12 +1613,69 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
p.Match(PlanParserT__1)
}
case PlanParserUDF:
localctx = NewUdfContext(p, localctx)
p.SetParserRuleContext(localctx)
_prevctx = localctx
{
p.SetState(12)
p.Match(PlanParserUDF)
}
{
p.SetState(13)
p.Match(PlanParserStringLiteral)
}
{
p.SetState(14)
p.Match(PlanParserT__2)
}
{
p.SetState(15)
p.expr(0)
}
p.SetState(20)
p.GetErrorHandler().Sync(p)
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 0, p.GetParserRuleContext())
for _alt != 2 && _alt != antlr.ATNInvalidAltNumber {
if _alt == 1 {
{
p.SetState(16)
p.Match(PlanParserT__3)
}
{
p.SetState(17)
p.expr(0)
}
}
p.SetState(22)
p.GetErrorHandler().Sync(p)
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 0, p.GetParserRuleContext())
}
p.SetState(24)
p.GetErrorHandler().Sync(p)
_la = p.GetTokenStream().LA(1)
if _la == PlanParserT__3 {
{
p.SetState(23)
p.Match(PlanParserT__3)
}
}
{
p.SetState(26)
p.Match(PlanParserT__4)
}
case PlanParserADD, PlanParserSUB, PlanParserBNOT, PlanParserNOT:
localctx = NewUnaryContext(p, localctx)
p.SetParserRuleContext(localctx)
_prevctx = localctx
{
p.SetState(12)
p.SetState(28)
var _lt = p.GetTokenStream().LT(1)
@ -1568,7 +1693,7 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(13)
p.SetState(29)
p.expr(15)
}
@ -1576,9 +1701,9 @@ 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(83)
p.SetState(99)
p.GetErrorHandler().Sync(p)
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 4, p.GetParserRuleContext())
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 6, p.GetParserRuleContext())
for _alt != 2 && _alt != antlr.ATNInvalidAltNumber {
if _alt == 1 {
@ -1586,36 +1711,36 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
p.TriggerExitRuleEvent()
}
_prevctx = localctx
p.SetState(81)
p.SetState(97)
p.GetErrorHandler().Sync(p)
switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 3, p.GetParserRuleContext()) {
switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 5, p.GetParserRuleContext()) {
case 1:
localctx = NewPowerContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(16)
p.SetState(32)
if !(p.Precpred(p.GetParserRuleContext(), 16)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 16)", ""))
}
{
p.SetState(17)
p.SetState(33)
p.Match(PlanParserPOW)
}
{
p.SetState(18)
p.SetState(34)
p.expr(17)
}
case 2:
localctx = NewMulDivModContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(19)
p.SetState(35)
if !(p.Precpred(p.GetParserRuleContext(), 14)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 14)", ""))
}
{
p.SetState(20)
p.SetState(36)
var _lt = p.GetTokenStream().LT(1)
@ -1633,20 +1758,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(21)
p.SetState(37)
p.expr(15)
}
case 3:
localctx = NewAddSubContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(22)
p.SetState(38)
if !(p.Precpred(p.GetParserRuleContext(), 13)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 13)", ""))
}
{
p.SetState(23)
p.SetState(39)
var _lt = p.GetTokenStream().LT(1)
@ -1664,20 +1789,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(24)
p.SetState(40)
p.expr(14)
}
case 4:
localctx = NewShiftContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(25)
p.SetState(41)
if !(p.Precpred(p.GetParserRuleContext(), 12)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 12)", ""))
}
{
p.SetState(26)
p.SetState(42)
var _lt = p.GetTokenStream().LT(1)
@ -1695,20 +1820,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(27)
p.SetState(43)
p.expr(13)
}
case 5:
localctx = NewRangeContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(28)
p.SetState(44)
if !(p.Precpred(p.GetParserRuleContext(), 9)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 9)", ""))
}
{
p.SetState(29)
p.SetState(45)
var _lt = p.GetTokenStream().LT(1)
@ -1726,11 +1851,11 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(30)
p.SetState(46)
p.Match(PlanParserIdentifier)
}
{
p.SetState(31)
p.SetState(47)
var _lt = p.GetTokenStream().LT(1)
@ -1748,20 +1873,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(32)
p.SetState(48)
p.expr(10)
}
case 6:
localctx = NewReverseRangeContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(33)
p.SetState(49)
if !(p.Precpred(p.GetParserRuleContext(), 8)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 8)", ""))
}
{
p.SetState(34)
p.SetState(50)
var _lt = p.GetTokenStream().LT(1)
@ -1779,11 +1904,11 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(35)
p.SetState(51)
p.Match(PlanParserIdentifier)
}
{
p.SetState(36)
p.SetState(52)
var _lt = p.GetTokenStream().LT(1)
@ -1801,20 +1926,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(37)
p.SetState(53)
p.expr(9)
}
case 7:
localctx = NewRelationalContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(38)
p.SetState(54)
if !(p.Precpred(p.GetParserRuleContext(), 7)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 7)", ""))
}
{
p.SetState(39)
p.SetState(55)
var _lt = p.GetTokenStream().LT(1)
@ -1832,20 +1957,20 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(40)
p.SetState(56)
p.expr(8)
}
case 8:
localctx = NewEqualityContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(41)
p.SetState(57)
if !(p.Precpred(p.GetParserRuleContext(), 6)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 6)", ""))
}
{
p.SetState(42)
p.SetState(58)
var _lt = p.GetTokenStream().LT(1)
@ -1863,122 +1988,122 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(43)
p.SetState(59)
p.expr(7)
}
case 9:
localctx = NewBitAndContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(44)
p.SetState(60)
if !(p.Precpred(p.GetParserRuleContext(), 5)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 5)", ""))
}
{
p.SetState(45)
p.SetState(61)
p.Match(PlanParserBAND)
}
{
p.SetState(46)
p.SetState(62)
p.expr(6)
}
case 10:
localctx = NewBitXorContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(47)
p.SetState(63)
if !(p.Precpred(p.GetParserRuleContext(), 4)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 4)", ""))
}
{
p.SetState(48)
p.SetState(64)
p.Match(PlanParserBXOR)
}
{
p.SetState(49)
p.SetState(65)
p.expr(5)
}
case 11:
localctx = NewBitOrContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(50)
p.SetState(66)
if !(p.Precpred(p.GetParserRuleContext(), 3)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 3)", ""))
}
{
p.SetState(51)
p.SetState(67)
p.Match(PlanParserBOR)
}
{
p.SetState(52)
p.SetState(68)
p.expr(4)
}
case 12:
localctx = NewLogicalAndContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(53)
p.SetState(69)
if !(p.Precpred(p.GetParserRuleContext(), 2)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 2)", ""))
}
{
p.SetState(54)
p.SetState(70)
p.Match(PlanParserAND)
}
{
p.SetState(55)
p.SetState(71)
p.expr(3)
}
case 13:
localctx = NewLogicalOrContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(56)
p.SetState(72)
if !(p.Precpred(p.GetParserRuleContext(), 1)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 1)", ""))
}
{
p.SetState(57)
p.SetState(73)
p.Match(PlanParserOR)
}
{
p.SetState(58)
p.SetState(74)
p.expr(2)
}
case 14:
localctx = NewLikeContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(59)
p.SetState(75)
if !(p.Precpred(p.GetParserRuleContext(), 17)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 17)", ""))
}
{
p.SetState(60)
p.SetState(76)
p.Match(PlanParserLIKE)
}
{
p.SetState(61)
p.SetState(77)
p.Match(PlanParserStringLiteral)
}
case 15:
localctx = NewTermContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(62)
p.SetState(78)
if !(p.Precpred(p.GetParserRuleContext(), 11)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 11)", ""))
}
{
p.SetState(63)
p.SetState(79)
var _lt = p.GetTokenStream().LT(1)
@ -1997,59 +2122,59 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
{
p.SetState(64)
p.SetState(80)
p.Match(PlanParserT__2)
}
{
p.SetState(65)
p.SetState(81)
p.expr(0)
}
p.SetState(70)
p.SetState(86)
p.GetErrorHandler().Sync(p)
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 1, p.GetParserRuleContext())
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 3, p.GetParserRuleContext())
for _alt != 2 && _alt != antlr.ATNInvalidAltNumber {
if _alt == 1 {
{
p.SetState(66)
p.SetState(82)
p.Match(PlanParserT__3)
}
{
p.SetState(67)
p.SetState(83)
p.expr(0)
}
}
p.SetState(72)
p.SetState(88)
p.GetErrorHandler().Sync(p)
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 1, p.GetParserRuleContext())
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 3, p.GetParserRuleContext())
}
p.SetState(74)
p.SetState(90)
p.GetErrorHandler().Sync(p)
_la = p.GetTokenStream().LA(1)
if _la == PlanParserT__3 {
{
p.SetState(73)
p.SetState(89)
p.Match(PlanParserT__3)
}
}
{
p.SetState(76)
p.SetState(92)
p.Match(PlanParserT__4)
}
case 16:
localctx = NewEmptyTermContext(p, NewExprContext(p, _parentctx, _parentState))
p.PushNewRecursionContext(localctx, _startState, PlanParserRULE_expr)
p.SetState(78)
p.SetState(94)
if !(p.Precpred(p.GetParserRuleContext(), 10)) {
panic(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 10)", ""))
}
{
p.SetState(79)
p.SetState(95)
var _lt = p.GetTokenStream().LT(1)
@ -2067,16 +2192,16 @@ func (p *PlanParser) expr(_p int) (localctx IExprContext) {
}
}
{
p.SetState(80)
p.SetState(96)
p.Match(PlanParserEmptyTerm)
}
}
}
p.SetState(85)
p.SetState(101)
p.GetErrorHandler().Sync(p)
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 4, p.GetParserRuleContext())
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 6, p.GetParserRuleContext())
}
return localctx

View File

@ -58,6 +58,9 @@ type PlanVisitor interface {
// Visit a parse tree produced by PlanParser#Like.
VisitLike(ctx *LikeContext) interface{}
// Visit a parse tree produced by PlanParser#Udf.
VisitUdf(ctx *UdfContext) interface{}
// Visit a parse tree produced by PlanParser#BitAnd.
VisitBitAnd(ctx *BitAndContext) interface{}

View File

@ -14,4 +14,5 @@ type LogicalExprVisitor interface {
VisitBinaryArithExpr(expr *planpb.BinaryArithExpr) interface{}
VisitValueExpr(expr *planpb.ValueExpr) interface{}
VisitColumnExpr(expr *planpb.ColumnExpr) interface{}
VisitUdfExpr(expr *planpb.UdfExpr) interface{}
}

View File

@ -1,9 +1,14 @@
package planparserv2
import (
"context"
"fmt"
"strconv"
"github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/internal/proto/rootcoordpb"
"github.com/milvus-io/milvus/internal/types"
"github.com/milvus-io/milvus/api/schemapb"
parser "github.com/milvus-io/milvus/internal/parser/planparserv2/generated"
"github.com/milvus-io/milvus/internal/proto/planpb"
@ -12,11 +17,24 @@ import (
type ParserVisitor struct {
parser.BasePlanVisitor
schema *typeutil.SchemaHelper
schema *typeutil.SchemaHelper
rootCoord types.RootCoord
}
func NewParserVisitor(schema *typeutil.SchemaHelper) *ParserVisitor {
return &ParserVisitor{schema: schema}
type ParserVisitorOpt func(v *ParserVisitor)
func ParserVisitorWithRootCoord(rootCoord types.RootCoord) ParserVisitorOpt {
return func(v *ParserVisitor) {
v.rootCoord = rootCoord
}
}
func NewParserVisitor(schema *typeutil.SchemaHelper, opts ...ParserVisitorOpt) *ParserVisitor {
v := &ParserVisitor{schema: schema}
for _, opt := range opts {
opt(v)
}
return v
}
// VisitParens unpack the parentheses.
@ -882,3 +900,73 @@ func (v *ParserVisitor) VisitShift(ctx *parser.ShiftContext) interface{} {
func (v *ParserVisitor) VisitBitOr(ctx *parser.BitOrContext) interface{} {
return fmt.Errorf("BitOr is not supported: %s", ctx.GetText())
}
// VisitUdf translates expr to udf plan.
func (v *ParserVisitor) VisitUdf(ctx *parser.UdfContext) interface{} {
// return fmt.Errorf("Udf is not supported: %s", ctx.GetText())
funcName, err := strconv.Unquote(ctx.StringLiteral().GetText())
if err != nil {
return err
}
req := rootcoordpb.GetFunctionInfoRequest{
Base: &commonpb.MsgBase{MsgType: commonpb.MsgType_GetFunctionInfo},
FunctionName: funcName,
}
GetFunctionInfoResponse, err := v.rootCoord.GetFunctionInfo(context.Background(), &req)
if err != nil {
return err
}
argTypes := GetFunctionInfoResponse.GetInfo().GetArgTypes()
wasmBody := GetFunctionInfoResponse.GetInfo().GetWatBodyBase64()
allExpr := ctx.AllExpr()
lenOfAllExpr := len(allExpr)
udfParams := make([]*planpb.UdfParams, 0, lenOfAllExpr)
// parser udf parameters
for i := 0; i < lenOfAllExpr; i++ {
child := allExpr[i].Accept(v)
if err := getError(child); err != nil {
return err
}
childExpr := getExpr(child)
column := toColumnInfo(childExpr)
if column != nil {
arg := &planpb.UdfParams{
Val: &planpb.UdfParams_ColumnInfo{
ColumnInfo: column,
},
}
udfParams = append(udfParams, arg)
}
childValue := getGenericValue(child)
if childValue != nil {
arg := &planpb.UdfParams{
Val: &planpb.UdfParams_Value{
Value: childValue,
},
}
udfParams = append(udfParams, arg)
}
if column == nil && childValue == nil {
return fmt.Errorf("udf argument is invalid: %s", ctx.GetText())
}
}
expr := &planpb.Expr{
Expr: &planpb.Expr_UdfExpr{
UdfExpr: &planpb.UdfExpr{
UdfFuncName: funcName,
UdfParams: udfParams,
WasmBody: wasmBody,
ArgTypes: argTypes,
},
},
}
return &ExprWithType{
expr: expr,
dataType: schemapb.DataType_Bool,
}
}

View File

@ -10,7 +10,7 @@ import (
"github.com/antlr/antlr4/runtime/Go/antlr"
)
func handleExpr(schema *typeutil.SchemaHelper, exprStr string) interface{} {
func handleExpr(schema *typeutil.SchemaHelper, exprStr string, opts ...ParserVisitorOpt) interface{} {
if exprStr == "" {
return nil
}
@ -37,16 +37,16 @@ func handleExpr(schema *typeutil.SchemaHelper, exprStr string) interface{} {
putLexer(lexer)
putParser(parser)
visitor := NewParserVisitor(schema)
visitor := NewParserVisitor(schema, opts...)
return ast.Accept(visitor)
}
func ParseExpr(schema *typeutil.SchemaHelper, exprStr string) (*planpb.Expr, error) {
func ParseExpr(schema *typeutil.SchemaHelper, exprStr string, opts ...ParserVisitorOpt) (*planpb.Expr, error) {
if len(exprStr) <= 0 {
return nil, nil
}
ret := handleExpr(schema, exprStr)
ret := handleExpr(schema, exprStr, opts...)
if err := getError(ret); err != nil {
return nil, fmt.Errorf("cannot parse expression: %s, error: %s", exprStr, err)
@ -64,13 +64,13 @@ func ParseExpr(schema *typeutil.SchemaHelper, exprStr string) (*planpb.Expr, err
return predicate.expr, nil
}
func CreateRetrievePlan(schemaPb *schemapb.CollectionSchema, exprStr string) (*planpb.PlanNode, error) {
func CreateRetrievePlan(schemaPb *schemapb.CollectionSchema, exprStr string, opts ...ParserVisitorOpt) (*planpb.PlanNode, error) {
schema, err := typeutil.CreateSchemaHelper(schemaPb)
if err != nil {
return nil, err
}
expr, err := ParseExpr(schema, exprStr)
expr, err := ParseExpr(schema, exprStr, opts...)
if err != nil {
return nil, err
}
@ -83,13 +83,13 @@ func CreateRetrievePlan(schemaPb *schemapb.CollectionSchema, exprStr string) (*p
return planNode, nil
}
func CreateSearchPlan(schemaPb *schemapb.CollectionSchema, exprStr string, vectorFieldName string, queryInfo *planpb.QueryInfo) (*planpb.PlanNode, error) {
func CreateSearchPlan(schemaPb *schemapb.CollectionSchema, exprStr string, vectorFieldName string, queryInfo *planpb.QueryInfo, opts ...ParserVisitorOpt) (*planpb.PlanNode, error) {
schema, err := typeutil.CreateSchemaHelper(schemaPb)
if err != nil {
return nil, err
}
expr, err := ParseExpr(schema, exprStr)
expr, err := ParseExpr(schema, exprStr, opts...)
if err != nil {
return nil, err
}

View File

@ -1,9 +1,12 @@
package planparserv2
import (
"fmt"
"sync"
"testing"
"github.com/golang/protobuf/proto"
"github.com/milvus-io/milvus/internal/proto/planpb"
"github.com/stretchr/testify/assert"
@ -535,3 +538,49 @@ func Test_handleExpr_17126(t *testing.T) {
}
wg.Wait()
}
// test udf expr
func TestExpr_UDF(t *testing.T) {
schema := newTestSchema()
helper, err := typeutil.CreateSchemaHelper(schema)
assert.NoError(t, err)
exprStrs := []string{
`UDF "funcName" [2]`,
`UDF "funcName" [Int8Field]`,
`UDF "funcName" [DoubleField, 2]`,
`UDF "funcName" [Int8Field, Int8Field]`,
`UDF "funcName" [Int8Field, 2, Int16Field, 4]`,
}
for _, exprStr := range exprStrs {
expr, err := ParseExpr(helper, exprStr)
assert.NoError(t, err, exprStr)
marshaledProtoPlan := proto.MarshalTextString(expr)
fmt.Printf(marshaledProtoPlan)
ShowExpr(expr)
}
//marshaledProtoPlan1 := proto.MarshalTextString(exprStr1)
//fmt.Printf(marshaledProtoPlan1)
}
// test udf expr
func TestExprTextString_UDF(t *testing.T) {
schema := newTestSchema()
helper, err := typeutil.CreateSchemaHelper(schema)
assert.NoError(t, err)
exprStrs := []string{
`UDF "funcName" [DoubleField, 2]`,
`UDF "less_than" [Int64Field, 2000]`,
`UDF "multiple_columns" [Int8Field, Int16Field, Int32Field, Int64Field, 2000]`,
}
for _, exprStr := range exprStrs {
expr, err := ParseExpr(helper, exprStr)
assert.NoError(t, err, exprStr)
marshaledProtoPlan := proto.MarshalTextString(expr)
fmt.Printf(marshaledProtoPlan)
ShowExpr(expr)
}
}

View File

@ -59,6 +59,8 @@ func (v *ShowExprVisitor) VisitExpr(expr *planpb.Expr) interface{} {
js["expr"] = v.VisitValueExpr(realExpr.ValueExpr)
case *planpb.Expr_ColumnExpr:
js["expr"] = v.VisitColumnExpr(realExpr.ColumnExpr)
case *planpb.Expr_UdfExpr:
js["expr"] = v.VisitUdfExpr(realExpr.UdfExpr)
default:
js["expr"] = ""
}
@ -155,6 +157,27 @@ func (v *ShowExprVisitor) VisitColumnExpr(expr *planpb.ColumnExpr) interface{} {
return js
}
func (v *ShowExprVisitor) VisitUdfExpr(expr *planpb.UdfExpr) interface{} {
js := make(map[string]interface{})
js["expr_type"] = "udf"
js["udf_func_name"] = expr.GetUdfFuncName()
udfArgs := make([]interface{}, 0, len(expr.UdfParams))
for _, v := range expr.UdfParams {
col := v.GetColumnInfo()
if col != nil {
udfArgs = append(udfArgs, extractColumnInfo(col))
}
val := v.GetValue()
if val != nil {
udfArgs = append(udfArgs, extractGenericValue(val))
}
}
js["udf_args"] = udfArgs
js["wasm_body"] = expr.GetWasmBody()
js["arg_types"] = expr.GetArgTypes()
return js
}
func NewShowExprVisitor() LogicalExprVisitor {
return &ShowExprVisitor{}
}

View File

@ -203,6 +203,11 @@ enum MsgType {
GetRecoveryInfo = 602;
GetSegmentState = 603;
/* FUNCTION */
CreateFunction = 700;
DropFunction = 701;
GetFunctionInfo = 702;
/* SYSTEM CONTROL */
TimeTick = 1200;
QueryNodeStats = 1201; // GOOSE TODO: Remove kQueryNodeStats

View File

@ -83,6 +83,9 @@ service MilvusService {
rpc SelectUser(SelectUserRequest) returns (SelectUserResponse) {}
rpc OperatePrivilege(OperatePrivilegeRequest) returns (common.Status) {}
rpc SelectGrant(SelectGrantRequest) returns (SelectGrantResponse) {}
rpc CreateFunction(CreateFunctionRequest) returns (common.Status){}
rpc DropFunction(DropFunctionRequest) returns (common.Status){}
}
message CreateAliasRequest {
@ -1256,6 +1259,22 @@ message OperatePrivilegeRequest {
OperatePrivilegeType type = 3;
}
message CreateFunctionRequest {
common.MsgBase base = 1;
// The unique function name in rootcoord.(Required)
string function_name = 2;
// wat file after base64.(Required)
string wat_body_base64 = 3;
// list of function parameter types.(Required)
repeated schema.DataType arg_types = 4;
}
message DropFunctionRequest {
common.MsgBase base = 1;
// The unique function name in rootcoord.(Required)
string function_name = 2;
}
message MilvusExt {
string version = 1;
}

View File

@ -125,6 +125,20 @@ message BinaryArithOpEvalRangeExpr {
GenericValue value = 5;
}
message UdfParams {
oneof val {
GenericValue value = 1;
ColumnInfo column_info = 2;
};
}
message UdfExpr {
string udf_func_name = 1;
repeated UdfParams udf_params = 2;
string wasm_body = 3;
repeated schema.DataType arg_types = 4;
}
message Expr {
oneof expr {
TermExpr term_expr = 1;
@ -137,6 +151,7 @@ message Expr {
BinaryArithExpr binary_arith_expr = 8;
ValueExpr value_expr = 9;
ColumnExpr column_expr = 10;
UdfExpr udf_expr = 11;
};
}

View File

@ -994,6 +994,149 @@ func (m *BinaryArithOpEvalRangeExpr) GetValue() *GenericValue {
return nil
}
type UdfParams struct {
// Types that are valid to be assigned to Val:
// *UdfParams_Value
// *UdfParams_ColumnInfo
Val isUdfParams_Val `protobuf_oneof:"val"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UdfParams) Reset() { *m = UdfParams{} }
func (m *UdfParams) String() string { return proto.CompactTextString(m) }
func (*UdfParams) ProtoMessage() {}
func (*UdfParams) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{14}
}
func (m *UdfParams) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UdfParams.Unmarshal(m, b)
}
func (m *UdfParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UdfParams.Marshal(b, m, deterministic)
}
func (m *UdfParams) XXX_Merge(src proto.Message) {
xxx_messageInfo_UdfParams.Merge(m, src)
}
func (m *UdfParams) XXX_Size() int {
return xxx_messageInfo_UdfParams.Size(m)
}
func (m *UdfParams) XXX_DiscardUnknown() {
xxx_messageInfo_UdfParams.DiscardUnknown(m)
}
var xxx_messageInfo_UdfParams proto.InternalMessageInfo
type isUdfParams_Val interface {
isUdfParams_Val()
}
type UdfParams_Value struct {
Value *GenericValue `protobuf:"bytes,1,opt,name=value,proto3,oneof"`
}
type UdfParams_ColumnInfo struct {
ColumnInfo *ColumnInfo `protobuf:"bytes,2,opt,name=column_info,json=columnInfo,proto3,oneof"`
}
func (*UdfParams_Value) isUdfParams_Val() {}
func (*UdfParams_ColumnInfo) isUdfParams_Val() {}
func (m *UdfParams) GetVal() isUdfParams_Val {
if m != nil {
return m.Val
}
return nil
}
func (m *UdfParams) GetValue() *GenericValue {
if x, ok := m.GetVal().(*UdfParams_Value); ok {
return x.Value
}
return nil
}
func (m *UdfParams) GetColumnInfo() *ColumnInfo {
if x, ok := m.GetVal().(*UdfParams_ColumnInfo); ok {
return x.ColumnInfo
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*UdfParams) XXX_OneofWrappers() []interface{} {
return []interface{}{
(*UdfParams_Value)(nil),
(*UdfParams_ColumnInfo)(nil),
}
}
type UdfExpr struct {
UdfFuncName string `protobuf:"bytes,1,opt,name=udf_func_name,json=udfFuncName,proto3" json:"udf_func_name,omitempty"`
UdfParams []*UdfParams `protobuf:"bytes,2,rep,name=udf_params,json=udfParams,proto3" json:"udf_params,omitempty"`
WasmBody string `protobuf:"bytes,3,opt,name=wasm_body,json=wasmBody,proto3" json:"wasm_body,omitempty"`
ArgTypes []schemapb.DataType `protobuf:"varint,4,rep,packed,name=arg_types,json=argTypes,proto3,enum=milvus.proto.schema.DataType" json:"arg_types,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UdfExpr) Reset() { *m = UdfExpr{} }
func (m *UdfExpr) String() string { return proto.CompactTextString(m) }
func (*UdfExpr) ProtoMessage() {}
func (*UdfExpr) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{15}
}
func (m *UdfExpr) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UdfExpr.Unmarshal(m, b)
}
func (m *UdfExpr) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UdfExpr.Marshal(b, m, deterministic)
}
func (m *UdfExpr) XXX_Merge(src proto.Message) {
xxx_messageInfo_UdfExpr.Merge(m, src)
}
func (m *UdfExpr) XXX_Size() int {
return xxx_messageInfo_UdfExpr.Size(m)
}
func (m *UdfExpr) XXX_DiscardUnknown() {
xxx_messageInfo_UdfExpr.DiscardUnknown(m)
}
var xxx_messageInfo_UdfExpr proto.InternalMessageInfo
func (m *UdfExpr) GetUdfFuncName() string {
if m != nil {
return m.UdfFuncName
}
return ""
}
func (m *UdfExpr) GetUdfParams() []*UdfParams {
if m != nil {
return m.UdfParams
}
return nil
}
func (m *UdfExpr) GetWasmBody() string {
if m != nil {
return m.WasmBody
}
return ""
}
func (m *UdfExpr) GetArgTypes() []schemapb.DataType {
if m != nil {
return m.ArgTypes
}
return nil
}
type Expr struct {
// Types that are valid to be assigned to Expr:
// *Expr_TermExpr
@ -1006,6 +1149,7 @@ type Expr struct {
// *Expr_BinaryArithExpr
// *Expr_ValueExpr
// *Expr_ColumnExpr
// *Expr_UdfExpr
Expr isExpr_Expr `protobuf_oneof:"expr"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@ -1016,7 +1160,7 @@ func (m *Expr) Reset() { *m = Expr{} }
func (m *Expr) String() string { return proto.CompactTextString(m) }
func (*Expr) ProtoMessage() {}
func (*Expr) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{14}
return fileDescriptor_2d655ab2f7683c23, []int{16}
}
func (m *Expr) XXX_Unmarshal(b []byte) error {
@ -1081,6 +1225,10 @@ type Expr_ColumnExpr struct {
ColumnExpr *ColumnExpr `protobuf:"bytes,10,opt,name=column_expr,json=columnExpr,proto3,oneof"`
}
type Expr_UdfExpr struct {
UdfExpr *UdfExpr `protobuf:"bytes,11,opt,name=udf_expr,json=udfExpr,proto3,oneof"`
}
func (*Expr_TermExpr) isExpr_Expr() {}
func (*Expr_UnaryExpr) isExpr_Expr() {}
@ -1101,6 +1249,8 @@ func (*Expr_ValueExpr) isExpr_Expr() {}
func (*Expr_ColumnExpr) isExpr_Expr() {}
func (*Expr_UdfExpr) isExpr_Expr() {}
func (m *Expr) GetExpr() isExpr_Expr {
if m != nil {
return m.Expr
@ -1178,6 +1328,13 @@ func (m *Expr) GetColumnExpr() *ColumnExpr {
return nil
}
func (m *Expr) GetUdfExpr() *UdfExpr {
if x, ok := m.GetExpr().(*Expr_UdfExpr); ok {
return x.UdfExpr
}
return nil
}
// XXX_OneofWrappers is for the internal use of the proto package.
func (*Expr) XXX_OneofWrappers() []interface{} {
return []interface{}{
@ -1191,6 +1348,7 @@ func (*Expr) XXX_OneofWrappers() []interface{} {
(*Expr_BinaryArithExpr)(nil),
(*Expr_ValueExpr)(nil),
(*Expr_ColumnExpr)(nil),
(*Expr_UdfExpr)(nil),
}
}
@ -1209,7 +1367,7 @@ func (m *VectorANNS) Reset() { *m = VectorANNS{} }
func (m *VectorANNS) String() string { return proto.CompactTextString(m) }
func (*VectorANNS) ProtoMessage() {}
func (*VectorANNS) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{15}
return fileDescriptor_2d655ab2f7683c23, []int{17}
}
func (m *VectorANNS) XXX_Unmarshal(b []byte) error {
@ -1280,7 +1438,7 @@ func (m *PlanNode) Reset() { *m = PlanNode{} }
func (m *PlanNode) String() string { return proto.CompactTextString(m) }
func (*PlanNode) ProtoMessage() {}
func (*PlanNode) Descriptor() ([]byte, []int) {
return fileDescriptor_2d655ab2f7683c23, []int{16}
return fileDescriptor_2d655ab2f7683c23, []int{18}
}
func (m *PlanNode) XXX_Unmarshal(b []byte) error {
@ -1372,6 +1530,8 @@ func init() {
proto.RegisterType((*BinaryArithOp)(nil), "milvus.proto.plan.BinaryArithOp")
proto.RegisterType((*BinaryArithExpr)(nil), "milvus.proto.plan.BinaryArithExpr")
proto.RegisterType((*BinaryArithOpEvalRangeExpr)(nil), "milvus.proto.plan.BinaryArithOpEvalRangeExpr")
proto.RegisterType((*UdfParams)(nil), "milvus.proto.plan.UdfParams")
proto.RegisterType((*UdfExpr)(nil), "milvus.proto.plan.UdfExpr")
proto.RegisterType((*Expr)(nil), "milvus.proto.plan.Expr")
proto.RegisterType((*VectorANNS)(nil), "milvus.proto.plan.VectorANNS")
proto.RegisterType((*PlanNode)(nil), "milvus.proto.plan.PlanNode")
@ -1380,93 +1540,102 @@ func init() {
func init() { proto.RegisterFile("plan.proto", fileDescriptor_2d655ab2f7683c23) }
var fileDescriptor_2d655ab2f7683c23 = []byte{
// 1407 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0xcd, 0x72, 0xdc, 0x44,
0x10, 0x5e, 0xad, 0x76, 0xbd, 0x52, 0xef, 0x7a, 0xad, 0xe8, 0x42, 0x7e, 0x48, 0x6c, 0x44, 0x8a,
0x98, 0x50, 0xb1, 0x2b, 0x24, 0x24, 0x95, 0x50, 0x01, 0xff, 0x05, 0x7b, 0x8b, 0xc4, 0x36, 0x8a,
0xe3, 0x03, 0x17, 0xd5, 0xac, 0x34, 0xf6, 0x4e, 0x45, 0xab, 0x51, 0x46, 0xa3, 0x4d, 0xf6, 0xcc,
0x8d, 0x1b, 0x0f, 0xc0, 0x15, 0xee, 0xdc, 0xe0, 0xc2, 0x0b, 0x70, 0xe0, 0xc8, 0x9d, 0xb7, 0xe0,
0x44, 0x4d, 0x8f, 0xf6, 0x2f, 0xb5, 0x1b, 0xaf, 0x8b, 0x54, 0x71, 0x1b, 0xf5, 0x74, 0x7f, 0xd3,
0xfd, 0x4d, 0x77, 0x4f, 0x0b, 0x20, 0x8d, 0x49, 0xb2, 0x96, 0x0a, 0x2e, 0xb9, 0x7b, 0xa1, 0xcb,
0xe2, 0x5e, 0x9e, 0xe9, 0xaf, 0x35, 0xb5, 0x71, 0xb9, 0x91, 0x85, 0x1d, 0xda, 0x25, 0x5a, 0xe4,
0xfd, 0x60, 0x40, 0x63, 0x97, 0x26, 0x54, 0xb0, 0xf0, 0x98, 0xc4, 0x39, 0x75, 0xaf, 0x80, 0xd5,
0xe6, 0x3c, 0x0e, 0x7a, 0x24, 0xbe, 0x68, 0xac, 0x18, 0xab, 0xd6, 0x5e, 0xc9, 0xaf, 0x29, 0xc9,
0x31, 0x89, 0xdd, 0xab, 0x60, 0xb3, 0x44, 0xde, 0xbb, 0x8b, 0xbb, 0xe5, 0x15, 0x63, 0xd5, 0xdc,
0x2b, 0xf9, 0x16, 0x8a, 0x8a, 0xed, 0x93, 0x98, 0x13, 0x89, 0xdb, 0xe6, 0x8a, 0xb1, 0x6a, 0xa8,
0x6d, 0x14, 0xa9, 0xed, 0x65, 0x80, 0x4c, 0x0a, 0x96, 0x9c, 0xe2, 0x7e, 0x65, 0xc5, 0x58, 0xb5,
0xf7, 0x4a, 0xbe, 0xad, 0x65, 0xc7, 0x24, 0xde, 0xaa, 0x82, 0xd9, 0x23, 0xb1, 0xf7, 0xbd, 0x01,
0xf6, 0x37, 0x39, 0x15, 0xfd, 0x56, 0x72, 0xc2, 0x5d, 0x17, 0x2a, 0x92, 0xa7, 0x2f, 0xd0, 0x19,
0xd3, 0xc7, 0xb5, 0xbb, 0x0c, 0xf5, 0x2e, 0x95, 0x82, 0x85, 0x81, 0xec, 0xa7, 0x14, 0x8f, 0xb2,
0x7d, 0xd0, 0xa2, 0xa3, 0x7e, 0x4a, 0xdd, 0x0f, 0x61, 0x31, 0xa3, 0x44, 0x84, 0x9d, 0x20, 0x25,
0x82, 0x74, 0x33, 0x7d, 0x9a, 0xdf, 0xd0, 0xc2, 0x43, 0x94, 0x29, 0x25, 0xc1, 0xf3, 0x24, 0x0a,
0x22, 0x1a, 0xb2, 0x2e, 0x89, 0x2f, 0x56, 0xf1, 0x88, 0x06, 0x0a, 0x77, 0xb4, 0xcc, 0xfb, 0xc9,
0x00, 0xd8, 0xe6, 0x71, 0xde, 0x4d, 0xd0, 0x9b, 0x4b, 0x60, 0x9d, 0x30, 0x1a, 0x47, 0x01, 0x8b,
0x0a, 0x8f, 0x6a, 0xf8, 0xdd, 0x8a, 0xdc, 0x87, 0x60, 0x47, 0x44, 0x12, 0xed, 0x92, 0x22, 0xa7,
0xf9, 0xe9, 0xd5, 0xb5, 0x09, 0xfe, 0x0b, 0xe6, 0x77, 0x88, 0x24, 0xca, 0x4b, 0xdf, 0x8a, 0x8a,
0x95, 0x7b, 0x1d, 0x9a, 0x2c, 0x0b, 0x52, 0xc1, 0xba, 0x44, 0xf4, 0x83, 0x17, 0xb4, 0x8f, 0x31,
0x59, 0x7e, 0x83, 0x65, 0x87, 0x5a, 0xf8, 0x35, 0xed, 0xbb, 0x57, 0xc0, 0x66, 0x59, 0x40, 0x72,
0xc9, 0x5b, 0x3b, 0x18, 0x91, 0xe5, 0x5b, 0x2c, 0xdb, 0xc4, 0x6f, 0xef, 0xcb, 0x81, 0x9f, 0x8f,
0x5f, 0xa7, 0xc2, 0xbd, 0x0d, 0x15, 0x96, 0x9c, 0x70, 0xf4, 0xb1, 0xfe, 0xa6, 0x1f, 0x98, 0x20,
0xa3, 0xa0, 0x7c, 0x54, 0xf5, 0xb6, 0xc0, 0xc6, 0x14, 0x40, 0xfb, 0xcf, 0xa0, 0xda, 0x53, 0x1f,
0x05, 0xc0, 0xf2, 0x14, 0x80, 0xf1, 0xb4, 0xf1, 0xb5, 0xb6, 0xf7, 0x8b, 0x01, 0xcd, 0xe7, 0x09,
0x11, 0x7d, 0x9f, 0x24, 0xa7, 0x1a, 0xe9, 0x0b, 0xa8, 0x87, 0x78, 0x54, 0x30, 0xbf, 0x43, 0x10,
0x8e, 0x18, 0xff, 0x18, 0xca, 0x3c, 0x2d, 0xf8, 0xbc, 0x34, 0xc5, 0xec, 0x20, 0x45, 0x2e, 0xcb,
0x3c, 0x1d, 0x39, 0x6d, 0x9e, 0xcb, 0xe9, 0x9f, 0xcb, 0xb0, 0xb4, 0xc5, 0xde, 0xad, 0xd7, 0x37,
0x60, 0x29, 0xe6, 0xaf, 0xa8, 0x08, 0x58, 0x12, 0xc6, 0x79, 0xc6, 0x7a, 0x3a, 0x25, 0x2c, 0xbf,
0x89, 0xe2, 0xd6, 0x40, 0xaa, 0x14, 0xf3, 0x34, 0x9d, 0x50, 0xd4, 0x57, 0xdf, 0x44, 0xf1, 0x48,
0x71, 0x03, 0xea, 0x1a, 0x51, 0x87, 0x58, 0x99, 0x2f, 0x44, 0x40, 0x1b, 0x5d, 0xda, 0x1b, 0x50,
0xd7, 0x47, 0x69, 0x84, 0xea, 0x9c, 0x08, 0x68, 0x83, 0x6b, 0xef, 0x0f, 0x03, 0xea, 0xdb, 0xbc,
0x9b, 0x12, 0xa1, 0x59, 0xda, 0x05, 0x27, 0xa6, 0x27, 0x32, 0x38, 0x37, 0x55, 0x4d, 0x65, 0x36,
0x56, 0x56, 0x2d, 0xb8, 0x20, 0xd8, 0x69, 0x67, 0x12, 0xa9, 0x3c, 0x0f, 0xd2, 0x12, 0xda, 0x6d,
0xbf, 0x99, 0x2f, 0xe6, 0x1c, 0xf9, 0xe2, 0x7d, 0x67, 0x80, 0x75, 0x44, 0x45, 0xf7, 0x9d, 0xdc,
0xf8, 0x7d, 0x58, 0x40, 0x5e, 0xb3, 0x8b, 0xe5, 0x15, 0x73, 0x1e, 0x62, 0x0b, 0x75, 0xd5, 0x82,
0x6d, 0xac, 0x19, 0x74, 0xe3, 0x2e, 0xba, 0x6f, 0xa0, 0xfb, 0xd7, 0xa7, 0x40, 0x0c, 0x35, 0xf5,
0xea, 0x20, 0xc5, 0xcc, 0xbf, 0x05, 0xd5, 0xb0, 0xc3, 0xe2, 0xa8, 0xe0, 0xec, 0xbd, 0x29, 0x86,
0xca, 0xc6, 0xd7, 0x5a, 0xde, 0x32, 0xd4, 0x0a, 0x6b, 0xb7, 0x0e, 0xb5, 0x56, 0xd2, 0x23, 0x31,
0x8b, 0x9c, 0x92, 0x5b, 0x03, 0x73, 0x9f, 0x4b, 0xc7, 0xf0, 0xfe, 0x32, 0x00, 0x74, 0x49, 0xa0,
0x53, 0xf7, 0xc6, 0x9c, 0xfa, 0x68, 0x0a, 0xf6, 0x48, 0xb5, 0x58, 0x16, 0x6e, 0x7d, 0x02, 0x15,
0x75, 0xd1, 0x67, 0x79, 0x85, 0x4a, 0x2a, 0x06, 0xbc, 0xcb, 0xa2, 0x7a, 0x67, 0xc7, 0x80, 0x5a,
0xde, 0x3d, 0xb0, 0x06, 0x67, 0x4d, 0x06, 0xd1, 0x04, 0x78, 0xc2, 0x4f, 0x59, 0x48, 0xe2, 0xcd,
0x24, 0x72, 0x0c, 0x77, 0x11, 0xec, 0xe2, 0xfb, 0x40, 0x38, 0x65, 0xef, 0x4f, 0x03, 0x16, 0xb5,
0xe1, 0xa6, 0x60, 0xb2, 0x73, 0x90, 0xfe, 0xe7, 0x9b, 0x7f, 0x00, 0x16, 0x51, 0x50, 0xc1, 0xb0,
0x4f, 0x5d, 0x9b, 0x62, 0x5c, 0x9c, 0x86, 0xc9, 0x57, 0x23, 0xc5, 0xd1, 0x3b, 0xb0, 0xa8, 0xf3,
0x9e, 0xa7, 0x54, 0x90, 0x24, 0x9a, 0xb7, 0x73, 0x35, 0xd0, 0xea, 0x40, 0x1b, 0x79, 0x3f, 0x1a,
0x83, 0x06, 0x86, 0x87, 0xe0, 0x95, 0x0d, 0xa8, 0x37, 0xce, 0x45, 0x7d, 0x79, 0x1e, 0xea, 0xdd,
0xb5, 0xb1, 0x12, 0x3b, 0x2b, 0x54, 0x55, 0x67, 0xbf, 0x97, 0xe1, 0xf2, 0x04, 0xe5, 0x8f, 0x7b,
0x24, 0x7e, 0x77, 0xbd, 0xf6, 0xff, 0xe6, 0xbf, 0x68, 0x39, 0x95, 0x73, 0x3d, 0x51, 0xd5, 0x73,
0x3d, 0x51, 0xff, 0x54, 0xa1, 0x82, 0x5c, 0x3d, 0x04, 0x5b, 0x52, 0xd1, 0x0d, 0xe8, 0xeb, 0x54,
0x14, 0x4c, 0x5d, 0x99, 0x82, 0x31, 0xe8, 0x6a, 0x6a, 0xfe, 0x92, 0x83, 0x0e, 0xf7, 0x08, 0x20,
0x57, 0x97, 0xa0, 0x8d, 0xf5, 0x55, 0xbf, 0xff, 0xb6, 0x16, 0xa3, 0xa6, 0xb3, 0x7c, 0xd8, 0x04,
0x36, 0xa0, 0xde, 0x66, 0x23, 0x7b, 0x73, 0xe6, 0x35, 0x8d, 0xba, 0xc1, 0x5e, 0xc9, 0x87, 0xf6,
0xa8, 0x8d, 0x6c, 0x43, 0x23, 0xd4, 0xaf, 0x87, 0x86, 0xd0, 0x6f, 0xd8, 0xb5, 0xa9, 0x37, 0x3d,
0x7c, 0x64, 0xf6, 0x4a, 0x7e, 0x3d, 0x1c, 0x7b, 0x73, 0x9e, 0x82, 0xa3, 0xa3, 0x10, 0x2a, 0x81,
0x34, 0x90, 0x26, 0xf3, 0x83, 0x59, 0xb1, 0x0c, 0x53, 0x6d, 0xaf, 0xe4, 0x37, 0xf3, 0xc9, 0x87,
0xfe, 0x10, 0x2e, 0x14, 0x51, 0x8d, 0xe1, 0x2d, 0x20, 0x9e, 0x37, 0x33, 0xb6, 0x71, 0xc0, 0xa5,
0xf6, 0x1b, 0xa3, 0x83, 0x84, 0xe5, 0x02, 0x71, 0x90, 0x95, 0x01, 0xed, 0x91, 0x78, 0x1c, 0xbf,
0x86, 0xf8, 0xb7, 0x66, 0xe2, 0x4f, 0x2b, 0x93, 0xbd, 0x92, 0x7f, 0xb9, 0x3d, 0xbb, 0x88, 0x46,
0x71, 0xe8, 0x53, 0xf1, 0x1c, 0xeb, 0x8c, 0x38, 0x86, 0xed, 0x62, 0x14, 0xc7, 0xa8, 0x83, 0x3c,
0x02, 0xc0, 0xe4, 0xd3, 0x50, 0xf6, 0xcc, 0x74, 0x19, 0x0e, 0x8d, 0x2a, 0x5d, 0x7a, 0xc3, 0x09,
0x72, 0x63, 0x58, 0xd5, 0x68, 0x0f, 0x67, 0x54, 0xf5, 0x20, 0x5d, 0xc2, 0xe1, 0xd7, 0xd6, 0x02,
0x54, 0x94, 0xa9, 0xf7, 0xb7, 0x01, 0x70, 0x4c, 0x43, 0xc9, 0xc5, 0xe6, 0xfe, 0xfe, 0xb3, 0x62,
0x0a, 0xd6, 0xde, 0xea, 0x5f, 0x14, 0x35, 0x05, 0xeb, 0x80, 0x26, 0xe6, 0xf3, 0xf2, 0xe4, 0x7c,
0x7e, 0x1f, 0x20, 0x15, 0x34, 0x62, 0x21, 0x91, 0x34, 0x3b, 0xeb, 0x91, 0x19, 0x53, 0x75, 0x3f,
0x07, 0x78, 0xa9, 0x7e, 0x47, 0x74, 0x7b, 0xaa, 0xcc, 0x24, 0x62, 0xf8, 0xcf, 0xe2, 0xdb, 0x2f,
0x87, 0xbf, 0x2f, 0x37, 0x60, 0x29, 0x8d, 0x49, 0x48, 0x3b, 0x3c, 0x8e, 0xa8, 0x08, 0x24, 0x39,
0xc5, 0x6c, 0xb5, 0xfd, 0xe6, 0x98, 0xf8, 0x88, 0x9c, 0x7a, 0xbf, 0x1a, 0x60, 0x1d, 0xc6, 0x24,
0xd9, 0xe7, 0x11, 0x8e, 0x6a, 0x3d, 0x8c, 0x38, 0x20, 0x49, 0x92, 0xbd, 0xa5, 0x25, 0x8e, 0x78,
0x51, 0xe4, 0x69, 0x9b, 0xcd, 0x24, 0xc9, 0xdc, 0x07, 0x13, 0xd1, 0xbe, 0xbd, 0xaf, 0x2b, 0xd3,
0xb1, 0x78, 0x57, 0xc1, 0xe1, 0xb9, 0x4c, 0x73, 0x19, 0x0c, 0xa8, 0x54, 0x74, 0x99, 0xab, 0xa6,
0xdf, 0xd4, 0xf2, 0xaf, 0x34, 0xa3, 0x99, 0xba, 0xa1, 0x84, 0x47, 0xf4, 0xe6, 0x6f, 0x06, 0x2c,
0xe8, 0x26, 0x37, 0xf9, 0x14, 0x2f, 0x41, 0x7d, 0x57, 0x50, 0x22, 0xa9, 0x38, 0xea, 0x90, 0xc4,
0x31, 0x5c, 0x07, 0x1a, 0x85, 0xe0, 0xf1, 0xcb, 0x9c, 0xc4, 0x4e, 0xd9, 0x6d, 0x80, 0xf5, 0x84,
0x66, 0x19, 0xee, 0x9b, 0xf8, 0x56, 0xd3, 0x2c, 0xd3, 0x9b, 0x15, 0xd7, 0x86, 0xaa, 0x5e, 0x56,
0x95, 0xde, 0x3e, 0x97, 0xfa, 0x6b, 0x41, 0x01, 0x1f, 0x0a, 0x7a, 0xc2, 0x5e, 0x3f, 0x25, 0x32,
0xec, 0x38, 0x35, 0x05, 0x7c, 0xc8, 0x33, 0x39, 0x94, 0x58, 0xca, 0x56, 0x2f, 0x6d, 0xb5, 0xc4,
0x42, 0x71, 0xc0, 0x5d, 0x80, 0x72, 0x2b, 0x71, 0xea, 0x4a, 0xb4, 0xcf, 0x65, 0x2b, 0x71, 0x1a,
0x37, 0x77, 0xa1, 0x3e, 0xf6, 0x36, 0xa8, 0x00, 0x9e, 0x27, 0x2f, 0x12, 0xfe, 0x2a, 0xd1, 0x03,
0xd1, 0x66, 0xa4, 0x86, 0x88, 0x1a, 0x98, 0xcf, 0xf2, 0xb6, 0x53, 0x56, 0x8b, 0xa7, 0x79, 0xec,
0x98, 0x6a, 0xb1, 0xc3, 0x7a, 0x4e, 0x05, 0x25, 0x3c, 0x72, 0xaa, 0x5b, 0x77, 0xbe, 0xbd, 0x7d,
0xca, 0x64, 0x27, 0x6f, 0xaf, 0x85, 0xbc, 0xbb, 0xae, 0xa9, 0xbe, 0xc5, 0x78, 0xb1, 0x5a, 0x67,
0x89, 0xa4, 0x22, 0x21, 0xf1, 0x3a, 0xb2, 0xbf, 0xae, 0xd8, 0x4f, 0xdb, 0xed, 0x05, 0xfc, 0xba,
0xf3, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x32, 0x23, 0x5b, 0x87, 0xb6, 0x0f, 0x00, 0x00,
// 1538 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0xcd, 0x73, 0xdb, 0x44,
0x14, 0xb7, 0xfc, 0x29, 0x3d, 0x3b, 0x8e, 0xaa, 0x0b, 0x6d, 0xd2, 0x36, 0x41, 0x74, 0x68, 0x28,
0xd3, 0x64, 0x4a, 0x4b, 0x33, 0x2d, 0x53, 0x68, 0x3e, 0xda, 0xd8, 0x43, 0x9b, 0x04, 0x35, 0xcd,
0x81, 0x8b, 0x66, 0x2d, 0xad, 0x6d, 0x4d, 0xe5, 0x5d, 0x75, 0x25, 0xb9, 0xf5, 0x99, 0x1b, 0x33,
0x1c, 0xf8, 0x03, 0xb8, 0xc2, 0x1d, 0x4e, 0x70, 0xe1, 0xc0, 0x95, 0x03, 0x47, 0xee, 0xfc, 0x23,
0xcc, 0xbe, 0x95, 0xbf, 0x3a, 0x76, 0xe3, 0x0c, 0x9d, 0xe1, 0xb6, 0xfb, 0xf6, 0xbd, 0xb7, 0xef,
0xfd, 0xf6, 0x7d, 0x2d, 0x40, 0x14, 0x12, 0xb6, 0x19, 0x09, 0x9e, 0x70, 0xeb, 0x42, 0x2f, 0x08,
0xfb, 0x69, 0xac, 0x76, 0x9b, 0xf2, 0x60, 0xa5, 0x16, 0x7b, 0x5d, 0xda, 0x23, 0x8a, 0x64, 0x7f,
0xaf, 0x41, 0xed, 0x80, 0x32, 0x2a, 0x02, 0xef, 0x94, 0x84, 0x29, 0xb5, 0x56, 0x41, 0x6f, 0x71,
0x1e, 0xba, 0x7d, 0x12, 0x5e, 0xd4, 0xd6, 0xb5, 0x0d, 0xbd, 0x91, 0x73, 0x2a, 0x92, 0x72, 0x4a,
0x42, 0xeb, 0x0a, 0x18, 0x01, 0x4b, 0xee, 0xde, 0xc1, 0xd3, 0xfc, 0xba, 0xb6, 0x51, 0x68, 0xe4,
0x1c, 0x1d, 0x49, 0xd9, 0x71, 0x3b, 0xe4, 0x24, 0xc1, 0xe3, 0xc2, 0xba, 0xb6, 0xa1, 0xc9, 0x63,
0x24, 0xc9, 0xe3, 0x35, 0x80, 0x38, 0x11, 0x01, 0xeb, 0xe0, 0x79, 0x71, 0x5d, 0xdb, 0x30, 0x1a,
0x39, 0xc7, 0x50, 0xb4, 0x53, 0x12, 0xee, 0x96, 0xa0, 0xd0, 0x27, 0xa1, 0xfd, 0xad, 0x06, 0xc6,
0x57, 0x29, 0x15, 0x83, 0x26, 0x6b, 0x73, 0xcb, 0x82, 0x62, 0xc2, 0xa3, 0x17, 0x68, 0x4c, 0xc1,
0xc1, 0xb5, 0xb5, 0x06, 0xd5, 0x1e, 0x4d, 0x44, 0xe0, 0xb9, 0xc9, 0x20, 0xa2, 0x78, 0x95, 0xe1,
0x80, 0x22, 0x9d, 0x0c, 0x22, 0x6a, 0x7d, 0x00, 0x4b, 0x31, 0x25, 0xc2, 0xeb, 0xba, 0x11, 0x11,
0xa4, 0x17, 0xab, 0xdb, 0x9c, 0x9a, 0x22, 0x1e, 0x23, 0x4d, 0x32, 0x09, 0x9e, 0x32, 0xdf, 0xf5,
0xa9, 0x17, 0xf4, 0x48, 0x78, 0xb1, 0x84, 0x57, 0xd4, 0x90, 0xb8, 0xaf, 0x68, 0xf6, 0x8f, 0x1a,
0xc0, 0x1e, 0x0f, 0xd3, 0x1e, 0x43, 0x6b, 0x2e, 0x81, 0xde, 0x0e, 0x68, 0xe8, 0xbb, 0x81, 0x9f,
0x59, 0x54, 0xc1, 0x7d, 0xd3, 0xb7, 0xee, 0x83, 0xe1, 0x93, 0x84, 0x28, 0x93, 0x24, 0x38, 0xf5,
0x4f, 0xae, 0x6c, 0x4e, 0xe1, 0x9f, 0x21, 0xbf, 0x4f, 0x12, 0x22, 0xad, 0x74, 0x74, 0x3f, 0x5b,
0x59, 0xd7, 0xa0, 0x1e, 0xc4, 0x6e, 0x24, 0x82, 0x1e, 0x11, 0x03, 0xf7, 0x05, 0x1d, 0xa0, 0x4f,
0xba, 0x53, 0x0b, 0xe2, 0x63, 0x45, 0xfc, 0x92, 0x0e, 0xac, 0x55, 0x30, 0x82, 0xd8, 0x25, 0x69,
0xc2, 0x9b, 0xfb, 0xe8, 0x91, 0xee, 0xe8, 0x41, 0xbc, 0x83, 0x7b, 0xfb, 0x8b, 0xa1, 0x9d, 0x8f,
0x5e, 0x47, 0xc2, 0xba, 0x05, 0xc5, 0x80, 0xb5, 0x39, 0xda, 0x58, 0x7d, 0xd3, 0x0e, 0x0c, 0x90,
0xb1, 0x53, 0x0e, 0xb2, 0xda, 0xbb, 0x60, 0x60, 0x08, 0xa0, 0xfc, 0xa7, 0x50, 0xea, 0xcb, 0x4d,
0xa6, 0x60, 0x6d, 0x86, 0x82, 0xc9, 0xb0, 0x71, 0x14, 0xb7, 0xfd, 0xb3, 0x06, 0xf5, 0xe7, 0x8c,
0x88, 0x81, 0x43, 0x58, 0x47, 0x69, 0xfa, 0x1c, 0xaa, 0x1e, 0x5e, 0xe5, 0x2e, 0x6e, 0x10, 0x78,
0x63, 0xc4, 0x3f, 0x82, 0x3c, 0x8f, 0x32, 0x3c, 0x2f, 0xcd, 0x10, 0x3b, 0x8a, 0x10, 0xcb, 0x3c,
0x8f, 0xc6, 0x46, 0x17, 0xce, 0x65, 0xf4, 0x4f, 0x79, 0x58, 0xde, 0x0d, 0xde, 0xad, 0xd5, 0xd7,
0x61, 0x39, 0xe4, 0xaf, 0xa8, 0x70, 0x03, 0xe6, 0x85, 0x69, 0x1c, 0xf4, 0x55, 0x48, 0xe8, 0x4e,
0x1d, 0xc9, 0xcd, 0x21, 0x55, 0x32, 0xa6, 0x51, 0x34, 0xc5, 0xa8, 0x9e, 0xbe, 0x8e, 0xe4, 0x31,
0xe3, 0x43, 0xa8, 0x2a, 0x8d, 0xca, 0xc5, 0xe2, 0x62, 0x2e, 0x02, 0xca, 0xa8, 0xd4, 0x7e, 0x08,
0x55, 0x75, 0x95, 0xd2, 0x50, 0x5a, 0x50, 0x03, 0xca, 0xe0, 0xda, 0xfe, 0x53, 0x83, 0xea, 0x1e,
0xef, 0x45, 0x44, 0x28, 0x94, 0x0e, 0xc0, 0x0c, 0x69, 0x3b, 0x71, 0xcf, 0x0d, 0x55, 0x5d, 0x8a,
0x4d, 0xa4, 0x55, 0x13, 0x2e, 0x88, 0xa0, 0xd3, 0x9d, 0xd6, 0x94, 0x5f, 0x44, 0xd3, 0x32, 0xca,
0xed, 0xbd, 0x19, 0x2f, 0x85, 0x05, 0xe2, 0xc5, 0xfe, 0x46, 0x03, 0xfd, 0x84, 0x8a, 0xde, 0x3b,
0x79, 0xf1, 0x6d, 0x28, 0x23, 0xae, 0xf1, 0xc5, 0xfc, 0x7a, 0x61, 0x11, 0x60, 0x33, 0x76, 0x59,
0x82, 0x0d, 0xcc, 0x19, 0x34, 0xe3, 0x0e, 0x9a, 0xaf, 0xa1, 0xf9, 0xd7, 0x66, 0xa8, 0x18, 0x71,
0xaa, 0xd5, 0x51, 0x84, 0x91, 0x7f, 0x13, 0x4a, 0x5e, 0x37, 0x08, 0xfd, 0x0c, 0xb3, 0xf7, 0x66,
0x08, 0x4a, 0x19, 0x47, 0x71, 0xd9, 0x6b, 0x50, 0xc9, 0xa4, 0xad, 0x2a, 0x54, 0x9a, 0xac, 0x4f,
0xc2, 0xc0, 0x37, 0x73, 0x56, 0x05, 0x0a, 0x87, 0x3c, 0x31, 0x35, 0xfb, 0x6f, 0x0d, 0x40, 0xa5,
0x04, 0x1a, 0x75, 0x77, 0xc2, 0xa8, 0x0f, 0x67, 0xe8, 0x1e, 0xb3, 0x66, 0xcb, 0xcc, 0xac, 0x8f,
0xa1, 0x28, 0x1f, 0xfa, 0x2c, 0xab, 0x90, 0x49, 0xfa, 0x80, 0x6f, 0x99, 0x65, 0xef, 0x7c, 0x1f,
0x90, 0xcb, 0xbe, 0x0b, 0xfa, 0xf0, 0xae, 0x69, 0x27, 0xea, 0x00, 0x4f, 0x78, 0x27, 0xf0, 0x48,
0xb8, 0xc3, 0x7c, 0x53, 0xb3, 0x96, 0xc0, 0xc8, 0xf6, 0x47, 0xc2, 0xcc, 0xdb, 0x7f, 0x69, 0xb0,
0xa4, 0x04, 0x77, 0x44, 0x90, 0x74, 0x8f, 0xa2, 0xff, 0xfc, 0xf2, 0xf7, 0x40, 0x27, 0x52, 0x95,
0x3b, 0xaa, 0x53, 0x57, 0x67, 0x08, 0x67, 0xb7, 0x61, 0xf0, 0x55, 0x48, 0x76, 0xf5, 0x3e, 0x2c,
0xa9, 0xb8, 0xe7, 0x11, 0x15, 0x84, 0xf9, 0x8b, 0x56, 0xae, 0x1a, 0x4a, 0x1d, 0x29, 0x21, 0xfb,
0x07, 0x6d, 0x58, 0xc0, 0xf0, 0x12, 0x7c, 0xb2, 0x21, 0xf4, 0xda, 0xb9, 0xa0, 0xcf, 0x2f, 0x02,
0xbd, 0xb5, 0x39, 0x91, 0x62, 0x67, 0xb9, 0x2a, 0xf3, 0xec, 0xf7, 0x3c, 0xac, 0x4c, 0x41, 0xfe,
0xa8, 0x4f, 0xc2, 0x77, 0x57, 0x6b, 0xff, 0x6f, 0xfc, 0xb3, 0x92, 0x53, 0x3c, 0x57, 0x8b, 0x2a,
0x9d, 0xab, 0x45, 0x7d, 0x27, 0x6b, 0x84, 0xdf, 0xce, 0x06, 0x97, 0xed, 0xf3, 0x35, 0xe7, 0x46,
0x2e, 0x53, 0x23, 0x3b, 0xc0, 0x79, 0x0b, 0x6c, 0x23, 0x37, 0x89, 0xf5, 0x70, 0x44, 0xfb, 0x43,
0x83, 0xca, 0x73, 0xbf, 0x8d, 0xcf, 0x67, 0xc3, 0x52, 0xea, 0xb7, 0xdd, 0x76, 0xca, 0x3c, 0x97,
0x91, 0x9e, 0xb2, 0xca, 0x70, 0xaa, 0xa9, 0xdf, 0x7e, 0x9c, 0x32, 0xef, 0x90, 0xf4, 0xa8, 0xf5,
0x19, 0x80, 0xe4, 0xc9, 0x86, 0x31, 0x55, 0x20, 0x2f, 0xcf, 0xaa, 0x6e, 0x43, 0x1f, 0x1d, 0x23,
0x1d, 0xb9, 0xbb, 0x0a, 0xc6, 0x2b, 0x12, 0xf7, 0xdc, 0x16, 0xf7, 0x07, 0xd9, 0xac, 0xa7, 0x4b,
0xc2, 0x2e, 0xf7, 0x07, 0x72, 0xea, 0x22, 0xa2, 0x83, 0x43, 0x97, 0x9c, 0xf2, 0x0a, 0x0b, 0x4c,
0x5d, 0x44, 0x74, 0xe4, 0x22, 0xb6, 0x7f, 0x29, 0x43, 0x11, 0x5d, 0xb8, 0x0f, 0x46, 0x42, 0x45,
0xcf, 0xa5, 0xaf, 0x23, 0x91, 0x81, 0xba, 0x3a, 0xc3, 0xba, 0x61, 0xaf, 0x90, 0x53, 0x6d, 0x32,
0xec, 0x1b, 0x0f, 0x00, 0x52, 0x19, 0xda, 0x4a, 0x58, 0x41, 0x7a, 0xf9, 0x6d, 0x85, 0x5b, 0xce,
0xbc, 0xe9, 0xa8, 0xb4, 0x3e, 0x84, 0x6a, 0x2b, 0x18, 0xcb, 0x17, 0xe6, 0x3e, 0xc9, 0xb8, 0xc6,
0xca, 0x27, 0x69, 0x8d, 0x8b, 0xf3, 0x1e, 0xd4, 0x3c, 0xd5, 0x93, 0x95, 0x0a, 0x35, 0x19, 0x5c,
0x9d, 0xf9, 0xaa, 0xa3, 0xd6, 0xdd, 0xc8, 0x39, 0x55, 0x6f, 0xa2, 0x93, 0x3f, 0x05, 0x53, 0x79,
0x21, 0x64, 0x5a, 0x2a, 0x45, 0x2a, 0x44, 0xdf, 0x9f, 0xe7, 0xcb, 0x28, 0x81, 0x1b, 0x39, 0xa7,
0x9e, 0x4e, 0x8f, 0x4f, 0xc7, 0x70, 0x21, 0xf3, 0x6a, 0x42, 0x5f, 0x19, 0xf5, 0xd9, 0x73, 0x7d,
0x9b, 0x54, 0xb8, 0xdc, 0x7a, 0x63, 0x20, 0x4b, 0x60, 0x2d, 0xd3, 0x38, 0xcc, 0x75, 0x97, 0xf6,
0x49, 0x38, 0xa9, 0xbf, 0x82, 0xfa, 0x6f, 0xce, 0xd5, 0x3f, 0xab, 0xf8, 0x34, 0x72, 0xce, 0x4a,
0x6b, 0x7e, 0x69, 0x1a, 0xfb, 0xa1, 0x6e, 0xc5, 0x7b, 0xf4, 0x33, 0xfc, 0x18, 0x15, 0xe1, 0xb1,
0x1f, 0xe3, 0xba, 0xfc, 0x00, 0x00, 0x73, 0x51, 0xa9, 0x32, 0xe6, 0x86, 0xcb, 0x68, 0x14, 0x97,
0xe1, 0xd2, 0x1f, 0xcd, 0xe5, 0xe3, 0x0c, 0x46, 0x79, 0x38, 0x23, 0x83, 0x87, 0xe1, 0xe2, 0x8d,
0x7f, 0x06, 0xdb, 0xa0, 0xcb, 0x54, 0x44, 0xf1, 0x2a, 0x8a, 0xaf, 0xcc, 0x4e, 0xc4, 0x4c, 0xb6,
0x92, 0xaa, 0xe5, 0x6e, 0x19, 0x8a, 0x52, 0xc8, 0xfe, 0x47, 0x03, 0x38, 0xa5, 0x5e, 0xc2, 0xc5,
0xce, 0xe1, 0xe1, 0xb3, 0xec, 0x53, 0xa2, 0xdc, 0x54, 0x3f, 0x46, 0xf9, 0x29, 0x51, 0x48, 0x4c,
0x7d, 0x97, 0xf2, 0xd3, 0xdf, 0xa5, 0x6d, 0x80, 0x48, 0x50, 0x3f, 0xf0, 0x48, 0x42, 0xe3, 0xb3,
0x7a, 0xfe, 0x04, 0xab, 0xac, 0x25, 0x2f, 0xe5, 0xef, 0x50, 0xd5, 0xb0, 0xe2, 0x5c, 0x04, 0x47,
0x5f, 0x48, 0xc7, 0x78, 0x39, 0xfa, 0x4d, 0x5e, 0x87, 0xe5, 0x28, 0x24, 0x1e, 0xed, 0xf2, 0xd0,
0xa7, 0xc2, 0x4d, 0x48, 0x07, 0xc3, 0xdc, 0x70, 0xea, 0x13, 0xe4, 0x13, 0xd2, 0xb1, 0x7f, 0xd5,
0x40, 0x3f, 0x0e, 0x09, 0x3b, 0xe4, 0x3e, 0xd6, 0xcd, 0x3e, 0x7a, 0xec, 0x12, 0xc6, 0xe2, 0xb7,
0x74, 0xa8, 0x31, 0x2e, 0x12, 0x75, 0x25, 0xb3, 0xc3, 0x58, 0x6c, 0xdd, 0x9b, 0xf2, 0xf6, 0xed,
0x6d, 0x56, 0x8a, 0x4e, 0xf8, 0xbb, 0x01, 0x26, 0x4f, 0x93, 0x28, 0x4d, 0xdc, 0x21, 0x94, 0x12,
0xae, 0xc2, 0x46, 0xc1, 0xa9, 0x2b, 0xfa, 0x63, 0x85, 0x68, 0x2c, 0x5f, 0x88, 0x71, 0x9f, 0xde,
0xf8, 0x4d, 0x83, 0xb2, 0xea, 0x39, 0xd3, 0x93, 0xd1, 0x32, 0x54, 0x0f, 0x04, 0x25, 0x09, 0x15,
0x27, 0x5d, 0xc2, 0x4c, 0xcd, 0x32, 0xa1, 0x96, 0x11, 0x1e, 0xbd, 0x4c, 0x49, 0x68, 0xe6, 0xad,
0x1a, 0xe8, 0x4f, 0x68, 0x1c, 0xe3, 0x79, 0x01, 0x47, 0x27, 0x1a, 0xc7, 0xea, 0xb0, 0x68, 0x19,
0x50, 0x52, 0xcb, 0x92, 0xe4, 0x3b, 0xe4, 0x89, 0xda, 0x95, 0xa5, 0xe2, 0x63, 0x41, 0xdb, 0xc1,
0xeb, 0xa7, 0x24, 0xf1, 0xba, 0x66, 0x45, 0x2a, 0x3e, 0xe6, 0x71, 0x32, 0xa2, 0xe8, 0x52, 0x56,
0x2d, 0x0d, 0xb9, 0xc4, 0x0c, 0x33, 0xc1, 0x2a, 0x43, 0xbe, 0xc9, 0xcc, 0xaa, 0x24, 0x1d, 0xf2,
0xa4, 0xc9, 0xcc, 0xda, 0x8d, 0x03, 0xa8, 0x4e, 0xb4, 0x6a, 0xe9, 0xc0, 0x73, 0xf6, 0x82, 0xf1,
0x57, 0x4c, 0xcd, 0xa7, 0x3b, 0xbe, 0x9c, 0xe9, 0x2a, 0x50, 0x78, 0x96, 0xb6, 0xcc, 0xbc, 0x5c,
0x3c, 0x4d, 0x43, 0xb3, 0x20, 0x17, 0xfb, 0x41, 0xdf, 0x2c, 0x22, 0x85, 0xfb, 0x66, 0x69, 0xf7,
0xf6, 0xd7, 0xb7, 0x3a, 0x41, 0xd2, 0x4d, 0x5b, 0x9b, 0x1e, 0xef, 0x6d, 0x29, 0xa8, 0x6f, 0x06,
0x3c, 0x5b, 0x6d, 0x05, 0x2c, 0xa1, 0x82, 0x91, 0x70, 0x0b, 0xd1, 0xdf, 0x92, 0xe8, 0x47, 0xad,
0x56, 0x19, 0x77, 0xb7, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x70, 0x80, 0xb8, 0x76, 0x45, 0x11,
0x00, 0x00,
}

View File

@ -9,6 +9,7 @@ import "internal.proto";
import "proxy.proto";
//import "data_coord.proto";
import "etcd_meta.proto";
import "schema.proto";
service RootCoord {
rpc GetComponentStates(internal.GetComponentStatesRequest) returns (internal.ComponentStates) {}
@ -133,6 +134,11 @@ service RootCoord {
rpc OperatePrivilege(milvus.OperatePrivilegeRequest) returns (common.Status) {}
rpc SelectGrant(milvus.SelectGrantRequest) returns (milvus.SelectGrantResponse) {}
rpc ListPolicy(internal.ListPolicyRequest) returns (internal.ListPolicyResponse) {}
// user defined function
rpc CreateFunction(milvus.CreateFunctionRequest) returns (common.Status){}
rpc DropFunction(milvus.DropFunctionRequest) returns (common.Status){}
rpc GetFunctionInfo(GetFunctionInfoRequest) returns (GetFunctionInfoResponse){}
}
message AllocTimestampRequest {
@ -210,3 +216,22 @@ message GetCredentialResponse {
string password = 3;
}
message GetFunctionInfoRequest {
common.MsgBase base = 1;
// The unique function name in rootcoord.(Required)
string function_name = 2;
}
message GetFunctionInfoResponse {
common.Status status = 1;
FunctionInfo info = 2;
}
message FunctionInfo {
// The unique function name in rootcoord.(Required)
string function_name = 2;
// wat file after base64.(Required)
string wat_body_base64 = 3;
// list of function parameter types.(Required)
repeated schema.DataType arg_types = 4;
}

View File

@ -9,6 +9,7 @@ import (
proto "github.com/golang/protobuf/proto"
commonpb "github.com/milvus-io/milvus/api/commonpb"
milvuspb "github.com/milvus-io/milvus/api/milvuspb"
schemapb "github.com/milvus-io/milvus/api/schemapb"
etcdpb "github.com/milvus-io/milvus/internal/proto/etcdpb"
internalpb "github.com/milvus-io/milvus/internal/proto/internalpb"
proxypb "github.com/milvus-io/milvus/internal/proto/proxypb"
@ -655,6 +656,159 @@ func (m *GetCredentialResponse) GetPassword() string {
return ""
}
type GetFunctionInfoRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
// The unique function name in rootcoord.(Required)
FunctionName string `protobuf:"bytes,2,opt,name=function_name,json=functionName,proto3" json:"function_name,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetFunctionInfoRequest) Reset() { *m = GetFunctionInfoRequest{} }
func (m *GetFunctionInfoRequest) String() string { return proto.CompactTextString(m) }
func (*GetFunctionInfoRequest) ProtoMessage() {}
func (*GetFunctionInfoRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_4513485a144f6b06, []int{11}
}
func (m *GetFunctionInfoRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetFunctionInfoRequest.Unmarshal(m, b)
}
func (m *GetFunctionInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetFunctionInfoRequest.Marshal(b, m, deterministic)
}
func (m *GetFunctionInfoRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetFunctionInfoRequest.Merge(m, src)
}
func (m *GetFunctionInfoRequest) XXX_Size() int {
return xxx_messageInfo_GetFunctionInfoRequest.Size(m)
}
func (m *GetFunctionInfoRequest) XXX_DiscardUnknown() {
xxx_messageInfo_GetFunctionInfoRequest.DiscardUnknown(m)
}
var xxx_messageInfo_GetFunctionInfoRequest proto.InternalMessageInfo
func (m *GetFunctionInfoRequest) GetBase() *commonpb.MsgBase {
if m != nil {
return m.Base
}
return nil
}
func (m *GetFunctionInfoRequest) GetFunctionName() string {
if m != nil {
return m.FunctionName
}
return ""
}
type GetFunctionInfoResponse struct {
Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
Info *FunctionInfo `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetFunctionInfoResponse) Reset() { *m = GetFunctionInfoResponse{} }
func (m *GetFunctionInfoResponse) String() string { return proto.CompactTextString(m) }
func (*GetFunctionInfoResponse) ProtoMessage() {}
func (*GetFunctionInfoResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_4513485a144f6b06, []int{12}
}
func (m *GetFunctionInfoResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetFunctionInfoResponse.Unmarshal(m, b)
}
func (m *GetFunctionInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetFunctionInfoResponse.Marshal(b, m, deterministic)
}
func (m *GetFunctionInfoResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetFunctionInfoResponse.Merge(m, src)
}
func (m *GetFunctionInfoResponse) XXX_Size() int {
return xxx_messageInfo_GetFunctionInfoResponse.Size(m)
}
func (m *GetFunctionInfoResponse) XXX_DiscardUnknown() {
xxx_messageInfo_GetFunctionInfoResponse.DiscardUnknown(m)
}
var xxx_messageInfo_GetFunctionInfoResponse proto.InternalMessageInfo
func (m *GetFunctionInfoResponse) GetStatus() *commonpb.Status {
if m != nil {
return m.Status
}
return nil
}
func (m *GetFunctionInfoResponse) GetInfo() *FunctionInfo {
if m != nil {
return m.Info
}
return nil
}
type FunctionInfo struct {
// The unique function name in rootcoord.(Required)
FunctionName string `protobuf:"bytes,2,opt,name=function_name,json=functionName,proto3" json:"function_name,omitempty"`
// wat file after base64.(Required)
WatBodyBase64 string `protobuf:"bytes,3,opt,name=wat_body_base64,json=watBodyBase64,proto3" json:"wat_body_base64,omitempty"`
// list of function parameter types.(Required)
ArgTypes []schemapb.DataType `protobuf:"varint,4,rep,packed,name=arg_types,json=argTypes,proto3,enum=milvus.proto.schema.DataType" json:"arg_types,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *FunctionInfo) Reset() { *m = FunctionInfo{} }
func (m *FunctionInfo) String() string { return proto.CompactTextString(m) }
func (*FunctionInfo) ProtoMessage() {}
func (*FunctionInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_4513485a144f6b06, []int{13}
}
func (m *FunctionInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FunctionInfo.Unmarshal(m, b)
}
func (m *FunctionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_FunctionInfo.Marshal(b, m, deterministic)
}
func (m *FunctionInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_FunctionInfo.Merge(m, src)
}
func (m *FunctionInfo) XXX_Size() int {
return xxx_messageInfo_FunctionInfo.Size(m)
}
func (m *FunctionInfo) XXX_DiscardUnknown() {
xxx_messageInfo_FunctionInfo.DiscardUnknown(m)
}
var xxx_messageInfo_FunctionInfo proto.InternalMessageInfo
func (m *FunctionInfo) GetFunctionName() string {
if m != nil {
return m.FunctionName
}
return ""
}
func (m *FunctionInfo) GetWatBodyBase64() string {
if m != nil {
return m.WatBodyBase64
}
return ""
}
func (m *FunctionInfo) GetArgTypes() []schemapb.DataType {
if m != nil {
return m.ArgTypes
}
return nil
}
func init() {
proto.RegisterType((*AllocTimestampRequest)(nil), "milvus.proto.rootcoord.AllocTimestampRequest")
proto.RegisterType((*AllocTimestampResponse)(nil), "milvus.proto.rootcoord.AllocTimestampResponse")
@ -669,106 +823,120 @@ func init() {
proto.RegisterMapType((map[int64]*SegmentInfos)(nil), "milvus.proto.rootcoord.DescribeSegmentsResponse.SegmentInfosEntry")
proto.RegisterType((*GetCredentialRequest)(nil), "milvus.proto.rootcoord.GetCredentialRequest")
proto.RegisterType((*GetCredentialResponse)(nil), "milvus.proto.rootcoord.GetCredentialResponse")
proto.RegisterType((*GetFunctionInfoRequest)(nil), "milvus.proto.rootcoord.GetFunctionInfoRequest")
proto.RegisterType((*GetFunctionInfoResponse)(nil), "milvus.proto.rootcoord.GetFunctionInfoResponse")
proto.RegisterType((*FunctionInfo)(nil), "milvus.proto.rootcoord.FunctionInfo")
}
func init() { proto.RegisterFile("root_coord.proto", fileDescriptor_4513485a144f6b06) }
var fileDescriptor_4513485a144f6b06 = []byte{
// 1496 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0x5b, 0x73, 0x13, 0x37,
0x14, 0xc6, 0x36, 0x49, 0xec, 0x63, 0xc7, 0x0e, 0x1a, 0x2e, 0xae, 0xa1, 0xd4, 0xb8, 0x14, 0xcc,
0xcd, 0xa1, 0x61, 0x86, 0x52, 0xde, 0x88, 0xcd, 0x04, 0x4f, 0x9b, 0x21, 0x5d, 0x43, 0x87, 0x5e,
0x18, 0x57, 0xde, 0x15, 0x8e, 0x26, 0xeb, 0x95, 0x59, 0xc9, 0xb9, 0x4c, 0x9f, 0x3a, 0xd3, 0xf7,
0xfe, 0xa5, 0x4e, 0xfb, 0x53, 0xfa, 0x47, 0x3a, 0x5a, 0xed, 0xca, 0xbb, 0xeb, 0x5d, 0x67, 0x03,
0xbc, 0x59, 0xda, 0x4f, 0xdf, 0x77, 0xf4, 0x49, 0x47, 0x47, 0x32, 0x6c, 0xb8, 0x8c, 0x89, 0xa1,
0xc9, 0x98, 0x6b, 0x75, 0xa6, 0x2e, 0x13, 0x0c, 0x5d, 0x9e, 0x50, 0xfb, 0x70, 0xc6, 0x55, 0xab,
0x23, 0x3f, 0x7b, 0x5f, 0x1b, 0x15, 0x93, 0x4d, 0x26, 0xcc, 0x51, 0xfd, 0x8d, 0x4a, 0x18, 0xd5,
0xa8, 0x52, 0x47, 0x10, 0xd7, 0xc1, 0xb6, 0xdf, 0x2e, 0x4f, 0x5d, 0x76, 0x7c, 0xe2, 0x37, 0x6a,
0x44, 0x98, 0xd6, 0x70, 0x42, 0x04, 0x56, 0x1d, 0xad, 0x21, 0x5c, 0x7a, 0x66, 0xdb, 0xcc, 0x7c,
0x45, 0x27, 0x84, 0x0b, 0x3c, 0x99, 0x1a, 0xe4, 0xfd, 0x8c, 0x70, 0x81, 0x1e, 0xc2, 0xf9, 0x11,
0xe6, 0xa4, 0x9e, 0x6b, 0xe6, 0xda, 0xe5, 0xad, 0x6b, 0x9d, 0x48, 0x24, 0xbe, 0xfc, 0x2e, 0x1f,
0x6f, 0x63, 0x4e, 0x0c, 0x0f, 0x89, 0x2e, 0xc2, 0x8a, 0xc9, 0x66, 0x8e, 0xa8, 0x17, 0x9a, 0xb9,
0xf6, 0xba, 0xa1, 0x1a, 0xad, 0x3f, 0x72, 0x70, 0x39, 0xae, 0xc0, 0xa7, 0xcc, 0xe1, 0x04, 0x3d,
0x82, 0x55, 0x2e, 0xb0, 0x98, 0x71, 0x5f, 0xe4, 0x6a, 0xa2, 0xc8, 0xc0, 0x83, 0x18, 0x3e, 0x14,
0x5d, 0x83, 0x92, 0x08, 0x98, 0xea, 0xf9, 0x66, 0xae, 0x7d, 0xde, 0x98, 0x77, 0xa4, 0xc4, 0xf0,
0x06, 0xaa, 0x5e, 0x08, 0xfd, 0xde, 0x27, 0x98, 0x5d, 0x3e, 0xcc, 0x6c, 0x43, 0x4d, 0x33, 0x7f,
0xcc, 0xac, 0xaa, 0x90, 0xef, 0xf7, 0x3c, 0xea, 0x82, 0x91, 0xef, 0xf7, 0x52, 0xe6, 0xf1, 0x4f,
0x1e, 0x2a, 0xfd, 0xc9, 0x94, 0xb9, 0xc2, 0x20, 0x7c, 0x66, 0x8b, 0x0f, 0xd3, 0xba, 0x02, 0x6b,
0x02, 0xf3, 0x83, 0x21, 0xb5, 0x7c, 0xc1, 0x55, 0xd9, 0xec, 0x5b, 0xe8, 0x0b, 0x28, 0x5b, 0x58,
0x60, 0x87, 0x59, 0x44, 0x7e, 0x2c, 0x78, 0x1f, 0x21, 0xe8, 0xea, 0x5b, 0xe8, 0x31, 0xac, 0x48,
0x0e, 0x52, 0x3f, 0xdf, 0xcc, 0xb5, 0xab, 0x5b, 0xcd, 0x44, 0x35, 0x15, 0xa0, 0xd4, 0x24, 0x86,
0x82, 0xa3, 0x06, 0x14, 0x39, 0x19, 0x4f, 0x88, 0x23, 0x78, 0x7d, 0xa5, 0x59, 0x68, 0x17, 0x0c,
0xdd, 0x46, 0x9f, 0x41, 0x11, 0xcf, 0x04, 0x1b, 0x52, 0x8b, 0xd7, 0x57, 0xbd, 0x6f, 0x6b, 0xb2,
0xdd, 0xb7, 0x38, 0xba, 0x0a, 0x25, 0x97, 0x1d, 0x0d, 0x95, 0x11, 0x6b, 0x5e, 0x34, 0x45, 0x97,
0x1d, 0x75, 0x65, 0x1b, 0x7d, 0x03, 0x2b, 0xd4, 0x79, 0xc7, 0x78, 0xbd, 0xd8, 0x2c, 0xb4, 0xcb,
0x5b, 0x37, 0x12, 0x63, 0xf9, 0x8e, 0x9c, 0xfc, 0x88, 0xed, 0x19, 0xd9, 0xc3, 0xd4, 0x35, 0x14,
0xbe, 0xf5, 0x57, 0x0e, 0xae, 0xf4, 0x08, 0x37, 0x5d, 0x3a, 0x22, 0x03, 0x3f, 0x8a, 0x0f, 0xdf,
0x16, 0x2d, 0xa8, 0x98, 0xcc, 0xb6, 0x89, 0x29, 0x28, 0x73, 0xf4, 0x12, 0x46, 0xfa, 0xd0, 0x75,
0x00, 0x7f, 0xba, 0xfd, 0x1e, 0xaf, 0x17, 0xbc, 0x49, 0x86, 0x7a, 0x5a, 0x33, 0xa8, 0xf9, 0x81,
0x48, 0xe2, 0xbe, 0xf3, 0x8e, 0x2d, 0xd0, 0xe6, 0x12, 0x68, 0x9b, 0x50, 0x9e, 0x62, 0x57, 0xd0,
0x88, 0x72, 0xb8, 0x4b, 0xe6, 0x8a, 0x96, 0xf1, 0x97, 0x73, 0xde, 0xd1, 0xfa, 0x2f, 0x0f, 0x15,
0x5f, 0x57, 0x6a, 0x72, 0xd4, 0x83, 0x92, 0x9c, 0xd3, 0x50, 0xfa, 0xe4, 0x5b, 0x70, 0xbb, 0x93,
0x7c, 0x02, 0x75, 0x62, 0x01, 0x1b, 0xc5, 0x51, 0x10, 0x7a, 0x0f, 0xca, 0xd4, 0xb1, 0xc8, 0xf1,
0x50, 0x2d, 0x4f, 0xde, 0x5b, 0x9e, 0x2f, 0xa3, 0x3c, 0xf2, 0x14, 0xea, 0x68, 0x6d, 0x8b, 0x1c,
0x7b, 0x1c, 0x40, 0x83, 0x9f, 0x1c, 0x11, 0xb8, 0x40, 0x8e, 0x85, 0x8b, 0x87, 0x61, 0xae, 0x82,
0xc7, 0xf5, 0xed, 0x29, 0x31, 0x79, 0x04, 0x9d, 0xe7, 0x72, 0xb4, 0xe6, 0xe6, 0xcf, 0x1d, 0xe1,
0x9e, 0x18, 0x35, 0x12, 0xed, 0x6d, 0xfc, 0x06, 0x17, 0x93, 0x80, 0x68, 0x03, 0x0a, 0x07, 0xe4,
0xc4, 0xb7, 0x5d, 0xfe, 0x44, 0x5b, 0xb0, 0x72, 0x28, 0xb7, 0x92, 0xe7, 0xf3, 0xc2, 0xde, 0xf0,
0x26, 0x34, 0x9f, 0x89, 0x82, 0x3e, 0xcd, 0x3f, 0xc9, 0xb5, 0xfe, 0xcd, 0x43, 0x7d, 0x71, 0xbb,
0x7d, 0xcc, 0x59, 0x91, 0x65, 0xcb, 0x8d, 0x61, 0xdd, 0x5f, 0xe8, 0x88, 0x75, 0xdb, 0x69, 0xd6,
0xa5, 0x45, 0x18, 0xf1, 0x54, 0x79, 0x58, 0xe1, 0xa1, 0xae, 0x06, 0x81, 0x0b, 0x0b, 0x90, 0x04,
0xf7, 0x9e, 0x46, 0xdd, 0xbb, 0x99, 0x65, 0x09, 0xc3, 0x2e, 0x5a, 0x70, 0x71, 0x87, 0x88, 0xae,
0x4b, 0x2c, 0xe2, 0x08, 0x8a, 0xed, 0x0f, 0x4f, 0xd8, 0x06, 0x14, 0x67, 0x5c, 0xd6, 0xc7, 0x89,
0x0a, 0xa6, 0x64, 0xe8, 0x76, 0xeb, 0xcf, 0x1c, 0x5c, 0x8a, 0xc9, 0x7c, 0xcc, 0x42, 0x2d, 0x91,
0x92, 0xdf, 0xa6, 0x98, 0xf3, 0x23, 0xe6, 0xaa, 0x83, 0xb6, 0x64, 0xe8, 0xf6, 0xd6, 0xdf, 0xd7,
0xa1, 0x64, 0x30, 0x26, 0xba, 0xd2, 0x12, 0x34, 0x05, 0x24, 0x63, 0x62, 0x93, 0x29, 0x73, 0x88,
0xa3, 0x0e, 0x56, 0x8e, 0x1e, 0x46, 0x03, 0xd0, 0x35, 0x7f, 0x11, 0xea, 0x5b, 0xd5, 0xb8, 0x95,
0x32, 0x22, 0x06, 0x6f, 0x9d, 0x43, 0x13, 0x4f, 0x51, 0xd6, 0xeb, 0x57, 0xd4, 0x3c, 0xe8, 0xee,
0x63, 0xc7, 0x21, 0xf6, 0x32, 0xc5, 0x18, 0x34, 0x50, 0x8c, 0x25, 0xbd, 0xdf, 0x18, 0x08, 0x97,
0x3a, 0xe3, 0xc0, 0xd9, 0xd6, 0x39, 0xf4, 0xde, 0x5b, 0x5b, 0xa9, 0x4e, 0xb9, 0xa0, 0x26, 0x0f,
0x04, 0xb7, 0xd2, 0x05, 0x17, 0xc0, 0x67, 0x94, 0x1c, 0xc2, 0x46, 0xd7, 0x25, 0x58, 0x90, 0xae,
0x4e, 0x1a, 0x74, 0x3f, 0x71, 0x68, 0x1c, 0x16, 0x08, 0x2d, 0xdb, 0x00, 0xad, 0x73, 0xe8, 0x17,
0xa8, 0xf6, 0x5c, 0x36, 0x0d, 0xd1, 0xdf, 0x4d, 0xa4, 0x8f, 0x82, 0x32, 0x92, 0x0f, 0x61, 0xfd,
0x05, 0xe6, 0x21, 0xee, 0x3b, 0x89, 0xdc, 0x11, 0x4c, 0x40, 0x7d, 0x23, 0x11, 0xba, 0xcd, 0x98,
0x1d, 0xb2, 0xe7, 0x08, 0x50, 0x70, 0x20, 0x84, 0x54, 0x3a, 0xc9, 0x33, 0x58, 0x00, 0x06, 0x52,
0x9b, 0x99, 0xf1, 0x5a, 0xf8, 0x35, 0x94, 0x95, 0xe1, 0xcf, 0x6c, 0x8a, 0x39, 0xba, 0xbd, 0x64,
0x49, 0x3c, 0x44, 0x46, 0xc3, 0x7e, 0x80, 0x92, 0x34, 0x5a, 0x91, 0x7e, 0x95, 0xba, 0x10, 0x67,
0xa1, 0x1c, 0x00, 0x3c, 0xb3, 0x05, 0x71, 0x15, 0xe7, 0xad, 0x44, 0xce, 0x39, 0x20, 0x23, 0xa9,
0x03, 0xb5, 0xc1, 0xbe, 0xbc, 0xe0, 0x04, 0xd6, 0x70, 0x74, 0x2f, 0x79, 0x43, 0x47, 0x51, 0x01,
0xfd, 0xfd, 0x6c, 0x60, 0x6d, 0xf7, 0x5b, 0xa8, 0x29, 0x33, 0xf7, 0x82, 0x4b, 0x43, 0x8a, 0x5e,
0x0c, 0x95, 0x71, 0x3a, 0x3f, 0xc1, 0xba, 0xb4, 0x75, 0x4e, 0x7e, 0x27, 0xd5, 0xfa, 0xb3, 0x52,
0xbf, 0x85, 0xca, 0x0b, 0xcc, 0xe7, 0xcc, 0xed, 0xb4, 0x0c, 0x58, 0x20, 0xce, 0x94, 0x00, 0x07,
0x50, 0x95, 0xae, 0xe9, 0xc1, 0x3c, 0x25, 0x7d, 0xa3, 0xa0, 0x40, 0xe2, 0x5e, 0x26, 0xac, 0x16,
0x23, 0x50, 0x91, 0xdf, 0x82, 0xd2, 0x9b, 0x32, 0x97, 0x30, 0x24, 0x10, 0xba, 0x93, 0x01, 0x19,
0x3a, 0x66, 0xab, 0xd1, 0x77, 0x18, 0x7a, 0x90, 0x56, 0x85, 0x13, 0x5f, 0x84, 0x8d, 0x4e, 0x56,
0xb8, 0x96, 0xfc, 0x15, 0xd6, 0xfc, 0xd7, 0x51, 0x3c, 0x43, 0x62, 0x83, 0xf5, 0xc3, 0xac, 0x71,
0xfb, 0x54, 0x9c, 0x66, 0xc7, 0x70, 0xe9, 0xf5, 0xd4, 0x92, 0xa7, 0xb3, 0xaa, 0x01, 0x41, 0x15,
0x8a, 0x6f, 0xb3, 0x79, 0xa5, 0x8b, 0xe2, 0x76, 0xf9, 0xf8, 0xb4, 0x6d, 0xe6, 0xc2, 0xe7, 0x7d,
0xe7, 0x10, 0xdb, 0xd4, 0x8a, 0x14, 0x81, 0x5d, 0x22, 0x70, 0x17, 0x9b, 0xfb, 0x24, 0x5e, 0xa3,
0xd4, 0x53, 0x3b, 0x3a, 0x44, 0x83, 0x33, 0x6e, 0xed, 0xdf, 0x01, 0xa9, 0x8c, 0x75, 0xde, 0xd1,
0xf1, 0xcc, 0xc5, 0x6a, 0xff, 0xa5, 0x55, 0xdf, 0x45, 0x68, 0x20, 0xf3, 0xf5, 0x19, 0x46, 0x84,
0x0a, 0x23, 0xec, 0x10, 0xb1, 0x4b, 0x84, 0x4b, 0xcd, 0xb4, 0x63, 0x6d, 0x0e, 0x48, 0x59, 0xb4,
0x04, 0x9c, 0x16, 0x18, 0xc0, 0xaa, 0x7a, 0x20, 0xa2, 0x56, 0xe2, 0xa0, 0xe0, 0x79, 0xbb, 0xac,
0x9c, 0xeb, 0x27, 0x70, 0x28, 0x5d, 0x77, 0x88, 0x08, 0x3d, 0x3c, 0x53, 0xd2, 0x35, 0x0a, 0x5a,
0x9e, 0xae, 0x71, 0xac, 0x16, 0x73, 0xa0, 0xf6, 0x3d, 0xe5, 0xfe, 0xc7, 0x57, 0x98, 0x1f, 0xa4,
0x1d, 0xd2, 0x31, 0xd4, 0xf2, 0x43, 0x7a, 0x01, 0x1c, 0x72, 0xac, 0x62, 0x10, 0xf9, 0xc1, 0xf7,
0x2d, 0xf5, 0xee, 0x1c, 0xfe, 0x67, 0xe0, 0xb4, 0x4d, 0xf6, 0x46, 0x5f, 0x80, 0xf4, 0x5d, 0x37,
0x5e, 0x18, 0xe7, 0x69, 0xa3, 0x21, 0xf2, 0x5a, 0x9e, 0x81, 0xd9, 0xcf, 0xca, 0x4f, 0xcd, 0x3c,
0x84, 0x8d, 0x1e, 0xb1, 0x49, 0x84, 0xf9, 0x7e, 0xca, 0x1d, 0x23, 0x0a, 0xcb, 0x98, 0x79, 0xfb,
0xb0, 0x2e, 0x97, 0x41, 0x8e, 0x7b, 0xcd, 0x89, 0xcb, 0x53, 0xea, 0x55, 0x04, 0x13, 0x50, 0xdf,
0xcd, 0x02, 0x0d, 0xed, 0xa1, 0xf5, 0xc8, 0x3b, 0x23, 0x3e, 0x8f, 0xf9, 0xa2, 0x26, 0xbd, 0x7a,
0x1a, 0x0f, 0x32, 0xa2, 0x43, 0x7b, 0x08, 0xd4, 0x72, 0x1b, 0xcc, 0x26, 0x29, 0x69, 0x3d, 0x07,
0x64, 0xb4, 0xeb, 0x25, 0x14, 0x65, 0xe9, 0xf6, 0x28, 0x6f, 0xa6, 0x56, 0xf6, 0x33, 0x10, 0xbe,
0x85, 0xda, 0xcb, 0x29, 0x71, 0xb1, 0x20, 0xd2, 0x2f, 0x8f, 0x37, 0x39, 0xb3, 0x62, 0xa8, 0xcc,
0xd7, 0x66, 0x18, 0x10, 0x79, 0x82, 0x2f, 0x31, 0x61, 0x0e, 0x58, 0x7e, 0xb6, 0x85, 0x71, 0xe1,
0xc3, 0x53, 0xf5, 0xcb, 0xc0, 0x96, 0x0a, 0x78, 0x91, 0x67, 0x10, 0x50, 0xb8, 0xf0, 0xb3, 0xc5,
0x9f, 0xfa, 0x9e, 0x4b, 0x0f, 0xa9, 0x4d, 0xc6, 0x24, 0x25, 0x03, 0xe2, 0xb0, 0x8c, 0x16, 0x8d,
0xa0, 0xac, 0x84, 0x77, 0x5c, 0xec, 0x08, 0xb4, 0x2c, 0x34, 0x0f, 0x11, 0xd0, 0xb6, 0x4f, 0x07,
0xea, 0x49, 0x98, 0x00, 0x32, 0x2d, 0xf6, 0x98, 0x4d, 0xcd, 0x93, 0xf8, 0x65, 0x47, 0x1f, 0x0d,
0x73, 0x48, 0xca, 0x65, 0x27, 0x11, 0x19, 0x88, 0x6c, 0x3f, 0xf9, 0xf9, 0xf1, 0x98, 0x8a, 0xfd,
0xd9, 0x48, 0x4e, 0x71, 0x53, 0x0d, 0x7c, 0x40, 0x99, 0xff, 0x6b, 0x33, 0x18, 0xbc, 0xe9, 0x71,
0x6d, 0xea, 0x04, 0x9a, 0x8e, 0x46, 0xab, 0x5e, 0xd7, 0xa3, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff,
0x19, 0x92, 0xda, 0x17, 0x8d, 0x17, 0x00, 0x00,
// 1673 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0x4b, 0x73, 0xdb, 0xb6,
0x16, 0x8e, 0x24, 0x3f, 0xa4, 0xa3, 0x97, 0x83, 0xc9, 0x43, 0x57, 0x49, 0xee, 0x55, 0x94, 0xdc,
0x44, 0x79, 0xc9, 0xa9, 0xd3, 0x49, 0xd3, 0xec, 0x62, 0x2b, 0x75, 0x34, 0xad, 0x1b, 0x97, 0x76,
0xda, 0xb4, 0x69, 0x86, 0x85, 0x48, 0x58, 0xe6, 0x98, 0x22, 0x18, 0x02, 0xb2, 0xad, 0xe9, 0xaa,
0x33, 0x5d, 0x74, 0xd7, 0x65, 0xff, 0x4f, 0xfb, 0x53, 0xba, 0xed, 0x8f, 0xe8, 0x80, 0x0f, 0x88,
0xa4, 0x48, 0x99, 0xb6, 0xb3, 0x23, 0x80, 0x0f, 0xdf, 0x77, 0xce, 0xc1, 0x39, 0x78, 0x10, 0x56,
0x1c, 0x4a, 0xb9, 0xaa, 0x51, 0xea, 0xe8, 0x5d, 0xdb, 0xa1, 0x9c, 0xa2, 0x2b, 0x23, 0xc3, 0x3c,
0x1c, 0x33, 0xaf, 0xd5, 0x15, 0xc3, 0xee, 0x68, 0xb3, 0xa2, 0xd1, 0xd1, 0x88, 0x5a, 0x5e, 0x7f,
0xb3, 0x12, 0x46, 0x35, 0x6b, 0x86, 0xc5, 0x89, 0x63, 0x61, 0xd3, 0x6f, 0x97, 0x6d, 0x87, 0x1e,
0x4f, 0xfc, 0x46, 0x9d, 0x70, 0x4d, 0x57, 0x47, 0x84, 0xe3, 0x60, 0x2e, 0xd3, 0xf6, 0xc9, 0xc8,
0x6f, 0xb5, 0x55, 0xb8, 0xfc, 0xc2, 0x34, 0xa9, 0xb6, 0x6b, 0x8c, 0x08, 0xe3, 0x78, 0x64, 0x2b,
0xe4, 0xc3, 0x98, 0x30, 0x8e, 0x1e, 0xc3, 0xc2, 0x00, 0x33, 0xd2, 0xc8, 0xb5, 0x72, 0x9d, 0xf2,
0xda, 0xf5, 0x6e, 0xc4, 0x2e, 0xdf, 0x98, 0x2d, 0x36, 0x5c, 0xc7, 0x8c, 0x28, 0x2e, 0x12, 0x5d,
0x82, 0x45, 0x8d, 0x8e, 0x2d, 0xde, 0x28, 0xb4, 0x72, 0x9d, 0xaa, 0xe2, 0x35, 0xda, 0xbf, 0xe4,
0xe0, 0x4a, 0x5c, 0x81, 0xd9, 0xd4, 0x62, 0x04, 0x3d, 0x81, 0x25, 0xc6, 0x31, 0x1f, 0x33, 0x5f,
0xe4, 0x5a, 0xa2, 0xc8, 0x8e, 0x0b, 0x51, 0x7c, 0x28, 0xba, 0x0e, 0x25, 0x1e, 0x30, 0x35, 0xf2,
0xad, 0x5c, 0x67, 0x41, 0x99, 0x76, 0xa4, 0xd8, 0xf0, 0x16, 0x6a, 0xae, 0x09, 0xfd, 0xde, 0x47,
0xf0, 0x2e, 0x1f, 0x66, 0x36, 0xa1, 0x2e, 0x99, 0xcf, 0xe3, 0x55, 0x0d, 0xf2, 0xfd, 0x9e, 0x4b,
0x5d, 0x50, 0xf2, 0xfd, 0x5e, 0x8a, 0x1f, 0x7f, 0xe6, 0xa1, 0xd2, 0x1f, 0xd9, 0xd4, 0xe1, 0x0a,
0x61, 0x63, 0x93, 0x9f, 0x4d, 0xeb, 0x2a, 0x2c, 0x73, 0xcc, 0x0e, 0x54, 0x43, 0xf7, 0x05, 0x97,
0x44, 0xb3, 0xaf, 0xa3, 0xff, 0x41, 0x59, 0xc7, 0x1c, 0x5b, 0x54, 0x27, 0x62, 0xb0, 0xe0, 0x0e,
0x42, 0xd0, 0xd5, 0xd7, 0xd1, 0x53, 0x58, 0x14, 0x1c, 0xa4, 0xb1, 0xd0, 0xca, 0x75, 0x6a, 0x6b,
0xad, 0x44, 0x35, 0xcf, 0x40, 0xa1, 0x49, 0x14, 0x0f, 0x8e, 0x9a, 0x50, 0x64, 0x64, 0x38, 0x22,
0x16, 0x67, 0x8d, 0xc5, 0x56, 0xa1, 0x53, 0x50, 0x64, 0x1b, 0xfd, 0x07, 0x8a, 0x78, 0xcc, 0xa9,
0x6a, 0xe8, 0xac, 0xb1, 0xe4, 0x8e, 0x2d, 0x8b, 0x76, 0x5f, 0x67, 0xe8, 0x1a, 0x94, 0x1c, 0x7a,
0xa4, 0x7a, 0x81, 0x58, 0x76, 0xad, 0x29, 0x3a, 0xf4, 0x68, 0x43, 0xb4, 0xd1, 0x67, 0xb0, 0x68,
0x58, 0x7b, 0x94, 0x35, 0x8a, 0xad, 0x42, 0xa7, 0xbc, 0x76, 0x33, 0xd1, 0x96, 0x2f, 0xc9, 0xe4,
0x5b, 0x6c, 0x8e, 0xc9, 0x36, 0x36, 0x1c, 0xc5, 0xc3, 0xb7, 0x7f, 0xcf, 0xc1, 0xd5, 0x1e, 0x61,
0x9a, 0x63, 0x0c, 0xc8, 0x8e, 0x6f, 0xc5, 0xd9, 0xd3, 0xa2, 0x0d, 0x15, 0x8d, 0x9a, 0x26, 0xd1,
0xb8, 0x41, 0x2d, 0xb9, 0x84, 0x91, 0x3e, 0xf4, 0x5f, 0x00, 0xdf, 0xdd, 0x7e, 0x8f, 0x35, 0x0a,
0xae, 0x93, 0xa1, 0x9e, 0xf6, 0x18, 0xea, 0xbe, 0x21, 0x82, 0xb8, 0x6f, 0xed, 0xd1, 0x19, 0xda,
0x5c, 0x02, 0x6d, 0x0b, 0xca, 0x36, 0x76, 0xb8, 0x11, 0x51, 0x0e, 0x77, 0x89, 0x5a, 0x91, 0x32,
0xfe, 0x72, 0x4e, 0x3b, 0xda, 0x7f, 0xe7, 0xa1, 0xe2, 0xeb, 0x0a, 0x4d, 0x86, 0x7a, 0x50, 0x12,
0x3e, 0xa9, 0x22, 0x4e, 0x7e, 0x08, 0xee, 0x76, 0x93, 0xf7, 0xa3, 0x6e, 0xcc, 0x60, 0xa5, 0x38,
0x08, 0x4c, 0xef, 0x41, 0xd9, 0xb0, 0x74, 0x72, 0xac, 0x7a, 0xcb, 0x93, 0x77, 0x97, 0xe7, 0x56,
0x94, 0x47, 0xec, 0x49, 0x5d, 0xa9, 0xad, 0x93, 0x63, 0x97, 0x03, 0x8c, 0xe0, 0x93, 0x21, 0x02,
0x17, 0xc9, 0x31, 0x77, 0xb0, 0x1a, 0xe6, 0x2a, 0xb8, 0x5c, 0x9f, 0x9f, 0x60, 0x93, 0x4b, 0xd0,
0x7d, 0x29, 0x66, 0x4b, 0x6e, 0xf6, 0xd2, 0xe2, 0xce, 0x44, 0xa9, 0x93, 0x68, 0x6f, 0xf3, 0x27,
0xb8, 0x94, 0x04, 0x44, 0x2b, 0x50, 0x38, 0x20, 0x13, 0x3f, 0xec, 0xe2, 0x13, 0xad, 0xc1, 0xe2,
0xa1, 0x48, 0x25, 0x37, 0xce, 0x33, 0xb9, 0xe1, 0x3a, 0x34, 0xf5, 0xc4, 0x83, 0x3e, 0xcf, 0x3f,
0xcb, 0xb5, 0xff, 0xca, 0x43, 0x63, 0x36, 0xdd, 0xce, 0xb3, 0x57, 0x64, 0x49, 0xb9, 0x21, 0x54,
0xfd, 0x85, 0x8e, 0x84, 0x6e, 0x3d, 0x2d, 0x74, 0x69, 0x16, 0x46, 0x62, 0xea, 0xc5, 0xb0, 0xc2,
0x42, 0x5d, 0x4d, 0x02, 0x17, 0x67, 0x20, 0x09, 0xd1, 0x7b, 0x1e, 0x8d, 0xde, 0xed, 0x2c, 0x4b,
0x18, 0x8e, 0xa2, 0x0e, 0x97, 0x36, 0x09, 0xdf, 0x70, 0x88, 0x4e, 0x2c, 0x6e, 0x60, 0xf3, 0xec,
0x05, 0xdb, 0x84, 0xe2, 0x98, 0x89, 0xd3, 0x72, 0xe4, 0x19, 0x53, 0x52, 0x64, 0xbb, 0xfd, 0x6b,
0x0e, 0x2e, 0xc7, 0x64, 0xce, 0xb3, 0x50, 0x73, 0xa4, 0xc4, 0x98, 0x8d, 0x19, 0x3b, 0xa2, 0x8e,
0xb7, 0xd1, 0x96, 0x14, 0xd9, 0x6e, 0x53, 0xb8, 0xb2, 0x49, 0xf8, 0x17, 0x63, 0xcb, 0x5b, 0x4d,
0x91, 0x50, 0x67, 0x76, 0xf7, 0x16, 0x54, 0xf7, 0x7c, 0x22, 0x35, 0x64, 0x48, 0x25, 0xe8, 0xfc,
0x5a, 0xf8, 0xfd, 0x5b, 0x0e, 0xae, 0xce, 0x28, 0x9e, 0xc7, 0xf3, 0x67, 0xb0, 0xe0, 0x6e, 0x22,
0x27, 0xac, 0x76, 0x44, 0xd0, 0x9d, 0xd1, 0xfe, 0x23, 0x07, 0x95, 0x70, 0x77, 0x26, 0x07, 0xd0,
0x1d, 0xa8, 0x1f, 0x61, 0xae, 0x0e, 0xa8, 0x3e, 0x51, 0x85, 0xdb, 0x4f, 0x3f, 0xf5, 0x83, 0x5a,
0x3d, 0xc2, 0x7c, 0x9d, 0xea, 0x93, 0x75, 0xb7, 0x13, 0x3d, 0x87, 0x12, 0x76, 0x86, 0x2a, 0x9f,
0xd8, 0x84, 0x35, 0x16, 0x5a, 0x85, 0x4e, 0x6d, 0xed, 0x46, 0xd4, 0x38, 0xff, 0x72, 0xd4, 0xc3,
0x1c, 0xef, 0x4e, 0x6c, 0xa2, 0x14, 0xb1, 0x33, 0x14, 0x1f, 0x6c, 0xed, 0x9f, 0x16, 0x94, 0x14,
0x4a, 0xf9, 0x86, 0x30, 0x1d, 0xd9, 0x80, 0x44, 0xa6, 0xd0, 0x91, 0x4d, 0x2d, 0x62, 0x79, 0xc7,
0x1d, 0x43, 0x8f, 0xa3, 0x64, 0xf2, 0x5e, 0x36, 0x0b, 0xf5, 0x57, 0xb4, 0x79, 0x27, 0x65, 0x46,
0x0c, 0xde, 0xbe, 0x80, 0x46, 0xae, 0xa2, 0xb8, 0x45, 0xed, 0x1a, 0xda, 0xc1, 0xc6, 0x3e, 0xb6,
0x2c, 0x62, 0xce, 0x53, 0x8c, 0x41, 0x03, 0xc5, 0xd8, 0x56, 0xec, 0x37, 0x76, 0xb8, 0x63, 0x58,
0xc3, 0x60, 0xd5, 0xdb, 0x17, 0xd0, 0x07, 0xb7, 0xe2, 0x84, 0xba, 0xc1, 0xb8, 0xa1, 0xb1, 0x40,
0x70, 0x2d, 0x5d, 0x70, 0x06, 0x7c, 0x4a, 0x49, 0x15, 0x56, 0x36, 0x1c, 0x82, 0x39, 0xd9, 0x90,
0x5b, 0x19, 0x7a, 0x98, 0x38, 0x35, 0x0e, 0x0b, 0x84, 0xe6, 0x25, 0x67, 0xfb, 0x02, 0x7a, 0x07,
0xb5, 0x9e, 0x43, 0xed, 0x10, 0xfd, 0xfd, 0x44, 0xfa, 0x28, 0x28, 0x23, 0xb9, 0x0a, 0xd5, 0x57,
0x98, 0x85, 0xb8, 0xef, 0x25, 0x72, 0x47, 0x30, 0x01, 0xf5, 0xcd, 0x44, 0xe8, 0x3a, 0xa5, 0x66,
0x28, 0x3c, 0x47, 0x80, 0x82, 0x6d, 0x3a, 0xa4, 0xd2, 0x4d, 0xf6, 0x60, 0x06, 0x18, 0x48, 0xad,
0x66, 0xc6, 0x4b, 0xe1, 0x37, 0x50, 0xf6, 0x02, 0xfe, 0xc2, 0x34, 0x30, 0x43, 0x77, 0xe7, 0x2c,
0x89, 0x8b, 0xc8, 0x18, 0xb0, 0x6f, 0xa0, 0x24, 0x02, 0xed, 0x91, 0xfe, 0x3f, 0x75, 0x21, 0x4e,
0x43, 0xb9, 0x03, 0xf0, 0xc2, 0xe4, 0xc4, 0xf1, 0x38, 0xef, 0x24, 0x72, 0x4e, 0x01, 0x19, 0x49,
0x2d, 0xa8, 0xef, 0xec, 0x8b, 0x6b, 0x67, 0x10, 0x1a, 0x86, 0x1e, 0x24, 0x27, 0x74, 0x14, 0x15,
0xd0, 0x3f, 0xcc, 0x06, 0x96, 0xe1, 0x7e, 0x0f, 0x75, 0x2f, 0x98, 0xdb, 0xc1, 0x55, 0x2e, 0x45,
0x2f, 0x86, 0xca, 0xe8, 0xce, 0xf7, 0x50, 0x15, 0x61, 0x9d, 0x92, 0xdf, 0x4b, 0x0d, 0xfd, 0x69,
0xa9, 0xdf, 0x43, 0xe5, 0x15, 0x66, 0x53, 0xe6, 0x4e, 0x5a, 0x05, 0xcc, 0x10, 0x67, 0x2a, 0x80,
0x03, 0xa8, 0x89, 0xa8, 0xc9, 0xc9, 0x2c, 0xa5, 0x7c, 0xa3, 0xa0, 0x40, 0xe2, 0x41, 0x26, 0xac,
0x14, 0x23, 0x50, 0x11, 0x63, 0xc1, 0x85, 0x28, 0xc5, 0x97, 0x30, 0x24, 0x10, 0xba, 0x97, 0x01,
0x19, 0xda, 0x66, 0x6b, 0xd1, 0xd7, 0x31, 0x7a, 0x94, 0x76, 0x5a, 0x26, 0xbe, 0xd3, 0x9b, 0xdd,
0xac, 0x70, 0x29, 0xf9, 0x23, 0x2c, 0xfb, 0x6f, 0xd6, 0x78, 0x85, 0xc4, 0x26, 0xcb, 0xe7, 0x72,
0xf3, 0xee, 0x89, 0x38, 0xc9, 0x8e, 0xe1, 0xf2, 0x1b, 0x5b, 0x17, 0xbb, 0xb3, 0x77, 0x06, 0x04,
0xa7, 0x50, 0x3c, 0xcd, 0xa6, 0x27, 0x5d, 0x14, 0xb7, 0xc5, 0x86, 0x27, 0xa5, 0x99, 0x03, 0x37,
0xfa, 0xd6, 0x21, 0x36, 0x0d, 0x3d, 0x72, 0x08, 0x6c, 0x11, 0x8e, 0x37, 0xb0, 0xb6, 0x4f, 0xe2,
0x67, 0x94, 0xf7, 0x3b, 0x24, 0x3a, 0x45, 0x82, 0x33, 0xa6, 0xf6, 0xcf, 0x80, 0xbc, 0x8a, 0xb5,
0xf6, 0x8c, 0xe1, 0xd8, 0xc1, 0x5e, 0xfe, 0xa5, 0x9d, 0xbe, 0xb3, 0xd0, 0x40, 0xe6, 0x93, 0x53,
0xcc, 0x08, 0x1d, 0x8c, 0xb0, 0x49, 0xf8, 0x16, 0xe1, 0x8e, 0xa1, 0xa5, 0x6d, 0x6b, 0x53, 0x40,
0xca, 0xa2, 0x25, 0xe0, 0xa4, 0xc0, 0x0e, 0x2c, 0x79, 0xcf, 0x76, 0xd4, 0x4e, 0x9c, 0x14, 0xfc,
0x74, 0x98, 0x77, 0x9c, 0xcb, 0x1f, 0x13, 0xa1, 0x72, 0xdd, 0x24, 0x3c, 0xf4, 0x3b, 0x20, 0xa5,
0x5c, 0xa3, 0xa0, 0xf9, 0xe5, 0x1a, 0xc7, 0x4a, 0x31, 0x0b, 0xea, 0x5f, 0x19, 0xcc, 0x1f, 0xdc,
0xc5, 0xec, 0x20, 0x6d, 0x93, 0x8e, 0xa1, 0xe6, 0x6f, 0xd2, 0x33, 0xe0, 0x50, 0xc4, 0x2a, 0x0a,
0x11, 0x03, 0x7e, 0xdc, 0x52, 0xef, 0xb8, 0xe1, 0xff, 0x35, 0x27, 0x25, 0xd9, 0x5b, 0x79, 0x01,
0x92, 0x2f, 0x90, 0xf8, 0xc1, 0x38, 0x2d, 0x1b, 0x09, 0x11, 0xd7, 0xe4, 0x0c, 0xcc, 0x7e, 0x55,
0x7e, 0x6c, 0x66, 0x15, 0x56, 0x7a, 0xc4, 0x24, 0x11, 0xe6, 0x87, 0x29, 0x77, 0x8c, 0x28, 0x2c,
0x63, 0xe5, 0xed, 0x43, 0x55, 0x2c, 0x83, 0x98, 0xf7, 0x86, 0x11, 0x87, 0xa5, 0x9c, 0x57, 0x11,
0x4c, 0x40, 0x7d, 0x3f, 0x0b, 0x34, 0x94, 0x43, 0xd5, 0xc8, 0xeb, 0x2f, 0xee, 0xc7, 0x74, 0x51,
0x93, 0xde, 0xa2, 0xcd, 0x47, 0x19, 0xd1, 0xa1, 0x1c, 0x02, 0x6f, 0xb9, 0x15, 0x6a, 0x92, 0x94,
0xb2, 0x9e, 0x02, 0x32, 0x86, 0xeb, 0x35, 0x14, 0xc5, 0xd1, 0xed, 0x52, 0xde, 0x4e, 0x3d, 0xd9,
0x4f, 0x41, 0xf8, 0x1e, 0xea, 0xaf, 0x6d, 0xe2, 0x60, 0x4e, 0x44, 0xbc, 0x5c, 0xde, 0xe4, 0xca,
0x8a, 0xa1, 0x32, 0x5f, 0x9b, 0x61, 0x87, 0x88, 0x1d, 0x7c, 0x4e, 0x10, 0xa6, 0x80, 0xf9, 0x7b,
0x5b, 0x18, 0x17, 0xde, 0x3c, 0xbd, 0x7e, 0x61, 0xd8, 0x5c, 0x01, 0xd7, 0xf2, 0x0c, 0x02, 0x1e,
0x2e, 0xfc, 0x6c, 0xf1, 0x5d, 0xdf, 0x76, 0x8c, 0x43, 0xc3, 0x24, 0x43, 0x92, 0x52, 0x01, 0x71,
0x58, 0xc6, 0x10, 0x0d, 0xa0, 0xec, 0x09, 0x6f, 0x3a, 0xd8, 0xe2, 0x68, 0x9e, 0x69, 0x2e, 0x22,
0xa0, 0xed, 0x9c, 0x0c, 0x94, 0x4e, 0x68, 0x00, 0xa2, 0x2c, 0xb6, 0xa9, 0x69, 0x68, 0x93, 0xf8,
0x65, 0x47, 0x6e, 0x0d, 0x53, 0x48, 0xca, 0x65, 0x27, 0x11, 0x29, 0x45, 0xde, 0x41, 0xcd, 0xcb,
0xe7, 0xe0, 0x85, 0x9f, 0x72, 0x22, 0x44, 0x41, 0x19, 0xa3, 0xf4, 0x1d, 0x54, 0x44, 0x66, 0x4b,
0xea, 0x4e, 0x6a, 0xf2, 0x9f, 0x92, 0x98, 0x43, 0x3d, 0xf6, 0x73, 0x04, 0x75, 0xe7, 0x94, 0x7a,
0xc2, 0x7f, 0x9b, 0xf8, 0xa3, 0x6b, 0x0e, 0x3e, 0x88, 0xd5, 0xfa, 0xb3, 0x1f, 0x9e, 0x0e, 0x0d,
0xbe, 0x3f, 0x1e, 0x08, 0x7b, 0x56, 0xbd, 0xe9, 0x8f, 0x0c, 0xea, 0x7f, 0xad, 0x06, 0x81, 0x5e,
0x75, 0x19, 0x57, 0x25, 0xa3, 0x3d, 0x18, 0x2c, 0xb9, 0x5d, 0x4f, 0xfe, 0x0d, 0x00, 0x00, 0xff,
0xff, 0x97, 0xa2, 0x6e, 0x4c, 0x5d, 0x1a, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -874,6 +1042,10 @@ type RootCoordClient interface {
OperatePrivilege(ctx context.Context, in *milvuspb.OperatePrivilegeRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
SelectGrant(ctx context.Context, in *milvuspb.SelectGrantRequest, opts ...grpc.CallOption) (*milvuspb.SelectGrantResponse, error)
ListPolicy(ctx context.Context, in *internalpb.ListPolicyRequest, opts ...grpc.CallOption) (*internalpb.ListPolicyResponse, error)
// user defined function
CreateFunction(ctx context.Context, in *milvuspb.CreateFunctionRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
DropFunction(ctx context.Context, in *milvuspb.DropFunctionRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
GetFunctionInfo(ctx context.Context, in *GetFunctionInfoRequest, opts ...grpc.CallOption) (*GetFunctionInfoResponse, error)
}
type rootCoordClient struct {
@ -1235,6 +1407,33 @@ func (c *rootCoordClient) ListPolicy(ctx context.Context, in *internalpb.ListPol
return out, nil
}
func (c *rootCoordClient) CreateFunction(ctx context.Context, in *milvuspb.CreateFunctionRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
out := new(commonpb.Status)
err := c.cc.Invoke(ctx, "/milvus.proto.rootcoord.RootCoord/CreateFunction", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *rootCoordClient) DropFunction(ctx context.Context, in *milvuspb.DropFunctionRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
out := new(commonpb.Status)
err := c.cc.Invoke(ctx, "/milvus.proto.rootcoord.RootCoord/DropFunction", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *rootCoordClient) GetFunctionInfo(ctx context.Context, in *GetFunctionInfoRequest, opts ...grpc.CallOption) (*GetFunctionInfoResponse, error) {
out := new(GetFunctionInfoResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.rootcoord.RootCoord/GetFunctionInfo", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// RootCoordServer is the server API for RootCoord service.
type RootCoordServer interface {
GetComponentStates(context.Context, *internalpb.GetComponentStatesRequest) (*internalpb.ComponentStates, error)
@ -1328,6 +1527,10 @@ type RootCoordServer interface {
OperatePrivilege(context.Context, *milvuspb.OperatePrivilegeRequest) (*commonpb.Status, error)
SelectGrant(context.Context, *milvuspb.SelectGrantRequest) (*milvuspb.SelectGrantResponse, error)
ListPolicy(context.Context, *internalpb.ListPolicyRequest) (*internalpb.ListPolicyResponse, error)
// user defined function
CreateFunction(context.Context, *milvuspb.CreateFunctionRequest) (*commonpb.Status, error)
DropFunction(context.Context, *milvuspb.DropFunctionRequest) (*commonpb.Status, error)
GetFunctionInfo(context.Context, *GetFunctionInfoRequest) (*GetFunctionInfoResponse, error)
}
// UnimplementedRootCoordServer can be embedded to have forward compatible implementations.
@ -1451,6 +1654,15 @@ func (*UnimplementedRootCoordServer) SelectGrant(ctx context.Context, req *milvu
func (*UnimplementedRootCoordServer) ListPolicy(ctx context.Context, req *internalpb.ListPolicyRequest) (*internalpb.ListPolicyResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListPolicy not implemented")
}
func (*UnimplementedRootCoordServer) CreateFunction(ctx context.Context, req *milvuspb.CreateFunctionRequest) (*commonpb.Status, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateFunction not implemented")
}
func (*UnimplementedRootCoordServer) DropFunction(ctx context.Context, req *milvuspb.DropFunctionRequest) (*commonpb.Status, error) {
return nil, status.Errorf(codes.Unimplemented, "method DropFunction not implemented")
}
func (*UnimplementedRootCoordServer) GetFunctionInfo(ctx context.Context, req *GetFunctionInfoRequest) (*GetFunctionInfoResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetFunctionInfo not implemented")
}
func RegisterRootCoordServer(s *grpc.Server, srv RootCoordServer) {
s.RegisterService(&_RootCoord_serviceDesc, srv)
@ -2158,6 +2370,60 @@ func _RootCoord_ListPolicy_Handler(srv interface{}, ctx context.Context, dec fun
return interceptor(ctx, in, info, handler)
}
func _RootCoord_CreateFunction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(milvuspb.CreateFunctionRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RootCoordServer).CreateFunction(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.rootcoord.RootCoord/CreateFunction",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RootCoordServer).CreateFunction(ctx, req.(*milvuspb.CreateFunctionRequest))
}
return interceptor(ctx, in, info, handler)
}
func _RootCoord_DropFunction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(milvuspb.DropFunctionRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RootCoordServer).DropFunction(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.rootcoord.RootCoord/DropFunction",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RootCoordServer).DropFunction(ctx, req.(*milvuspb.DropFunctionRequest))
}
return interceptor(ctx, in, info, handler)
}
func _RootCoord_GetFunctionInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetFunctionInfoRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RootCoordServer).GetFunctionInfo(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.rootcoord.RootCoord/GetFunctionInfo",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RootCoordServer).GetFunctionInfo(ctx, req.(*GetFunctionInfoRequest))
}
return interceptor(ctx, in, info, handler)
}
var _RootCoord_serviceDesc = grpc.ServiceDesc{
ServiceName: "milvus.proto.rootcoord.RootCoord",
HandlerType: (*RootCoordServer)(nil),
@ -2318,6 +2584,18 @@ var _RootCoord_serviceDesc = grpc.ServiceDesc{
MethodName: "ListPolicy",
Handler: _RootCoord_ListPolicy_Handler,
},
{
MethodName: "CreateFunction",
Handler: _RootCoord_CreateFunction_Handler,
},
{
MethodName: "DropFunction",
Handler: _RootCoord_DropFunction_Handler,
},
{
MethodName: "GetFunctionInfo",
Handler: _RootCoord_GetFunctionInfo_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "root_coord.proto",

View File

@ -23,6 +23,8 @@ import (
"os"
"strconv"
"github.com/milvus-io/milvus/internal/proto/rootcoordpb"
"github.com/golang/protobuf/proto"
"github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/api/milvuspb"
@ -2514,6 +2516,7 @@ func (node *Proxy) Search(ctx context.Context, request *milvuspb.SearchRequest)
},
request: request,
qc: node.queryCoord,
rc: node.rootCoord,
tr: timerecord.NewTimeRecorder("search"),
shardMgr: node.shardMgr,
}
@ -2757,6 +2760,7 @@ func (node *Proxy) Query(ctx context.Context, request *milvuspb.QueryRequest) (*
},
request: request,
qc: node.queryCoord,
rc: node.rootCoord,
queryShardPolicy: mergeRoundRobinPolicy,
shardMgr: node.shardMgr,
}
@ -2852,6 +2856,276 @@ func (node *Proxy) Query(ctx context.Context, request *milvuspb.QueryRequest) (*
return ret, nil
}
// CreateFunction create function, then you can use function in search.
func (node *Proxy) CreateFunction(ctx context.Context, request *milvuspb.CreateFunctionRequest) (*commonpb.Status, error) {
if !node.checkHealthy() {
return unhealthyStatus(), nil
}
sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-CreateFunction")
defer sp.Finish()
traceID, _, _ := trace.InfoFromSpan(sp)
cft := &createFunctionTask{
ctx: ctx,
Condition: NewTaskCondition(ctx),
CreateFunctionRequest: request,
rootCoord: node.rootCoord,
}
method := "CreateFunction"
tr := timerecord.NewTimeRecorder(method)
metrics.ProxyDDLFunctionCall.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method, metrics.TotalLabel).Inc()
log.Debug(
rpcReceived(method),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.String("functionName", request.FunctionName),
zap.String("WatBodyBase64", request.WatBodyBase64),
zap.String("ArgTypes", string(request.GetArgTypes())))
if err := node.sched.ddQueue.Enqueue(cft); err != nil {
log.Warn(
rpcFailedToEnqueue(method),
zap.Error(err),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.String("functionName", request.FunctionName),
zap.String("WatBodyBase64", request.WatBodyBase64),
zap.String("ArgTypes", string(request.GetArgTypes())))
metrics.ProxyDDLFunctionCall.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method, metrics.AbandonLabel).Inc()
return &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: err.Error(),
}, nil
}
log.Debug(
rpcEnqueued(method),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.Int64("MsgID", cft.ID()),
zap.Uint64("BeginTs", cft.BeginTs()),
zap.Uint64("EndTs", cft.EndTs()),
zap.String("functionName", request.FunctionName),
zap.String("WatBodyBase64", request.WatBodyBase64),
zap.String("ArgTypes", string(request.GetArgTypes())))
if err := cft.WaitToFinish(); err != nil {
log.Warn(
rpcFailedToWaitToFinish(method),
zap.Error(err),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.Int64("MsgID", cft.ID()),
zap.Uint64("BeginTs", cft.BeginTs()),
zap.Uint64("EndTs", cft.EndTs()),
zap.String("FunctionName", request.FunctionName),
zap.String("WatBodyBase64", request.WatBodyBase64),
zap.String("ArgTypes", string(request.GetArgTypes())))
metrics.ProxyDDLFunctionCall.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method, metrics.FailLabel).Inc()
return &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: err.Error(),
}, nil
}
log.Debug(
rpcDone(method),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.Int64("MsgID", cft.ID()),
zap.Uint64("BeginTs", cft.BeginTs()),
zap.Uint64("EndTs", cft.EndTs()),
zap.String("FunctionName", request.FunctionName),
zap.String("WatBodyBase64", request.WatBodyBase64),
zap.String("ArgTypes", string(request.GetArgTypes())))
metrics.ProxyDDLFunctionCall.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method, metrics.SuccessLabel).Inc()
metrics.ProxyDDLReqLatency.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method).Observe(float64(tr.ElapseSpan().Milliseconds()))
return cft.result, nil
}
// DropFunction drop function by function name.
func (node *Proxy) DropFunction(ctx context.Context, request *milvuspb.DropFunctionRequest) (*commonpb.Status, error) {
if !node.checkHealthy() {
return unhealthyStatus(), nil
}
sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-DropFunction")
defer sp.Finish()
traceID, _, _ := trace.InfoFromSpan(sp)
dft := &dropFunctionTask{
ctx: ctx,
Condition: NewTaskCondition(ctx),
DropFunctionRequest: request,
rootCoord: node.rootCoord,
}
method := "DropFunction"
tr := timerecord.NewTimeRecorder(method)
metrics.ProxyDDLFunctionCall.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method, metrics.TotalLabel).Inc()
log.Debug(
rpcReceived(method),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.String("FunctionName", request.FunctionName))
if err := node.sched.ddQueue.Enqueue(dft); err != nil {
log.Warn(
rpcFailedToEnqueue(method),
zap.Error(err),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.String("FunctionName", request.FunctionName))
metrics.ProxyDDLFunctionCall.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method, metrics.AbandonLabel).Inc()
return &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: err.Error(),
}, nil
}
log.Debug(
rpcEnqueued(method),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.Int64("MsgID", dft.ID()),
zap.Uint64("BeginTs", dft.BeginTs()),
zap.Uint64("EndTs", dft.EndTs()),
zap.String("FunctionName", request.FunctionName))
if err := dft.WaitToFinish(); err != nil {
log.Warn(
rpcFailedToWaitToFinish(method),
zap.Error(err),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.Int64("MsgID", dft.ID()),
zap.Uint64("BeginTs", dft.BeginTs()),
zap.Uint64("EndTs", dft.EndTs()),
zap.String("FunctionName", request.FunctionName))
metrics.ProxyDDLFunctionCall.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method, metrics.FailLabel).Inc()
return &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: err.Error(),
}, nil
}
log.Debug(
rpcDone(method),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.Int64("MsgID", dft.ID()),
zap.Uint64("BeginTs", dft.BeginTs()),
zap.Uint64("EndTs", dft.EndTs()),
zap.String("functionName", request.FunctionName))
metrics.ProxyDDLFunctionCall.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method, metrics.SuccessLabel).Inc()
metrics.ProxyDDLReqLatency.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method).Observe(float64(tr.ElapseSpan().Milliseconds()))
return dft.result, nil
}
// GetFunctionInfo get function information by function name, then use function in udf expression parser.
func (node *Proxy) GetFunctionInfo(ctx context.Context, request *rootcoordpb.GetFunctionInfoRequest) (*rootcoordpb.GetFunctionInfoResponse, error) {
sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetFunctionInfo")
defer sp.Finish()
if !node.checkHealthy() {
return &rootcoordpb.GetFunctionInfoResponse{
Status: unhealthyStatus(),
}, nil
}
traceID, _, _ := trace.InfoFromSpan(sp)
gft := &getFunctionInfoTask{
ctx: ctx,
Condition: NewTaskCondition(ctx),
GetFunctionInfoRequest: request,
rootCoord: node.rootCoord,
}
method := "GetFunctionInfo"
tr := timerecord.NewTimeRecorder(method)
metrics.ProxyDDLFunctionCall.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method, metrics.TotalLabel).Inc()
log.Debug(
rpcReceived(method),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.String("FunctionName", request.FunctionName))
if err := node.sched.ddQueue.Enqueue(gft); err != nil {
log.Warn(
rpcFailedToEnqueue(method),
zap.Error(err),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.String("FunctionName", request.FunctionName))
metrics.ProxyDDLFunctionCall.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method, metrics.AbandonLabel).Inc()
return &rootcoordpb.GetFunctionInfoResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: err.Error(),
},
}, nil
}
log.Debug(
rpcEnqueued(method),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.Int64("MsgID", gft.ID()),
zap.Uint64("BeginTs", gft.BeginTs()),
zap.Uint64("EndTs", gft.EndTs()),
zap.String("FunctionName", request.FunctionName))
if err := gft.WaitToFinish(); err != nil {
log.Warn(
rpcFailedToWaitToFinish(method),
zap.Error(err),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.Int64("MsgID", gft.ID()),
zap.Uint64("BeginTs", gft.BeginTs()),
zap.Uint64("EndTs", gft.EndTs()),
zap.String("FunctionName", request.FunctionName))
metrics.ProxyDDLFunctionCall.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method, metrics.FailLabel).Inc()
return &rootcoordpb.GetFunctionInfoResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UnexpectedError,
Reason: err.Error(),
},
}, nil
}
log.Debug(
rpcDone(method),
zap.String("traceID", traceID),
zap.String("role", typeutil.ProxyRole),
zap.Int64("MsgID", gft.ID()),
zap.Uint64("BeginTs", gft.BeginTs()),
zap.Uint64("EndTs", gft.EndTs()),
zap.String("FunctionName", request.FunctionName))
metrics.ProxyDDLFunctionCall.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method, metrics.SuccessLabel).Inc()
metrics.ProxyDDLReqLatency.WithLabelValues(strconv.FormatInt(Params.ProxyCfg.GetNodeID(), 10), method).Observe(float64(tr.ElapseSpan().Milliseconds()))
return gft.result, nil
}
// CreateAlias create alias for collection, then you can search the collection with alias.
func (node *Proxy) CreateAlias(ctx context.Context, request *milvuspb.CreateAliasRequest) (*commonpb.Status, error) {
if !node.checkHealthy() {
@ -3163,6 +3437,7 @@ func (node *Proxy) CalcDistance(ctx context.Context, request *milvuspb.CalcDista
},
request: queryRequest,
qc: node.queryCoord,
rc: node.rootCoord,
ids: ids.IdArray,
queryShardPolicy: mergeRoundRobinPolicy,

View File

@ -111,6 +111,21 @@ type RootCoordMock struct {
lastTsMtx sync.Mutex
}
func (coord *RootCoordMock) CreateFunction(ctx context.Context, req *milvuspb.CreateFunctionRequest) (*commonpb.Status, error) {
//TODO (ziyu wang) implement me
panic("implement me")
}
func (coord *RootCoordMock) DropFunction(ctx context.Context, req *milvuspb.DropFunctionRequest) (*commonpb.Status, error) {
//TODO (ziyu wang) implement me
panic("implement me")
}
func (coord *RootCoordMock) GetFunctionInfo(ctx context.Context, req *rootcoordpb.GetFunctionInfoRequest) (*rootcoordpb.GetFunctionInfoResponse, error) {
//TODO (ziyu wang) implement me
panic("implement me")
}
func (coord *RootCoordMock) CreateAlias(ctx context.Context, req *milvuspb.CreateAliasRequest) (*commonpb.Status, error) {
code := coord.state.Load().(internalpb.StateCode)
if code != internalpb.StateCode_Healthy {

View File

@ -24,6 +24,8 @@ import (
"strconv"
"strings"
"github.com/milvus-io/milvus/internal/proto/rootcoordpb"
"github.com/milvus-io/milvus/internal/proto/indexpb"
"github.com/golang/protobuf/proto"
@ -88,6 +90,9 @@ const (
CreateAliasTaskName = "CreateAliasTask"
DropAliasTaskName = "DropAliasTask"
AlterAliasTaskName = "AlterAliasTask"
CreateFunctionTaskName = "createFunctionTask"
DropFunctionTaskName = "DropFunctionTaskName"
GetFunctionInfoTaskName = "GetFunctionInfoTaskName"
// minFloat32 minimum float.
minFloat32 = -1 * float32(math.MaxFloat32)
@ -1339,7 +1344,7 @@ func (cit *createIndexTask) Execute(ctx context.Context) error {
Timestamp: cit.BeginTs(),
}
cit.result, err = cit.indexCoord.CreateIndex(ctx, req)
//cit.result, err = cit.rootCoord.CreateIndex(ctx, cit.CreateIndexRequest)
//cit.result, err = cit.rc.CreateIndex(ctx, cit.CreateIndexRequest)
if err != nil {
return err
}
@ -2746,3 +2751,207 @@ func (a *AlterAliasTask) Execute(ctx context.Context) error {
func (a *AlterAliasTask) PostExecute(ctx context.Context) error {
return nil
}
// createFunctionTask contains task information of CreateFunction
type createFunctionTask struct {
Condition
*milvuspb.CreateFunctionRequest
ctx context.Context
rootCoord types.RootCoord
result *commonpb.Status
}
func (c *createFunctionTask) TraceCtx() context.Context {
return c.ctx
}
func (c *createFunctionTask) ID() UniqueID {
return c.Base.MsgID
}
func (c *createFunctionTask) SetID(uid UniqueID) {
c.Base.MsgID = uid
}
func (c *createFunctionTask) Name() string {
return CreateFunctionTaskName
}
func (c *createFunctionTask) Type() commonpb.MsgType {
return c.Base.MsgType
}
func (c *createFunctionTask) BeginTs() Timestamp {
return c.Base.Timestamp
}
func (c *createFunctionTask) EndTs() Timestamp {
return c.Base.Timestamp
}
func (c *createFunctionTask) SetTs(ts Timestamp) {
c.Base.Timestamp = ts
}
func (c *createFunctionTask) OnEnqueue() error {
c.Base = &commonpb.MsgBase{}
return nil
}
func (c *createFunctionTask) PreExecute(ctx context.Context) error {
c.Base.MsgType = commonpb.MsgType_CreateFunction
c.Base.SourceID = Params.ProxyCfg.GetNodeID()
return nil
}
func (c *createFunctionTask) Execute(ctx context.Context) error {
var err error
c.result, err = c.rootCoord.CreateFunction(ctx, c.CreateFunctionRequest)
return err
}
func (c *createFunctionTask) PostExecute(ctx context.Context) error {
//TODO implement me
return nil
}
// dropFunctionTask contains task information of DropFunction
type dropFunctionTask struct {
Condition
*milvuspb.DropFunctionRequest
ctx context.Context
rootCoord types.RootCoord
result *commonpb.Status
}
// TraceCtx returns the context for trace
func (d *dropFunctionTask) TraceCtx() context.Context {
return d.ctx
}
// ID returns the MsgID
func (d *dropFunctionTask) ID() UniqueID {
return d.Base.MsgID
}
// SetID sets the MsgID
func (d *dropFunctionTask) SetID(uid UniqueID) {
d.Base.MsgID = uid
}
// Name returns the name of the task
func (d *dropFunctionTask) Name() string {
return DropFunctionTaskName
}
func (d *dropFunctionTask) Type() commonpb.MsgType {
return d.Base.MsgType
}
func (d *dropFunctionTask) BeginTs() Timestamp {
return d.Base.Timestamp
}
func (d *dropFunctionTask) EndTs() Timestamp {
return d.Base.Timestamp
}
func (d *dropFunctionTask) SetTs(ts Timestamp) {
d.Base.Timestamp = ts
}
func (d *dropFunctionTask) OnEnqueue() error {
d.Base = &commonpb.MsgBase{}
return nil
}
func (d *dropFunctionTask) PreExecute(ctx context.Context) error {
d.Base.MsgType = commonpb.MsgType_DropFunction
d.Base.SourceID = Params.ProxyCfg.GetNodeID()
return nil
}
func (d *dropFunctionTask) Execute(ctx context.Context) error {
var err error
d.result, err = d.rootCoord.DropFunction(ctx, d.DropFunctionRequest)
return err
}
func (d *dropFunctionTask) PostExecute(ctx context.Context) error {
return nil
}
type getFunctionInfoTask struct {
Condition
*rootcoordpb.GetFunctionInfoRequest
ctx context.Context
rootCoord types.RootCoord
result *rootcoordpb.GetFunctionInfoResponse
}
func (t *getFunctionInfoTask) TraceCtx() context.Context {
return t.ctx
}
func (t *getFunctionInfoTask) ID() UniqueID {
return t.Base.MsgID
}
func (t *getFunctionInfoTask) SetID(uid UniqueID) {
t.Base.MsgID = uid
}
func (t *getFunctionInfoTask) Name() string {
return GetFunctionInfoTaskName
}
func (t *getFunctionInfoTask) Type() commonpb.MsgType {
return t.Base.MsgType
}
func (t *getFunctionInfoTask) BeginTs() Timestamp {
return t.Base.Timestamp
}
func (t *getFunctionInfoTask) EndTs() Timestamp {
return t.Base.Timestamp
}
func (t *getFunctionInfoTask) SetTs(ts Timestamp) {
t.Base.Timestamp = ts
}
func (t *getFunctionInfoTask) OnEnqueue() error {
t.Base = &commonpb.MsgBase{}
return nil
}
func (t *getFunctionInfoTask) PreExecute(ctx context.Context) error {
t.Base.MsgType = commonpb.MsgType_GetFunctionInfo
t.Base.SourceID = Params.ProxyCfg.GetNodeID()
return nil
}
func (t *getFunctionInfoTask) Execute(ctx context.Context) error {
respFromRootCoord, err := t.rootCoord.GetFunctionInfo(ctx, t.GetFunctionInfoRequest)
if err != nil {
return err
}
if respFromRootCoord == nil {
return errors.New("failed to get function information")
}
if respFromRootCoord.Status.ErrorCode != commonpb.ErrorCode_Success {
return errors.New(respFromRootCoord.Status.Reason)
}
t.result = respFromRootCoord
return nil
}
func (t *getFunctionInfoTask) PostExecute(ctx context.Context) error {
return nil
}

View File

@ -42,6 +42,7 @@ type queryTask struct {
result *milvuspb.QueryResults
request *milvuspb.QueryRequest
qc types.QueryCoord
rc types.RootCoord
ids *schemapb.IDs
collectionName string
queryParams *queryParams
@ -223,7 +224,7 @@ func (t *queryTask) PreExecute(ctx context.Context) error {
return fmt.Errorf("query expression is empty")
}
plan, err := planparserv2.CreateRetrievePlan(schema, t.request.Expr)
plan, err := planparserv2.CreateRetrievePlan(schema, t.request.Expr, planparserv2.ParserVisitorWithRootCoord(t.rc))
if err != nil {
return err
}

View File

@ -132,6 +132,7 @@ func TestQueryTask_all(t *testing.T) {
Expr: expr,
},
qc: qc,
rc: rc,
shardMgr: mgr,
}

View File

@ -40,6 +40,7 @@ type searchTask struct {
result *milvuspb.SearchResults
request *milvuspb.SearchRequest
qc types.QueryCoord
rc types.RootCoord
tr *timerecord.TimeRecorder
collectionName string
schema *schemapb.CollectionSchema
@ -251,7 +252,7 @@ func (t *searchTask) PreExecute(ctx context.Context) error {
}
t.offset = offset
plan, err := planparserv2.CreateSearchPlan(t.schema, t.request.Dsl, annsField, queryInfo)
plan, err := planparserv2.CreateSearchPlan(t.schema, t.request.Dsl, annsField, queryInfo, planparserv2.ParserVisitorWithRootCoord(t.rc))
if err != nil {
log.Ctx(ctx).Warn("failed to create query plan", zap.Error(err), zap.Int64("msgID", t.ID()),
zap.String("dsl", t.request.Dsl), // may be very large if large term passed.

View File

@ -417,7 +417,7 @@ func TestSearchTaskWithInvalidRoundDecimal(t *testing.T) {
// ShardsNum: shardsNum,
// },
// ctx: ctx,
// rootCoord: rc,
// rc: rc,
// result: nil,
// schema: nil,
// }
@ -661,7 +661,7 @@ func TestSearchTaskV2_all(t *testing.T) {
// ShardsNum: shardsNum,
// },
// ctx: ctx,
// rootCoord: rc,
// rc: rc,
// result: nil,
// schema: nil,
// }
@ -899,7 +899,7 @@ func TestSearchTaskV2_7803_reduce(t *testing.T) {
// ShardsNum: shardsNum,
// },
// ctx: ctx,
// rootCoord: rc,
// rc: rc,
// result: nil,
// schema: nil,
// }

View File

@ -0,0 +1,25 @@
package rootcoord
import (
"context"
"github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/api/milvuspb"
)
type createFunctionTask struct {
baseTask
Req *milvuspb.CreateFunctionRequest
}
func (t *createFunctionTask) Prepare(ctx context.Context) error {
if err := CheckMsgType(t.Req.GetBase().GetMsgType(), commonpb.MsgType_CreateFunction); err != nil {
return err
}
return nil
}
func (t *createFunctionTask) Execute(ctx context.Context) error {
return t.core.meta.CreateFunction(ctx, t.Req.GetFunctionName(), t.Req.GetWatBodyBase64(), t.Req.GetArgTypes(), t.GetTs())
}

View File

@ -0,0 +1,44 @@
package rootcoord
import (
"context"
"testing"
"github.com/milvus-io/milvus/api/schemapb"
"github.com/milvus-io/milvus/api/commonpb"
"github.com/stretchr/testify/assert"
"github.com/milvus-io/milvus/api/milvuspb"
)
func Test_createFunctionTask_Prepare(t *testing.T) {
t.Run("invalid msg type", func(t *testing.T) {
task := &createFunctionTask{Req: &milvuspb.CreateFunctionRequest{Base: &commonpb.MsgBase{MsgType: commonpb.MsgType_DropCollection}}}
err := task.Prepare(context.Background())
assert.Error(t, err)
})
t.Run("normal case", func(t *testing.T) {
task := &createFunctionTask{Req: &milvuspb.CreateFunctionRequest{Base: &commonpb.MsgBase{MsgType: commonpb.MsgType_CreateFunction}}}
err := task.Prepare(context.Background())
assert.NoError(t, err)
})
}
func Test_createFunctionTask_Execute(t *testing.T) {
t.Run("failed to create function", func(t *testing.T) {
core := newTestCore(withInvalidMeta())
task := &createFunctionTask{
baseTask: baseTask{core: core},
Req: &milvuspb.CreateFunctionRequest{
Base: &commonpb.MsgBase{MsgType: commonpb.MsgType_CreateFunction},
FunctionName: "test",
WatBodyBase64: "test",
ArgTypes: []schemapb.DataType{schemapb.DataType_Int64, schemapb.DataType_Int64},
},
}
err := task.Execute(context.Background())
assert.Error(t, err)
})
}

View File

@ -0,0 +1,25 @@
package rootcoord
import (
"context"
"github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/api/milvuspb"
)
type dropFunctionTask struct {
baseTask
Req *milvuspb.DropFunctionRequest
}
func (t *dropFunctionTask) Prepare(ctx context.Context) error {
if err := CheckMsgType(t.Req.GetBase().GetMsgType(), commonpb.MsgType_DropFunction); err != nil {
return err
}
return nil
}
func (t *dropFunctionTask) Execute(ctx context.Context) error {
return t.core.meta.DropFunction(ctx, t.Req.GetFunctionName(), t.GetTs())
}

View File

@ -0,0 +1,49 @@
package rootcoord
import (
"context"
"testing"
"github.com/milvus-io/milvus/internal/util/funcutil"
"github.com/stretchr/testify/assert"
"github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/api/milvuspb"
)
func Test_dropFunctionTask_Prepare(t *testing.T) {
t.Run("invalid msg type", func(t *testing.T) {
task := &dropFunctionTask{
Req: &milvuspb.DropFunctionRequest{Base: &commonpb.MsgBase{MsgType: commonpb.MsgType_DropCollection}},
}
err := task.Prepare(context.Background())
assert.Error(t, err)
})
t.Run("normal case", func(t *testing.T) {
task := &dropFunctionTask{
Req: &milvuspb.DropFunctionRequest{Base: &commonpb.MsgBase{MsgType: commonpb.MsgType_DropFunction}},
}
err := task.Prepare(context.Background())
assert.NoError(t, err)
})
}
func Test_dropFunctionTask_Execute(t *testing.T) {
t.Run("failed to drop function", func(t *testing.T) {
core := newTestCore(withInvalidMeta())
funcName := funcutil.GenRandomStr()
task := &dropFunctionTask{
baseTask: baseTask{core: core},
Req: &milvuspb.DropFunctionRequest{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_DropFunction,
},
FunctionName: funcName,
},
}
err := task.Execute(context.Background())
assert.Error(t, err)
})
}

View File

@ -0,0 +1,32 @@
package rootcoord
import (
"context"
"github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/internal/proto/rootcoordpb"
)
type getFunctionInfoTask struct {
baseTask
Req *rootcoordpb.GetFunctionInfoRequest
Rsp *rootcoordpb.GetFunctionInfoResponse
}
func (t *getFunctionInfoTask) Prepare(ctx context.Context) error {
if err := CheckMsgType(t.Req.GetBase().GetMsgType(), commonpb.MsgType_GetFunctionInfo); err != nil {
return err
}
return nil
}
func (t *getFunctionInfoTask) Execute(ctx context.Context) error {
t.Rsp.Status = succStatus()
functionInfo, err := t.core.meta.GetFunctionInfo(ctx, t.Req.GetFunctionName(), t.GetTs())
if err != nil {
t.Rsp.Status = failStatus(commonpb.ErrorCode_UnexpectedError, err.Error())
return err
}
t.Rsp.Info = functionInfo
return nil
}

View File

@ -0,0 +1,57 @@
package rootcoord
import (
"context"
"testing"
"github.com/milvus-io/milvus/internal/proto/rootcoordpb"
"github.com/milvus-io/milvus/internal/util/funcutil"
"github.com/milvus-io/milvus/api/commonpb"
"github.com/stretchr/testify/assert"
)
func Test_getFunctionInfoTask_Prepare(t *testing.T) {
t.Run("invalid msg type", func(t *testing.T) {
task := &getFunctionInfoTask{
Req: &rootcoordpb.GetFunctionInfoRequest{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_CreateFunction,
},
},
}
err := task.Prepare(context.Background())
assert.Error(t, err)
})
t.Run("normal case", func(t *testing.T) {
task := &getFunctionInfoTask{
Req: &rootcoordpb.GetFunctionInfoRequest{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_GetFunctionInfo,
},
},
}
err := task.Prepare(context.Background())
assert.NoError(t, err)
})
}
func Test_getFunctionInfoTask_Execute(t *testing.T) {
t.Run("fail to get function", func(t *testing.T) {
core := newTestCore(withInvalidMeta())
funcName := funcutil.GenRandomStr()
task := &getFunctionInfoTask{
baseTask: baseTask{core: core},
Req: &rootcoordpb.GetFunctionInfoRequest{
Base: &commonpb.MsgBase{
MsgType: commonpb.MsgType_GetFunctionInfo,
},
FunctionName: funcName,
},
Rsp: &rootcoordpb.GetFunctionInfoResponse{},
}
err := task.Execute(context.Background())
assert.Error(t, err)
})
}

View File

@ -22,6 +22,9 @@ import (
"fmt"
"sync"
"github.com/milvus-io/milvus/api/schemapb"
"github.com/milvus-io/milvus/internal/proto/rootcoordpb"
"github.com/milvus-io/milvus/internal/common"
pb "github.com/milvus-io/milvus/internal/proto/etcdpb"
@ -115,15 +118,27 @@ type IMetaTable interface {
DropGrant(tenant string, role *milvuspb.RoleEntity) error
ListPolicy(tenant string) ([]string, error)
ListUserRole(tenant string) ([]string, error)
/* function */
CreateFunction(ctx context.Context, funcName string, watBodyBase64 string, argTypes []schemapb.DataType, ts Timestamp) error
DropFunction(ctx context.Context, funcName string, ts Timestamp) error
GetFunctionInfo(ctx context.Context, funcName string, ts Timestamp) (*rootcoordpb.FunctionInfo, error)
}
type FunctionInfo struct {
funcName string
watBodyBase64 string
argTypes []schemapb.DataType
}
type MetaTable struct {
ctx context.Context
catalog metastore.RootCoordCatalog
collID2Meta map[typeutil.UniqueID]*model.Collection // collection id -> collection meta
collName2ID map[string]typeutil.UniqueID // collection name to collection id
collAlias2ID map[string]typeutil.UniqueID // collection alias to collection id
collID2Meta map[typeutil.UniqueID]*model.Collection // collection id -> collection meta
collName2ID map[string]typeutil.UniqueID // collection name to collection id
collAlias2ID map[string]typeutil.UniqueID // collection alias to collection id
funcName2Info map[string]*FunctionInfo // function name to function body and params
ddLock sync.RWMutex
permissionLock sync.RWMutex
@ -147,6 +162,7 @@ func (mt *MetaTable) reload() error {
mt.collID2Meta = make(map[UniqueID]*model.Collection)
mt.collName2ID = make(map[string]UniqueID)
mt.collAlias2ID = make(map[string]UniqueID)
mt.funcName2Info = make(map[string]*FunctionInfo)
// max ts means listing latest resources, meta table should always cache the latest version of catalog.
collections, err := mt.catalog.ListCollections(mt.ctx, typeutil.MaxTimestamp)
@ -876,3 +892,55 @@ func (mt *MetaTable) ListUserRole(tenant string) ([]string, error) {
return mt.catalog.ListUserRole(mt.ctx, tenant)
}
func (mt *MetaTable) CreateFunction(ctx context.Context, funcName string, watBodyBase64 string, argTypes []schemapb.DataType, ts Timestamp) error {
mt.ddLock.Lock()
defer mt.ddLock.Unlock()
if _, ok := mt.funcName2Info[funcName]; ok {
return fmt.Errorf("cannot create function, milvus already exists with same function name: %s", funcName)
}
// function didn't exist.
mt.funcName2Info[funcName] = &FunctionInfo{
funcName: funcName,
watBodyBase64: watBodyBase64,
argTypes: argTypes,
}
//TODO: storage in etcd
log.Info("create function", zap.String("function name", funcName), zap.String("wat body base64", watBodyBase64),
zap.String("function argument types", string(argTypes)),
zap.Uint64("ts", ts))
return nil
}
func (mt *MetaTable) DropFunction(ctx context.Context, funcName string, ts Timestamp) error {
mt.ddLock.Lock()
defer mt.ddLock.Unlock()
delete(mt.funcName2Info, funcName)
log.Info("drop function", zap.String("function name", funcName), zap.Uint64("ts", ts))
return nil
}
func (mt *MetaTable) GetFunctionInfo(ctx context.Context, funcName string, ts Timestamp) (*rootcoordpb.FunctionInfo, error) {
mt.ddLock.Lock()
defer mt.ddLock.Unlock()
if _, ok := mt.funcName2Info[funcName]; !ok {
return nil, fmt.Errorf("cannot get function information, function name not found: %s", funcName)
}
log.Info("get function information", zap.String("function name", funcName), zap.String("wat body base64", mt.funcName2Info[funcName].watBodyBase64),
zap.String("function argument types", string(mt.funcName2Info[funcName].argTypes)),
zap.Uint64("ts", ts))
return &rootcoordpb.FunctionInfo{
FunctionName: funcName,
WatBodyBase64: mt.funcName2Info[funcName].watBodyBase64,
ArgTypes: mt.funcName2Info[funcName].argTypes,
}, nil
}

View File

@ -6,6 +6,9 @@ import (
"math/rand"
"os"
"github.com/milvus-io/milvus/api/schemapb"
"github.com/milvus-io/milvus/internal/proto/rootcoordpb"
"github.com/milvus-io/milvus/internal/mq/msgstream"
"github.com/milvus-io/milvus/internal/proto/indexpb"
@ -55,6 +58,9 @@ type mockMetaTable struct {
GetCollectionIDByNameFunc func(name string) (UniqueID, error)
GetPartitionByNameFunc func(collID UniqueID, partitionName string, ts Timestamp) (UniqueID, error)
GetCollectionVirtualChannelsFunc func(colID int64) []string
CreateFunctionFunc func(ctx context.Context, funcName string, watBodyBase64 string, argTypes []schemapb.DataType, ts Timestamp) error
DropFunctionFunc func(ctx context.Context, funcName string, ts Timestamp) error
GetFunctionInfoFunc func(ctx context.Context, funcName string, ts Timestamp) (*rootcoordpb.FunctionInfo, error)
}
func (m mockMetaTable) ListCollections(ctx context.Context, ts Timestamp) ([]*model.Collection, error) {
@ -125,6 +131,18 @@ func (m mockMetaTable) GetCollectionVirtualChannels(colID int64) []string {
return m.GetCollectionVirtualChannelsFunc(colID)
}
func (m mockMetaTable) CreateFunction(ctx context.Context, funcName string, watBodyBase64 string, argTypes []schemapb.DataType, ts Timestamp) error {
return m.CreateFunctionFunc(ctx, funcName, watBodyBase64, argTypes, ts)
}
func (m mockMetaTable) DropFunction(ctx context.Context, funcName string, ts Timestamp) error {
return m.DropFunctionFunc(ctx, funcName, ts)
}
func (m mockMetaTable) GetFunctionInfo(ctx context.Context, funcName string, ts Timestamp) (*rootcoordpb.FunctionInfo, error) {
return m.GetFunctionInfoFunc(ctx, funcName, ts)
}
func newMockMetaTable() *mockMetaTable {
return &mockMetaTable{}
}
@ -358,6 +376,15 @@ func withInvalidMeta() Opt {
meta.DropAliasFunc = func(ctx context.Context, alias string, ts Timestamp) error {
return errors.New("error mock DropAlias")
}
meta.CreateFunctionFunc = func(ctx context.Context, funcName string, watBodyBase64 string, argTypes []schemapb.DataType, ts Timestamp) error {
return errors.New("error mock CreateFunction")
}
meta.DropFunctionFunc = func(ctx context.Context, funcName string, ts Timestamp) error {
return errors.New("error mock DropFunction")
}
meta.GetFunctionInfoFunc = func(ctx context.Context, funcName string, ts Timestamp) (*rootcoordpb.FunctionInfo, error) {
return nil, errors.New("error mock GetFunctionInfo")
}
return withMeta(meta)
}

View File

@ -13,6 +13,10 @@ import (
mock "github.com/stretchr/testify/mock"
model "github.com/milvus-io/milvus/internal/metastore/model"
rootcoordpb "github.com/milvus-io/milvus/internal/proto/rootcoordpb"
schemapb "github.com/milvus-io/milvus/api/schemapb"
)
// IMetaTable is an autogenerated mock type for the IMetaTable type
@ -132,6 +136,20 @@ func (_m *IMetaTable) CreateAlias(ctx context.Context, alias string, collectionN
return r0
}
// CreateFunction provides a mock function with given fields: ctx, funcName, watBodyBase64, argTypes, ts
func (_m *IMetaTable) CreateFunction(ctx context.Context, funcName string, watBodyBase64 string, argTypes []schemapb.DataType, ts uint64) error {
ret := _m.Called(ctx, funcName, watBodyBase64, argTypes, ts)
var r0 error
if rf, ok := ret.Get(0).(func(context.Context, string, string, []schemapb.DataType, uint64) error); ok {
r0 = rf(ctx, funcName, watBodyBase64, argTypes, ts)
} else {
r0 = ret.Error(0)
}
return r0
}
// CreateRole provides a mock function with given fields: tenant, entity
func (_m *IMetaTable) CreateRole(tenant string, entity *milvuspb.RoleEntity) error {
ret := _m.Called(tenant, entity)
@ -174,6 +192,20 @@ func (_m *IMetaTable) DropAlias(ctx context.Context, alias string, ts uint64) er
return r0
}
// DropFunction provides a mock function with given fields: ctx, funcName, ts
func (_m *IMetaTable) DropFunction(ctx context.Context, funcName string, ts uint64) error {
ret := _m.Called(ctx, funcName, ts)
var r0 error
if rf, ok := ret.Get(0).(func(context.Context, string, uint64) error); ok {
r0 = rf(ctx, funcName, ts)
} else {
r0 = ret.Error(0)
}
return r0
}
// DropGrant provides a mock function with given fields: tenant, role
func (_m *IMetaTable) DropGrant(tenant string, role *milvuspb.RoleEntity) error {
ret := _m.Called(tenant, role)
@ -329,6 +361,29 @@ func (_m *IMetaTable) GetCredential(username string) (*internalpb.CredentialInfo
return r0, r1
}
// GetFunctionInfo provides a mock function with given fields: ctx, funcName, ts
func (_m *IMetaTable) GetFunctionInfo(ctx context.Context, funcName string, ts uint64) (*rootcoordpb.FunctionInfo, error) {
ret := _m.Called(ctx, funcName, ts)
var r0 *rootcoordpb.FunctionInfo
if rf, ok := ret.Get(0).(func(context.Context, string, uint64) *rootcoordpb.FunctionInfo); ok {
r0 = rf(ctx, funcName, ts)
} else {
if ret.Get(0) != nil {
r0 = ret.Get(0).(*rootcoordpb.FunctionInfo)
}
}
var r1 error
if rf, ok := ret.Get(1).(func(context.Context, string, uint64) error); ok {
r1 = rf(ctx, funcName, ts)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
// GetPartitionByName provides a mock function with given fields: collID, partitionName, ts
func (_m *IMetaTable) GetPartitionByName(collID int64, partitionName string, ts uint64) (int64, error) {
ret := _m.Called(collID, partitionName, ts)

View File

@ -1311,6 +1311,167 @@ func (c *Core) GetMetrics(ctx context.Context, in *milvuspb.GetMetricsRequest) (
}, nil
}
// CreateFunction create function
func (c *Core) CreateFunction(ctx context.Context, in *milvuspb.CreateFunctionRequest) (*commonpb.Status, error) {
if code, ok := c.checkHealthy(); !ok {
return failStatus(commonpb.ErrorCode_UnexpectedError, "StateCode="+internalpb.StateCode_name[int32(code)]), nil
}
metrics.RootCoordDDLReqCounter.WithLabelValues("CreateFunction", metrics.TotalLabel).Inc()
tr := timerecord.NewTimeRecorder("CreateFunction")
log.Info("received request to create function", zap.String("role", typeutil.RootCoordRole),
zap.String("function name", in.GetFunctionName()), zap.String("wat body base64", in.GetWatBodyBase64()),
zap.String("argument types", string(in.GetArgTypes())),
zap.Int64("msgID", in.GetBase().GetMsgID()))
t := &createFunctionTask{
baseTask: baseTask{
ctx: ctx,
core: c,
done: make(chan error, 1),
},
Req: in,
}
if err := c.scheduler.AddTask(t); err != nil {
log.Error("failed to enqueue request to create function", zap.String("role", typeutil.RootCoordRole),
zap.Error(err),
zap.String("function name", in.GetFunctionName()), zap.String("wat body base64", in.GetWatBodyBase64()),
zap.String("argument types", string(in.GetArgTypes())),
zap.Int64("msgID", in.GetBase().GetMsgID()))
metrics.RootCoordDDLReqCounter.WithLabelValues("CreateFunction", metrics.FailLabel).Inc()
return failStatus(commonpb.ErrorCode_UnexpectedError, err.Error()), nil
}
if err := t.WaitToFinish(); err != nil {
log.Error("failed to create function", zap.String("role", typeutil.RootCoordRole),
zap.Error(err),
zap.String("function name", in.GetFunctionName()), zap.String("wat body base64", in.GetWatBodyBase64()),
zap.String("argument types", string(in.GetArgTypes())),
zap.Int64("msgID", in.GetBase().GetMsgID()), zap.Uint64("ts", t.GetTs()))
metrics.RootCoordDDLReqCounter.WithLabelValues("CreateFunction", metrics.FailLabel).Inc()
return failStatus(commonpb.ErrorCode_UnexpectedError, err.Error()), nil
}
metrics.RootCoordDDLReqCounter.WithLabelValues("CreateFunction", metrics.SuccessLabel).Inc()
metrics.RootCoordDDLReqLatency.WithLabelValues("CreateFunction").Observe(float64(tr.ElapseSpan().Milliseconds()))
log.Info("done to create function", zap.String("role", typeutil.RootCoordRole),
zap.String("function name", in.GetFunctionName()), zap.String("wat body base64", in.GetWatBodyBase64()),
zap.String("argument types", string(in.GetArgTypes())),
zap.Int64("msgID", in.GetBase().GetMsgID()))
return succStatus(), nil
}
// DropFunction drop function
func (c *Core) DropFunction(ctx context.Context, in *milvuspb.DropFunctionRequest) (*commonpb.Status, error) {
if code, ok := c.checkHealthy(); !ok {
return failStatus(commonpb.ErrorCode_UnexpectedError, "StateCode="+internalpb.StateCode_name[int32(code)]), nil
}
metrics.RootCoordDDLReqCounter.WithLabelValues("DropFunction", metrics.TotalLabel).Inc()
tr := timerecord.NewTimeRecorder("DropFunction")
log.Info("received request to drop function", zap.String("role", typeutil.RootCoordRole),
zap.String("function name", in.GetFunctionName()),
zap.Int64("msgID", in.GetBase().GetMsgID()))
t := &dropFunctionTask{
baseTask: baseTask{
ctx: ctx,
core: c,
done: make(chan error, 1),
},
Req: in,
}
if err := c.scheduler.AddTask(t); err != nil {
log.Error("failed to enqueue request to drop function", zap.String("role", typeutil.RootCoordRole),
zap.Error(err),
zap.String("function name", in.GetFunctionName()),
zap.Int64("msgID", in.GetBase().GetMsgID()))
metrics.RootCoordDDLReqCounter.WithLabelValues("DropFunction", metrics.FailLabel).Inc()
return failStatus(commonpb.ErrorCode_UnexpectedError, err.Error()), nil
}
if err := t.WaitToFinish(); err != nil {
log.Error("failed to drop function", zap.String("role", typeutil.RootCoordRole),
zap.Error(err),
zap.String("function name", in.GetFunctionName()),
zap.Int64("msgID", in.GetBase().GetMsgID()), zap.Uint64("ts", t.GetTs()))
metrics.RootCoordDDLReqCounter.WithLabelValues("DropFunction", metrics.FailLabel).Inc()
return failStatus(commonpb.ErrorCode_UnexpectedError, err.Error()), nil
}
metrics.RootCoordDDLReqCounter.WithLabelValues("DropFunction", metrics.SuccessLabel).Inc()
metrics.RootCoordDDLReqLatency.WithLabelValues("DropFunction").Observe(float64(tr.ElapseSpan().Milliseconds()))
log.Info("done to drop function", zap.String("role", typeutil.RootCoordRole),
zap.String("function name", in.GetFunctionName()),
zap.Int64("msgID", in.GetBase().GetMsgID()))
return succStatus(), nil
}
func (c *Core) GetFunctionInfo(ctx context.Context, in *rootcoordpb.GetFunctionInfoRequest) (*rootcoordpb.GetFunctionInfoResponse, error) {
if code, ok := c.checkHealthy(); !ok {
return &rootcoordpb.GetFunctionInfoResponse{
Status: failStatus(commonpb.ErrorCode_UnexpectedError, "StateCode="+internalpb.StateCode_name[int32(code)]),
}, nil
}
metrics.RootCoordDDLReqCounter.WithLabelValues("GetFunctionInfo", metrics.TotalLabel).Inc()
tr := timerecord.NewTimeRecorder("GetFunctionInfo")
log.Info("received request to get function information", zap.String("role", typeutil.RootCoordRole),
zap.String("function name", in.GetFunctionName()), zap.Int64("msgID", in.GetBase().GetMsgID()))
t := &getFunctionInfoTask{
baseTask: baseTask{
ctx: ctx,
core: c,
done: make(chan error, 1),
},
Req: in,
Rsp: &rootcoordpb.GetFunctionInfoResponse{},
}
if err := c.scheduler.AddTask(t); err != nil {
log.Error("failed to enqueue request to create function", zap.String("role", typeutil.RootCoordRole),
zap.Error(err),
zap.String("function name", in.GetFunctionName()), zap.Int64("msgID", in.GetBase().GetMsgID()))
metrics.RootCoordDDLReqCounter.WithLabelValues("GetFunctionInfo", metrics.FailLabel).Inc()
return &rootcoordpb.GetFunctionInfoResponse{
Status: failStatus(commonpb.ErrorCode_UnexpectedError, "GetFunctionInfo failed: "+err.Error()),
}, nil
}
if err := t.WaitToFinish(); err != nil {
log.Error("failed to create function", zap.String("role", typeutil.RootCoordRole),
zap.Error(err),
zap.String("function name", in.GetFunctionName()),
zap.Int64("msgID", in.GetBase().GetMsgID()), zap.Uint64("ts", t.GetTs()))
metrics.RootCoordDDLReqCounter.WithLabelValues("CreateFunction", metrics.FailLabel).Inc()
return &rootcoordpb.GetFunctionInfoResponse{
Status: failStatus(commonpb.ErrorCode_UnexpectedError, "GetFunctionInfo failed: "+err.Error()),
}, nil
}
metrics.RootCoordDDLReqCounter.WithLabelValues("GetFunctionInfo", metrics.SuccessLabel).Inc()
metrics.RootCoordDDLReqLatency.WithLabelValues("GetFunctionInfo").Observe(float64(tr.ElapseSpan().Milliseconds()))
log.Info("done to get function information", zap.String("role", typeutil.RootCoordRole),
zap.String("function name", in.GetFunctionName()), zap.Int64("msgID", in.GetBase().GetMsgID()))
return t.Rsp, nil
}
// CreateAlias create collection alias
func (c *Core) CreateAlias(ctx context.Context, in *milvuspb.CreateAliasRequest) (*commonpb.Status, error) {
if code, ok := c.checkHealthy(); !ok {

View File

@ -740,6 +740,13 @@ type RootCoord interface {
OperatePrivilege(ctx context.Context, req *milvuspb.OperatePrivilegeRequest) (*commonpb.Status, error)
SelectGrant(ctx context.Context, req *milvuspb.SelectGrantRequest) (*milvuspb.SelectGrantResponse, error)
ListPolicy(ctx context.Context, in *internalpb.ListPolicyRequest) (*internalpb.ListPolicyResponse, error)
// CreateFunction create function
CreateFunction(ctx context.Context, req *milvuspb.CreateFunctionRequest) (*commonpb.Status, error)
// DropFunction drop function
DropFunction(ctx context.Context, request *milvuspb.DropFunctionRequest) (*commonpb.Status, error)
// GetFunctionInfo get function information by function name from root coordinator
GetFunctionInfo(ctx context.Context, request *rootcoordpb.GetFunctionInfoRequest) (*rootcoordpb.GetFunctionInfoResponse, error)
}
// RootCoordComponent is used by grpc server of RootCoord
@ -1170,6 +1177,26 @@ type ProxyComponent interface {
// error is always nil
LoadBalance(ctx context.Context, request *milvuspb.LoadBalanceRequest) (*commonpb.Status, error)
// CreateFunction notifies Proxy to create function
//
// ctx is the context to control request deadline and cancellation
// req contains the request params, including function name, wat body base 64, function argument types
//
// The `ErrorCode` of `Status` is `Success` if create alias successfully;
// otherwise, the `ErrorCode` of `Status` will be `Error`, and the `Reason` of `Status` will record the fail cause.
// error is always nil
CreateFunction(ctx context.Context, request *milvuspb.CreateFunctionRequest) (*commonpb.Status, error)
// DropFunction notifies Proxy to drop function
//
// ctx is the context to control request deadline and cancellation
// req contains the request params, including function name
//
// The `ErrorCode` of `Status` is `Success` if create alias successfully;
// otherwise, the `ErrorCode` of `Status` will be `Error`, and the `Reason` of `Status` will record the fail cause.
// error is always nil
DropFunction(ctx context.Context, request *milvuspb.DropFunctionRequest) (*commonpb.Status, error)
// CreateAlias notifies Proxy to create alias for a collection
//
// ctx is the context to control request deadline and cancellation

View File

@ -216,3 +216,15 @@ func (m *GrpcRootCoordClient) ListCredUsers(ctx context.Context, in *milvuspb.Li
func (m *GrpcRootCoordClient) GetCredential(ctx context.Context, in *rootcoordpb.GetCredentialRequest, opts ...grpc.CallOption) (*rootcoordpb.GetCredentialResponse, error) {
return &rootcoordpb.GetCredentialResponse{}, m.Err
}
func (m *GrpcRootCoordClient) CreateFunction(ctx context.Context, in *milvuspb.CreateFunctionRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
return &commonpb.Status{}, m.Err
}
func (m *GrpcRootCoordClient) DropFunction(ctx context.Context, in *milvuspb.DropFunctionRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
return &commonpb.Status{}, m.Err
}
func (m *GrpcRootCoordClient) GetFunctionInfo(ctx context.Context, in *rootcoordpb.GetFunctionInfoRequest, opts ...grpc.CallOption) (*rootcoordpb.GetFunctionInfoResponse, error) {
return &rootcoordpb.GetFunctionInfoResponse{}, m.Err
}