diff --git a/go/vt/proto/query/query.pb.go b/go/vt/proto/query/query.pb.go index ea3bb807f1c..638ed5b155e 100644 --- a/go/vt/proto/query/query.pb.go +++ b/go/vt/proto/query/query.pb.go @@ -460,6 +460,38 @@ func (x ExecuteOptions_Workload) String() string { } func (ExecuteOptions_Workload) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 1} } +type ExecuteOptions_TransactionIsolation int32 + +const ( + ExecuteOptions_DEFAULT ExecuteOptions_TransactionIsolation = 0 + ExecuteOptions_REPEATABLE_READ ExecuteOptions_TransactionIsolation = 1 + ExecuteOptions_READ_COMMITTED ExecuteOptions_TransactionIsolation = 2 + ExecuteOptions_READ_UNCOMMITTED ExecuteOptions_TransactionIsolation = 3 + ExecuteOptions_SERIALIZABLE ExecuteOptions_TransactionIsolation = 4 +) + +var ExecuteOptions_TransactionIsolation_name = map[int32]string{ + 0: "DEFAULT", + 1: "REPEATABLE_READ", + 2: "READ_COMMITTED", + 3: "READ_UNCOMMITTED", + 4: "SERIALIZABLE", +} +var ExecuteOptions_TransactionIsolation_value = map[string]int32{ + "DEFAULT": 0, + "REPEATABLE_READ": 1, + "READ_COMMITTED": 2, + "READ_UNCOMMITTED": 3, + "SERIALIZABLE": 4, +} + +func (x ExecuteOptions_TransactionIsolation) String() string { + return proto.EnumName(ExecuteOptions_TransactionIsolation_name, int32(x)) +} +func (ExecuteOptions_TransactionIsolation) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{6, 2} +} + // The category of one statement. type StreamEvent_Statement_Category int32 @@ -730,7 +762,8 @@ type ExecuteOptions struct { Workload ExecuteOptions_Workload `protobuf:"varint,6,opt,name=workload,enum=query.ExecuteOptions_Workload" json:"workload,omitempty"` // sql_select_limit sets an implicit limit on all select statements. Since // vitess also sets a rowcount limit on queries, the smallest value wins. - SqlSelectLimit int64 `protobuf:"varint,8,opt,name=sql_select_limit,json=sqlSelectLimit" json:"sql_select_limit,omitempty"` + SqlSelectLimit int64 `protobuf:"varint,8,opt,name=sql_select_limit,json=sqlSelectLimit" json:"sql_select_limit,omitempty"` + TransactionIsolation ExecuteOptions_TransactionIsolation `protobuf:"varint,9,opt,name=transaction_isolation,json=transactionIsolation,enum=query.ExecuteOptions_TransactionIsolation" json:"transaction_isolation,omitempty"` } func (m *ExecuteOptions) Reset() { *m = ExecuteOptions{} } @@ -780,6 +813,13 @@ func (m *ExecuteOptions) GetSqlSelectLimit() int64 { return 0 } +func (m *ExecuteOptions) GetTransactionIsolation() ExecuteOptions_TransactionIsolation { + if m != nil { + return m.TransactionIsolation + } + return ExecuteOptions_DEFAULT +} + // Field describes a single column returned by a query type Field struct { // name of the field as returned by mysql C API @@ -2710,6 +2750,7 @@ func init() { proto.RegisterEnum("query.TransactionState", TransactionState_name, TransactionState_value) proto.RegisterEnum("query.ExecuteOptions_IncludedFields", ExecuteOptions_IncludedFields_name, ExecuteOptions_IncludedFields_value) proto.RegisterEnum("query.ExecuteOptions_Workload", ExecuteOptions_Workload_name, ExecuteOptions_Workload_value) + proto.RegisterEnum("query.ExecuteOptions_TransactionIsolation", ExecuteOptions_TransactionIsolation_name, ExecuteOptions_TransactionIsolation_value) proto.RegisterEnum("query.StreamEvent_Statement_Category", StreamEvent_Statement_Category_name, StreamEvent_Statement_Category_value) proto.RegisterEnum("query.SplitQueryRequest_Algorithm", SplitQueryRequest_Algorithm_name, SplitQueryRequest_Algorithm_value) } @@ -2717,190 +2758,196 @@ func init() { func init() { proto.RegisterFile("query.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ - // 2956 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xc9, 0x73, 0x1b, 0xc7, - 0xb9, 0xd7, 0x60, 0x23, 0xf0, 0x81, 0x00, 0x9b, 0x0d, 0xd2, 0x82, 0x29, 0x2f, 0x7c, 0x63, 0xcb, - 0xe6, 0x93, 0xfd, 0xf8, 0x64, 0x4a, 0x4f, 0x4f, 0x65, 0x67, 0xd1, 0x10, 0x1c, 0xca, 0xb0, 0xb0, - 0xa9, 0x31, 0x90, 0x2c, 0x97, 0xab, 0xa6, 0x86, 0x40, 0x8b, 0x9c, 0xe2, 0x00, 0x03, 0xce, 0x0c, - 0x48, 0xe3, 0xa6, 0xc4, 0xd9, 0x57, 0x67, 0x75, 0x9c, 0x54, 0x9c, 0x54, 0xe5, 0x9e, 0xbf, 0x21, - 0x95, 0x3f, 0x20, 0xb7, 0x1c, 0x92, 0x1c, 0x52, 0x39, 0xa4, 0x72, 0x4b, 0xe5, 0x94, 0x43, 0x0e, - 0xa9, 0x54, 0x2f, 0x33, 0x18, 0x90, 0xb0, 0x25, 0x2b, 0xb9, 0x50, 0xf6, 0x09, 0xf3, 0x2d, 0xe8, - 0xaf, 0xbf, 0xdf, 0xb7, 0x74, 0x4f, 0xf7, 0x40, 0xfe, 0x60, 0x44, 0xbd, 0xf1, 0xfa, 0xd0, 0x73, - 0x03, 0x17, 0xa7, 0x39, 0xb1, 0x52, 0x0c, 0xdc, 0xa1, 0xdb, 0xb3, 0x02, 0x4b, 0xb0, 0x57, 0xf2, - 0x87, 0x81, 0x37, 0xec, 0x0a, 0x42, 0x3d, 0x80, 0x8c, 0x61, 0x79, 0xbb, 0x34, 0xc0, 0x2b, 0x90, - 0xdd, 0xa7, 0x63, 0x7f, 0x68, 0x75, 0x69, 0x59, 0x59, 0x55, 0xd6, 0x72, 0x24, 0xa2, 0xf1, 0x12, - 0xa4, 0xfd, 0x3d, 0xcb, 0xeb, 0x95, 0x13, 0x5c, 0x20, 0x08, 0xfc, 0x7f, 0x90, 0x0f, 0xac, 0x1d, - 0x87, 0x06, 0x66, 0x30, 0x1e, 0xd2, 0x72, 0x72, 0x55, 0x59, 0x2b, 0x6e, 0x2c, 0xad, 0x47, 0xe6, - 0x0c, 0x2e, 0x34, 0xc6, 0x43, 0x4a, 0x20, 0x88, 0x9e, 0xd5, 0x2d, 0x28, 0xde, 0x32, 0xae, 0x5b, - 0x01, 0xad, 0x58, 0x8e, 0x43, 0xbd, 0xea, 0x16, 0x33, 0x3d, 0xf2, 0xa9, 0x37, 0xb0, 0xfa, 0x91, - 0xe9, 0x90, 0xc6, 0x8f, 0x41, 0x66, 0xd7, 0x73, 0x47, 0x43, 0xbf, 0x9c, 0x58, 0x4d, 0xae, 0xe5, - 0x88, 0xa4, 0xd4, 0x37, 0x01, 0xf4, 0x43, 0x3a, 0x08, 0x0c, 0x77, 0x9f, 0x0e, 0xf0, 0x13, 0x90, - 0x0b, 0xec, 0x3e, 0xf5, 0x03, 0xab, 0x3f, 0xe4, 0x43, 0x24, 0xc9, 0x84, 0xf1, 0x01, 0xd3, 0x5f, - 0x81, 0xec, 0xd0, 0xf5, 0xed, 0xc0, 0x76, 0x07, 0x7c, 0xee, 0x39, 0x12, 0xd1, 0xea, 0x67, 0x20, - 0x7d, 0xcb, 0x72, 0x46, 0x14, 0x3f, 0x0d, 0x29, 0xee, 0x9c, 0xc2, 0x9d, 0xcb, 0xaf, 0x0b, 0x7c, - 0xb9, 0x4f, 0x5c, 0xc0, 0xc6, 0x3e, 0x64, 0x9a, 0x7c, 0xec, 0x79, 0x22, 0x08, 0x75, 0x1f, 0xe6, - 0x37, 0xed, 0x41, 0xef, 0x96, 0xe5, 0xd9, 0xcc, 0xf1, 0x87, 0x1c, 0x06, 0x3f, 0x0b, 0x19, 0xfe, - 0xe0, 0x97, 0x93, 0xab, 0xc9, 0xb5, 0xfc, 0xc6, 0xbc, 0xfc, 0x23, 0x9f, 0x1b, 0x91, 0x32, 0xf5, - 0xd7, 0x0a, 0xc0, 0xa6, 0x3b, 0x1a, 0xf4, 0x6e, 0x32, 0x21, 0x46, 0x90, 0xf4, 0x0f, 0x1c, 0x09, - 0x24, 0x7b, 0xc4, 0x37, 0xa0, 0xb8, 0x63, 0x0f, 0x7a, 0xe6, 0xa1, 0x9c, 0x8e, 0xc0, 0x32, 0xbf, - 0xf1, 0xac, 0x1c, 0x6e, 0xf2, 0xe7, 0xf5, 0xf8, 0xac, 0x7d, 0x7d, 0x10, 0x78, 0x63, 0x52, 0xd8, - 0x89, 0xf3, 0x56, 0x3a, 0x80, 0x4f, 0x2a, 0x31, 0xa3, 0xfb, 0x74, 0x1c, 0x1a, 0xdd, 0xa7, 0x63, - 0xfc, 0xdf, 0x71, 0x8f, 0xf2, 0x1b, 0xa5, 0xd0, 0x56, 0xec, 0xbf, 0xd2, 0xcd, 0x97, 0x13, 0x57, - 0x15, 0xf5, 0x4f, 0x49, 0x28, 0xea, 0x6f, 0xd1, 0xee, 0x28, 0xa0, 0xcd, 0x21, 0x8b, 0x81, 0x8f, - 0xd7, 0xa1, 0x64, 0x0f, 0xba, 0xce, 0xa8, 0x47, 0x4d, 0xca, 0x42, 0x6d, 0x06, 0x2c, 0xd6, 0x7c, - 0xbc, 0x2c, 0x59, 0x94, 0xa2, 0x58, 0x12, 0x68, 0x50, 0xea, 0xba, 0xfd, 0xa1, 0xe5, 0x4d, 0xeb, - 0x27, 0xb9, 0xfd, 0x45, 0x69, 0x7f, 0xa2, 0x4f, 0x16, 0xa5, 0x76, 0x6c, 0x88, 0x3a, 0x2c, 0xc8, - 0x71, 0x7b, 0xe6, 0x5d, 0x9b, 0x3a, 0x3d, 0xbf, 0x9c, 0xe2, 0x21, 0x0b, 0xa1, 0x9a, 0x9e, 0xe2, - 0x7a, 0x55, 0x2a, 0x6f, 0x73, 0x5d, 0x52, 0xb4, 0xa7, 0x68, 0x7c, 0x01, 0x16, 0xbb, 0x8e, 0xcd, - 0xa6, 0x72, 0x97, 0x41, 0x6c, 0x7a, 0xee, 0x91, 0x5f, 0x4e, 0xf3, 0xf9, 0x2f, 0x08, 0xc1, 0x36, - 0xe3, 0x13, 0xf7, 0xc8, 0xc7, 0x2f, 0x43, 0xf6, 0xc8, 0xf5, 0xf6, 0x1d, 0xd7, 0xea, 0x95, 0x33, - 0xdc, 0xe6, 0x53, 0xb3, 0x6d, 0xde, 0x96, 0x5a, 0x24, 0xd2, 0xc7, 0x6b, 0x80, 0xfc, 0x03, 0xc7, - 0xf4, 0xa9, 0x43, 0xbb, 0x81, 0xe9, 0xd8, 0x7d, 0x3b, 0x28, 0x67, 0x79, 0x15, 0x14, 0xfd, 0x03, - 0xa7, 0xcd, 0xd9, 0x35, 0xc6, 0x55, 0x5f, 0x81, 0xe2, 0xf4, 0x9c, 0xf1, 0x22, 0x14, 0x8c, 0x3b, - 0x2d, 0xdd, 0xd4, 0x1a, 0x5b, 0x66, 0x43, 0xab, 0xeb, 0xe8, 0x0c, 0x2e, 0x40, 0x8e, 0xb3, 0x9a, - 0x8d, 0xda, 0x1d, 0xa4, 0xe0, 0x39, 0x48, 0x6a, 0xb5, 0x1a, 0x4a, 0xa8, 0x57, 0x21, 0x1b, 0x1a, - 0xc7, 0x0b, 0x90, 0xef, 0x34, 0xda, 0x2d, 0xbd, 0x52, 0xdd, 0xae, 0xea, 0x5b, 0xe8, 0x0c, 0xce, - 0x42, 0xaa, 0x59, 0x33, 0x5a, 0x48, 0x11, 0x4f, 0x5a, 0x0b, 0x25, 0xd8, 0x3f, 0xb7, 0x36, 0x35, - 0x94, 0x7c, 0x2d, 0x95, 0x55, 0x50, 0x42, 0x7d, 0x37, 0x01, 0x69, 0x6e, 0x15, 0x63, 0x48, 0xc5, - 0xaa, 0x9d, 0x3f, 0x47, 0x35, 0x92, 0xf8, 0x90, 0x1a, 0xe1, 0x6d, 0x44, 0x56, 0xab, 0x20, 0xf0, - 0x39, 0xc8, 0xb9, 0xde, 0xae, 0x29, 0x24, 0x29, 0x51, 0xc7, 0xae, 0xb7, 0xcb, 0x9b, 0x0f, 0xab, - 0x71, 0xd6, 0x8a, 0x76, 0x2c, 0x9f, 0x72, 0xdc, 0x73, 0x24, 0xa2, 0xf1, 0xe3, 0xc0, 0xf4, 0x4c, - 0x3e, 0x8f, 0x0c, 0x97, 0xcd, 0xb9, 0xde, 0x6e, 0x83, 0x4d, 0xe5, 0x19, 0x28, 0x74, 0x5d, 0x67, - 0xd4, 0x1f, 0x98, 0x0e, 0x1d, 0xec, 0x06, 0x7b, 0xe5, 0xb9, 0x55, 0x65, 0xad, 0x40, 0xe6, 0x05, - 0xb3, 0xc6, 0x79, 0xb8, 0x0c, 0x73, 0xdd, 0x3d, 0xcb, 0xf3, 0xa9, 0xc0, 0xba, 0x40, 0x42, 0x92, - 0x5b, 0xa5, 0x5d, 0xbb, 0x6f, 0x39, 0x7e, 0x39, 0xc7, 0x45, 0x11, 0xcd, 0x9c, 0xb8, 0xeb, 0x58, - 0xbb, 0x7e, 0x19, 0xb8, 0x40, 0x10, 0xea, 0xff, 0x43, 0x92, 0xb8, 0x47, 0x6c, 0x48, 0x61, 0xd0, - 0x2f, 0x2b, 0xab, 0xc9, 0x35, 0x4c, 0x42, 0x92, 0xb5, 0x41, 0xd9, 0x09, 0x44, 0x83, 0x08, 0x6b, - 0xff, 0x4d, 0x98, 0x27, 0xd4, 0x1f, 0x39, 0x81, 0xfe, 0x56, 0xe0, 0x59, 0x3e, 0xde, 0x80, 0x7c, - 0x3c, 0xf7, 0x95, 0x0f, 0xca, 0x7d, 0xa0, 0x93, 0xa4, 0x2f, 0xc3, 0xdc, 0x5d, 0x8f, 0xfa, 0x7b, - 0xd4, 0x93, 0xb5, 0x15, 0x92, 0xac, 0xb3, 0xe4, 0x79, 0x5f, 0x10, 0x36, 0x58, 0x3f, 0x92, 0x55, - 0xa1, 0x4c, 0xf5, 0x23, 0x1e, 0x54, 0x22, 0x65, 0x0c, 0x3d, 0x96, 0xe8, 0xa6, 0x75, 0xf7, 0x2e, - 0xed, 0x06, 0x54, 0xb4, 0xdd, 0x14, 0x99, 0x67, 0x4c, 0x4d, 0xf2, 0x58, 0xd8, 0xec, 0x81, 0x4f, - 0xbd, 0xc0, 0xb4, 0x7b, 0x3c, 0xa0, 0x29, 0x92, 0x15, 0x8c, 0x6a, 0x0f, 0x3f, 0x05, 0x29, 0x5e, - 0x2a, 0x29, 0x6e, 0x05, 0xa4, 0x15, 0xe2, 0x1e, 0x11, 0xce, 0xc7, 0x2f, 0x40, 0x86, 0x72, 0x7f, - 0x79, 0x50, 0x27, 0xcd, 0x25, 0x0e, 0x05, 0x91, 0x2a, 0xea, 0xcf, 0x93, 0x90, 0x6f, 0x07, 0x1e, - 0xb5, 0xfa, 0xdc, 0x7f, 0xfc, 0x29, 0x00, 0x3f, 0xb0, 0x02, 0xda, 0xa7, 0x83, 0x20, 0x74, 0xe4, - 0x09, 0x39, 0x40, 0x4c, 0x6f, 0xbd, 0x1d, 0x2a, 0x91, 0x98, 0xfe, 0x71, 0x80, 0x13, 0x0f, 0x00, - 0xf0, 0xca, 0xfb, 0x09, 0xc8, 0x45, 0xa3, 0x61, 0x0d, 0xb2, 0x5d, 0x2b, 0xa0, 0xbb, 0xae, 0x37, - 0x96, 0xeb, 0xc1, 0xf9, 0x0f, 0xb3, 0xbe, 0x5e, 0x91, 0xca, 0x24, 0xfa, 0x1b, 0x7e, 0x12, 0xc4, - 0x82, 0x2a, 0x92, 0x57, 0xac, 0x6a, 0x39, 0xce, 0xe1, 0xe9, 0xfb, 0x32, 0xe0, 0xa1, 0x67, 0xf7, - 0x2d, 0x6f, 0x6c, 0xee, 0xd3, 0x71, 0xd8, 0xc8, 0x92, 0x33, 0x42, 0x86, 0xa4, 0xde, 0x0d, 0x3a, - 0x96, 0xed, 0xe0, 0xea, 0xf4, 0x7f, 0x65, 0xd2, 0x9d, 0x0c, 0x44, 0xec, 0x9f, 0x7c, 0x35, 0xf2, - 0xc3, 0x75, 0x27, 0xcd, 0xf3, 0x93, 0x3d, 0xaa, 0xcf, 0x43, 0x36, 0x9c, 0x3c, 0xce, 0x41, 0x5a, - 0xf7, 0x3c, 0xd7, 0x43, 0x67, 0x78, 0x57, 0xa8, 0xd7, 0x44, 0x63, 0xd9, 0xda, 0x62, 0x8d, 0xe5, - 0x57, 0x89, 0xa8, 0xf9, 0x13, 0x7a, 0x30, 0xa2, 0x7e, 0x80, 0x3f, 0x0b, 0x25, 0xca, 0x73, 0xc5, - 0x3e, 0xa4, 0x66, 0x97, 0xef, 0x14, 0x58, 0xa6, 0x88, 0x84, 0x5e, 0x58, 0x17, 0x7b, 0x98, 0x70, - 0x07, 0x41, 0x16, 0x23, 0x5d, 0xc9, 0xea, 0x61, 0x1d, 0x4a, 0x76, 0xbf, 0x4f, 0x7b, 0xb6, 0x15, - 0xc4, 0x07, 0x10, 0x01, 0x5b, 0x0e, 0x17, 0xd2, 0xa9, 0x8d, 0x08, 0x59, 0x8c, 0xfe, 0x11, 0x0d, - 0x73, 0x1e, 0x32, 0x01, 0xdf, 0x20, 0xc9, 0x75, 0xa4, 0x10, 0xf6, 0x25, 0xce, 0x24, 0x52, 0x88, - 0x9f, 0x07, 0xb1, 0xdb, 0xe2, 0x1d, 0x68, 0x92, 0x10, 0x93, 0x95, 0x95, 0x08, 0x39, 0x3e, 0x0f, - 0xc5, 0xc0, 0xb3, 0x06, 0xbe, 0xd5, 0x65, 0xdd, 0x9c, 0xcd, 0x28, 0xcd, 0x1b, 0x75, 0x21, 0xc6, - 0xad, 0xf6, 0xf0, 0xff, 0xc2, 0x9c, 0x2b, 0xfa, 0x3d, 0xef, 0x4d, 0x93, 0x19, 0x4f, 0x2f, 0x06, - 0x24, 0xd4, 0x52, 0x3f, 0x0d, 0x0b, 0x11, 0x82, 0xfe, 0xd0, 0x1d, 0xf8, 0x14, 0x5f, 0x80, 0x8c, - 0xc7, 0x0b, 0x42, 0xa2, 0x86, 0xe5, 0x10, 0xb1, 0x8a, 0x26, 0x52, 0x43, 0xed, 0xc1, 0x82, 0xe0, - 0xdc, 0xb6, 0x83, 0x3d, 0x1e, 0x28, 0x7c, 0x1e, 0xd2, 0x94, 0x3d, 0x1c, 0xc3, 0x9c, 0xb4, 0x2a, - 0x5c, 0x4e, 0x84, 0x34, 0x66, 0x25, 0x71, 0x5f, 0x2b, 0x7f, 0x4b, 0x40, 0x49, 0xce, 0x72, 0xd3, - 0x0a, 0xba, 0x7b, 0xa7, 0x34, 0xd8, 0x2f, 0xc0, 0x1c, 0xe3, 0xdb, 0x51, 0x61, 0xcc, 0x08, 0x77, - 0xa8, 0xc1, 0x02, 0x6e, 0xf9, 0x66, 0x2c, 0xba, 0x72, 0x03, 0x50, 0xb0, 0x7c, 0x63, 0xc2, 0x9c, - 0x91, 0x17, 0x99, 0xfb, 0xe4, 0xc5, 0xdc, 0x03, 0xe5, 0xc5, 0x16, 0x2c, 0x4d, 0x23, 0x2e, 0x93, - 0xe3, 0x45, 0x98, 0x13, 0x41, 0x09, 0x5b, 0xe0, 0xac, 0xb8, 0x85, 0x2a, 0xea, 0xcf, 0x12, 0xb0, - 0x24, 0xbb, 0xd3, 0xc7, 0xa3, 0x4c, 0x63, 0x38, 0xa7, 0x1f, 0x08, 0xe7, 0x0a, 0x2c, 0x1f, 0x03, - 0xe8, 0x21, 0xaa, 0xf0, 0xaf, 0x0a, 0xcc, 0x6f, 0xd2, 0x5d, 0x7b, 0x70, 0x4a, 0xe1, 0x8d, 0xa1, - 0x96, 0x7a, 0x20, 0xd4, 0xae, 0x40, 0x41, 0xfa, 0x2b, 0xd1, 0x3a, 0x59, 0x06, 0xca, 0x8c, 0x32, - 0x50, 0xff, 0xac, 0x40, 0xa1, 0xe2, 0xf6, 0xfb, 0x76, 0x70, 0x4a, 0x91, 0x3a, 0xe9, 0x67, 0x6a, - 0x96, 0x9f, 0x08, 0x8a, 0xa1, 0x9b, 0x02, 0x20, 0xf5, 0x2f, 0x0a, 0x2c, 0x10, 0xd7, 0x71, 0x76, - 0xac, 0xee, 0xfe, 0xa3, 0xed, 0x3b, 0x06, 0x34, 0x71, 0x54, 0x7a, 0xff, 0x0f, 0x05, 0x8a, 0x2d, - 0x8f, 0xb2, 0xb7, 0xb6, 0x47, 0xda, 0x79, 0xf6, 0x82, 0xd4, 0x0b, 0xe4, 0xe6, 0x20, 0x47, 0xf8, - 0xb3, 0xba, 0x08, 0x0b, 0x91, 0xef, 0x12, 0x8f, 0xdf, 0x2b, 0xb0, 0x2c, 0x12, 0x44, 0x4a, 0x7a, - 0xa7, 0x14, 0x96, 0xd0, 0xdf, 0x54, 0xcc, 0xdf, 0x32, 0x3c, 0x76, 0xdc, 0x37, 0xe9, 0xf6, 0xdb, - 0x09, 0x38, 0x1b, 0xe6, 0xc6, 0x29, 0x77, 0xfc, 0xdf, 0xc8, 0x87, 0x15, 0x28, 0x9f, 0x04, 0x41, - 0x22, 0xf4, 0x4e, 0x02, 0xca, 0x15, 0x8f, 0x5a, 0x01, 0x8d, 0x6d, 0x32, 0x1e, 0x9d, 0xdc, 0xc0, - 0x2f, 0xc1, 0xfc, 0xd0, 0xf2, 0x02, 0xbb, 0x6b, 0x0f, 0x2d, 0xf6, 0x1a, 0x97, 0xe6, 0x7b, 0x98, - 0x63, 0x03, 0x4c, 0xa9, 0xa8, 0xe7, 0xe0, 0xf1, 0x19, 0x88, 0x48, 0xbc, 0xfe, 0xa9, 0x00, 0x6e, - 0x07, 0x96, 0x17, 0x7c, 0x0c, 0x56, 0x95, 0x99, 0xc9, 0xb4, 0x0c, 0xa5, 0x29, 0xff, 0xe3, 0xb8, - 0xd0, 0xe0, 0x63, 0xb1, 0xe2, 0x7c, 0x20, 0x2e, 0x71, 0xff, 0x25, 0x2e, 0x7f, 0x54, 0x60, 0xa5, - 0xe2, 0x8a, 0x93, 0xb4, 0x47, 0xb2, 0xc2, 0xd4, 0x27, 0xe1, 0xdc, 0x4c, 0x07, 0x25, 0x00, 0x7f, - 0x50, 0xe0, 0x31, 0x42, 0xad, 0xde, 0xa3, 0xe9, 0xfc, 0x4d, 0x38, 0x7b, 0xc2, 0x39, 0xb9, 0x43, - 0xbd, 0x02, 0xd9, 0x3e, 0x0d, 0xac, 0x9e, 0x15, 0x58, 0xd2, 0xa5, 0x95, 0x70, 0xdc, 0x89, 0x76, - 0x5d, 0x6a, 0x90, 0x48, 0x57, 0x7d, 0x3f, 0x01, 0x25, 0xbe, 0xd7, 0xfd, 0xe4, 0x0d, 0x6a, 0xf6, - 0xbb, 0xc0, 0x3b, 0x0a, 0x2c, 0x4d, 0x03, 0x14, 0xbd, 0x13, 0xfc, 0xa7, 0x0f, 0x22, 0x66, 0x34, - 0x84, 0xe4, 0xac, 0x2d, 0xe8, 0x6f, 0x12, 0x50, 0x8e, 0x4f, 0xe9, 0x93, 0x43, 0x8b, 0xe9, 0x43, - 0x8b, 0x8f, 0x7c, 0x4a, 0xf5, 0xae, 0x02, 0x8f, 0xcf, 0x00, 0xf4, 0xa3, 0x05, 0x3a, 0x76, 0x74, - 0x91, 0xb8, 0xef, 0xd1, 0xc5, 0x83, 0x86, 0xfa, 0x77, 0x0a, 0x2c, 0xd5, 0xa9, 0xef, 0x5b, 0xbb, - 0x54, 0xbc, 0xc7, 0x9f, 0xde, 0x6e, 0xc6, 0x0f, 0x85, 0x53, 0x93, 0x9b, 0x15, 0xb5, 0x02, 0xcb, - 0xc7, 0x5c, 0x7b, 0x88, 0xb3, 0x89, 0xbf, 0x2b, 0xb0, 0x28, 0x47, 0xd1, 0x4e, 0xed, 0x46, 0x60, - 0x06, 0x3a, 0xf8, 0x29, 0x48, 0xda, 0xbd, 0x70, 0x07, 0x39, 0x7d, 0xc3, 0xca, 0x04, 0xea, 0x35, - 0xc0, 0x71, 0xbf, 0x1f, 0x02, 0xba, 0xdf, 0x26, 0x61, 0xb1, 0x3d, 0x74, 0xec, 0x40, 0x0a, 0x1f, - 0xed, 0xc6, 0xff, 0x5f, 0x30, 0xef, 0x33, 0x67, 0x4d, 0x71, 0x5b, 0xc6, 0x81, 0xcd, 0x91, 0x3c, - 0xe7, 0x55, 0x38, 0x0b, 0x3f, 0x0d, 0xf9, 0x50, 0x65, 0x34, 0x08, 0xe4, 0x49, 0x27, 0x48, 0x8d, - 0xd1, 0x20, 0xc0, 0x97, 0xe1, 0xec, 0x60, 0xd4, 0xe7, 0xf7, 0xa5, 0xe6, 0x90, 0x7a, 0x26, 0x1f, - 0xd9, 0x64, 0xdb, 0x79, 0x79, 0xaf, 0x59, 0x1a, 0x8c, 0xfa, 0xc4, 0x3d, 0xf2, 0x5b, 0xd4, 0xe3, - 0xc6, 0x5b, 0x96, 0x17, 0xe0, 0x6b, 0x90, 0xb3, 0x9c, 0x5d, 0xd7, 0xb3, 0x83, 0xbd, 0x3e, 0xbf, - 0x78, 0x2b, 0x6e, 0xa8, 0xe1, 0xd5, 0xca, 0x71, 0xf8, 0xd7, 0xb5, 0x50, 0x93, 0x4c, 0xfe, 0xa4, - 0xbe, 0x08, 0xb9, 0x88, 0x8f, 0x11, 0xcc, 0xeb, 0x37, 0x3b, 0x5a, 0xcd, 0x6c, 0xb7, 0x6a, 0x55, - 0xa3, 0x2d, 0x2e, 0x46, 0xb7, 0x3b, 0xb5, 0x9a, 0xd9, 0xae, 0x68, 0x0d, 0xa4, 0xa8, 0x04, 0x80, - 0x0f, 0xc9, 0x07, 0x9f, 0x00, 0xa4, 0xdc, 0x07, 0xa0, 0x73, 0x90, 0xf3, 0xdc, 0x23, 0xe9, 0x7b, - 0x82, 0xbb, 0x93, 0xf5, 0xdc, 0x23, 0xee, 0xb9, 0xaa, 0x01, 0x8e, 0xcf, 0x55, 0x66, 0x5b, 0xac, - 0x79, 0x2b, 0x53, 0xcd, 0x7b, 0x62, 0x3f, 0x6a, 0xde, 0x62, 0x2b, 0xcf, 0xea, 0xfc, 0x55, 0x6a, - 0x39, 0x41, 0xb8, 0x5e, 0xa9, 0xbf, 0x48, 0x40, 0x81, 0x30, 0x8e, 0xdd, 0xa7, 0xed, 0xc0, 0x0a, - 0x7c, 0x16, 0xa9, 0x3d, 0xae, 0x62, 0x4e, 0xda, 0x6e, 0x8e, 0xe4, 0x05, 0x4f, 0x5c, 0x02, 0x6c, - 0xc0, 0xb2, 0x4f, 0xbb, 0xee, 0xa0, 0xe7, 0x9b, 0x3b, 0x74, 0xcf, 0x1e, 0xf4, 0xcc, 0xbe, 0xe5, - 0x07, 0xf2, 0xa6, 0xb0, 0x40, 0x4a, 0x52, 0xb8, 0xc9, 0x65, 0x75, 0x2e, 0xc2, 0x17, 0x61, 0x69, - 0xc7, 0x1e, 0x38, 0xee, 0xae, 0x39, 0x74, 0xac, 0x31, 0xf5, 0x7c, 0xe9, 0x2a, 0x4b, 0xaf, 0x34, - 0xc1, 0x42, 0xd6, 0x12, 0x22, 0x11, 0xee, 0x37, 0xe0, 0xc2, 0x4c, 0x2b, 0xe6, 0x5d, 0xdb, 0x09, - 0xa8, 0x47, 0x7b, 0xa6, 0x47, 0x87, 0x8e, 0xdd, 0xb5, 0xf8, 0x52, 0x24, 0xf6, 0xee, 0xcf, 0xcd, - 0x30, 0xbd, 0x2d, 0xd5, 0xc9, 0x44, 0x9b, 0xa1, 0xdd, 0x1d, 0x8e, 0xcc, 0x11, 0x2b, 0x60, 0xbe, - 0x8a, 0x29, 0x24, 0xdb, 0x1d, 0x8e, 0x3a, 0x8c, 0xc6, 0x08, 0x92, 0x07, 0x43, 0xb1, 0x78, 0x29, - 0x84, 0x3d, 0x32, 0x94, 0x96, 0xa6, 0xd1, 0x8b, 0x16, 0xa7, 0xb0, 0x4c, 0x94, 0x0f, 0x2b, 0x93, - 0x32, 0xcc, 0xf9, 0xd4, 0x3b, 0xb4, 0x07, 0xbb, 0xe1, 0x65, 0xaa, 0x24, 0x71, 0x1b, 0x9e, 0x93, - 0x9f, 0xcb, 0xd0, 0xb7, 0x02, 0xea, 0x0d, 0x2c, 0xc7, 0x19, 0x9b, 0xe2, 0xbd, 0x7d, 0x10, 0xd0, - 0x9e, 0x39, 0xf9, 0x80, 0x45, 0x2c, 0x50, 0xcf, 0x08, 0x6d, 0x3d, 0x52, 0x26, 0x91, 0xae, 0x11, - 0x7d, 0xda, 0xf2, 0x0a, 0x14, 0x3d, 0x19, 0x53, 0xd3, 0x67, 0x41, 0x95, 0xe5, 0xb9, 0x14, 0xdd, - 0x88, 0xc6, 0x02, 0x4e, 0x0a, 0xde, 0x54, 0xfc, 0xaf, 0xc2, 0xbc, 0x9c, 0x91, 0xe5, 0xd8, 0xd6, - 0x64, 0x9f, 0x76, 0xec, 0x0b, 0x1e, 0x8d, 0x09, 0x89, 0xfc, 0xd6, 0x87, 0x13, 0xec, 0xb5, 0xb0, - 0xd4, 0x19, 0xf6, 0xac, 0xe0, 0x74, 0x2f, 0x96, 0xf1, 0x4f, 0x80, 0x52, 0xd3, 0x9f, 0x00, 0x4d, - 0x7f, 0x52, 0x94, 0x3e, 0xf6, 0x49, 0x91, 0x7a, 0x0d, 0x96, 0xa6, 0xfd, 0x97, 0x59, 0xb2, 0x06, - 0x69, 0x7e, 0xf1, 0x7b, 0x6c, 0x55, 0x88, 0xdd, 0xec, 0x12, 0xa1, 0xa0, 0xfe, 0x52, 0x81, 0xd2, - 0x8c, 0x37, 0x86, 0xe8, 0x75, 0x44, 0x89, 0x9d, 0x76, 0xfc, 0x0f, 0xa4, 0xf9, 0x15, 0xb4, 0xfc, - 0x36, 0xe2, 0xec, 0xc9, 0x17, 0x0e, 0x7e, 0x5d, 0x4c, 0x84, 0x16, 0xab, 0x6b, 0x9e, 0x10, 0x5d, - 0x7e, 0xdc, 0x11, 0x6e, 0x78, 0xf2, 0x8c, 0x27, 0x4e, 0x40, 0x4e, 0x9e, 0x9f, 0xa4, 0xee, 0x7b, - 0x7e, 0x72, 0xe1, 0xbb, 0x49, 0xc8, 0xd5, 0xc7, 0xed, 0x03, 0x67, 0xdb, 0xb1, 0x76, 0xf9, 0x7d, - 0x6e, 0xbd, 0x65, 0xdc, 0x41, 0x67, 0xf0, 0x22, 0x14, 0x1a, 0x4d, 0xc3, 0x6c, 0xb0, 0xce, 0xb8, - 0x5d, 0xd3, 0xae, 0x23, 0x85, 0xb5, 0xce, 0x16, 0xa9, 0x9a, 0x37, 0xf4, 0x3b, 0x82, 0x93, 0xc0, - 0x25, 0x58, 0xe8, 0x34, 0xaa, 0x37, 0x3b, 0xfa, 0x84, 0x99, 0xc2, 0xcb, 0xb0, 0x58, 0xef, 0xd4, - 0x8c, 0x6a, 0xab, 0x16, 0x63, 0x67, 0x59, 0x9b, 0xdd, 0xac, 0x35, 0x37, 0x05, 0x89, 0xd8, 0xf8, - 0x9d, 0x46, 0xbb, 0x7a, 0xbd, 0xa1, 0x6f, 0x09, 0xd6, 0x2a, 0x63, 0xbd, 0xa1, 0x93, 0xe6, 0x76, - 0x35, 0x34, 0x79, 0x0d, 0x23, 0xc8, 0x6f, 0x56, 0x1b, 0x1a, 0x91, 0xa3, 0xdc, 0x53, 0x70, 0x11, - 0x72, 0x7a, 0xa3, 0x53, 0x97, 0x74, 0x02, 0x97, 0xa1, 0xa4, 0x75, 0x8c, 0xa6, 0x59, 0x6d, 0x54, - 0x88, 0x5e, 0xd7, 0x1b, 0x86, 0x94, 0xa4, 0x70, 0x09, 0x8a, 0x46, 0xb5, 0xae, 0xb7, 0x0d, 0xad, - 0xde, 0x92, 0x4c, 0x36, 0x8b, 0x6c, 0x5b, 0x0f, 0x75, 0x10, 0x5e, 0x81, 0xe5, 0x46, 0xd3, 0xdc, - 0xd2, 0xb7, 0xb5, 0x4e, 0xcd, 0x30, 0x6f, 0x69, 0xb5, 0x8e, 0x2e, 0x65, 0xab, 0xf8, 0x2c, 0xe0, - 0x66, 0xc3, 0xec, 0xb4, 0xb6, 0x34, 0x43, 0x37, 0x1b, 0xcd, 0xdb, 0x52, 0x70, 0x0d, 0x17, 0x21, - 0x3b, 0x99, 0xc1, 0x3d, 0x86, 0x42, 0xa1, 0xa5, 0x11, 0x63, 0xe2, 0xec, 0xbd, 0x7b, 0x0c, 0x2c, - 0xb8, 0x4e, 0x9a, 0x9d, 0xd6, 0x44, 0x6d, 0x11, 0xf2, 0x12, 0x2c, 0xc9, 0x4a, 0x31, 0xd6, 0x66, - 0xb5, 0x51, 0x89, 0xe6, 0x77, 0x2f, 0xbb, 0x92, 0x40, 0xca, 0x85, 0x7d, 0x48, 0xf1, 0x70, 0x64, - 0x21, 0xd5, 0x68, 0x36, 0x74, 0x74, 0x06, 0x2f, 0x00, 0x54, 0xdb, 0xd5, 0x86, 0xa1, 0x5f, 0x27, - 0x5a, 0x8d, 0xb9, 0xcd, 0x19, 0x21, 0x80, 0xcc, 0xdb, 0x79, 0x98, 0xab, 0xb6, 0xb7, 0x6b, 0x4d, - 0xcd, 0x90, 0x6e, 0x56, 0xdb, 0x37, 0x3b, 0x4d, 0x83, 0x09, 0x11, 0xce, 0x43, 0xa6, 0xda, 0x36, - 0xf4, 0xd7, 0x0d, 0xe6, 0x17, 0x97, 0x09, 0x54, 0xd1, 0xbd, 0x6b, 0x17, 0xde, 0x4b, 0x42, 0xca, - 0x18, 0x0f, 0x29, 0x0b, 0x10, 0x8f, 0xb6, 0x71, 0xa7, 0xc5, 0x4c, 0xe6, 0x20, 0x55, 0x6d, 0x18, - 0x57, 0xd1, 0xe7, 0x12, 0x18, 0x20, 0xdd, 0xe1, 0xcf, 0x9f, 0xcf, 0xb0, 0xe7, 0x6a, 0xc3, 0x78, - 0xe9, 0x0a, 0x7a, 0x3b, 0xc1, 0x86, 0xed, 0x08, 0xe2, 0x0b, 0xa1, 0x60, 0xe3, 0x32, 0xfa, 0x62, - 0x24, 0xd8, 0xb8, 0x8c, 0xbe, 0x14, 0x0a, 0x2e, 0x6d, 0xa0, 0x2f, 0x47, 0x82, 0x4b, 0x1b, 0xe8, - 0x2b, 0xa1, 0xe0, 0xca, 0x65, 0xf4, 0xd5, 0x48, 0x70, 0xe5, 0x32, 0xfa, 0x5a, 0x86, 0xf9, 0xc2, - 0x3d, 0xb9, 0xb4, 0x81, 0xbe, 0x9e, 0x8d, 0xa8, 0x2b, 0x97, 0xd1, 0x37, 0xb2, 0x2c, 0xfe, 0x51, - 0x54, 0xd1, 0x37, 0x11, 0x9b, 0x26, 0x0b, 0x10, 0xfa, 0x16, 0x7f, 0x64, 0x22, 0xf4, 0x6d, 0xc4, - 0x7c, 0x64, 0x5c, 0x4e, 0xbe, 0xc3, 0x25, 0x77, 0x74, 0x8d, 0xa0, 0xef, 0x64, 0x70, 0x1e, 0xe6, - 0xb6, 0xf4, 0x4a, 0xb5, 0xae, 0xd5, 0x10, 0xe6, 0xff, 0x60, 0xa8, 0x7c, 0xef, 0x22, 0x7b, 0x64, - 0xe9, 0x89, 0xbe, 0xdf, 0x62, 0x06, 0x6f, 0x69, 0xa4, 0xf2, 0xaa, 0x46, 0xd0, 0x0f, 0x2e, 0x32, - 0x83, 0xb7, 0x34, 0x22, 0xf1, 0xfa, 0x61, 0x8b, 0x29, 0x72, 0xd1, 0xbb, 0x17, 0xd9, 0xa4, 0x25, - 0xff, 0x47, 0x2d, 0x9c, 0x85, 0xe4, 0x66, 0xd5, 0x40, 0xef, 0x71, 0x6b, 0x2c, 0x45, 0xd1, 0x8f, - 0x11, 0x63, 0xb6, 0x75, 0x03, 0xfd, 0x84, 0x31, 0xd3, 0x46, 0xa7, 0x55, 0xd3, 0xd1, 0x13, 0x6c, - 0x72, 0xd7, 0xf5, 0x66, 0x5d, 0x37, 0xc8, 0x1d, 0xf4, 0x53, 0xae, 0xfe, 0x5a, 0xbb, 0xd9, 0x40, - 0xef, 0x23, 0x5c, 0x04, 0xd0, 0x5f, 0x6f, 0x11, 0xbd, 0xdd, 0xae, 0x36, 0x1b, 0xe8, 0xe9, 0x0b, - 0xdb, 0x80, 0x8e, 0xb7, 0x03, 0xe6, 0x40, 0xa7, 0x71, 0xa3, 0xd1, 0xbc, 0xdd, 0x40, 0x67, 0x18, - 0xd1, 0x22, 0x7a, 0x4b, 0x23, 0x3a, 0x52, 0x30, 0x40, 0xa6, 0xd2, 0xac, 0xd7, 0xab, 0x06, 0x4a, - 0xe0, 0x79, 0xc8, 0x92, 0x66, 0xad, 0xb6, 0xa9, 0x55, 0x6e, 0xa0, 0xe4, 0xe6, 0x22, 0x2c, 0xd8, - 0xee, 0xfa, 0xa1, 0x1d, 0x50, 0xdf, 0x17, 0xdf, 0x88, 0xee, 0x64, 0xf8, 0xcf, 0xa5, 0x7f, 0x05, - 0x00, 0x00, 0xff, 0xff, 0x70, 0x81, 0xa1, 0xf7, 0x5d, 0x2a, 0x00, 0x00, + // 3047 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcb, 0x73, 0x1b, 0xc7, + 0xd1, 0xd7, 0xe2, 0x41, 0x02, 0x0d, 0x02, 0x1c, 0x0e, 0x48, 0x0b, 0xa6, 0xfc, 0xe0, 0xb7, 0xb6, + 0x6c, 0x7e, 0xb4, 0x3f, 0x7e, 0x32, 0xa5, 0x4f, 0x9f, 0xca, 0xce, 0x43, 0x4b, 0x70, 0x29, 0xc3, + 0x02, 0x16, 0xd0, 0x60, 0x21, 0x59, 0x2e, 0x57, 0x6d, 0x2d, 0x81, 0x11, 0xb9, 0xc5, 0x05, 0x16, + 0xdc, 0x5d, 0x88, 0xe6, 0x4d, 0x89, 0xf3, 0x7e, 0x3a, 0x4f, 0xc7, 0x49, 0xc5, 0x49, 0x55, 0xee, + 0x39, 0xe7, 0x98, 0xca, 0x1f, 0x90, 0x5b, 0x0e, 0x49, 0x0e, 0x39, 0xa5, 0x72, 0x4b, 0xe5, 0x94, + 0x43, 0x0e, 0xa9, 0xd4, 0x3c, 0x76, 0xb1, 0x20, 0x61, 0x4b, 0x56, 0x72, 0xa1, 0xec, 0x13, 0x66, + 0xba, 0x1b, 0xdd, 0xd3, 0xbf, 0xee, 0xe9, 0x99, 0x9d, 0x19, 0x28, 0x1c, 0x8c, 0xa8, 0x7f, 0xb4, + 0x3e, 0xf4, 0xbd, 0xd0, 0xc3, 0x59, 0xde, 0x59, 0x2e, 0x85, 0xde, 0xd0, 0xeb, 0xd9, 0xa1, 0x2d, + 0xc8, 0xcb, 0x85, 0xbb, 0xa1, 0x3f, 0xec, 0x8a, 0x8e, 0x7a, 0x00, 0x33, 0xa6, 0xed, 0xef, 0xd2, + 0x10, 0x2f, 0x43, 0x6e, 0x9f, 0x1e, 0x05, 0x43, 0xbb, 0x4b, 0x2b, 0xca, 0x8a, 0xb2, 0x9a, 0x27, + 0x71, 0x1f, 0x2f, 0x42, 0x36, 0xd8, 0xb3, 0xfd, 0x5e, 0x25, 0xc5, 0x19, 0xa2, 0x83, 0xff, 0x0f, + 0x0a, 0xa1, 0xbd, 0xe3, 0xd2, 0xd0, 0x0a, 0x8f, 0x86, 0xb4, 0x92, 0x5e, 0x51, 0x56, 0x4b, 0x1b, + 0x8b, 0xeb, 0xb1, 0x39, 0x93, 0x33, 0xcd, 0xa3, 0x21, 0x25, 0x10, 0xc6, 0x6d, 0x75, 0x0b, 0x4a, + 0x37, 0xcd, 0x6b, 0x76, 0x48, 0xab, 0xb6, 0xeb, 0x52, 0xbf, 0xb6, 0xc5, 0x4c, 0x8f, 0x02, 0xea, + 0x0f, 0xec, 0x7e, 0x6c, 0x3a, 0xea, 0xe3, 0xc7, 0x60, 0x66, 0xd7, 0xf7, 0x46, 0xc3, 0xa0, 0x92, + 0x5a, 0x49, 0xaf, 0xe6, 0x89, 0xec, 0xa9, 0x6f, 0x02, 0xe8, 0x77, 0xe9, 0x20, 0x34, 0xbd, 0x7d, + 0x3a, 0xc0, 0x4f, 0x40, 0x3e, 0x74, 0xfa, 0x34, 0x08, 0xed, 0xfe, 0x90, 0xab, 0x48, 0x93, 0x31, + 0xe1, 0x03, 0x86, 0xbf, 0x0c, 0xb9, 0xa1, 0x17, 0x38, 0xa1, 0xe3, 0x0d, 0xf8, 0xd8, 0xf3, 0x24, + 0xee, 0xab, 0x9f, 0x81, 0xec, 0x4d, 0xdb, 0x1d, 0x51, 0xfc, 0x34, 0x64, 0xb8, 0x73, 0x0a, 0x77, + 0xae, 0xb0, 0x2e, 0xf0, 0xe5, 0x3e, 0x71, 0x06, 0xd3, 0x7d, 0x97, 0x49, 0x72, 0xdd, 0x73, 0x44, + 0x74, 0xd4, 0x7d, 0x98, 0xdb, 0x74, 0x06, 0xbd, 0x9b, 0xb6, 0xef, 0x30, 0xc7, 0x1f, 0x52, 0x0d, + 0x7e, 0x16, 0x66, 0x78, 0x23, 0xa8, 0xa4, 0x57, 0xd2, 0xab, 0x85, 0x8d, 0x39, 0xf9, 0x47, 0x3e, + 0x36, 0x22, 0x79, 0xea, 0x6f, 0x14, 0x80, 0x4d, 0x6f, 0x34, 0xe8, 0xdd, 0x60, 0x4c, 0x8c, 0x20, + 0x1d, 0x1c, 0xb8, 0x12, 0x48, 0xd6, 0xc4, 0xd7, 0xa1, 0xb4, 0xe3, 0x0c, 0x7a, 0xd6, 0x5d, 0x39, + 0x1c, 0x81, 0x65, 0x61, 0xe3, 0x59, 0xa9, 0x6e, 0xfc, 0xe7, 0xf5, 0xe4, 0xa8, 0x03, 0x7d, 0x10, + 0xfa, 0x47, 0xa4, 0xb8, 0x93, 0xa4, 0x2d, 0x77, 0x00, 0x9f, 0x14, 0x62, 0x46, 0xf7, 0xe9, 0x51, + 0x64, 0x74, 0x9f, 0x1e, 0xe1, 0xff, 0x4e, 0x7a, 0x54, 0xd8, 0x28, 0x47, 0xb6, 0x12, 0xff, 0x95, + 0x6e, 0xbe, 0x9c, 0xba, 0xa2, 0xa8, 0xbf, 0xca, 0x42, 0x49, 0x7f, 0x8b, 0x76, 0x47, 0x21, 0x6d, + 0x0e, 0x59, 0x0c, 0x02, 0xbc, 0x0e, 0x65, 0x67, 0xd0, 0x75, 0x47, 0x3d, 0x6a, 0x51, 0x16, 0x6a, + 0x2b, 0x64, 0xb1, 0xe6, 0xfa, 0x72, 0x64, 0x41, 0xb2, 0x12, 0x49, 0xa0, 0x41, 0xb9, 0xeb, 0xf5, + 0x87, 0xb6, 0x3f, 0x29, 0x9f, 0xe6, 0xf6, 0x17, 0xa4, 0xfd, 0xb1, 0x3c, 0x59, 0x90, 0xd2, 0x09, + 0x15, 0x0d, 0x98, 0x97, 0x7a, 0x7b, 0xd6, 0x1d, 0x87, 0xba, 0xbd, 0xa0, 0x92, 0xe1, 0x21, 0x8b, + 0xa0, 0x9a, 0x1c, 0xe2, 0x7a, 0x4d, 0x0a, 0x6f, 0x73, 0x59, 0x52, 0x72, 0x26, 0xfa, 0x78, 0x0d, + 0x16, 0xba, 0xae, 0xc3, 0x86, 0x72, 0x87, 0x41, 0x6c, 0xf9, 0xde, 0x61, 0x50, 0xc9, 0xf2, 0xf1, + 0xcf, 0x0b, 0xc6, 0x36, 0xa3, 0x13, 0xef, 0x30, 0xc0, 0x2f, 0x43, 0xee, 0xd0, 0xf3, 0xf7, 0x5d, + 0xcf, 0xee, 0x55, 0x66, 0xb8, 0xcd, 0xa7, 0xa6, 0xdb, 0xbc, 0x25, 0xa5, 0x48, 0x2c, 0x8f, 0x57, + 0x01, 0x05, 0x07, 0xae, 0x15, 0x50, 0x97, 0x76, 0x43, 0xcb, 0x75, 0xfa, 0x4e, 0x58, 0xc9, 0xf1, + 0x59, 0x50, 0x0a, 0x0e, 0xdc, 0x36, 0x27, 0xd7, 0x19, 0x15, 0x5b, 0xb0, 0x14, 0xfa, 0xf6, 0x20, + 0xb0, 0xbb, 0x4c, 0x99, 0xe5, 0x04, 0x9e, 0x6b, 0xf3, 0x19, 0x90, 0xe7, 0x26, 0xd7, 0xa6, 0x9b, + 0x34, 0xc7, 0x7f, 0xa9, 0x45, 0xff, 0x20, 0x8b, 0xe1, 0x14, 0xaa, 0xfa, 0x0a, 0x94, 0x26, 0x41, + 0xc1, 0x0b, 0x50, 0x34, 0x6f, 0xb7, 0x74, 0x4b, 0x33, 0xb6, 0x2c, 0x43, 0x6b, 0xe8, 0xe8, 0x0c, + 0x2e, 0x42, 0x9e, 0x93, 0x9a, 0x46, 0xfd, 0x36, 0x52, 0xf0, 0x2c, 0xa4, 0xb5, 0x7a, 0x1d, 0xa5, + 0xd4, 0x2b, 0x90, 0x8b, 0xbc, 0xc3, 0xf3, 0x50, 0xe8, 0x18, 0xed, 0x96, 0x5e, 0xad, 0x6d, 0xd7, + 0xf4, 0x2d, 0x74, 0x06, 0xe7, 0x20, 0xd3, 0xac, 0x9b, 0x2d, 0xa4, 0x88, 0x96, 0xd6, 0x42, 0x29, + 0xf6, 0xcf, 0xad, 0x4d, 0x0d, 0xa5, 0xd5, 0x10, 0x16, 0xa7, 0x0d, 0x12, 0x17, 0x60, 0x76, 0x4b, + 0xdf, 0xd6, 0x3a, 0x75, 0x13, 0x9d, 0xc1, 0x65, 0x98, 0x27, 0x7a, 0x4b, 0xd7, 0x4c, 0x6d, 0xb3, + 0xae, 0x5b, 0x44, 0xd7, 0xb6, 0x90, 0x82, 0x31, 0x94, 0x58, 0xcb, 0xaa, 0x36, 0x1b, 0x8d, 0x9a, + 0x69, 0xea, 0x5b, 0x28, 0x85, 0x17, 0x01, 0x71, 0x5a, 0xc7, 0x18, 0x53, 0xd3, 0x18, 0xc1, 0x5c, + 0x5b, 0x27, 0x35, 0xad, 0x5e, 0x7b, 0x83, 0x29, 0x40, 0x99, 0xd7, 0x32, 0x39, 0x05, 0xa5, 0xd4, + 0x77, 0x53, 0x90, 0xe5, 0xbe, 0x62, 0x0c, 0x99, 0x44, 0x11, 0xe3, 0xed, 0x78, 0xea, 0xa7, 0x3e, + 0x64, 0xea, 0xf3, 0xea, 0x28, 0x8b, 0x90, 0xe8, 0xe0, 0x73, 0x90, 0xf7, 0xfc, 0x5d, 0x4b, 0x70, + 0x32, 0xa2, 0x3c, 0x79, 0xfe, 0x2e, 0xaf, 0xa9, 0xac, 0x74, 0xb1, 0x0a, 0xbb, 0x63, 0x07, 0x94, + 0xa7, 0x53, 0x9e, 0xc4, 0x7d, 0xfc, 0x38, 0x30, 0x39, 0x8b, 0x8f, 0x63, 0x86, 0xf3, 0x66, 0x3d, + 0x7f, 0xd7, 0x60, 0x43, 0x79, 0x06, 0x8a, 0x5d, 0xcf, 0x1d, 0xf5, 0x07, 0x96, 0x4b, 0x07, 0xbb, + 0xe1, 0x5e, 0x65, 0x76, 0x45, 0x59, 0x2d, 0x92, 0x39, 0x41, 0xac, 0x73, 0x1a, 0xae, 0xc0, 0x6c, + 0x77, 0xcf, 0xf6, 0x03, 0x2a, 0x52, 0xa8, 0x48, 0xa2, 0x2e, 0xb7, 0x4a, 0xbb, 0x4e, 0xdf, 0x76, + 0x03, 0x9e, 0x2e, 0x45, 0x12, 0xf7, 0x99, 0x13, 0x77, 0x5c, 0x7b, 0x37, 0xa8, 0x00, 0x67, 0x88, + 0x8e, 0xfa, 0xff, 0x90, 0x26, 0xde, 0x21, 0x53, 0x29, 0x0c, 0x06, 0x15, 0x65, 0x25, 0xbd, 0x8a, + 0x49, 0xd4, 0x65, 0xd5, 0x5d, 0x16, 0x38, 0x51, 0xf7, 0xa2, 0x92, 0xf6, 0x26, 0xcc, 0x11, 0x1a, + 0x8c, 0xdc, 0x50, 0x7f, 0x2b, 0xf4, 0xed, 0x00, 0x6f, 0x40, 0x21, 0x39, 0xa5, 0x95, 0x0f, 0x9a, + 0xd2, 0x40, 0xc7, 0x73, 0xb9, 0x02, 0xb3, 0x77, 0x7c, 0x1a, 0xec, 0x51, 0x5f, 0x96, 0x8c, 0xa8, + 0xcb, 0x0a, 0x66, 0x81, 0x97, 0x3b, 0x61, 0x83, 0x95, 0x59, 0x39, 0xd9, 0x95, 0x89, 0x32, 0xcb, + 0x83, 0x4a, 0x24, 0x8f, 0xa1, 0xc7, 0xe6, 0xaf, 0x65, 0xdf, 0xb9, 0x43, 0xbb, 0x21, 0x15, 0xab, + 0x49, 0x86, 0xcc, 0x31, 0xa2, 0x26, 0x69, 0x2c, 0x6c, 0xce, 0x20, 0xa0, 0x7e, 0x68, 0x39, 0x3d, + 0x1e, 0xd0, 0x0c, 0xc9, 0x09, 0x42, 0xad, 0x87, 0x9f, 0x82, 0x0c, 0xaf, 0x00, 0x19, 0x6e, 0x05, + 0xa4, 0x15, 0xe2, 0x1d, 0x12, 0x4e, 0xc7, 0x2f, 0xc0, 0x0c, 0xe5, 0xfe, 0xf2, 0xa0, 0x8e, 0x6b, + 0x66, 0x12, 0x0a, 0x22, 0x45, 0xd4, 0x9f, 0xa7, 0xa1, 0xd0, 0x0e, 0x7d, 0x6a, 0xf7, 0xb9, 0xff, + 0xf8, 0x53, 0x00, 0x41, 0x68, 0x87, 0xb4, 0x4f, 0x07, 0x61, 0xe4, 0xc8, 0x13, 0x52, 0x41, 0x42, + 0x6e, 0xbd, 0x1d, 0x09, 0x91, 0x84, 0xfc, 0x71, 0x80, 0x53, 0x0f, 0x00, 0xf0, 0xf2, 0xfb, 0x29, + 0xc8, 0xc7, 0xda, 0xb0, 0x06, 0xb9, 0xae, 0x1d, 0xd2, 0x5d, 0xcf, 0x3f, 0x92, 0xcb, 0xdc, 0xf9, + 0x0f, 0xb3, 0xbe, 0x5e, 0x95, 0xc2, 0x24, 0xfe, 0x1b, 0x7e, 0x12, 0xc4, 0x3e, 0x41, 0x24, 0xaf, + 0x58, 0xac, 0xf3, 0x9c, 0xc2, 0xd3, 0xf7, 0x65, 0xc0, 0x43, 0xdf, 0xe9, 0xdb, 0xfe, 0x91, 0xb5, + 0x4f, 0x8f, 0xa2, 0xfa, 0x9c, 0x9e, 0x12, 0x32, 0x24, 0xe5, 0xae, 0xd3, 0x23, 0x59, 0x84, 0xae, + 0x4c, 0xfe, 0x57, 0x26, 0xdd, 0xc9, 0x40, 0x24, 0xfe, 0xc9, 0x17, 0xd9, 0x20, 0x5a, 0x4e, 0xb3, + 0x3c, 0x3f, 0x59, 0x53, 0x7d, 0x1e, 0x72, 0xd1, 0xe0, 0x71, 0x1e, 0xb2, 0xba, 0xef, 0x7b, 0x3e, + 0x3a, 0xc3, 0x6b, 0x51, 0xa3, 0x2e, 0xca, 0xd9, 0xd6, 0x16, 0x2b, 0x67, 0xbf, 0x4e, 0xc5, 0x6b, + 0x1a, 0xa1, 0x07, 0x23, 0x1a, 0x84, 0xf8, 0xb3, 0x50, 0xa6, 0x3c, 0x57, 0x9c, 0xbb, 0xd4, 0xea, + 0xf2, 0x0d, 0x10, 0xcb, 0x14, 0x91, 0xd0, 0xf3, 0xeb, 0x62, 0x6b, 0x16, 0x6d, 0x8c, 0xc8, 0x42, + 0x2c, 0x2b, 0x49, 0x3d, 0xac, 0x43, 0xd9, 0xe9, 0xf7, 0x69, 0xcf, 0xb1, 0xc3, 0xa4, 0x02, 0x11, + 0xb0, 0xa5, 0x68, 0x7f, 0x30, 0xb1, 0xbf, 0x22, 0x0b, 0xf1, 0x3f, 0x62, 0x35, 0xe7, 0x61, 0x26, + 0xe4, 0xfb, 0x3e, 0xb9, 0x3c, 0x16, 0xa3, 0xba, 0xc4, 0x89, 0x44, 0x32, 0xf1, 0xf3, 0x20, 0x36, + 0x91, 0xbc, 0x02, 0x8d, 0x13, 0x62, 0xbc, 0x61, 0x20, 0x82, 0x8f, 0xcf, 0x43, 0x69, 0x62, 0x5d, + 0xe9, 0x71, 0xc0, 0xd2, 0xa4, 0x98, 0x5c, 0x24, 0x7a, 0xf8, 0x7f, 0x61, 0xd6, 0x13, 0x6b, 0x0a, + 0xaf, 0x4d, 0xe3, 0x11, 0x4f, 0x2e, 0x38, 0x24, 0x92, 0x52, 0x3f, 0x0d, 0xf3, 0x31, 0x82, 0xc1, + 0xd0, 0x1b, 0x04, 0x14, 0xaf, 0xc1, 0x8c, 0xcf, 0x27, 0x84, 0x44, 0x0d, 0x4b, 0x15, 0x89, 0x19, + 0x4d, 0xa4, 0x84, 0xda, 0x83, 0x79, 0x41, 0xb9, 0xe5, 0x84, 0x7b, 0x3c, 0x50, 0xf8, 0x3c, 0x64, + 0x29, 0x6b, 0x1c, 0xc3, 0x9c, 0xb4, 0xaa, 0x9c, 0x4f, 0x04, 0x37, 0x61, 0x25, 0x75, 0x5f, 0x2b, + 0x7f, 0x4b, 0x41, 0x59, 0x8e, 0x72, 0xd3, 0x0e, 0xbb, 0x7b, 0xa7, 0x34, 0xd8, 0x2f, 0xc0, 0x2c, + 0xa3, 0x3b, 0xf1, 0xc4, 0x98, 0x12, 0xee, 0x48, 0x82, 0x05, 0xdc, 0x0e, 0xac, 0x44, 0x74, 0xe5, + 0xbe, 0xa6, 0x68, 0x07, 0x89, 0x85, 0x78, 0x4a, 0x5e, 0xcc, 0xdc, 0x27, 0x2f, 0x66, 0x1f, 0x28, + 0x2f, 0xb6, 0x60, 0x71, 0x12, 0x71, 0x99, 0x1c, 0x2f, 0xc2, 0xac, 0x08, 0x4a, 0x54, 0x02, 0xa7, + 0xc5, 0x2d, 0x12, 0x51, 0x7f, 0x96, 0x82, 0x45, 0x59, 0x9d, 0x3e, 0x1e, 0xd3, 0x34, 0x81, 0x73, + 0xf6, 0x81, 0x70, 0xae, 0xc2, 0xd2, 0x31, 0x80, 0x1e, 0x62, 0x16, 0xfe, 0x55, 0x81, 0xb9, 0x4d, + 0xba, 0xeb, 0x0c, 0x4e, 0x29, 0xbc, 0x09, 0xd4, 0x32, 0x0f, 0x84, 0xda, 0x65, 0x28, 0x4a, 0x7f, + 0x25, 0x5a, 0x27, 0xa7, 0x81, 0x32, 0x65, 0x1a, 0xa8, 0x7f, 0x56, 0xa0, 0x58, 0xf5, 0xfa, 0x7d, + 0x27, 0x3c, 0xa5, 0x48, 0x9d, 0xf4, 0x33, 0x33, 0xcd, 0x4f, 0x04, 0xa5, 0xc8, 0x4d, 0x01, 0x90, + 0xfa, 0x17, 0x05, 0xe6, 0x89, 0xe7, 0xba, 0x3b, 0x76, 0x77, 0xff, 0xd1, 0xf6, 0x1d, 0x03, 0x1a, + 0x3b, 0x2a, 0xbd, 0xff, 0x87, 0x02, 0xa5, 0x96, 0x4f, 0xd9, 0xc7, 0xe8, 0x23, 0xed, 0x3c, 0xfb, + 0x40, 0xea, 0x85, 0x72, 0x73, 0x90, 0x27, 0xbc, 0xad, 0x2e, 0xc0, 0x7c, 0xec, 0xbb, 0xc4, 0xe3, + 0x0f, 0x0a, 0x2c, 0x89, 0x04, 0x91, 0x9c, 0xde, 0x29, 0x85, 0x25, 0xf2, 0x37, 0x93, 0xf0, 0xb7, + 0x02, 0x8f, 0x1d, 0xf7, 0x4d, 0xba, 0xfd, 0x76, 0x0a, 0xce, 0x46, 0xb9, 0x71, 0xca, 0x1d, 0xff, + 0x37, 0xf2, 0x61, 0x19, 0x2a, 0x27, 0x41, 0x90, 0x08, 0xbd, 0x93, 0x82, 0x4a, 0xd5, 0xa7, 0x76, + 0x48, 0x13, 0x9b, 0x8c, 0x47, 0x27, 0x37, 0xf0, 0x4b, 0x30, 0x37, 0xb4, 0xfd, 0xd0, 0xe9, 0x3a, + 0x43, 0x9b, 0x7d, 0xc6, 0x65, 0xf9, 0x1e, 0xe6, 0x98, 0x82, 0x09, 0x11, 0xf5, 0x1c, 0x3c, 0x3e, + 0x05, 0x11, 0x89, 0xd7, 0x3f, 0x15, 0xc0, 0xed, 0xd0, 0xf6, 0xc3, 0x8f, 0xc1, 0xaa, 0x32, 0x35, + 0x99, 0x96, 0xa0, 0x3c, 0xe1, 0x7f, 0x12, 0x17, 0x1a, 0x7e, 0x2c, 0x56, 0x9c, 0x0f, 0xc4, 0x25, + 0xe9, 0xbf, 0xc4, 0xe5, 0x4f, 0x0a, 0x2c, 0x57, 0x3d, 0x71, 0x7e, 0xf7, 0x48, 0xce, 0x30, 0xf5, + 0x49, 0x38, 0x37, 0xd5, 0x41, 0x09, 0xc0, 0x1f, 0x15, 0x78, 0x8c, 0x50, 0xbb, 0xf7, 0x68, 0x3a, + 0x7f, 0x03, 0xce, 0x9e, 0x70, 0x4e, 0xee, 0x50, 0x2f, 0x43, 0xae, 0x4f, 0x43, 0xbb, 0x67, 0x87, + 0xb6, 0x74, 0x69, 0x39, 0xd2, 0x3b, 0x96, 0x6e, 0x48, 0x09, 0x12, 0xcb, 0xaa, 0xef, 0xa7, 0xa0, + 0xcc, 0xf7, 0xba, 0x9f, 0x7c, 0x41, 0x4d, 0xff, 0x16, 0x78, 0x47, 0x81, 0xc5, 0x49, 0x80, 0xe2, + 0x6f, 0x82, 0xff, 0xf4, 0x41, 0xc4, 0x94, 0x82, 0x90, 0x9e, 0xb6, 0x05, 0xfd, 0x6d, 0x0a, 0x2a, + 0xc9, 0x21, 0x7d, 0x72, 0x68, 0x31, 0x79, 0x68, 0xf1, 0x91, 0x4f, 0xa9, 0xde, 0x55, 0xe0, 0xf1, + 0x29, 0x80, 0x7e, 0xb4, 0x40, 0x27, 0x8e, 0x2e, 0x52, 0xf7, 0x3d, 0xba, 0x78, 0xd0, 0x50, 0xff, + 0x5e, 0x81, 0xc5, 0x06, 0x0d, 0x02, 0x7b, 0x97, 0x8a, 0xef, 0xf8, 0xd3, 0x5b, 0xcd, 0xf8, 0xa1, + 0x70, 0x66, 0x7c, 0xb3, 0xa2, 0x56, 0x61, 0xe9, 0x98, 0x6b, 0x0f, 0x71, 0x36, 0xf1, 0x77, 0x05, + 0x16, 0xa4, 0x16, 0xed, 0xd4, 0x6e, 0x04, 0xa6, 0xa0, 0x83, 0x9f, 0x82, 0xb4, 0xd3, 0x8b, 0x76, + 0x90, 0x93, 0x17, 0xc7, 0x8c, 0xa1, 0x5e, 0x05, 0x9c, 0xf4, 0xfb, 0x21, 0xa0, 0xfb, 0x5d, 0x1a, + 0x16, 0xda, 0x43, 0xd7, 0x09, 0x25, 0xf3, 0xd1, 0x2e, 0xfc, 0xff, 0x05, 0x73, 0x01, 0x73, 0xd6, + 0x12, 0xb7, 0x65, 0x1c, 0xd8, 0x3c, 0x29, 0x70, 0x5a, 0x95, 0x93, 0xf0, 0xd3, 0x50, 0x88, 0x44, + 0x46, 0x83, 0x50, 0x9e, 0x74, 0x82, 0x94, 0x18, 0x0d, 0x42, 0x7c, 0x09, 0xce, 0x0e, 0x46, 0x7d, + 0x7e, 0x0d, 0x6c, 0x0d, 0xa9, 0x6f, 0x71, 0xcd, 0x16, 0xdb, 0xce, 0xcb, 0xeb, 0xda, 0xf2, 0x60, + 0xd4, 0x27, 0xde, 0x61, 0xd0, 0xa2, 0x3e, 0x37, 0xde, 0xb2, 0xfd, 0x10, 0x5f, 0x85, 0xbc, 0xed, + 0xee, 0x7a, 0xbe, 0x13, 0xee, 0xf5, 0xe5, 0x3d, 0xad, 0x1a, 0x5d, 0xad, 0x1c, 0x87, 0x7f, 0x5d, + 0x8b, 0x24, 0xc9, 0xf8, 0x4f, 0xea, 0x8b, 0x90, 0x8f, 0xe9, 0x18, 0xc1, 0x9c, 0x7e, 0xa3, 0xa3, + 0xd5, 0xad, 0x76, 0xab, 0x5e, 0x33, 0xdb, 0xe2, 0x3a, 0x76, 0xbb, 0x53, 0xaf, 0x5b, 0xed, 0xaa, + 0x66, 0x20, 0x45, 0x25, 0x00, 0x5c, 0x25, 0x57, 0x3e, 0x06, 0x48, 0xb9, 0x0f, 0x40, 0xe7, 0x20, + 0xef, 0x7b, 0x87, 0xd2, 0xf7, 0x14, 0x77, 0x27, 0xe7, 0x7b, 0x87, 0xdc, 0x73, 0x55, 0x03, 0x9c, + 0x1c, 0xab, 0xcc, 0xb6, 0x44, 0xf1, 0x56, 0x26, 0x8a, 0xf7, 0xd8, 0x7e, 0x5c, 0xbc, 0xc5, 0x56, + 0x9e, 0xcd, 0xf3, 0x57, 0xa9, 0xed, 0x86, 0xd1, 0x7a, 0xa5, 0xfe, 0x22, 0x05, 0x45, 0xc2, 0x28, + 0x4e, 0x9f, 0xb6, 0x43, 0x3b, 0x0c, 0x58, 0xa4, 0xf6, 0xb8, 0x88, 0x35, 0x2e, 0xbb, 0x79, 0x52, + 0x10, 0x34, 0x71, 0x09, 0xb0, 0x01, 0x4b, 0x01, 0xed, 0x7a, 0x83, 0x5e, 0x60, 0xed, 0xd0, 0x3d, + 0x67, 0xd0, 0xb3, 0xfa, 0x76, 0x10, 0xca, 0x9b, 0xc2, 0x22, 0x29, 0x4b, 0xe6, 0x26, 0xe7, 0x35, + 0x38, 0x0b, 0x5f, 0x80, 0xc5, 0x1d, 0x67, 0xe0, 0x7a, 0xbb, 0xd6, 0xd0, 0xb5, 0x8f, 0xa8, 0x1f, + 0x48, 0x57, 0x59, 0x7a, 0x65, 0x09, 0x16, 0xbc, 0x96, 0x60, 0x89, 0x70, 0xbf, 0x01, 0x6b, 0x53, + 0xad, 0x58, 0x77, 0x1c, 0x37, 0xa4, 0x3e, 0xed, 0x59, 0x3e, 0x1d, 0xba, 0x4e, 0x57, 0xdc, 0xc0, + 0x8b, 0xbd, 0xfb, 0x73, 0x53, 0x4c, 0x6f, 0x4b, 0x71, 0x32, 0x96, 0x66, 0x68, 0x77, 0x87, 0x23, + 0x6b, 0xc4, 0x26, 0x30, 0x5f, 0xc5, 0x14, 0x92, 0xeb, 0x0e, 0x47, 0x1d, 0xd6, 0xc7, 0x08, 0xd2, + 0x07, 0x43, 0xb1, 0x78, 0x29, 0x84, 0x35, 0x19, 0x4a, 0x8b, 0x93, 0xe8, 0xc5, 0x8b, 0x53, 0x34, + 0x4d, 0x94, 0x0f, 0x9b, 0x26, 0x15, 0x98, 0x0d, 0xa8, 0x7f, 0xd7, 0x19, 0xec, 0x46, 0x97, 0xa9, + 0xb2, 0x8b, 0xdb, 0xf0, 0x9c, 0x7c, 0x05, 0x44, 0xdf, 0x0a, 0xa9, 0x3f, 0xb0, 0x5d, 0xf7, 0xc8, + 0x12, 0xdf, 0xed, 0x83, 0x90, 0xf6, 0xac, 0xf1, 0xbb, 0x1c, 0xb1, 0x40, 0x3d, 0x23, 0xa4, 0xf5, + 0x58, 0x98, 0xc4, 0xb2, 0x66, 0xfc, 0x62, 0xe7, 0x15, 0x28, 0xf9, 0x32, 0xa6, 0x56, 0xc0, 0x82, + 0x2a, 0xa7, 0xe7, 0x62, 0x7c, 0x23, 0x9a, 0x08, 0x38, 0x29, 0xfa, 0x13, 0xf1, 0xbf, 0x02, 0x73, + 0x72, 0x44, 0xb6, 0xeb, 0xd8, 0xe3, 0x7d, 0xda, 0xb1, 0x87, 0x49, 0x1a, 0x63, 0x12, 0xf9, 0x84, + 0x89, 0x77, 0xd8, 0x67, 0x61, 0xb9, 0x33, 0xec, 0xd9, 0xe1, 0xe9, 0x5e, 0x2c, 0x93, 0x2f, 0x9b, + 0x32, 0x93, 0x2f, 0x9b, 0x26, 0x5f, 0x4a, 0x65, 0x8f, 0xbd, 0x94, 0x52, 0xaf, 0xc2, 0xe2, 0xa4, + 0xff, 0x32, 0x4b, 0x56, 0x21, 0xcb, 0x2f, 0x7e, 0x8f, 0xad, 0x0a, 0x89, 0x9b, 0x5d, 0x22, 0x04, + 0xd4, 0x5f, 0x2a, 0x50, 0x9e, 0xf2, 0xc5, 0x10, 0x7f, 0x8e, 0x28, 0x89, 0xd3, 0x8e, 0xff, 0x81, + 0x2c, 0xbf, 0x82, 0x96, 0x6f, 0x23, 0xce, 0x9e, 0xfc, 0xe0, 0xe0, 0xd7, 0xc5, 0x44, 0x48, 0xb1, + 0x79, 0xcd, 0x13, 0xa2, 0xcb, 0x8f, 0x3b, 0xa2, 0x0d, 0x4f, 0x81, 0xd1, 0xc4, 0x09, 0xc8, 0xc9, + 0xf3, 0x93, 0xcc, 0x7d, 0xcf, 0x4f, 0xd6, 0xbe, 0x9b, 0x86, 0x7c, 0xe3, 0xa8, 0x7d, 0xe0, 0x6e, + 0xbb, 0xf6, 0x2e, 0xbf, 0xcf, 0x6d, 0xb4, 0xcc, 0xdb, 0xe8, 0x0c, 0x5e, 0x80, 0xa2, 0xd1, 0x34, + 0x2d, 0x83, 0x55, 0xc6, 0xed, 0xba, 0x76, 0x0d, 0x29, 0xac, 0x74, 0xb6, 0x48, 0xcd, 0xba, 0xae, + 0xdf, 0x16, 0x94, 0x14, 0x2e, 0xc3, 0x7c, 0xc7, 0xa8, 0xdd, 0xe8, 0xe8, 0x63, 0x62, 0x06, 0x2f, + 0xc1, 0x42, 0xa3, 0x53, 0x37, 0x6b, 0xad, 0x7a, 0x82, 0x9c, 0x63, 0x65, 0x76, 0xb3, 0xde, 0xdc, + 0x14, 0x5d, 0xc4, 0xf4, 0x77, 0x8c, 0x76, 0xed, 0x9a, 0xa1, 0x6f, 0x09, 0xd2, 0x0a, 0x23, 0xbd, + 0xa1, 0x93, 0xe6, 0x76, 0x2d, 0x32, 0x79, 0x15, 0x23, 0x28, 0x6c, 0xd6, 0x0c, 0x8d, 0x48, 0x2d, + 0xf7, 0x14, 0x5c, 0x82, 0xbc, 0x6e, 0x74, 0x1a, 0xb2, 0x9f, 0xc2, 0x15, 0x28, 0x6b, 0x1d, 0xb3, + 0x69, 0xd5, 0x8c, 0x2a, 0xd1, 0x1b, 0xba, 0x61, 0x4a, 0x4e, 0x06, 0x97, 0xa1, 0x64, 0xd6, 0x1a, + 0x7a, 0xdb, 0xd4, 0x1a, 0x2d, 0x49, 0x64, 0xa3, 0xc8, 0xb5, 0xf5, 0x48, 0x06, 0xe1, 0x65, 0x58, + 0x32, 0x9a, 0x96, 0x7c, 0x23, 0x63, 0xdd, 0xd4, 0xea, 0x1d, 0x5d, 0xf2, 0x56, 0xf0, 0x59, 0xc0, + 0x4d, 0xc3, 0xea, 0xb4, 0xb6, 0x34, 0x53, 0xb7, 0x8c, 0xe6, 0x2d, 0xc9, 0xb8, 0x8a, 0x4b, 0x90, + 0x1b, 0x8f, 0xe0, 0x1e, 0x43, 0xa1, 0xd8, 0xd2, 0x88, 0x39, 0x76, 0xf6, 0xde, 0x3d, 0x06, 0x16, + 0x5c, 0x23, 0xcd, 0x4e, 0x6b, 0x2c, 0xb6, 0x00, 0x05, 0x09, 0x96, 0x24, 0x65, 0x18, 0x69, 0xb3, + 0x66, 0x54, 0xe3, 0xf1, 0xdd, 0xcb, 0x2d, 0xa7, 0x90, 0xb2, 0xb6, 0x0f, 0x19, 0x1e, 0x8e, 0x1c, + 0x64, 0x8c, 0xa6, 0xa1, 0xa3, 0x33, 0x78, 0x1e, 0xa0, 0xd6, 0xae, 0x19, 0xa6, 0x7e, 0x8d, 0x68, + 0x75, 0xe6, 0x36, 0x27, 0x44, 0x00, 0x32, 0x6f, 0xe7, 0x60, 0xb6, 0xd6, 0xde, 0xae, 0x37, 0x35, + 0x53, 0xba, 0x59, 0x6b, 0xdf, 0xe8, 0x34, 0x4d, 0xc6, 0x44, 0xb8, 0x00, 0x33, 0xb5, 0xb6, 0xa9, + 0xbf, 0x6e, 0x32, 0xbf, 0x38, 0x4f, 0xa0, 0x8a, 0xee, 0x5d, 0x5d, 0x7b, 0x2f, 0x0d, 0x19, 0xf3, + 0x68, 0x48, 0x59, 0x80, 0x78, 0xb4, 0xcd, 0xdb, 0x2d, 0x66, 0x32, 0x0f, 0x99, 0x9a, 0x61, 0x5e, + 0x41, 0x9f, 0x4b, 0x61, 0x80, 0x6c, 0x87, 0xb7, 0x3f, 0x3f, 0xc3, 0xda, 0x35, 0xc3, 0x7c, 0xe9, + 0x32, 0x7a, 0x3b, 0xc5, 0xd4, 0x76, 0x44, 0xe7, 0x0b, 0x11, 0x63, 0xe3, 0x12, 0xfa, 0x62, 0xcc, + 0xd8, 0xb8, 0x84, 0xbe, 0x14, 0x31, 0x2e, 0x6e, 0xa0, 0x2f, 0xc7, 0x8c, 0x8b, 0x1b, 0xe8, 0x2b, + 0x11, 0xe3, 0xf2, 0x25, 0xf4, 0xd5, 0x98, 0x71, 0xf9, 0x12, 0xfa, 0xda, 0x0c, 0xf3, 0x85, 0x7b, + 0x72, 0x71, 0x03, 0x7d, 0x3d, 0x17, 0xf7, 0x2e, 0x5f, 0x42, 0xdf, 0xc8, 0xb1, 0xf8, 0xc7, 0x51, + 0x45, 0xdf, 0x44, 0x6c, 0x98, 0x2c, 0x40, 0xe8, 0x5b, 0xbc, 0xc9, 0x58, 0xe8, 0xdb, 0x88, 0xf9, + 0xc8, 0xa8, 0xbc, 0xfb, 0x0e, 0xe7, 0xdc, 0xd6, 0x35, 0x82, 0xbe, 0x33, 0x23, 0x9e, 0x44, 0x55, + 0x6b, 0x0d, 0xad, 0x8e, 0x30, 0xff, 0x07, 0x43, 0xe5, 0x7b, 0x17, 0x58, 0x93, 0xa5, 0x27, 0xfa, + 0x7e, 0x8b, 0x19, 0xbc, 0xa9, 0x91, 0xea, 0xab, 0x1a, 0x41, 0x3f, 0xb8, 0xc0, 0x0c, 0xde, 0xd4, + 0x88, 0xc4, 0xeb, 0x87, 0x2d, 0x26, 0xc8, 0x59, 0xef, 0x5e, 0x60, 0x83, 0x96, 0xf4, 0x1f, 0xb5, + 0x70, 0x0e, 0xd2, 0x9b, 0x35, 0x13, 0xbd, 0xc7, 0xad, 0xb1, 0x14, 0x45, 0x3f, 0x46, 0x8c, 0xd8, + 0xd6, 0x4d, 0xf4, 0x13, 0x46, 0xcc, 0x9a, 0x9d, 0x56, 0x5d, 0x47, 0x4f, 0xb0, 0xc1, 0x5d, 0xd3, + 0x9b, 0x0d, 0xdd, 0x24, 0xb7, 0xd1, 0x4f, 0xb9, 0xf8, 0x6b, 0xed, 0xa6, 0x81, 0xde, 0x47, 0xb8, + 0x04, 0xa0, 0xbf, 0xde, 0x22, 0x7a, 0xbb, 0x5d, 0x6b, 0x1a, 0xe8, 0xe9, 0xb5, 0x6d, 0x40, 0xc7, + 0xcb, 0x01, 0x73, 0xa0, 0x63, 0x5c, 0x37, 0x9a, 0xb7, 0x0c, 0x74, 0x86, 0x75, 0x5a, 0x44, 0x6f, + 0x69, 0x44, 0x47, 0x0a, 0x06, 0x98, 0x11, 0x0f, 0xb6, 0x50, 0x0a, 0xcf, 0x41, 0x8e, 0x34, 0xeb, + 0xf5, 0x4d, 0xad, 0x7a, 0x1d, 0xa5, 0x37, 0x17, 0x60, 0xde, 0xf1, 0xd6, 0xef, 0x3a, 0x21, 0x0d, + 0x02, 0xf1, 0xf4, 0x75, 0x67, 0x86, 0xff, 0x5c, 0xfc, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb1, + 0xdd, 0x2d, 0x9d, 0x34, 0x2b, 0x00, 0x00, } diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index 954e780efac..b61dc4078b7 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -252,7 +252,7 @@ func (qre *QueryExecutor) execDmlAutoCommit() (reply *sqltypes.Result, err error } func (qre *QueryExecutor) execAsTransaction(f func(conn *TxConnection) (*sqltypes.Result, error)) (reply *sqltypes.Result, err error) { - conn, err := qre.tsv.te.txPool.LocalBegin(qre.ctx, qre.options.GetClientFoundRows()) + conn, err := qre.tsv.te.txPool.LocalBegin(qre.ctx, qre.options.GetClientFoundRows(), qre.options.GetTransactionIsolation()) if err != nil { return nil, err } diff --git a/go/vt/vttablet/tabletserver/query_executor_test.go b/go/vt/vttablet/tabletserver/query_executor_test.go index f4cd18584bd..28396b30f3b 100644 --- a/go/vt/vttablet/tabletserver/query_executor_test.go +++ b/go/vt/vttablet/tabletserver/query_executor_test.go @@ -79,7 +79,7 @@ func TestQueryExecutorPlanPassDmlRBR(t *testing.T) { // RBR mode tsv := newTestTabletServer(ctx, noFlags, db) defer tsv.StopService() - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query, txid) tsv.qe.binlogFormat = connpool.BinlogFormatRow checkPlanID(t, planbuilder.PlanPassDML, qre.plan.PlanID) @@ -144,7 +144,7 @@ func TestQueryExecutorPlanPassDmlReplaceInto(t *testing.T) { // RBR mode tsv := newTestTabletServer(ctx, noFlags, db) defer tsv.StopService() - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query, txid) tsv.qe.binlogFormat = connpool.BinlogFormatRow checkPlanID(t, planbuilder.PlanPassDML, qre.plan.PlanID) @@ -251,7 +251,7 @@ func TestQueryExecutorPlanInsertMessage(t *testing.T) { t.Errorf("rows:\n%+v, want\n%+v", mr, wantqr) } - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre = newTestQueryExecutor(ctx, tsv, query, txid) defer testCommitHelper(t, tsv, qre) got, err = qre.Execute() @@ -357,7 +357,7 @@ func TestQueryExecutorPlanInsertSubQuery(t *testing.T) { db.AddQuery(insertQuery, &sqltypes.Result{}) ctx := context.Background() tsv := newTestTabletServer(ctx, noFlags, db) - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query, txid) defer tsv.StopService() @@ -402,7 +402,7 @@ func TestQueryExecutorPlanInsertSubQueryRBR(t *testing.T) { db.AddQuery(insertQuery, &sqltypes.Result{}) ctx := context.Background() tsv := newTestTabletServer(ctx, noFlags, db) - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query, txid) tsv.qe.binlogFormat = connpool.BinlogFormatRow @@ -431,7 +431,7 @@ func TestQueryExecutorPlanUpsertPk(t *testing.T) { query := "insert into test_table(pk) values(1) on duplicate key update val=1" ctx := context.Background() tsv := newTestTabletServer(ctx, noFlags, db) - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query, txid) defer tsv.StopService() defer testCommitHelper(t, tsv, qre) @@ -450,7 +450,7 @@ func TestQueryExecutorPlanUpsertPk(t *testing.T) { } db.AddRejectedQuery("insert into test_table(pk) values (1) /* _stream test_table (pk ) (1 ); */", errRejected) - txid = newTransaction(tsv) + txid = newTransaction(tsv, nil) qre = newTestQueryExecutor(ctx, tsv, query, txid) defer testCommitHelper(t, tsv, qre) _, err = qre.Execute() @@ -467,7 +467,7 @@ func TestQueryExecutorPlanUpsertPk(t *testing.T) { mysql.NewSQLError(mysql.ERDupEntry, mysql.SSDupKey, "err"), ) db.AddQuery("update test_table(pk) set val = 1 where pk in (1) /* _stream test_table (pk ) (1 ); */", &sqltypes.Result{}) - txid = newTransaction(tsv) + txid = newTransaction(tsv, nil) qre = newTestQueryExecutor(ctx, tsv, query, txid) defer testCommitHelper(t, tsv, qre) _, err = qre.Execute() @@ -488,7 +488,7 @@ func TestQueryExecutorPlanUpsertPk(t *testing.T) { "update test_table set val = 1 where pk in (1) /* _stream test_table (pk ) (1 ); */", &sqltypes.Result{RowsAffected: 1}, ) - txid = newTransaction(tsv) + txid = newTransaction(tsv, nil) qre = newTestQueryExecutor(ctx, tsv, query, txid) defer testCommitHelper(t, tsv, qre) got, err = qre.Execute() @@ -516,7 +516,7 @@ func TestQueryExecutorPlanUpsertPk(t *testing.T) { "update test_table set pk = 2 where pk in (1) /* _stream test_table (pk ) (1 ) (2 ); */", &sqltypes.Result{RowsAffected: 1}, ) - txid = newTransaction(tsv) + txid = newTransaction(tsv, nil) qre = newTestQueryExecutor(ctx, tsv, "insert into test_table(pk) values (1) on duplicate key update pk=2", txid) defer testCommitHelper(t, tsv, qre) got, err = qre.Execute() @@ -545,7 +545,7 @@ func TestQueryExecutorPlanUpsertPkSingleUnique(t *testing.T) { want := &sqltypes.Result{} ctx := context.Background() tsv := newTestTabletServer(ctx, noFlags, db) - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query[0:strings.Index(query, " /*")], txid) defer tsv.StopService() defer testCommitHelper(t, tsv, qre) @@ -569,7 +569,7 @@ func TestQueryExecutorPlanUpsertPkSingleUnique(t *testing.T) { want = &sqltypes.Result{} ctx = context.Background() tsv = newTestTabletServer(ctx, noFlags, db) - txid = newTransaction(tsv) + txid = newTransaction(tsv, nil) qre = newTestQueryExecutor(ctx, tsv, query[0:strings.Index(query, " /*")], txid) defer testCommitHelper(t, tsv, qre) checkPlanID(t, planbuilder.PlanInsertPK, qre.plan.PlanID) @@ -592,7 +592,7 @@ func TestQueryExecutorPlanUpsertPkSingleUnique(t *testing.T) { want = &sqltypes.Result{} ctx = context.Background() tsv = newTestTabletServer(ctx, noFlags, db) - txid = newTransaction(tsv) + txid = newTransaction(tsv, nil) qre = newTestQueryExecutor(ctx, tsv, query[0:strings.Index(query, " /*")], txid) defer testCommitHelper(t, tsv, qre) checkPlanID(t, planbuilder.PlanInsertPK, qre.plan.PlanID) @@ -614,7 +614,7 @@ func TestQueryExecutorPlanUpsertPkSingleUnique(t *testing.T) { want = &sqltypes.Result{} ctx = context.Background() tsv = newTestTabletServer(ctx, noFlags, db) - txid = newTransaction(tsv) + txid = newTransaction(tsv, nil) qre = newTestQueryExecutor(ctx, tsv, query[0:strings.Index(query, " /*")], txid) defer testCommitHelper(t, tsv, qre) checkPlanID(t, planbuilder.PlanInsertPK, qre.plan.PlanID) @@ -641,7 +641,7 @@ func TestQueryExecutorPlanUpsertPkRBR(t *testing.T) { want := &sqltypes.Result{} ctx := context.Background() tsv := newTestTabletServer(ctx, noFlags, db) - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query, txid) tsv.qe.binlogFormat = connpool.BinlogFormatRow defer tsv.StopService() @@ -726,7 +726,37 @@ func TestQueryExecutorPlanDmlPk(t *testing.T) { db.AddQuery(query, want) ctx := context.Background() tsv := newTestTabletServer(ctx, noFlags, db) - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) + qre := newTestQueryExecutor(ctx, tsv, query, txid) + defer tsv.StopService() + defer testCommitHelper(t, tsv, qre) + checkPlanID(t, planbuilder.PlanDMLPK, qre.plan.PlanID) + got, err := qre.Execute() + if err != nil { + t.Fatalf("qre.Execute() = %v, want nil", err) + } + if !reflect.DeepEqual(got, want) { + t.Fatalf("got: %v, want: %v", got, want) + } + wantqueries := []string{"update test_table set name = 2 where pk in (1) /* _stream test_table (pk ) (1 ); */"} + gotqueries := fetchRecordedQueries(qre) + if !reflect.DeepEqual(gotqueries, wantqueries) { + t.Errorf("queries: %v, want %v", gotqueries, wantqueries) + } +} + +func TestQueryExecutorPlanDmlPkTransactionIsolation(t *testing.T) { + db := setUpQueryExecutorTest(t) + defer db.Close() + query := "update test_table set name = 2 where pk in (1) /* _stream test_table (pk ) (1 ); */" + want := &sqltypes.Result{} + db.AddQuery(query, want) + ctx := context.Background() + tsv := newTestTabletServer(ctx, noFlags, db) + db.AddQuery("set transaction isolation level SERIALIZABLE", &sqltypes.Result{}) + txid := newTransaction(tsv, &querypb.ExecuteOptions{ + TransactionIsolation: querypb.ExecuteOptions_SERIALIZABLE, + }) qre := newTestQueryExecutor(ctx, tsv, query, txid) defer tsv.StopService() defer testCommitHelper(t, tsv, qre) @@ -755,7 +785,7 @@ func TestQueryExecutorPlanDmlPkRBR(t *testing.T) { db.AddQuery(query, want) ctx := context.Background() tsv := newTestTabletServer(ctx, noFlags, db) - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query, txid) tsv.qe.binlogFormat = connpool.BinlogFormatRow defer tsv.StopService() @@ -794,7 +824,7 @@ func TestQueryExecutorPlanDmlMessage(t *testing.T) { db.AddQuery("update msg set time_acked = 2, time_next = null where (time_scheduled = 12 and id = 1) /* _stream msg (time_scheduled id ) (12 1 ); */", want) ctx := context.Background() tsv := newTestTabletServer(ctx, noFlags, db) - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query, txid) defer tsv.StopService() defer testCommitHelper(t, tsv, qre) @@ -834,6 +864,32 @@ func TestQueryExecutorPlanDmlAutoCommit(t *testing.T) { } } +func TestQueryExecutorPlanDmlAutoCommitTransactionIsolation(t *testing.T) { + db := setUpQueryExecutorTest(t) + defer db.Close() + query := "update test_table set name = 2 where pk in (1) /* _stream test_table (pk ) (1 ); */" + want := &sqltypes.Result{} + db.AddQuery(query, want) + ctx := context.Background() + tsv := newTestTabletServer(ctx, noFlags, db) + qre := newTestQueryExecutor(ctx, tsv, query, 0) + + qre.options = &querypb.ExecuteOptions{ + TransactionIsolation: querypb.ExecuteOptions_READ_UNCOMMITTED, + } + db.AddQuery("set transaction isolation level READ UNCOMMITTED", &sqltypes.Result{}) + + defer tsv.StopService() + checkPlanID(t, planbuilder.PlanDMLPK, qre.plan.PlanID) + got, err := qre.Execute() + if err != nil { + t.Fatalf("qre.Execute() = %v, want nil", err) + } + if !reflect.DeepEqual(got, want) { + t.Fatalf("got: %v, want: %v", got, want) + } +} + func TestQueryExecutorPlanDmlSubQuery(t *testing.T) { db := setUpQueryExecutorTest(t) defer db.Close() @@ -854,7 +910,7 @@ func TestQueryExecutorPlanDmlSubQuery(t *testing.T) { db.AddQuery(updateQuery, want) ctx := context.Background() tsv := newTestTabletServer(ctx, noFlags, db) - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query, txid) defer tsv.StopService() defer testCommitHelper(t, tsv, qre) @@ -895,7 +951,7 @@ func TestQueryExecutorPlanDmlSubQueryRBR(t *testing.T) { db.AddQuery(updateQuery, want) ctx := context.Background() tsv := newTestTabletServer(ctx, noFlags, db) - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query, txid) tsv.qe.binlogFormat = connpool.BinlogFormatRow defer tsv.StopService() @@ -947,7 +1003,7 @@ func TestQueryExecutorPlanOtherWithinATransaction(t *testing.T) { db.AddQuery(query, want) ctx := context.Background() tsv := newTestTabletServer(ctx, noFlags, db) - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query, txid) defer tsv.StopService() defer testCommitHelper(t, tsv, qre) @@ -984,7 +1040,7 @@ func TestQueryExecutorPlanPassSelectWithInATransaction(t *testing.T) { }) ctx := context.Background() tsv := newTestTabletServer(ctx, noFlags, db) - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre := newTestQueryExecutor(ctx, tsv, query, txid) defer tsv.StopService() defer testCommitHelper(t, tsv, qre) @@ -1098,7 +1154,7 @@ func TestQueryExecutorPlanSet(t *testing.T) { } // Test inside transaction. - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) qre = newTestQueryExecutor(ctx, tsv, setQuery, txid) got, err = qre.Execute() if err != nil { @@ -1793,8 +1849,8 @@ func newTestTabletServer(ctx context.Context, flags executorFlags, db *fakesqldb return tsv } -func newTransaction(tsv *TabletServer) int64 { - transactionID, err := tsv.Begin(context.Background(), &tsv.target, nil) +func newTransaction(tsv *TabletServer, options *querypb.ExecuteOptions) int64 { + transactionID, err := tsv.Begin(context.Background(), &tsv.target, options) if err != nil { panic(fmt.Errorf("failed to start a transaction: %v", err)) } diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 2cc6dd7f6cd..25b884b23ca 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -652,7 +652,7 @@ func (tsv *TabletServer) Begin(ctx context.Context, target *querypb.Target, opti // TODO(erez): I think this should be RESOURCE_EXHAUSTED. return vterrors.Errorf(vtrpcpb.Code_UNAVAILABLE, "Transaction throttled") } - transactionID, err = tsv.te.txPool.Begin(ctx, options.GetClientFoundRows()) + transactionID, err = tsv.te.txPool.Begin(ctx, options.GetClientFoundRows(), options.GetTransactionIsolation()) logStats.TransactionID = transactionID return err }, diff --git a/go/vt/vttablet/tabletserver/tx_engine.go b/go/vt/vttablet/tabletserver/tx_engine.go index 30b7c6913f8..7f470d0418c 100644 --- a/go/vt/vttablet/tabletserver/tx_engine.go +++ b/go/vt/vttablet/tabletserver/tx_engine.go @@ -27,6 +27,7 @@ import ( "github.com/youtube/vitess/go/vt/concurrency" "github.com/youtube/vitess/go/vt/dbconfigs" "github.com/youtube/vitess/go/vt/dtids" + "github.com/youtube/vitess/go/vt/proto/query" "github.com/youtube/vitess/go/vt/vtgate/vtgateconn" "github.com/youtube/vitess/go/vt/vttablet/tabletserver/connpool" "github.com/youtube/vitess/go/vt/vttablet/tabletserver/tabletenv" @@ -203,7 +204,7 @@ outer: if txid > maxid { maxid = txid } - conn, err := te.txPool.LocalBegin(ctx, false) + conn, err := te.txPool.LocalBegin(ctx, false, query.ExecuteOptions_DEFAULT) if err != nil { allErr.RecordError(err) continue diff --git a/go/vt/vttablet/tabletserver/tx_engine_test.go b/go/vt/vttablet/tabletserver/tx_engine_test.go index 0f1d5f0e665..38c3a66e5c9 100644 --- a/go/vt/vttablet/tabletserver/tx_engine_test.go +++ b/go/vt/vttablet/tabletserver/tx_engine_test.go @@ -22,6 +22,7 @@ import ( "github.com/youtube/vitess/go/vt/vttablet/tabletserver/tabletenv" + querypb "github.com/youtube/vitess/go/vt/proto/query" "golang.org/x/net/context" ) @@ -47,7 +48,7 @@ func TestTxEngineClose(t *testing.T) { // Normal close with timeout wait. te.Open(dbconfigs) - c, err := te.txPool.LocalBegin(ctx, false) + c, err := te.txPool.LocalBegin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } @@ -60,7 +61,7 @@ func TestTxEngineClose(t *testing.T) { // Immediate close. te.Open(dbconfigs) - c, err = te.txPool.LocalBegin(ctx, false) + c, err = te.txPool.LocalBegin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } @@ -74,7 +75,7 @@ func TestTxEngineClose(t *testing.T) { // Normal close with short grace period. te.shutdownGracePeriod = 250 * time.Millisecond te.Open(dbconfigs) - c, err = te.txPool.LocalBegin(ctx, false) + c, err = te.txPool.LocalBegin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } @@ -91,7 +92,7 @@ func TestTxEngineClose(t *testing.T) { // Normal close with short grace period, but pool gets empty early. te.shutdownGracePeriod = 250 * time.Millisecond te.Open(dbconfigs) - c, err = te.txPool.LocalBegin(ctx, false) + c, err = te.txPool.LocalBegin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } @@ -115,7 +116,7 @@ func TestTxEngineClose(t *testing.T) { // Immediate close, but connection is in use. te.Open(dbconfigs) - c, err = te.txPool.LocalBegin(ctx, false) + c, err = te.txPool.LocalBegin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } diff --git a/go/vt/vttablet/tabletserver/tx_executor.go b/go/vt/vttablet/tabletserver/tx_executor.go index 300f1043527..26a1d2f808d 100644 --- a/go/vt/vttablet/tabletserver/tx_executor.go +++ b/go/vt/vttablet/tabletserver/tx_executor.go @@ -68,7 +68,7 @@ func (txe *TxExecutor) Prepare(transactionID int64, dtid string) error { return vterrors.Errorf(vtrpcpb.Code_RESOURCE_EXHAUSTED, "prepare failed for transaction %d: %v", transactionID, err) } - localConn, err := txe.te.txPool.LocalBegin(txe.ctx, false) + localConn, err := txe.te.txPool.LocalBegin(txe.ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { return err } @@ -130,7 +130,7 @@ func (txe *TxExecutor) CommitPrepared(dtid string) error { func (txe *TxExecutor) markFailed(ctx context.Context, dtid string) { tabletenv.InternalErrors.Add("TwopcCommit", 1) txe.te.preparedPool.SetFailed(dtid) - conn, err := txe.te.txPool.LocalBegin(ctx, false) + conn, err := txe.te.txPool.LocalBegin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { log.Errorf("markFailed: Begin failed for dtid %s: %v", dtid, err) return @@ -170,7 +170,7 @@ func (txe *TxExecutor) RollbackPrepared(dtid string, originalID int64) error { return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "2pc is not enabled") } defer tabletenv.QueryStats.Record("ROLLBACK_PREPARED", time.Now()) - conn, err := txe.te.txPool.LocalBegin(txe.ctx, false) + conn, err := txe.te.txPool.LocalBegin(txe.ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { goto returnConn } @@ -200,7 +200,7 @@ func (txe *TxExecutor) CreateTransaction(dtid string, participants []*querypb.Ta return vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "2pc is not enabled") } defer tabletenv.QueryStats.Record("CREATE_TRANSACTION", time.Now()) - conn, err := txe.te.txPool.LocalBegin(txe.ctx, false) + conn, err := txe.te.txPool.LocalBegin(txe.ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { return err } @@ -248,7 +248,7 @@ func (txe *TxExecutor) SetRollback(dtid string, transactionID int64) error { txe.te.txPool.Rollback(txe.ctx, transactionID) } - conn, err := txe.te.txPool.LocalBegin(txe.ctx, false) + conn, err := txe.te.txPool.LocalBegin(txe.ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { return err } @@ -275,7 +275,7 @@ func (txe *TxExecutor) ConcludeTransaction(dtid string) error { } defer tabletenv.QueryStats.Record("RESOLVE", time.Now()) - conn, err := txe.te.txPool.LocalBegin(txe.ctx, false) + conn, err := txe.te.txPool.LocalBegin(txe.ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { return err } diff --git a/go/vt/vttablet/tabletserver/tx_executor_test.go b/go/vt/vttablet/tabletserver/tx_executor_test.go index 07c9ee458e9..2e4a0f503ec 100644 --- a/go/vt/vttablet/tabletserver/tx_executor_test.go +++ b/go/vt/vttablet/tabletserver/tx_executor_test.go @@ -41,7 +41,7 @@ func TestTxExecutorEmptyPrepare(t *testing.T) { txe, tsv, db := newTestTxExecutor(t) defer db.Close() defer tsv.StopService() - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) err := txe.Prepare(txid, "aa") if err != nil { t.Error(err) @@ -616,7 +616,7 @@ func newNoTwopcExecutor(t *testing.T) (txe *TxExecutor, tsv *TabletServer, db *f // newTxForPrep creates a non-empty transaction. func newTxForPrep(tsv *TabletServer) int64 { - txid := newTransaction(tsv) + txid := newTransaction(tsv, nil) target := querypb.Target{TabletType: topodatapb.TabletType_MASTER} _, err := tsv.Execute(context.Background(), &target, "update test_table set name = 2 where pk = 1", nil, txid, nil) if err != nil { diff --git a/go/vt/vttablet/tabletserver/tx_pool.go b/go/vt/vttablet/tabletserver/tx_pool.go index 803e4ba0ef3..2483cbc01a9 100644 --- a/go/vt/vttablet/tabletserver/tx_pool.go +++ b/go/vt/vttablet/tabletserver/tx_pool.go @@ -56,6 +56,13 @@ const txLogInterval = time.Duration(1 * time.Minute) var ( txOnce sync.Once txStats = stats.NewTimings("Transactions") + + txIsolations = map[querypb.ExecuteOptions_TransactionIsolation]string{ + querypb.ExecuteOptions_REPEATABLE_READ: "set transaction isolation level REPEATABLE READ", + querypb.ExecuteOptions_READ_COMMITTED: "set transaction isolation level READ COMMITTED", + querypb.ExecuteOptions_READ_UNCOMMITTED: "set transaction isolation level READ UNCOMMITTED", + querypb.ExecuteOptions_SERIALIZABLE: "set transaction isolation level SERIALIZABLE", + } ) // TxPool is the transaction pool for the query service. @@ -164,7 +171,7 @@ func (axp *TxPool) WaitForEmpty() { // Begin begins a transaction, and returns the associated transaction id. // Subsequent statements can access the connection through the transaction id. -func (axp *TxPool) Begin(ctx context.Context, useFoundRows bool) (int64, error) { +func (axp *TxPool) Begin(ctx context.Context, useFoundRows bool, txIsolation querypb.ExecuteOptions_TransactionIsolation) (int64, error) { var conn *connpool.DBConn var err error if useFoundRows { @@ -182,6 +189,14 @@ func (axp *TxPool) Begin(ctx context.Context, useFoundRows bool) (int64, error) } return 0, err } + + if query, ok := txIsolations[txIsolation]; ok { + if _, err := conn.Exec(ctx, query, 1, false); err != nil { + conn.Recycle() + return 0, err + } + } + if _, err := conn.Exec(ctx, "begin", 1, false); err != nil { conn.Recycle() return 0, err @@ -231,8 +246,8 @@ func (axp *TxPool) Get(transactionID int64, reason string) (*TxConnection, error // LocalBegin is equivalent to Begin->Get. // It's used for executing transactions within a request. It's safe // to always call LocalConclude at the end. -func (axp *TxPool) LocalBegin(ctx context.Context, useFoundRows bool) (*TxConnection, error) { - transactionID, err := axp.Begin(ctx, useFoundRows) +func (axp *TxPool) LocalBegin(ctx context.Context, useFoundRows bool, txIsolation querypb.ExecuteOptions_TransactionIsolation) (*TxConnection, error) { + transactionID, err := axp.Begin(ctx, useFoundRows, txIsolation) if err != nil { return nil, err } diff --git a/go/vt/vttablet/tabletserver/tx_pool_test.go b/go/vt/vttablet/tabletserver/tx_pool_test.go index 726ec25ddbb..84b3fc58f49 100644 --- a/go/vt/vttablet/tabletserver/tx_pool_test.go +++ b/go/vt/vttablet/tabletserver/tx_pool_test.go @@ -31,6 +31,7 @@ import ( "github.com/youtube/vitess/go/vt/vterrors" "github.com/youtube/vitess/go/vt/vttablet/tabletserver/tabletenv" + querypb "github.com/youtube/vitess/go/vt/proto/query" vtrpcpb "github.com/youtube/vitess/go/vt/proto/vtrpc" ) @@ -46,7 +47,7 @@ func TestTxPoolExecuteRollback(t *testing.T) { txPool.Open(db.ConnParams(), db.ConnParams(), db.ConnParams()) defer txPool.Close() ctx := context.Background() - transactionID, err := txPool.Begin(ctx, false) + transactionID, err := txPool.Begin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } @@ -73,11 +74,11 @@ func TestTxPoolRollbackNonBusy(t *testing.T) { txPool.Open(db.ConnParams(), db.ConnParams(), db.ConnParams()) defer txPool.Close() ctx := context.Background() - txid1, err := txPool.Begin(ctx, false) + txid1, err := txPool.Begin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } - _, err = txPool.Begin(ctx, false) + _, err = txPool.Begin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } @@ -112,7 +113,7 @@ func TestTxPoolTransactionKiller(t *testing.T) { defer txPool.Close() ctx := context.Background() killCount := tabletenv.KillStats.Counts()["Transactions"] - transactionID, err := txPool.Begin(ctx, false) + transactionID, err := txPool.Begin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } @@ -143,7 +144,7 @@ func TestTxPoolClientRowsFound(t *testing.T) { // Start a 'normal' transaction. It should take a connection // for the normal 'conns' pool. - id1, err := txPool.Begin(ctx, false) + id1, err := txPool.Begin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } @@ -156,7 +157,7 @@ func TestTxPoolClientRowsFound(t *testing.T) { // Start a 'foundRows' transaction. It should take a connection // from the foundRows pool. - id2, err := txPool.Begin(ctx, true) + id2, err := txPool.Begin(ctx, true, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } @@ -188,6 +189,27 @@ func TestTxPoolClientRowsFound(t *testing.T) { } } +func TestTxPoolTransactionIsolation(t *testing.T) { + db := fakesqldb.New(t) + defer db.Close() + db.AddQuery("begin", &sqltypes.Result{}) + txPool := newTxPool() + txPool.Open(db.ConnParams(), db.ConnParams(), db.ConnParams()) + ctx := context.Background() + + // Start a transaction with default. It should not change isolation. + _, err := txPool.Begin(ctx, false, querypb.ExecuteOptions_DEFAULT) + if err != nil { + t.Fatal(err) + } + + db.AddQuery("set transaction isolation level READ COMMITTED", &sqltypes.Result{}) + _, err = txPool.Begin(ctx, false, querypb.ExecuteOptions_READ_COMMITTED) + if err != nil { + t.Fatal(err) + } +} + // TestTxPoolBeginWithPoolConnectionError_TransientErrno2006 tests the case // where we see a transient errno 2006 e.g. because MySQL killed the // db connection. DBConn.Exec() is going to reconnect and retry automatically @@ -207,7 +229,7 @@ func TestTxPoolBeginWithPoolConnectionError_Errno2006_Transient(t *testing.T) { } ctx := context.Background() - txConn, err := txPool.LocalBegin(ctx, false) + txConn, err := txPool.LocalBegin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatalf("Begin should have succeeded after the retry in DBConn.Exec(): %v", err) } @@ -238,7 +260,7 @@ func TestTxPoolBeginWithPoolConnectionError_Errno2006_Permanent(t *testing.T) { // After that, vttablet will automatically try to reconnect and this fail. // DBConn.Exec() will return the reconnect error as final error and not the // initial connection error. - _, err = txPool.LocalBegin(context.Background(), false) + _, err = txPool.LocalBegin(context.Background(), false, querypb.ExecuteOptions_DEFAULT) if err == nil || !strings.Contains(err.Error(), "(errno 2013)") { t.Fatalf("Begin did not return the reconnect error: %v", err) } @@ -264,7 +286,7 @@ func TestTxPoolBeginWithPoolConnectionError_Errno2013(t *testing.T) { db.EnableShouldClose() // 2013 is not retryable. DBConn.Exec() fails after the first attempt. - _, err = txPool.Begin(context.Background(), false) + _, err = txPool.Begin(context.Background(), false, querypb.ExecuteOptions_DEFAULT) if err == nil || !strings.Contains(err.Error(), "(errno 2013)") { t.Fatalf("Begin must return connection error with MySQL errno 2013: %v", err) } @@ -287,7 +309,7 @@ func primeTxPoolWithConnection(t *testing.T) (*fakesqldb.DB, *TxPool, error) { db.AddQuery("begin", &sqltypes.Result{}) db.AddQuery("rollback", &sqltypes.Result{}) ctx := context.Background() - txConn, err := txPool.LocalBegin(ctx, false) + txConn, err := txPool.LocalBegin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { return nil, nil, err } @@ -304,7 +326,7 @@ func TestTxPoolBeginWithError(t *testing.T) { txPool.Open(db.ConnParams(), db.ConnParams(), db.ConnParams()) defer txPool.Close() ctx := context.Background() - _, err := txPool.Begin(ctx, false) + _, err := txPool.Begin(ctx, false, querypb.ExecuteOptions_DEFAULT) want := "error: rejected" if err == nil || !strings.Contains(err.Error(), want) { t.Errorf("Begin: %v, want %s", err, want) @@ -326,7 +348,7 @@ func TestTxPoolRollbackFail(t *testing.T) { txPool.Open(db.ConnParams(), db.ConnParams(), db.ConnParams()) defer txPool.Close() ctx := context.Background() - transactionID, err := txPool.Begin(ctx, false) + transactionID, err := txPool.Begin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } @@ -371,7 +393,7 @@ func TestTxPoolExecFailDueToConnFail_Errno2006(t *testing.T) { ctx := context.Background() // Start the transaction. - txConn, err := txPool.LocalBegin(ctx, false) + txConn, err := txPool.LocalBegin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } @@ -409,7 +431,7 @@ func TestTxPoolExecFailDueToConnFail_Errno2013(t *testing.T) { ctx := context.Background() // Start the transaction. - txConn, err := txPool.LocalBegin(ctx, false) + txConn, err := txPool.LocalBegin(ctx, false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } @@ -440,7 +462,7 @@ func TestTxPoolCloseKillsStrayTransactions(t *testing.T) { txPool.Open(db.ConnParams(), db.ConnParams(), db.ConnParams()) // Start stray transaction. - _, err := txPool.Begin(context.Background(), false) + _, err := txPool.Begin(context.Background(), false, querypb.ExecuteOptions_DEFAULT) if err != nil { t.Fatal(err) } diff --git a/proto/query.proto b/proto/query.proto index 2b1852e0ee9..8eb02c81a9d 100644 --- a/proto/query.proto +++ b/proto/query.proto @@ -277,6 +277,16 @@ message ExecuteOptions { // sql_select_limit sets an implicit limit on all select statements. Since // vitess also sets a rowcount limit on queries, the smallest value wins. int64 sql_select_limit = 8; + + enum TransactionIsolation { + DEFAULT = 0; + REPEATABLE_READ = 1; + READ_COMMITTED = 2; + READ_UNCOMMITTED = 3; + SERIALIZABLE = 4; + } + + TransactionIsolation transaction_isolation = 9; } // Field describes a single column returned by a query diff --git a/py/vtproto/query_pb2.py b/py/vtproto/query_pb2.py index 1cf8abe167b..04b08fe0e4b 100644 --- a/py/vtproto/query_pb2.py +++ b/py/vtproto/query_pb2.py @@ -22,7 +22,7 @@ name='query.proto', package='query', syntax='proto3', - serialized_pb=_b('\n\x0bquery.proto\x12\x05query\x1a\x0etopodata.proto\x1a\x0bvtrpc.proto\"T\n\x06Target\x12\x10\n\x08keyspace\x18\x01 \x01(\t\x12\r\n\x05shard\x18\x02 \x01(\t\x12)\n\x0btablet_type\x18\x03 \x01(\x0e\x32\x14.topodata.TabletType\"2\n\x0eVTGateCallerID\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x0e\n\x06groups\x18\x02 \x03(\t\"@\n\nEventToken\x12\x11\n\ttimestamp\x18\x01 \x01(\x03\x12\r\n\x05shard\x18\x02 \x01(\t\x12\x10\n\x08position\x18\x03 \x01(\t\"1\n\x05Value\x12\x19\n\x04type\x18\x01 \x01(\x0e\x32\x0b.query.Type\x12\r\n\x05value\x18\x02 \x01(\x0c\"V\n\x0c\x42indVariable\x12\x19\n\x04type\x18\x01 \x01(\x0e\x32\x0b.query.Type\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x1c\n\x06values\x18\x03 \x03(\x0b\x32\x0c.query.Value\"\xa2\x01\n\nBoundQuery\x12\x0b\n\x03sql\x18\x01 \x01(\t\x12<\n\x0e\x62ind_variables\x18\x02 \x03(\x0b\x32$.query.BoundQuery.BindVariablesEntry\x1aI\n\x12\x42indVariablesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.query.BindVariable:\x02\x38\x01\"\x80\x03\n\x0e\x45xecuteOptions\x12\x1b\n\x13include_event_token\x18\x02 \x01(\x08\x12.\n\x13\x63ompare_event_token\x18\x03 \x01(\x0b\x32\x11.query.EventToken\x12=\n\x0fincluded_fields\x18\x04 \x01(\x0e\x32$.query.ExecuteOptions.IncludedFields\x12\x19\n\x11\x63lient_found_rows\x18\x05 \x01(\x08\x12\x30\n\x08workload\x18\x06 \x01(\x0e\x32\x1e.query.ExecuteOptions.Workload\x12\x18\n\x10sql_select_limit\x18\x08 \x01(\x03\";\n\x0eIncludedFields\x12\x11\n\rTYPE_AND_NAME\x10\x00\x12\r\n\tTYPE_ONLY\x10\x01\x12\x07\n\x03\x41LL\x10\x02\"8\n\x08Workload\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x08\n\x04OLTP\x10\x01\x12\x08\n\x04OLAP\x10\x02\x12\x07\n\x03\x44\x42\x41\x10\x03J\x04\x08\x01\x10\x02\"\xbf\x01\n\x05\x46ield\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x19\n\x04type\x18\x02 \x01(\x0e\x32\x0b.query.Type\x12\r\n\x05table\x18\x03 \x01(\t\x12\x11\n\torg_table\x18\x04 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x05 \x01(\t\x12\x10\n\x08org_name\x18\x06 \x01(\t\x12\x15\n\rcolumn_length\x18\x07 \x01(\r\x12\x0f\n\x07\x63harset\x18\x08 \x01(\r\x12\x10\n\x08\x64\x65\x63imals\x18\t \x01(\r\x12\r\n\x05\x66lags\x18\n \x01(\r\"&\n\x03Row\x12\x0f\n\x07lengths\x18\x01 \x03(\x12\x12\x0e\n\x06values\x18\x02 \x01(\x0c\"G\n\x0cResultExtras\x12&\n\x0b\x65vent_token\x18\x01 \x01(\x0b\x32\x11.query.EventToken\x12\x0f\n\x07\x66resher\x18\x02 \x01(\x08\"\x94\x01\n\x0bQueryResult\x12\x1c\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x0c.query.Field\x12\x15\n\rrows_affected\x18\x02 \x01(\x04\x12\x11\n\tinsert_id\x18\x03 \x01(\x04\x12\x18\n\x04rows\x18\x04 \x03(\x0b\x32\n.query.Row\x12#\n\x06\x65xtras\x18\x05 \x01(\x0b\x32\x13.query.ResultExtras\"\xca\x02\n\x0bStreamEvent\x12\x30\n\nstatements\x18\x01 \x03(\x0b\x32\x1c.query.StreamEvent.Statement\x12&\n\x0b\x65vent_token\x18\x02 \x01(\x0b\x32\x11.query.EventToken\x1a\xe0\x01\n\tStatement\x12\x37\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32%.query.StreamEvent.Statement.Category\x12\x12\n\ntable_name\x18\x02 \x01(\t\x12(\n\x12primary_key_fields\x18\x03 \x03(\x0b\x32\x0c.query.Field\x12&\n\x12primary_key_values\x18\x04 \x03(\x0b\x32\n.query.Row\x12\x0b\n\x03sql\x18\x05 \x01(\x0c\"\'\n\x08\x43\x61tegory\x12\t\n\x05\x45rror\x10\x00\x12\x07\n\x03\x44ML\x10\x01\x12\x07\n\x03\x44\x44L\x10\x02\"\xf3\x01\n\x0e\x45xecuteRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12\x16\n\x0etransaction_id\x18\x05 \x01(\x03\x12&\n\x07options\x18\x06 \x01(\x0b\x32\x15.query.ExecuteOptions\"5\n\x0f\x45xecuteResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"U\n\x0fResultWithError\x12\x1e\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x0f.vtrpc.RPCError\x12\"\n\x06result\x18\x02 \x01(\x0b\x32\x12.query.QueryResult\"\x92\x02\n\x13\x45xecuteBatchRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\"\n\x07queries\x18\x04 \x03(\x0b\x32\x11.query.BoundQuery\x12\x16\n\x0e\x61s_transaction\x18\x05 \x01(\x08\x12\x16\n\x0etransaction_id\x18\x06 \x01(\x03\x12&\n\x07options\x18\x07 \x01(\x0b\x32\x15.query.ExecuteOptions\";\n\x14\x45xecuteBatchResponse\x12#\n\x07results\x18\x01 \x03(\x0b\x32\x12.query.QueryResult\"\xe1\x01\n\x14StreamExecuteRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12&\n\x07options\x18\x05 \x01(\x0b\x32\x15.query.ExecuteOptions\";\n\x15StreamExecuteResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\xb7\x01\n\x0c\x42\x65ginRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12&\n\x07options\x18\x04 \x01(\x0b\x32\x15.query.ExecuteOptions\"\'\n\rBeginResponse\x12\x16\n\x0etransaction_id\x18\x01 \x01(\x03\"\xa8\x01\n\rCommitRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\"\x10\n\x0e\x43ommitResponse\"\xaa\x01\n\x0fRollbackRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\"\x12\n\x10RollbackResponse\"\xb7\x01\n\x0ePrepareRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x11\n\x0fPrepareResponse\"\xa6\x01\n\x15\x43ommitPreparedRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\"\x18\n\x16\x43ommitPreparedResponse\"\xc0\x01\n\x17RollbackPreparedRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x1a\n\x18RollbackPreparedResponse\"\xce\x01\n\x18\x43reateTransactionRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\x12#\n\x0cparticipants\x18\x05 \x03(\x0b\x32\r.query.Target\"\x1b\n\x19\x43reateTransactionResponse\"\xbb\x01\n\x12StartCommitRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x15\n\x13StartCommitResponse\"\xbb\x01\n\x12SetRollbackRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x15\n\x13SetRollbackResponse\"\xab\x01\n\x1a\x43oncludeTransactionRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\"\x1d\n\x1b\x43oncludeTransactionResponse\"\xa7\x01\n\x16ReadTransactionRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\"G\n\x17ReadTransactionResponse\x12,\n\x08metadata\x18\x01 \x01(\x0b\x32\x1a.query.TransactionMetadata\"\xe0\x01\n\x13\x42\x65ginExecuteRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12&\n\x07options\x18\x05 \x01(\x0b\x32\x15.query.ExecuteOptions\"r\n\x14\x42\x65ginExecuteResponse\x12\x1e\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x0f.vtrpc.RPCError\x12\"\n\x06result\x18\x02 \x01(\x0b\x32\x12.query.QueryResult\x12\x16\n\x0etransaction_id\x18\x03 \x01(\x03\"\xff\x01\n\x18\x42\x65ginExecuteBatchRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\"\n\x07queries\x18\x04 \x03(\x0b\x32\x11.query.BoundQuery\x12\x16\n\x0e\x61s_transaction\x18\x05 \x01(\x08\x12&\n\x07options\x18\x06 \x01(\x0b\x32\x15.query.ExecuteOptions\"x\n\x19\x42\x65ginExecuteBatchResponse\x12\x1e\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x0f.vtrpc.RPCError\x12#\n\x07results\x18\x02 \x03(\x0b\x32\x12.query.QueryResult\x12\x16\n\x0etransaction_id\x18\x03 \x01(\x03\"\xa5\x01\n\x14MessageStreamRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04name\x18\x04 \x01(\t\";\n\x15MessageStreamResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\xbd\x01\n\x11MessageAckRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x19\n\x03ids\x18\x05 \x03(\x0b\x32\x0c.query.Value\"8\n\x12MessageAckResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\xe7\x02\n\x11SplitQueryRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12\x14\n\x0csplit_column\x18\x05 \x03(\t\x12\x13\n\x0bsplit_count\x18\x06 \x01(\x03\x12\x1f\n\x17num_rows_per_query_part\x18\x08 \x01(\x03\x12\x35\n\talgorithm\x18\t \x01(\x0e\x32\".query.SplitQueryRequest.Algorithm\",\n\tAlgorithm\x12\x10\n\x0c\x45QUAL_SPLITS\x10\x00\x12\r\n\tFULL_SCAN\x10\x01\"A\n\nQuerySplit\x12 \n\x05query\x18\x01 \x01(\x0b\x32\x11.query.BoundQuery\x12\x11\n\trow_count\x18\x02 \x01(\x03\"8\n\x12SplitQueryResponse\x12\"\n\x07queries\x18\x01 \x03(\x0b\x32\x11.query.QuerySplit\"\x15\n\x13StreamHealthRequest\"\xb6\x01\n\rRealtimeStats\x12\x14\n\x0chealth_error\x18\x01 \x01(\t\x12\x1d\n\x15seconds_behind_master\x18\x02 \x01(\r\x12\x1c\n\x14\x62inlog_players_count\x18\x03 \x01(\x05\x12\x32\n*seconds_behind_master_filtered_replication\x18\x04 \x01(\x03\x12\x11\n\tcpu_usage\x18\x05 \x01(\x01\x12\x0b\n\x03qps\x18\x06 \x01(\x01\"\xd1\x01\n\x14StreamHealthResponse\x12\x1d\n\x06target\x18\x01 \x01(\x0b\x32\r.query.Target\x12\x0f\n\x07serving\x18\x02 \x01(\x08\x12.\n&tablet_externally_reparented_timestamp\x18\x03 \x01(\x03\x12,\n\x0erealtime_stats\x18\x04 \x01(\x0b\x32\x14.query.RealtimeStats\x12+\n\x0ctablet_alias\x18\x05 \x01(\x0b\x32\x15.topodata.TabletAlias\"\xbb\x01\n\x13UpdateStreamRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x10\n\x08position\x18\x04 \x01(\t\x12\x11\n\ttimestamp\x18\x05 \x01(\x03\"9\n\x14UpdateStreamResponse\x12!\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x12.query.StreamEvent\"\x86\x01\n\x13TransactionMetadata\x12\x0c\n\x04\x64tid\x18\x01 \x01(\t\x12&\n\x05state\x18\x02 \x01(\x0e\x32\x17.query.TransactionState\x12\x14\n\x0ctime_created\x18\x03 \x01(\x03\x12#\n\x0cparticipants\x18\x04 \x03(\x0b\x32\r.query.Target*\x92\x03\n\tMySqlFlag\x12\t\n\x05\x45MPTY\x10\x00\x12\x11\n\rNOT_NULL_FLAG\x10\x01\x12\x10\n\x0cPRI_KEY_FLAG\x10\x02\x12\x13\n\x0fUNIQUE_KEY_FLAG\x10\x04\x12\x15\n\x11MULTIPLE_KEY_FLAG\x10\x08\x12\r\n\tBLOB_FLAG\x10\x10\x12\x11\n\rUNSIGNED_FLAG\x10 \x12\x11\n\rZEROFILL_FLAG\x10@\x12\x10\n\x0b\x42INARY_FLAG\x10\x80\x01\x12\x0e\n\tENUM_FLAG\x10\x80\x02\x12\x18\n\x13\x41UTO_INCREMENT_FLAG\x10\x80\x04\x12\x13\n\x0eTIMESTAMP_FLAG\x10\x80\x08\x12\r\n\x08SET_FLAG\x10\x80\x10\x12\x1a\n\x15NO_DEFAULT_VALUE_FLAG\x10\x80 \x12\x17\n\x12ON_UPDATE_NOW_FLAG\x10\x80@\x12\x0e\n\x08NUM_FLAG\x10\x80\x80\x02\x12\x13\n\rPART_KEY_FLAG\x10\x80\x80\x01\x12\x10\n\nGROUP_FLAG\x10\x80\x80\x02\x12\x11\n\x0bUNIQUE_FLAG\x10\x80\x80\x04\x12\x11\n\x0b\x42INCMP_FLAG\x10\x80\x80\x08\x1a\x02\x10\x01*k\n\x04\x46lag\x12\x08\n\x04NONE\x10\x00\x12\x0f\n\nISINTEGRAL\x10\x80\x02\x12\x0f\n\nISUNSIGNED\x10\x80\x04\x12\x0c\n\x07ISFLOAT\x10\x80\x08\x12\r\n\x08ISQUOTED\x10\x80\x10\x12\x0b\n\x06ISTEXT\x10\x80 \x12\r\n\x08ISBINARY\x10\x80@*\x99\x03\n\x04Type\x12\r\n\tNULL_TYPE\x10\x00\x12\t\n\x04INT8\x10\x81\x02\x12\n\n\x05UINT8\x10\x82\x06\x12\n\n\x05INT16\x10\x83\x02\x12\x0b\n\x06UINT16\x10\x84\x06\x12\n\n\x05INT24\x10\x85\x02\x12\x0b\n\x06UINT24\x10\x86\x06\x12\n\n\x05INT32\x10\x87\x02\x12\x0b\n\x06UINT32\x10\x88\x06\x12\n\n\x05INT64\x10\x89\x02\x12\x0b\n\x06UINT64\x10\x8a\x06\x12\x0c\n\x07\x46LOAT32\x10\x8b\x08\x12\x0c\n\x07\x46LOAT64\x10\x8c\x08\x12\x0e\n\tTIMESTAMP\x10\x8d\x10\x12\t\n\x04\x44\x41TE\x10\x8e\x10\x12\t\n\x04TIME\x10\x8f\x10\x12\r\n\x08\x44\x41TETIME\x10\x90\x10\x12\t\n\x04YEAR\x10\x91\x06\x12\x0b\n\x07\x44\x45\x43IMAL\x10\x12\x12\t\n\x04TEXT\x10\x93\x30\x12\t\n\x04\x42LOB\x10\x94P\x12\x0c\n\x07VARCHAR\x10\x95\x30\x12\x0e\n\tVARBINARY\x10\x96P\x12\t\n\x04\x43HAR\x10\x97\x30\x12\x0b\n\x06\x42INARY\x10\x98P\x12\x08\n\x03\x42IT\x10\x99\x10\x12\t\n\x04\x45NUM\x10\x9a\x10\x12\x08\n\x03SET\x10\x9b\x10\x12\t\n\x05TUPLE\x10\x1c\x12\r\n\x08GEOMETRY\x10\x9d\x10\x12\t\n\x04JSON\x10\x9e\x10\x12\x0e\n\nEXPRESSION\x10\x1f*F\n\x10TransactionState\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07PREPARE\x10\x01\x12\n\n\x06\x43OMMIT\x10\x02\x12\x0c\n\x08ROLLBACK\x10\x03\x42\x11\n\x0fio.vitess.protob\x06proto3') + serialized_pb=_b('\n\x0bquery.proto\x12\x05query\x1a\x0etopodata.proto\x1a\x0bvtrpc.proto\"T\n\x06Target\x12\x10\n\x08keyspace\x18\x01 \x01(\t\x12\r\n\x05shard\x18\x02 \x01(\t\x12)\n\x0btablet_type\x18\x03 \x01(\x0e\x32\x14.topodata.TabletType\"2\n\x0eVTGateCallerID\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x0e\n\x06groups\x18\x02 \x03(\t\"@\n\nEventToken\x12\x11\n\ttimestamp\x18\x01 \x01(\x03\x12\r\n\x05shard\x18\x02 \x01(\t\x12\x10\n\x08position\x18\x03 \x01(\t\"1\n\x05Value\x12\x19\n\x04type\x18\x01 \x01(\x0e\x32\x0b.query.Type\x12\r\n\x05value\x18\x02 \x01(\x0c\"V\n\x0c\x42indVariable\x12\x19\n\x04type\x18\x01 \x01(\x0e\x32\x0b.query.Type\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x1c\n\x06values\x18\x03 \x03(\x0b\x32\x0c.query.Value\"\xa2\x01\n\nBoundQuery\x12\x0b\n\x03sql\x18\x01 \x01(\t\x12<\n\x0e\x62ind_variables\x18\x02 \x03(\x0b\x32$.query.BoundQuery.BindVariablesEntry\x1aI\n\x12\x42indVariablesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.query.BindVariable:\x02\x38\x01\"\xc1\x04\n\x0e\x45xecuteOptions\x12\x1b\n\x13include_event_token\x18\x02 \x01(\x08\x12.\n\x13\x63ompare_event_token\x18\x03 \x01(\x0b\x32\x11.query.EventToken\x12=\n\x0fincluded_fields\x18\x04 \x01(\x0e\x32$.query.ExecuteOptions.IncludedFields\x12\x19\n\x11\x63lient_found_rows\x18\x05 \x01(\x08\x12\x30\n\x08workload\x18\x06 \x01(\x0e\x32\x1e.query.ExecuteOptions.Workload\x12\x18\n\x10sql_select_limit\x18\x08 \x01(\x03\x12I\n\x15transaction_isolation\x18\t \x01(\x0e\x32*.query.ExecuteOptions.TransactionIsolation\";\n\x0eIncludedFields\x12\x11\n\rTYPE_AND_NAME\x10\x00\x12\r\n\tTYPE_ONLY\x10\x01\x12\x07\n\x03\x41LL\x10\x02\"8\n\x08Workload\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x08\n\x04OLTP\x10\x01\x12\x08\n\x04OLAP\x10\x02\x12\x07\n\x03\x44\x42\x41\x10\x03\"t\n\x14TransactionIsolation\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x13\n\x0fREPEATABLE_READ\x10\x01\x12\x12\n\x0eREAD_COMMITTED\x10\x02\x12\x14\n\x10READ_UNCOMMITTED\x10\x03\x12\x10\n\x0cSERIALIZABLE\x10\x04J\x04\x08\x01\x10\x02\"\xbf\x01\n\x05\x46ield\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x19\n\x04type\x18\x02 \x01(\x0e\x32\x0b.query.Type\x12\r\n\x05table\x18\x03 \x01(\t\x12\x11\n\torg_table\x18\x04 \x01(\t\x12\x10\n\x08\x64\x61tabase\x18\x05 \x01(\t\x12\x10\n\x08org_name\x18\x06 \x01(\t\x12\x15\n\rcolumn_length\x18\x07 \x01(\r\x12\x0f\n\x07\x63harset\x18\x08 \x01(\r\x12\x10\n\x08\x64\x65\x63imals\x18\t \x01(\r\x12\r\n\x05\x66lags\x18\n \x01(\r\"&\n\x03Row\x12\x0f\n\x07lengths\x18\x01 \x03(\x12\x12\x0e\n\x06values\x18\x02 \x01(\x0c\"G\n\x0cResultExtras\x12&\n\x0b\x65vent_token\x18\x01 \x01(\x0b\x32\x11.query.EventToken\x12\x0f\n\x07\x66resher\x18\x02 \x01(\x08\"\x94\x01\n\x0bQueryResult\x12\x1c\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x0c.query.Field\x12\x15\n\rrows_affected\x18\x02 \x01(\x04\x12\x11\n\tinsert_id\x18\x03 \x01(\x04\x12\x18\n\x04rows\x18\x04 \x03(\x0b\x32\n.query.Row\x12#\n\x06\x65xtras\x18\x05 \x01(\x0b\x32\x13.query.ResultExtras\"\xca\x02\n\x0bStreamEvent\x12\x30\n\nstatements\x18\x01 \x03(\x0b\x32\x1c.query.StreamEvent.Statement\x12&\n\x0b\x65vent_token\x18\x02 \x01(\x0b\x32\x11.query.EventToken\x1a\xe0\x01\n\tStatement\x12\x37\n\x08\x63\x61tegory\x18\x01 \x01(\x0e\x32%.query.StreamEvent.Statement.Category\x12\x12\n\ntable_name\x18\x02 \x01(\t\x12(\n\x12primary_key_fields\x18\x03 \x03(\x0b\x32\x0c.query.Field\x12&\n\x12primary_key_values\x18\x04 \x03(\x0b\x32\n.query.Row\x12\x0b\n\x03sql\x18\x05 \x01(\x0c\"\'\n\x08\x43\x61tegory\x12\t\n\x05\x45rror\x10\x00\x12\x07\n\x03\x44ML\x10\x01\x12\x07\n\x03\x44\x44L\x10\x02\"\xf3\x01\n\x0e\x45xecuteRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12\x16\n\x0etransaction_id\x18\x05 \x01(\x03\x12&\n\x07options\x18\x06 \x01(\x0b\x32\x15.query.ExecuteOptions\"5\n\x0f\x45xecuteResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"U\n\x0fResultWithError\x12\x1e\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x0f.vtrpc.RPCError\x12\"\n\x06result\x18\x02 \x01(\x0b\x32\x12.query.QueryResult\"\x92\x02\n\x13\x45xecuteBatchRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\"\n\x07queries\x18\x04 \x03(\x0b\x32\x11.query.BoundQuery\x12\x16\n\x0e\x61s_transaction\x18\x05 \x01(\x08\x12\x16\n\x0etransaction_id\x18\x06 \x01(\x03\x12&\n\x07options\x18\x07 \x01(\x0b\x32\x15.query.ExecuteOptions\";\n\x14\x45xecuteBatchResponse\x12#\n\x07results\x18\x01 \x03(\x0b\x32\x12.query.QueryResult\"\xe1\x01\n\x14StreamExecuteRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12&\n\x07options\x18\x05 \x01(\x0b\x32\x15.query.ExecuteOptions\";\n\x15StreamExecuteResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\xb7\x01\n\x0c\x42\x65ginRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12&\n\x07options\x18\x04 \x01(\x0b\x32\x15.query.ExecuteOptions\"\'\n\rBeginResponse\x12\x16\n\x0etransaction_id\x18\x01 \x01(\x03\"\xa8\x01\n\rCommitRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\"\x10\n\x0e\x43ommitResponse\"\xaa\x01\n\x0fRollbackRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\"\x12\n\x10RollbackResponse\"\xb7\x01\n\x0ePrepareRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x11\n\x0fPrepareResponse\"\xa6\x01\n\x15\x43ommitPreparedRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\"\x18\n\x16\x43ommitPreparedResponse\"\xc0\x01\n\x17RollbackPreparedRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x1a\n\x18RollbackPreparedResponse\"\xce\x01\n\x18\x43reateTransactionRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\x12#\n\x0cparticipants\x18\x05 \x03(\x0b\x32\r.query.Target\"\x1b\n\x19\x43reateTransactionResponse\"\xbb\x01\n\x12StartCommitRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x15\n\x13StartCommitResponse\"\xbb\x01\n\x12SetRollbackRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x16\n\x0etransaction_id\x18\x04 \x01(\x03\x12\x0c\n\x04\x64tid\x18\x05 \x01(\t\"\x15\n\x13SetRollbackResponse\"\xab\x01\n\x1a\x43oncludeTransactionRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\"\x1d\n\x1b\x43oncludeTransactionResponse\"\xa7\x01\n\x16ReadTransactionRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04\x64tid\x18\x04 \x01(\t\"G\n\x17ReadTransactionResponse\x12,\n\x08metadata\x18\x01 \x01(\x0b\x32\x1a.query.TransactionMetadata\"\xe0\x01\n\x13\x42\x65ginExecuteRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12&\n\x07options\x18\x05 \x01(\x0b\x32\x15.query.ExecuteOptions\"r\n\x14\x42\x65ginExecuteResponse\x12\x1e\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x0f.vtrpc.RPCError\x12\"\n\x06result\x18\x02 \x01(\x0b\x32\x12.query.QueryResult\x12\x16\n\x0etransaction_id\x18\x03 \x01(\x03\"\xff\x01\n\x18\x42\x65ginExecuteBatchRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\"\n\x07queries\x18\x04 \x03(\x0b\x32\x11.query.BoundQuery\x12\x16\n\x0e\x61s_transaction\x18\x05 \x01(\x08\x12&\n\x07options\x18\x06 \x01(\x0b\x32\x15.query.ExecuteOptions\"x\n\x19\x42\x65ginExecuteBatchResponse\x12\x1e\n\x05\x65rror\x18\x01 \x01(\x0b\x32\x0f.vtrpc.RPCError\x12#\n\x07results\x18\x02 \x03(\x0b\x32\x12.query.QueryResult\x12\x16\n\x0etransaction_id\x18\x03 \x01(\x03\"\xa5\x01\n\x14MessageStreamRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04name\x18\x04 \x01(\t\";\n\x15MessageStreamResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\xbd\x01\n\x11MessageAckRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x19\n\x03ids\x18\x05 \x03(\x0b\x32\x0c.query.Value\"8\n\x12MessageAckResponse\x12\"\n\x06result\x18\x01 \x01(\x0b\x32\x12.query.QueryResult\"\xe7\x02\n\x11SplitQueryRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12 \n\x05query\x18\x04 \x01(\x0b\x32\x11.query.BoundQuery\x12\x14\n\x0csplit_column\x18\x05 \x03(\t\x12\x13\n\x0bsplit_count\x18\x06 \x01(\x03\x12\x1f\n\x17num_rows_per_query_part\x18\x08 \x01(\x03\x12\x35\n\talgorithm\x18\t \x01(\x0e\x32\".query.SplitQueryRequest.Algorithm\",\n\tAlgorithm\x12\x10\n\x0c\x45QUAL_SPLITS\x10\x00\x12\r\n\tFULL_SCAN\x10\x01\"A\n\nQuerySplit\x12 \n\x05query\x18\x01 \x01(\x0b\x32\x11.query.BoundQuery\x12\x11\n\trow_count\x18\x02 \x01(\x03\"8\n\x12SplitQueryResponse\x12\"\n\x07queries\x18\x01 \x03(\x0b\x32\x11.query.QuerySplit\"\x15\n\x13StreamHealthRequest\"\xb6\x01\n\rRealtimeStats\x12\x14\n\x0chealth_error\x18\x01 \x01(\t\x12\x1d\n\x15seconds_behind_master\x18\x02 \x01(\r\x12\x1c\n\x14\x62inlog_players_count\x18\x03 \x01(\x05\x12\x32\n*seconds_behind_master_filtered_replication\x18\x04 \x01(\x03\x12\x11\n\tcpu_usage\x18\x05 \x01(\x01\x12\x0b\n\x03qps\x18\x06 \x01(\x01\"\xd1\x01\n\x14StreamHealthResponse\x12\x1d\n\x06target\x18\x01 \x01(\x0b\x32\r.query.Target\x12\x0f\n\x07serving\x18\x02 \x01(\x08\x12.\n&tablet_externally_reparented_timestamp\x18\x03 \x01(\x03\x12,\n\x0erealtime_stats\x18\x04 \x01(\x0b\x32\x14.query.RealtimeStats\x12+\n\x0ctablet_alias\x18\x05 \x01(\x0b\x32\x15.topodata.TabletAlias\"\xbb\x01\n\x13UpdateStreamRequest\x12,\n\x13\x65\x66\x66\x65\x63tive_caller_id\x18\x01 \x01(\x0b\x32\x0f.vtrpc.CallerID\x12\x32\n\x13immediate_caller_id\x18\x02 \x01(\x0b\x32\x15.query.VTGateCallerID\x12\x1d\n\x06target\x18\x03 \x01(\x0b\x32\r.query.Target\x12\x10\n\x08position\x18\x04 \x01(\t\x12\x11\n\ttimestamp\x18\x05 \x01(\x03\"9\n\x14UpdateStreamResponse\x12!\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x12.query.StreamEvent\"\x86\x01\n\x13TransactionMetadata\x12\x0c\n\x04\x64tid\x18\x01 \x01(\t\x12&\n\x05state\x18\x02 \x01(\x0e\x32\x17.query.TransactionState\x12\x14\n\x0ctime_created\x18\x03 \x01(\x03\x12#\n\x0cparticipants\x18\x04 \x03(\x0b\x32\r.query.Target*\x92\x03\n\tMySqlFlag\x12\t\n\x05\x45MPTY\x10\x00\x12\x11\n\rNOT_NULL_FLAG\x10\x01\x12\x10\n\x0cPRI_KEY_FLAG\x10\x02\x12\x13\n\x0fUNIQUE_KEY_FLAG\x10\x04\x12\x15\n\x11MULTIPLE_KEY_FLAG\x10\x08\x12\r\n\tBLOB_FLAG\x10\x10\x12\x11\n\rUNSIGNED_FLAG\x10 \x12\x11\n\rZEROFILL_FLAG\x10@\x12\x10\n\x0b\x42INARY_FLAG\x10\x80\x01\x12\x0e\n\tENUM_FLAG\x10\x80\x02\x12\x18\n\x13\x41UTO_INCREMENT_FLAG\x10\x80\x04\x12\x13\n\x0eTIMESTAMP_FLAG\x10\x80\x08\x12\r\n\x08SET_FLAG\x10\x80\x10\x12\x1a\n\x15NO_DEFAULT_VALUE_FLAG\x10\x80 \x12\x17\n\x12ON_UPDATE_NOW_FLAG\x10\x80@\x12\x0e\n\x08NUM_FLAG\x10\x80\x80\x02\x12\x13\n\rPART_KEY_FLAG\x10\x80\x80\x01\x12\x10\n\nGROUP_FLAG\x10\x80\x80\x02\x12\x11\n\x0bUNIQUE_FLAG\x10\x80\x80\x04\x12\x11\n\x0b\x42INCMP_FLAG\x10\x80\x80\x08\x1a\x02\x10\x01*k\n\x04\x46lag\x12\x08\n\x04NONE\x10\x00\x12\x0f\n\nISINTEGRAL\x10\x80\x02\x12\x0f\n\nISUNSIGNED\x10\x80\x04\x12\x0c\n\x07ISFLOAT\x10\x80\x08\x12\r\n\x08ISQUOTED\x10\x80\x10\x12\x0b\n\x06ISTEXT\x10\x80 \x12\r\n\x08ISBINARY\x10\x80@*\x99\x03\n\x04Type\x12\r\n\tNULL_TYPE\x10\x00\x12\t\n\x04INT8\x10\x81\x02\x12\n\n\x05UINT8\x10\x82\x06\x12\n\n\x05INT16\x10\x83\x02\x12\x0b\n\x06UINT16\x10\x84\x06\x12\n\n\x05INT24\x10\x85\x02\x12\x0b\n\x06UINT24\x10\x86\x06\x12\n\n\x05INT32\x10\x87\x02\x12\x0b\n\x06UINT32\x10\x88\x06\x12\n\n\x05INT64\x10\x89\x02\x12\x0b\n\x06UINT64\x10\x8a\x06\x12\x0c\n\x07\x46LOAT32\x10\x8b\x08\x12\x0c\n\x07\x46LOAT64\x10\x8c\x08\x12\x0e\n\tTIMESTAMP\x10\x8d\x10\x12\t\n\x04\x44\x41TE\x10\x8e\x10\x12\t\n\x04TIME\x10\x8f\x10\x12\r\n\x08\x44\x41TETIME\x10\x90\x10\x12\t\n\x04YEAR\x10\x91\x06\x12\x0b\n\x07\x44\x45\x43IMAL\x10\x12\x12\t\n\x04TEXT\x10\x93\x30\x12\t\n\x04\x42LOB\x10\x94P\x12\x0c\n\x07VARCHAR\x10\x95\x30\x12\x0e\n\tVARBINARY\x10\x96P\x12\t\n\x04\x43HAR\x10\x97\x30\x12\x0b\n\x06\x42INARY\x10\x98P\x12\x08\n\x03\x42IT\x10\x99\x10\x12\t\n\x04\x45NUM\x10\x9a\x10\x12\x08\n\x03SET\x10\x9b\x10\x12\t\n\x05TUPLE\x10\x1c\x12\r\n\x08GEOMETRY\x10\x9d\x10\x12\t\n\x04JSON\x10\x9e\x10\x12\x0e\n\nEXPRESSION\x10\x1f*F\n\x10TransactionState\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07PREPARE\x10\x01\x12\n\n\x06\x43OMMIT\x10\x02\x12\x0c\n\x08ROLLBACK\x10\x03\x42\x11\n\x0fio.vitess.protob\x06proto3') , dependencies=[topodata__pb2.DESCRIPTOR,vtrpc__pb2.DESCRIPTOR,]) _sym_db.RegisterFileDescriptor(DESCRIPTOR) @@ -116,8 +116,8 @@ ], containing_type=None, options=_descriptor._ParseOptions(descriptor_pb2.EnumOptions(), _b('\020\001')), - serialized_start=7592, - serialized_end=7994, + serialized_start=7785, + serialized_end=8187, ) _sym_db.RegisterEnumDescriptor(_MYSQLFLAG) @@ -159,8 +159,8 @@ ], containing_type=None, options=None, - serialized_start=7996, - serialized_end=8103, + serialized_start=8189, + serialized_end=8296, ) _sym_db.RegisterEnumDescriptor(_FLAG) @@ -302,8 +302,8 @@ ], containing_type=None, options=None, - serialized_start=8106, - serialized_end=8515, + serialized_start=8299, + serialized_end=8708, ) _sym_db.RegisterEnumDescriptor(_TYPE) @@ -333,8 +333,8 @@ ], containing_type=None, options=None, - serialized_start=8517, - serialized_end=8587, + serialized_start=8710, + serialized_end=8780, ) _sym_db.RegisterEnumDescriptor(_TRANSACTIONSTATE) @@ -425,8 +425,8 @@ ], containing_type=None, options=None, - serialized_start=821, - serialized_end=880, + serialized_start=896, + serialized_end=955, ) _sym_db.RegisterEnumDescriptor(_EXECUTEOPTIONS_INCLUDEDFIELDS) @@ -455,11 +455,45 @@ ], containing_type=None, options=None, - serialized_start=882, - serialized_end=938, + serialized_start=957, + serialized_end=1013, ) _sym_db.RegisterEnumDescriptor(_EXECUTEOPTIONS_WORKLOAD) +_EXECUTEOPTIONS_TRANSACTIONISOLATION = _descriptor.EnumDescriptor( + name='TransactionIsolation', + full_name='query.ExecuteOptions.TransactionIsolation', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='DEFAULT', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='REPEATABLE_READ', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='READ_COMMITTED', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='READ_UNCOMMITTED', index=3, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SERIALIZABLE', index=4, number=4, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=1015, + serialized_end=1131, +) +_sym_db.RegisterEnumDescriptor(_EXECUTEOPTIONS_TRANSACTIONISOLATION) + _STREAMEVENT_STATEMENT_CATEGORY = _descriptor.EnumDescriptor( name='Category', full_name='query.StreamEvent.Statement.Category', @@ -481,8 +515,8 @@ ], containing_type=None, options=None, - serialized_start=1696, - serialized_end=1735, + serialized_start=1889, + serialized_end=1928, ) _sym_db.RegisterEnumDescriptor(_STREAMEVENT_STATEMENT_CATEGORY) @@ -503,8 +537,8 @@ ], containing_type=None, options=None, - serialized_start=6614, - serialized_end=6658, + serialized_start=6807, + serialized_end=6851, ) _sym_db.RegisterEnumDescriptor(_SPLITQUERYREQUEST_ALGORITHM) @@ -844,6 +878,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, options=None), + _descriptor.FieldDescriptor( + name='transaction_isolation', full_name='query.ExecuteOptions.transaction_isolation', index=6, + number=9, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), ], extensions=[ ], @@ -851,6 +892,7 @@ enum_types=[ _EXECUTEOPTIONS_INCLUDEDFIELDS, _EXECUTEOPTIONS_WORKLOAD, + _EXECUTEOPTIONS_TRANSACTIONISOLATION, ], options=None, is_extendable=False, @@ -859,7 +901,7 @@ oneofs=[ ], serialized_start=560, - serialized_end=944, + serialized_end=1137, ) @@ -952,8 +994,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=947, - serialized_end=1138, + serialized_start=1140, + serialized_end=1331, ) @@ -990,8 +1032,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1140, - serialized_end=1178, + serialized_start=1333, + serialized_end=1371, ) @@ -1028,8 +1070,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1180, - serialized_end=1251, + serialized_start=1373, + serialized_end=1444, ) @@ -1087,8 +1129,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1254, - serialized_end=1402, + serialized_start=1447, + serialized_end=1595, ) @@ -1147,8 +1189,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1511, - serialized_end=1735, + serialized_start=1704, + serialized_end=1928, ) _STREAMEVENT = _descriptor.Descriptor( @@ -1184,8 +1226,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1405, - serialized_end=1735, + serialized_start=1598, + serialized_end=1928, ) @@ -1250,8 +1292,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1738, - serialized_end=1981, + serialized_start=1931, + serialized_end=2174, ) @@ -1281,8 +1323,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1983, - serialized_end=2036, + serialized_start=2176, + serialized_end=2229, ) @@ -1319,8 +1361,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2038, - serialized_end=2123, + serialized_start=2231, + serialized_end=2316, ) @@ -1392,8 +1434,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2126, - serialized_end=2400, + serialized_start=2319, + serialized_end=2593, ) @@ -1423,8 +1465,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2402, - serialized_end=2461, + serialized_start=2595, + serialized_end=2654, ) @@ -1482,8 +1524,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2464, - serialized_end=2689, + serialized_start=2657, + serialized_end=2882, ) @@ -1513,8 +1555,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2691, - serialized_end=2750, + serialized_start=2884, + serialized_end=2943, ) @@ -1565,8 +1607,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2753, - serialized_end=2936, + serialized_start=2946, + serialized_end=3129, ) @@ -1596,8 +1638,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2938, - serialized_end=2977, + serialized_start=3131, + serialized_end=3170, ) @@ -1648,8 +1690,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2980, - serialized_end=3148, + serialized_start=3173, + serialized_end=3341, ) @@ -1672,8 +1714,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3150, - serialized_end=3166, + serialized_start=3343, + serialized_end=3359, ) @@ -1724,8 +1766,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3169, - serialized_end=3339, + serialized_start=3362, + serialized_end=3532, ) @@ -1748,8 +1790,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3341, - serialized_end=3359, + serialized_start=3534, + serialized_end=3552, ) @@ -1807,8 +1849,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3362, - serialized_end=3545, + serialized_start=3555, + serialized_end=3738, ) @@ -1831,8 +1873,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3547, - serialized_end=3564, + serialized_start=3740, + serialized_end=3757, ) @@ -1883,8 +1925,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3567, - serialized_end=3733, + serialized_start=3760, + serialized_end=3926, ) @@ -1907,8 +1949,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3735, - serialized_end=3759, + serialized_start=3928, + serialized_end=3952, ) @@ -1966,8 +2008,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3762, - serialized_end=3954, + serialized_start=3955, + serialized_end=4147, ) @@ -1990,8 +2032,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3956, - serialized_end=3982, + serialized_start=4149, + serialized_end=4175, ) @@ -2049,8 +2091,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3985, - serialized_end=4191, + serialized_start=4178, + serialized_end=4384, ) @@ -2073,8 +2115,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4193, - serialized_end=4220, + serialized_start=4386, + serialized_end=4413, ) @@ -2132,8 +2174,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4223, - serialized_end=4410, + serialized_start=4416, + serialized_end=4603, ) @@ -2156,8 +2198,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4412, - serialized_end=4433, + serialized_start=4605, + serialized_end=4626, ) @@ -2215,8 +2257,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4436, - serialized_end=4623, + serialized_start=4629, + serialized_end=4816, ) @@ -2239,8 +2281,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4625, - serialized_end=4646, + serialized_start=4818, + serialized_end=4839, ) @@ -2291,8 +2333,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4649, - serialized_end=4820, + serialized_start=4842, + serialized_end=5013, ) @@ -2315,8 +2357,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4822, - serialized_end=4851, + serialized_start=5015, + serialized_end=5044, ) @@ -2367,8 +2409,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=4854, - serialized_end=5021, + serialized_start=5047, + serialized_end=5214, ) @@ -2398,8 +2440,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5023, - serialized_end=5094, + serialized_start=5216, + serialized_end=5287, ) @@ -2457,8 +2499,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5097, - serialized_end=5321, + serialized_start=5290, + serialized_end=5514, ) @@ -2502,8 +2544,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5323, - serialized_end=5437, + serialized_start=5516, + serialized_end=5630, ) @@ -2568,8 +2610,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5440, - serialized_end=5695, + serialized_start=5633, + serialized_end=5888, ) @@ -2613,8 +2655,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5697, - serialized_end=5817, + serialized_start=5890, + serialized_end=6010, ) @@ -2665,8 +2707,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5820, - serialized_end=5985, + serialized_start=6013, + serialized_end=6178, ) @@ -2696,8 +2738,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=5987, - serialized_end=6046, + serialized_start=6180, + serialized_end=6239, ) @@ -2755,8 +2797,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6049, - serialized_end=6238, + serialized_start=6242, + serialized_end=6431, ) @@ -2786,8 +2828,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6240, - serialized_end=6296, + serialized_start=6433, + serialized_end=6489, ) @@ -2867,8 +2909,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6299, - serialized_end=6658, + serialized_start=6492, + serialized_end=6851, ) @@ -2905,8 +2947,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6660, - serialized_end=6725, + serialized_start=6853, + serialized_end=6918, ) @@ -2936,8 +2978,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6727, - serialized_end=6783, + serialized_start=6920, + serialized_end=6976, ) @@ -2960,8 +3002,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6785, - serialized_end=6806, + serialized_start=6978, + serialized_end=6999, ) @@ -3026,8 +3068,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6809, - serialized_end=6991, + serialized_start=7002, + serialized_end=7184, ) @@ -3085,8 +3127,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=6994, - serialized_end=7203, + serialized_start=7187, + serialized_end=7396, ) @@ -3144,8 +3186,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7206, - serialized_end=7393, + serialized_start=7399, + serialized_end=7586, ) @@ -3175,8 +3217,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7395, - serialized_end=7452, + serialized_start=7588, + serialized_end=7645, ) @@ -3227,8 +3269,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=7455, - serialized_end=7589, + serialized_start=7648, + serialized_end=7782, ) _TARGET.fields_by_name['tablet_type'].enum_type = topodata__pb2._TABLETTYPE @@ -3241,8 +3283,10 @@ _EXECUTEOPTIONS.fields_by_name['compare_event_token'].message_type = _EVENTTOKEN _EXECUTEOPTIONS.fields_by_name['included_fields'].enum_type = _EXECUTEOPTIONS_INCLUDEDFIELDS _EXECUTEOPTIONS.fields_by_name['workload'].enum_type = _EXECUTEOPTIONS_WORKLOAD +_EXECUTEOPTIONS.fields_by_name['transaction_isolation'].enum_type = _EXECUTEOPTIONS_TRANSACTIONISOLATION _EXECUTEOPTIONS_INCLUDEDFIELDS.containing_type = _EXECUTEOPTIONS _EXECUTEOPTIONS_WORKLOAD.containing_type = _EXECUTEOPTIONS +_EXECUTEOPTIONS_TRANSACTIONISOLATION.containing_type = _EXECUTEOPTIONS _FIELD.fields_by_name['type'].enum_type = _TYPE _RESULTEXTRAS.fields_by_name['event_token'].message_type = _EVENTTOKEN _QUERYRESULT.fields_by_name['fields'].message_type = _FIELD