зеркало из https://github.com/github/vitess-gh.git
Merge pull request #9030 from planetscale/savepoint-rc
Fix savepoint support with reserved connections
This commit is contained in:
Коммит
27367ea3ea
|
@ -611,3 +611,29 @@ func TestSQLSelectLimitWithPlanCache(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSavepointInReservedConn(t *testing.T) {
|
||||||
|
defer cluster.PanicHandler(t)
|
||||||
|
ctx := context.Background()
|
||||||
|
conn, err := mysql.Connect(ctx, &vtParams)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
|
utils.Exec(t, conn, "set session sql_mode = ''")
|
||||||
|
utils.Exec(t, conn, "BEGIN")
|
||||||
|
utils.Exec(t, conn, "SAVEPOINT sp_1")
|
||||||
|
utils.Exec(t, conn, "insert into t7_xxhash(uid, msg) values(1, 'a')")
|
||||||
|
utils.Exec(t, conn, "RELEASE SAVEPOINT sp_1")
|
||||||
|
utils.Exec(t, conn, "ROLLBACK")
|
||||||
|
|
||||||
|
utils.Exec(t, conn, "set session sql_mode = ''")
|
||||||
|
utils.Exec(t, conn, "BEGIN")
|
||||||
|
utils.Exec(t, conn, "SAVEPOINT sp_1")
|
||||||
|
utils.Exec(t, conn, "RELEASE SAVEPOINT sp_1")
|
||||||
|
utils.Exec(t, conn, "SAVEPOINT sp_2")
|
||||||
|
utils.Exec(t, conn, "insert into t7_xxhash(uid, msg) values(2, 'a')")
|
||||||
|
utils.Exec(t, conn, "RELEASE SAVEPOINT sp_2")
|
||||||
|
utils.Exec(t, conn, "COMMIT")
|
||||||
|
defer utils.Exec(t, conn, `delete from t7_xxhash`)
|
||||||
|
utils.AssertMatches(t, conn, "select uid from t7_xxhash", `[[VARCHAR("2")]]`)
|
||||||
|
}
|
||||||
|
|
|
@ -4208,6 +4208,7 @@ type ReserveBeginExecuteRequest struct {
|
||||||
Query *BoundQuery `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"`
|
Query *BoundQuery `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"`
|
||||||
Options *ExecuteOptions `protobuf:"bytes,5,opt,name=options,proto3" json:"options,omitempty"`
|
Options *ExecuteOptions `protobuf:"bytes,5,opt,name=options,proto3" json:"options,omitempty"`
|
||||||
PreQueries []string `protobuf:"bytes,6,rep,name=pre_queries,json=preQueries,proto3" json:"pre_queries,omitempty"`
|
PreQueries []string `protobuf:"bytes,6,rep,name=pre_queries,json=preQueries,proto3" json:"pre_queries,omitempty"`
|
||||||
|
PostBeginQueries []string `protobuf:"bytes,7,rep,name=post_begin_queries,json=postBeginQueries,proto3" json:"post_begin_queries,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *ReserveBeginExecuteRequest) Reset() {
|
func (x *ReserveBeginExecuteRequest) Reset() {
|
||||||
|
@ -4284,6 +4285,13 @@ func (x *ReserveBeginExecuteRequest) GetPreQueries() []string {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *ReserveBeginExecuteRequest) GetPostBeginQueries() []string {
|
||||||
|
if x != nil {
|
||||||
|
return x.PostBeginQueries
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// ReserveBeginExecuteResponse is the returned value from ReserveBeginExecute
|
// ReserveBeginExecuteResponse is the returned value from ReserveBeginExecute
|
||||||
type ReserveBeginExecuteResponse struct {
|
type ReserveBeginExecuteResponse struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
|
@ -5600,7 +5608,7 @@ var file_query_proto_rawDesc = []byte{
|
||||||
0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x04, 0x20,
|
0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x04, 0x20,
|
||||||
0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
|
0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54,
|
||||||
0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c,
|
0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c,
|
||||||
0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0xc6, 0x02, 0x0a, 0x1a, 0x52, 0x65, 0x73, 0x65,
|
0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0xf4, 0x02, 0x0a, 0x1a, 0x52, 0x65, 0x73, 0x65,
|
||||||
0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52,
|
0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52,
|
||||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74,
|
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74,
|
||||||
0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
|
0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
|
||||||
|
@ -5621,173 +5629,176 @@ var file_query_proto_rawDesc = []byte{
|
||||||
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
|
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
|
||||||
0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x06,
|
0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x06,
|
||||||
0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73,
|
0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73,
|
||||||
0x22, 0xf2, 0x01, 0x0a, 0x1b, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69,
|
0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x5f, 0x71,
|
||||||
0x6e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x6f,
|
||||||
0x12, 0x25, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
0x73, 0x74, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, 0x22, 0xf2,
|
||||||
0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72,
|
0x01, 0x0a, 0x1b, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x45,
|
||||||
0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
|
0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25,
|
||||||
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
|
0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e,
|
||||||
0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73,
|
0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x50, 0x43, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05,
|
||||||
0x75, 0x6c, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69,
|
0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18,
|
||||||
0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61,
|
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75,
|
||||||
0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65,
|
0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c,
|
||||||
0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52,
|
0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74,
|
0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73,
|
||||||
0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28,
|
0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65,
|
||||||
0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62,
|
0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x72,
|
||||||
0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74,
|
0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62,
|
||||||
0x41, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x87, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73,
|
0x6c, 0x65, 0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||||
0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65,
|
0x15, 0x2e, 0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65,
|
||||||
0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18,
|
0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61,
|
0x69, 0x61, 0x73, 0x22, 0x87, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52,
|
||||||
0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76,
|
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x13, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74,
|
||||||
0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d,
|
0x69, 0x76, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
|
||||||
0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64,
|
0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x76, 0x74, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x61, 0x6c, 0x6c,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56,
|
0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43,
|
||||||
0x54, 0x47, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69,
|
0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x13, 0x69, 0x6d, 0x6d, 0x65, 0x64,
|
||||||
0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64,
|
0x69, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02,
|
||||||
0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
|
0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x56, 0x54, 0x47,
|
||||||
0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52,
|
0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x44, 0x52, 0x11, 0x69, 0x6d, 0x6d,
|
||||||
0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73,
|
0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25,
|
||||||
0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52,
|
0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d,
|
||||||
0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f,
|
0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x06, 0x74,
|
||||||
0x0a, 0x0b, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20,
|
0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
|
||||||
0x01, 0x28, 0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x22,
|
0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74,
|
||||||
0x11, 0x0a, 0x0f, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b,
|
||||||
0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x65, 0x61, 0x6c,
|
0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
|
||||||
0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc6, 0x02, 0x0a, 0x0d, 0x52, 0x65,
|
0x03, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x49, 0x64, 0x22, 0x11, 0x0a,
|
||||||
0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x68,
|
0x0f, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||||
0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
|
0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68,
|
||||||
0x09, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x36,
|
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc6, 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x61, 0x6c,
|
||||||
0x0a, 0x17, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61,
|
0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x61,
|
||||||
0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52,
|
0x6c, 0x74, 0x68, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x15, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x53,
|
0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x36, 0x0a, 0x17,
|
||||||
0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67,
|
|
||||||
0x5f, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03,
|
|
||||||
0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x50, 0x6c, 0x61, 0x79,
|
|
||||||
0x65, 0x72, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x20, 0x66, 0x69, 0x6c, 0x74,
|
|
||||||
0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
|
||||||
0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01,
|
|
||||||
0x28, 0x03, 0x52, 0x1d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c,
|
|
||||||
0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64,
|
|
||||||
0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05,
|
|
||||||
0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x63, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10,
|
|
||||||
0x0a, 0x03, 0x71, 0x70, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x71, 0x70, 0x73,
|
|
||||||
0x12, 0x30, 0x0a, 0x14, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
|
|
||||||
0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12,
|
|
||||||
0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x67,
|
|
||||||
0x65, 0x64, 0x22, 0xf6, 0x01, 0x0a, 0x0e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65,
|
|
||||||
0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79,
|
|
||||||
0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20,
|
|
||||||
0x01, 0x28, 0x05, 0x52, 0x12, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x54, 0x61, 0x62, 0x6c,
|
|
||||||
0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x75, 0x6e, 0x68, 0x65, 0x61,
|
|
||||||
0x6c, 0x74, 0x68, 0x79, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e,
|
|
||||||
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x75, 0x6e, 0x68, 0x65, 0x61, 0x6c, 0x74,
|
|
||||||
0x68, 0x79, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a,
|
|
||||||
0x1b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67,
|
|
||||||
0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01,
|
|
||||||
0x28, 0x0d, 0x52, 0x18, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c,
|
|
||||||
0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x3d, 0x0a, 0x1b,
|
|
||||||
0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f,
|
0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f,
|
||||||
0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28,
|
0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x72,
|
||||||
0x0d, 0x52, 0x18, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61,
|
0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x53, 0x65, 0x63,
|
||||||
0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x22, 0xa9, 0x02, 0x0a, 0x14,
|
0x6f, 0x6e, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x5f, 0x70,
|
||||||
0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70,
|
0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01,
|
||||||
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01,
|
0x28, 0x05, 0x52, 0x12, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72,
|
||||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72,
|
0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72,
|
||||||
0x67, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73,
|
0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c,
|
||||||
0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x65,
|
0x61, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03,
|
||||||
0x72, 0x76, 0x69, 0x6e, 0x67, 0x12, 0x53, 0x0a, 0x26, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f,
|
0x52, 0x1d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63,
|
||||||
0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x61, 0x72,
|
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12,
|
||||||
0x65, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
|
0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01,
|
||||||
0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x23, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74,
|
0x28, 0x01, 0x52, 0x08, 0x63, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03,
|
||||||
0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65,
|
0x71, 0x70, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x71, 0x70, 0x73, 0x12, 0x30,
|
||||||
0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3b, 0x0a, 0x0e, 0x72, 0x65,
|
0x0a, 0x14, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x63,
|
||||||
0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01,
|
0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x74, 0x61,
|
||||||
0x28, 0x0b, 0x32, 0x14, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x74,
|
0x62, 0x6c, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64,
|
||||||
0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69,
|
0x22, 0xf6, 0x01, 0x0a, 0x0e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74,
|
||||||
0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65,
|
0x61, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x5f, 0x74,
|
||||||
0x74, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
|
0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
0x74, 0x6f, 0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41,
|
0x05, 0x52, 0x12, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74,
|
||||||
0x6c, 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61,
|
0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x75, 0x6e, 0x68, 0x65, 0x61, 0x6c, 0x74,
|
||||||
0x73, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0xae, 0x01, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e,
|
0x68, 0x79, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18,
|
||||||
0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12,
|
0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x75, 0x6e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79,
|
||||||
0x12, 0x0a, 0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64,
|
0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x1b, 0x72,
|
||||||
0x74, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01,
|
0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x73,
|
||||||
0x28, 0x0e, 0x32, 0x17, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73,
|
0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d,
|
||||||
0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61,
|
0x52, 0x18, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67,
|
||||||
0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74,
|
0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x3d, 0x0a, 0x1b, 0x72, 0x65,
|
||||||
0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x72,
|
0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x67, 0x5f, 0x73, 0x65,
|
||||||
0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
|
0x63, 0x6f, 0x6e, 0x64, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52,
|
||||||
0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75,
|
0x18, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x61, 0x67, 0x53,
|
||||||
0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74,
|
0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x4d, 0x61, 0x78, 0x22, 0xa9, 0x02, 0x0a, 0x14, 0x53, 0x74,
|
||||||
0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x2a, 0x92, 0x03, 0x0a, 0x09, 0x4d, 0x79, 0x53,
|
0x72, 0x65, 0x61, 0x6d, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||||
0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10,
|
0x73, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01,
|
||||||
0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x46, 0x4c,
|
0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65,
|
||||||
0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x5f,
|
0x74, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72,
|
||||||
0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45,
|
0x76, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76,
|
||||||
0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x4d,
|
0x69, 0x6e, 0x67, 0x12, 0x53, 0x0a, 0x26, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f, 0x65, 0x78,
|
||||||
0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47,
|
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e,
|
||||||
0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10,
|
0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20,
|
||||||
0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x5f, 0x46, 0x4c,
|
0x01, 0x28, 0x03, 0x52, 0x23, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72,
|
||||||
0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x4c,
|
0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x52, 0x65, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x54,
|
||||||
0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x41, 0x52,
|
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3b, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x6c,
|
||||||
0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x4e, 0x55,
|
0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
|
||||||
0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, 0x0a, 0x13, 0x41, 0x55, 0x54,
|
0x32, 0x14, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d,
|
||||||
0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47,
|
0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0d, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65,
|
||||||
0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50,
|
0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x0c, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x5f,
|
||||||
0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x45, 0x54, 0x5f,
|
0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x6f,
|
||||||
0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x4e, 0x4f, 0x5f, 0x44, 0x45,
|
0x70, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69,
|
||||||
0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47,
|
0x61, 0x73, 0x52, 0x0b, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x4a,
|
||||||
0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45,
|
0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0xae, 0x01, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
|
||||||
0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x40, 0x12, 0x0e, 0x0a, 0x08,
|
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a,
|
||||||
0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x13, 0x0a, 0x0d,
|
0x04, 0x64, 0x74, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x74, 0x69,
|
||||||
0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80,
|
0x64, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
|
||||||
0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10,
|
0x32, 0x17, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63,
|
||||||
0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x46, 0x4c,
|
0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
|
||||||
0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x43, 0x4d, 0x50,
|
0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
|
||||||
0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, 0x10, 0x01, 0x2a, 0x6b, 0x0a,
|
0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x72, 0x65, 0x61,
|
||||||
0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12,
|
0x74, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61,
|
||||||
0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x4c, 0x10, 0x80, 0x02,
|
0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x71, 0x75, 0x65, 0x72,
|
||||||
0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x80,
|
0x79, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63,
|
||||||
0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x80, 0x08, 0x12,
|
0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x2a, 0x92, 0x03, 0x0a, 0x09, 0x4d, 0x79, 0x53, 0x71, 0x6c,
|
||||||
0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x80, 0x10, 0x12, 0x0b,
|
0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, 0x12,
|
||||||
0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12, 0x0d, 0x0a, 0x08, 0x49,
|
0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47,
|
||||||
0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, 0x99, 0x03, 0x0a, 0x04, 0x54,
|
0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c,
|
||||||
0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45,
|
0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x4b,
|
||||||
0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81, 0x02, 0x12, 0x0a, 0x0a,
|
0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x55, 0x4c,
|
||||||
0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54,
|
0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x08,
|
||||||
0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10,
|
0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x10, 0x12,
|
||||||
0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x85, 0x02, 0x12, 0x0b,
|
0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47,
|
||||||
0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49,
|
0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x4c, 0x5f, 0x46,
|
||||||
0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x33,
|
0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x5f,
|
||||||
0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x89, 0x02,
|
0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x4e, 0x55, 0x4d, 0x5f,
|
||||||
0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x8a, 0x06, 0x12, 0x0c, 0x0a,
|
0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, 0x0a, 0x13, 0x41, 0x55, 0x54, 0x4f, 0x5f,
|
||||||
0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, 0x12, 0x0c, 0x0a, 0x07, 0x46,
|
0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80,
|
||||||
0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x49, 0x4d,
|
0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x5f, 0x46,
|
||||||
0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x44, 0x41, 0x54,
|
0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x4c,
|
||||||
0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x8f, 0x10, 0x12,
|
0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x46, 0x41,
|
||||||
0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x90, 0x10, 0x12, 0x09,
|
0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80,
|
||||||
0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x43,
|
0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4e,
|
||||||
0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x93,
|
0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x40, 0x12, 0x0e, 0x0a, 0x08, 0x4e, 0x55,
|
||||||
0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, 0x50, 0x12, 0x0c, 0x0a, 0x07,
|
0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x13, 0x0a, 0x0d, 0x50, 0x41,
|
||||||
0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x41,
|
0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x01, 0x12,
|
||||||
0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, 0x09, 0x0a, 0x04, 0x43, 0x48,
|
0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80,
|
||||||
0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10,
|
0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47,
|
||||||
0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, 0x10, 0x12, 0x09, 0x0a, 0x04,
|
0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x43, 0x4d, 0x50, 0x5f, 0x46,
|
||||||
0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x9b,
|
0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, 0x10, 0x01, 0x2a, 0x6b, 0x0a, 0x04, 0x46,
|
||||||
0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x1c, 0x12, 0x0d, 0x0a, 0x08,
|
0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a,
|
||||||
0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x4a,
|
0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x4c, 0x10, 0x80, 0x02, 0x12, 0x0f,
|
||||||
0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53,
|
0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x80, 0x04, 0x12,
|
||||||
0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61,
|
0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a,
|
||||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e,
|
0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x80, 0x10, 0x12, 0x0b, 0x0a, 0x06,
|
||||||
0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x41,
|
0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x42,
|
||||||
0x52, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02,
|
0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, 0x99, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70,
|
||||||
0x12, 0x0c, 0x0a, 0x08, 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x42, 0x35,
|
0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00,
|
||||||
0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x55,
|
||||||
0x6f, 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74,
|
0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x31, 0x36,
|
||||||
0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
|
0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x84, 0x06,
|
||||||
0x71, 0x75, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x85, 0x02, 0x12, 0x0b, 0x0a, 0x06,
|
||||||
|
0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54,
|
||||||
|
0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10,
|
||||||
|
0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x89, 0x02, 0x12, 0x0b,
|
||||||
|
0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x8a, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x46,
|
||||||
|
0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f,
|
||||||
|
0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53,
|
||||||
|
0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x45, 0x10,
|
||||||
|
0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x8f, 0x10, 0x12, 0x0d, 0x0a,
|
||||||
|
0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x90, 0x10, 0x12, 0x09, 0x0a, 0x04,
|
||||||
|
0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x43, 0x49, 0x4d,
|
||||||
|
0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x93, 0x30, 0x12,
|
||||||
|
0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, 0x50, 0x12, 0x0c, 0x0a, 0x07, 0x56, 0x41,
|
||||||
|
0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x41, 0x52, 0x42,
|
||||||
|
0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, 0x09, 0x0a, 0x04, 0x43, 0x48, 0x41, 0x52,
|
||||||
|
0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x98, 0x50,
|
||||||
|
0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x45, 0x4e,
|
||||||
|
0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x9b, 0x10, 0x12,
|
||||||
|
0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x1c, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x45,
|
||||||
|
0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x4a, 0x53, 0x4f,
|
||||||
|
0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x49,
|
||||||
|
0x4f, 0x4e, 0x10, 0x1f, 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74,
|
||||||
|
0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e,
|
||||||
|
0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45,
|
||||||
|
0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0c,
|
||||||
|
0x0a, 0x08, 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x42, 0x35, 0x0a, 0x0f,
|
||||||
|
0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a,
|
||||||
|
0x22, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73,
|
||||||
|
0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75,
|
||||||
|
0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -3266,6 +3266,15 @@ func (m *ReserveBeginExecuteRequest) MarshalToSizedBufferVT(dAtA []byte) (int, e
|
||||||
i -= len(m.unknownFields)
|
i -= len(m.unknownFields)
|
||||||
copy(dAtA[i:], m.unknownFields)
|
copy(dAtA[i:], m.unknownFields)
|
||||||
}
|
}
|
||||||
|
if len(m.PostBeginQueries) > 0 {
|
||||||
|
for iNdEx := len(m.PostBeginQueries) - 1; iNdEx >= 0; iNdEx-- {
|
||||||
|
i -= len(m.PostBeginQueries[iNdEx])
|
||||||
|
copy(dAtA[i:], m.PostBeginQueries[iNdEx])
|
||||||
|
i = encodeVarint(dAtA, i, uint64(len(m.PostBeginQueries[iNdEx])))
|
||||||
|
i--
|
||||||
|
dAtA[i] = 0x3a
|
||||||
|
}
|
||||||
|
}
|
||||||
if len(m.PreQueries) > 0 {
|
if len(m.PreQueries) > 0 {
|
||||||
for iNdEx := len(m.PreQueries) - 1; iNdEx >= 0; iNdEx-- {
|
for iNdEx := len(m.PreQueries) - 1; iNdEx >= 0; iNdEx-- {
|
||||||
i -= len(m.PreQueries[iNdEx])
|
i -= len(m.PreQueries[iNdEx])
|
||||||
|
@ -5188,6 +5197,12 @@ func (m *ReserveBeginExecuteRequest) SizeVT() (n int) {
|
||||||
n += 1 + l + sov(uint64(l))
|
n += 1 + l + sov(uint64(l))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(m.PostBeginQueries) > 0 {
|
||||||
|
for _, s := range m.PostBeginQueries {
|
||||||
|
l = len(s)
|
||||||
|
n += 1 + l + sov(uint64(l))
|
||||||
|
}
|
||||||
|
}
|
||||||
if m.unknownFields != nil {
|
if m.unknownFields != nil {
|
||||||
n += len(m.unknownFields)
|
n += len(m.unknownFields)
|
||||||
}
|
}
|
||||||
|
@ -13787,6 +13802,38 @@ func (m *ReserveBeginExecuteRequest) UnmarshalVT(dAtA []byte) error {
|
||||||
}
|
}
|
||||||
m.PreQueries = append(m.PreQueries, string(dAtA[iNdEx:postIndex]))
|
m.PreQueries = append(m.PreQueries, string(dAtA[iNdEx:postIndex]))
|
||||||
iNdEx = postIndex
|
iNdEx = postIndex
|
||||||
|
case 7:
|
||||||
|
if wireType != 2 {
|
||||||
|
return fmt.Errorf("proto: wrong wireType = %d for field PostBeginQueries", wireType)
|
||||||
|
}
|
||||||
|
var stringLen uint64
|
||||||
|
for shift := uint(0); ; shift += 7 {
|
||||||
|
if shift >= 64 {
|
||||||
|
return ErrIntOverflow
|
||||||
|
}
|
||||||
|
if iNdEx >= l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
b := dAtA[iNdEx]
|
||||||
|
iNdEx++
|
||||||
|
stringLen |= uint64(b&0x7F) << shift
|
||||||
|
if b < 0x80 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
intStringLen := int(stringLen)
|
||||||
|
if intStringLen < 0 {
|
||||||
|
return ErrInvalidLength
|
||||||
|
}
|
||||||
|
postIndex := iNdEx + intStringLen
|
||||||
|
if postIndex < 0 {
|
||||||
|
return ErrInvalidLength
|
||||||
|
}
|
||||||
|
if postIndex > l {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
m.PostBeginQueries = append(m.PostBeginQueries, string(dAtA[iNdEx:postIndex]))
|
||||||
|
iNdEx = postIndex
|
||||||
default:
|
default:
|
||||||
iNdEx = preIndex
|
iNdEx = preIndex
|
||||||
skippy, err := skip(dAtA[iNdEx:])
|
skippy, err := skip(dAtA[iNdEx:])
|
||||||
|
|
|
@ -538,9 +538,9 @@ func (itc *internalTabletConn) HandlePanic(err *error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//ReserveBeginExecute is part of the QueryService interface.
|
//ReserveBeginExecute is part of the QueryService interface.
|
||||||
func (itc *internalTabletConn) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
func (itc *internalTabletConn) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
||||||
bindVariables = sqltypes.CopyBindVariables(bindVariables)
|
bindVariables = sqltypes.CopyBindVariables(bindVariables)
|
||||||
res, transactionID, reservedID, alias, err := itc.tablet.qsc.QueryService().ReserveBeginExecute(ctx, target, preQueries, sql, bindVariables, options)
|
res, transactionID, reservedID, alias, err := itc.tablet.qsc.QueryService().ReserveBeginExecute(ctx, target, preQueries, postBeginQueries, sql, bindVariables, options)
|
||||||
return res, transactionID, reservedID, alias, tabletconn.ErrorFromGRPC(vterrors.ToGRPC(err))
|
return res, transactionID, reservedID, alias, tabletconn.ErrorFromGRPC(vterrors.ToGRPC(err))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2196,6 +2196,70 @@ func TestExecutorSavepointInTx(t *testing.T) {
|
||||||
testQueryLog(t, logChan, "TestExecute", "ROLLBACK", "rollback", 2)
|
testQueryLog(t, logChan, "TestExecute", "ROLLBACK", "rollback", 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestExecutorSavepointInTxWithReservedConn(t *testing.T) {
|
||||||
|
executor, sbc1, sbc2, _ := createExecutorEnv()
|
||||||
|
logChan := QueryLogger.Subscribe("TestExecutorSavepoint")
|
||||||
|
defer QueryLogger.Unsubscribe(logChan)
|
||||||
|
|
||||||
|
session := NewSafeSession(&vtgatepb.Session{Autocommit: true, TargetString: "TestExecutor", EnableSystemSettings: true})
|
||||||
|
sbc1.SetResults([]*sqltypes.Result{
|
||||||
|
sqltypes.MakeTestResult(sqltypes.MakeTestFields("orig|new", "varchar|varchar"), "a|"),
|
||||||
|
})
|
||||||
|
_, err := exec(executor, session, "set sql_mode = ''")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = exec(executor, session, "begin")
|
||||||
|
require.NoError(t, err)
|
||||||
|
_, err = exec(executor, session, "savepoint a")
|
||||||
|
require.NoError(t, err)
|
||||||
|
_, err = exec(executor, session, "select id from user where id = 1")
|
||||||
|
require.NoError(t, err)
|
||||||
|
_, err = exec(executor, session, "savepoint b")
|
||||||
|
require.NoError(t, err)
|
||||||
|
_, err = exec(executor, session, "release savepoint a")
|
||||||
|
require.NoError(t, err)
|
||||||
|
_, err = exec(executor, session, "select id from user where id = 3")
|
||||||
|
require.NoError(t, err)
|
||||||
|
_, err = exec(executor, session, "commit")
|
||||||
|
require.NoError(t, err)
|
||||||
|
emptyBV := map[string]*querypb.BindVariable{}
|
||||||
|
sbc1WantQueries := []*querypb.BoundQuery{{
|
||||||
|
Sql: "select @@sql_mode orig, '' new", BindVariables: emptyBV,
|
||||||
|
}, {
|
||||||
|
Sql: "set @@sql_mode = ''", BindVariables: emptyBV,
|
||||||
|
}, {
|
||||||
|
Sql: "savepoint a", BindVariables: emptyBV,
|
||||||
|
}, {
|
||||||
|
Sql: "select id from `user` where id = 1", BindVariables: emptyBV,
|
||||||
|
}, {
|
||||||
|
Sql: "savepoint b", BindVariables: emptyBV,
|
||||||
|
}, {
|
||||||
|
Sql: "release savepoint a", BindVariables: emptyBV,
|
||||||
|
}}
|
||||||
|
|
||||||
|
sbc2WantQueries := []*querypb.BoundQuery{{
|
||||||
|
Sql: "set @@sql_mode = ''", BindVariables: emptyBV,
|
||||||
|
}, {
|
||||||
|
Sql: "savepoint a", BindVariables: emptyBV,
|
||||||
|
}, {
|
||||||
|
Sql: "savepoint b", BindVariables: emptyBV,
|
||||||
|
}, {
|
||||||
|
Sql: "release savepoint a", BindVariables: emptyBV,
|
||||||
|
}, {
|
||||||
|
Sql: "select id from `user` where id = 3", BindVariables: emptyBV,
|
||||||
|
}}
|
||||||
|
utils.MustMatch(t, sbc1WantQueries, sbc1.Queries, "")
|
||||||
|
utils.MustMatch(t, sbc2WantQueries, sbc2.Queries, "")
|
||||||
|
testQueryLog(t, logChan, "TestExecute", "SET", "set session sql_mode = ''", 1)
|
||||||
|
testQueryLog(t, logChan, "TestExecute", "BEGIN", "begin", 0)
|
||||||
|
testQueryLog(t, logChan, "TestExecute", "SAVEPOINT", "savepoint a", 0)
|
||||||
|
testQueryLog(t, logChan, "TestExecute", "SELECT", "select id from user where id = 1", 1)
|
||||||
|
testQueryLog(t, logChan, "TestExecute", "SAVEPOINT", "savepoint b", 1)
|
||||||
|
testQueryLog(t, logChan, "TestExecute", "RELEASE", "release savepoint a", 1)
|
||||||
|
testQueryLog(t, logChan, "TestExecute", "SELECT", "select id from user where id = 3", 1)
|
||||||
|
testQueryLog(t, logChan, "TestExecute", "COMMIT", "commit", 2)
|
||||||
|
}
|
||||||
|
|
||||||
func TestExecutorSavepointWithoutTx(t *testing.T) {
|
func TestExecutorSavepointWithoutTx(t *testing.T) {
|
||||||
executor, sbc1, sbc2, _ := createLegacyExecutorEnv()
|
executor, sbc1, sbc2, _ := createLegacyExecutorEnv()
|
||||||
logChan := QueryLogger.Subscribe("TestExecutorSavepoint")
|
logChan := QueryLogger.Subscribe("TestExecutorSavepoint")
|
||||||
|
|
|
@ -245,18 +245,18 @@ func (stc *ScatterConn) ExecuteMultiShard(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
case begin:
|
case begin:
|
||||||
innerqr, transactionID, alias, err = qs.BeginExecute(ctx, rs.Target, session.Savepoints, queries[i].Sql, queries[i].BindVariables, reservedID, opts)
|
innerqr, transactionID, alias, err = qs.BeginExecute(ctx, rs.Target, session.GetSavepoints(), queries[i].Sql, queries[i].BindVariables, reservedID, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
retryRequest(func() {
|
retryRequest(func() {
|
||||||
// we seem to have lost our connection. it was a reserved connection, let's try to recreate it
|
// we seem to have lost our connection. it was a reserved connection, let's try to recreate it
|
||||||
info.actionNeeded = reserveBegin
|
info.actionNeeded = reserveBegin
|
||||||
innerqr, transactionID, reservedID, alias, err = qs.ReserveBeginExecute(ctx, rs.Target, session.SetPreQueries(), queries[i].Sql, queries[i].BindVariables, opts)
|
innerqr, transactionID, reservedID, alias, err = qs.ReserveBeginExecute(ctx, rs.Target, session.SetPreQueries(), session.GetSavepoints(), queries[i].Sql, queries[i].BindVariables, opts)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
case reserve:
|
case reserve:
|
||||||
innerqr, reservedID, alias, err = qs.ReserveExecute(ctx, rs.Target, session.SetPreQueries(), queries[i].Sql, queries[i].BindVariables, transactionID, opts)
|
innerqr, reservedID, alias, err = qs.ReserveExecute(ctx, rs.Target, session.SetPreQueries(), queries[i].Sql, queries[i].BindVariables, transactionID, opts)
|
||||||
case reserveBegin:
|
case reserveBegin:
|
||||||
innerqr, transactionID, reservedID, alias, err = qs.ReserveBeginExecute(ctx, rs.Target, session.SetPreQueries(), queries[i].Sql, queries[i].BindVariables, opts)
|
innerqr, transactionID, reservedID, alias, err = qs.ReserveBeginExecute(ctx, rs.Target, session.SetPreQueries(), session.GetSavepoints(), queries[i].Sql, queries[i].BindVariables, opts)
|
||||||
default:
|
default:
|
||||||
return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "[BUG] unexpected actionNeeded on query execution: %v", info.actionNeeded)
|
return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "[BUG] unexpected actionNeeded on query execution: %v", info.actionNeeded)
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,7 +111,7 @@ func TestCallProcedureInsideTx(t *testing.T) {
|
||||||
|
|
||||||
func TestCallProcedureInsideReservedConn(t *testing.T) {
|
func TestCallProcedureInsideReservedConn(t *testing.T) {
|
||||||
client := framework.NewClient()
|
client := framework.NewClient()
|
||||||
_, err := client.ReserveBeginExecute(`call proc_dml()`, nil, nil)
|
_, err := client.ReserveBeginExecute(`call proc_dml()`, nil, nil, nil)
|
||||||
require.EqualError(t, err, "Transaction state change inside the stored procedure is not allowed (CallerID: dev)")
|
require.EqualError(t, err, "Transaction state change inside the stored procedure is not allowed (CallerID: dev)")
|
||||||
client.Release()
|
client.Release()
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ func TestTxKillerKillsTransactionsInReservedConnections(t *testing.T) {
|
||||||
client := framework.NewClient()
|
client := framework.NewClient()
|
||||||
defer client.Release()
|
defer client.Release()
|
||||||
|
|
||||||
_, err := client.ReserveBeginExecute("select 42", nil, nil)
|
_, err := client.ReserveBeginExecute("select 42", nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
assertIsKilledWithin6Seconds(t, client)
|
assertIsKilledWithin6Seconds(t, client)
|
||||||
|
|
|
@ -313,14 +313,14 @@ func (client *QueryClient) ReserveExecute(query string, preQueries []string, bin
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReserveBeginExecute performs a ReserveBeginExecute.
|
// ReserveBeginExecute performs a ReserveBeginExecute.
|
||||||
func (client *QueryClient) ReserveBeginExecute(query string, preQueries []string, bindvars map[string]*querypb.BindVariable) (*sqltypes.Result, error) {
|
func (client *QueryClient) ReserveBeginExecute(query string, preQueries []string, postBeginQueries []string, bindvars map[string]*querypb.BindVariable) (*sqltypes.Result, error) {
|
||||||
if client.reservedID != 0 {
|
if client.reservedID != 0 {
|
||||||
return nil, errors.New("already reserved a connection")
|
return nil, errors.New("already reserved a connection")
|
||||||
}
|
}
|
||||||
if client.transactionID != 0 {
|
if client.transactionID != 0 {
|
||||||
return nil, errors.New("already in transaction")
|
return nil, errors.New("already in transaction")
|
||||||
}
|
}
|
||||||
qr, transactionID, reservedID, _, err := client.server.ReserveBeginExecute(client.ctx, client.target, preQueries, query, bindvars, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL})
|
qr, transactionID, reservedID, _, err := client.server.ReserveBeginExecute(client.ctx, client.target, preQueries, postBeginQueries, query, bindvars, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL})
|
||||||
client.transactionID = transactionID
|
client.transactionID = transactionID
|
||||||
client.reservedID = reservedID
|
client.reservedID = reservedID
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -91,7 +91,7 @@ func TestReserveBeginExecuteRelease(t *testing.T) {
|
||||||
|
|
||||||
insQuery := "insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)"
|
insQuery := "insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)"
|
||||||
selQuery := "select intval from vitess_test where intval = 4"
|
selQuery := "select intval from vitess_test where intval = 4"
|
||||||
_, err := client.ReserveBeginExecute(insQuery, nil, nil)
|
_, err := client.ReserveBeginExecute(insQuery, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
qr, err := client.Execute(selQuery, nil)
|
qr, err := client.Execute(selQuery, nil)
|
||||||
|
@ -112,10 +112,10 @@ func TestMultipleReserveBeginHaveDifferentConnection(t *testing.T) {
|
||||||
|
|
||||||
query := "select connection_id()"
|
query := "select connection_id()"
|
||||||
|
|
||||||
qrc1_1, err := client1.ReserveBeginExecute(query, nil, nil)
|
qrc1_1, err := client1.ReserveBeginExecute(query, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer client1.Release()
|
defer client1.Release()
|
||||||
qrc2_1, err := client2.ReserveBeginExecute(query, nil, nil)
|
qrc2_1, err := client2.ReserveBeginExecute(query, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer client2.Release()
|
defer client2.Release()
|
||||||
require.NotEqual(t, qrc1_1.Rows, qrc2_1.Rows)
|
require.NotEqual(t, qrc1_1.Rows, qrc2_1.Rows)
|
||||||
|
@ -133,7 +133,7 @@ func TestCommitOnReserveBeginConn(t *testing.T) {
|
||||||
|
|
||||||
query := "select connection_id()"
|
query := "select connection_id()"
|
||||||
|
|
||||||
qr1, err := client.ReserveBeginExecute(query, nil, nil)
|
qr1, err := client.ReserveBeginExecute(query, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer client.Release()
|
defer client.Release()
|
||||||
|
|
||||||
|
@ -153,7 +153,7 @@ func TestRollbackOnReserveBeginConn(t *testing.T) {
|
||||||
|
|
||||||
query := "select connection_id()"
|
query := "select connection_id()"
|
||||||
|
|
||||||
qr1, err := client.ReserveBeginExecute(query, nil, nil)
|
qr1, err := client.ReserveBeginExecute(query, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer client.Release()
|
defer client.Release()
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ func TestReserveBeginRollbackAndBeginCommitAgain(t *testing.T) {
|
||||||
|
|
||||||
query := "select connection_id()"
|
query := "select connection_id()"
|
||||||
|
|
||||||
qr1, err := client.ReserveBeginExecute(query, nil, nil)
|
qr1, err := client.ReserveBeginExecute(query, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer client.Release()
|
defer client.Release()
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ func TestReserveBeginCommitFailToReuseTxID(t *testing.T) {
|
||||||
|
|
||||||
query := "select connection_id()"
|
query := "select connection_id()"
|
||||||
|
|
||||||
_, err := client.ReserveBeginExecute(query, nil, nil)
|
_, err := client.ReserveBeginExecute(query, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer client.Release()
|
defer client.Release()
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ func TestReserveBeginRollbackFailToReuseTxID(t *testing.T) {
|
||||||
|
|
||||||
query := "select connection_id()"
|
query := "select connection_id()"
|
||||||
|
|
||||||
_, err := client.ReserveBeginExecute(query, nil, nil)
|
_, err := client.ReserveBeginExecute(query, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer client.Release()
|
defer client.Release()
|
||||||
|
|
||||||
|
@ -251,7 +251,7 @@ func TestReserveBeginCommitFailToReuseOldReservedID(t *testing.T) {
|
||||||
|
|
||||||
query := "select connection_id()"
|
query := "select connection_id()"
|
||||||
|
|
||||||
_, err := client.ReserveBeginExecute(query, nil, nil)
|
_, err := client.ReserveBeginExecute(query, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
oldRID := client.ReservedID()
|
oldRID := client.ReservedID()
|
||||||
|
@ -275,7 +275,7 @@ func TestReserveBeginRollbackFailToReuseOldReservedID(t *testing.T) {
|
||||||
|
|
||||||
query := "select connection_id()"
|
query := "select connection_id()"
|
||||||
|
|
||||||
_, err := client.ReserveBeginExecute(query, nil, nil)
|
_, err := client.ReserveBeginExecute(query, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
oldRID := client.ReservedID()
|
oldRID := client.ReservedID()
|
||||||
|
@ -487,7 +487,7 @@ func TestReserveAndExecuteWithFailingQueryAndReserveConnectionRemainsOpen(t *tes
|
||||||
func TestReserveBeginExecuteWithFailingQueryAndReserveConnAndTxRemainsOpen(t *testing.T) {
|
func TestReserveBeginExecuteWithFailingQueryAndReserveConnAndTxRemainsOpen(t *testing.T) {
|
||||||
client := framework.NewClient()
|
client := framework.NewClient()
|
||||||
|
|
||||||
_, err := client.ReserveBeginExecute("select foo", nil, nil)
|
_, err := client.ReserveBeginExecute("select foo", nil, nil, nil)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
// Save the connection id to check in the end that everything got executed on same connection.
|
// Save the connection id to check in the end that everything got executed on same connection.
|
||||||
|
@ -582,6 +582,71 @@ func TestReserveExecuteWithPreQueriesAndCheckConnectionState(t *testing.T) {
|
||||||
assert.Equal(t, `[[VARCHAR("Warning") UINT32(1411) VARCHAR("Incorrect datetime value: '00/00/0000' for function str_to_date")]]`, fmt.Sprintf("%v", qr2.Rows))
|
assert.Equal(t, `[[VARCHAR("Warning") UINT32(1411) VARCHAR("Incorrect datetime value: '00/00/0000' for function str_to_date")]]`, fmt.Sprintf("%v", qr2.Rows))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReserveExecuteWithPreQueriesAndSavepoint(t *testing.T) {
|
||||||
|
client := framework.NewClient()
|
||||||
|
defer client.Release()
|
||||||
|
|
||||||
|
insQuery := "insert into vitess_test (intval) values (5)"
|
||||||
|
selQuery := "select intval from vitess_test where intval = 5"
|
||||||
|
preQueries := []string{
|
||||||
|
"set sql_mode = ''",
|
||||||
|
}
|
||||||
|
|
||||||
|
postBeginQueries1 := []string{
|
||||||
|
"savepoint a",
|
||||||
|
}
|
||||||
|
// savepoint there after begin.
|
||||||
|
_, err := client.ReserveBeginExecute(insQuery, preQueries, postBeginQueries1, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
qr, err := client.Execute(selQuery, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, `[[INT32(5)]]`, fmt.Sprintf("%v", qr.Rows))
|
||||||
|
|
||||||
|
_, err = client.Execute("rollback to a", nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
qr, err = client.Execute(selQuery, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, `[]`, fmt.Sprintf("%v", qr.Rows))
|
||||||
|
|
||||||
|
err = client.Release()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
postBeginQueries2 := []string{
|
||||||
|
"savepoint a",
|
||||||
|
"release savepoint a",
|
||||||
|
"savepoint b",
|
||||||
|
}
|
||||||
|
// no savepoint after begin
|
||||||
|
_, err = client.ReserveBeginExecute(insQuery, preQueries, postBeginQueries2, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
qr, err = client.Execute(selQuery, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, `[[INT32(5)]]`, fmt.Sprintf("%v", qr.Rows))
|
||||||
|
|
||||||
|
// no savepoint a
|
||||||
|
_, err = client.Execute("rollback to a", nil)
|
||||||
|
require.Error(t, err)
|
||||||
|
|
||||||
|
// no savepoint a.
|
||||||
|
_, err = client.Execute("release a", nil)
|
||||||
|
require.Error(t, err)
|
||||||
|
|
||||||
|
// record still exists.
|
||||||
|
qr, err = client.Execute(selQuery, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, `[[INT32(5)]]`, fmt.Sprintf("%v", qr.Rows))
|
||||||
|
|
||||||
|
_, err = client.Execute("rollback to b", nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
qr, err = client.Execute(selQuery, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, `[]`, fmt.Sprintf("%v", qr.Rows))
|
||||||
|
}
|
||||||
|
|
||||||
func TestReserveBeginExecuteWithPreQueriesAndCheckConnectionState(t *testing.T) {
|
func TestReserveBeginExecuteWithPreQueriesAndCheckConnectionState(t *testing.T) {
|
||||||
rcClient := framework.NewClient()
|
rcClient := framework.NewClient()
|
||||||
rucClient := framework.NewClient()
|
rucClient := framework.NewClient()
|
||||||
|
@ -597,11 +662,11 @@ func TestReserveBeginExecuteWithPreQueriesAndCheckConnectionState(t *testing.T)
|
||||||
"set session transaction isolation level read uncommitted",
|
"set session transaction isolation level read uncommitted",
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := rcClient.ReserveBeginExecute(insRcQuery, rcQuery, nil)
|
_, err := rcClient.ReserveBeginExecute(insRcQuery, rcQuery, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer rcClient.Release()
|
defer rcClient.Release()
|
||||||
|
|
||||||
_, err = rucClient.ReserveBeginExecute(insRucQuery, rucQuery, nil)
|
_, err = rucClient.ReserveBeginExecute(insRucQuery, rucQuery, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer rucClient.Release()
|
defer rucClient.Release()
|
||||||
|
|
||||||
|
@ -671,7 +736,7 @@ func TestReserveBeginExecuteWithFailingPreQueriesAndCheckConnectionState(t *test
|
||||||
"set @@no_sys_var = 42",
|
"set @@no_sys_var = 42",
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := client.ReserveBeginExecute(selQuery, preQueries, nil)
|
_, err := client.ReserveBeginExecute(selQuery, preQueries, nil, nil)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
err = client.Commit()
|
err = client.Commit()
|
||||||
|
@ -709,7 +774,7 @@ func TestReserveBeginExecuteWithCommitFailureAndCheckConnectionAndDBState(t *tes
|
||||||
insQuery := "insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)"
|
insQuery := "insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)"
|
||||||
selQuery := "select intval from vitess_test where intval = 4"
|
selQuery := "select intval from vitess_test where intval = 4"
|
||||||
|
|
||||||
connQr, err := client.ReserveBeginExecute(connQuery, nil, nil)
|
connQr, err := client.ReserveBeginExecute(connQuery, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
_, err = client.Execute(insQuery, nil)
|
_, err = client.Execute(insQuery, nil)
|
||||||
|
@ -739,7 +804,7 @@ func TestReserveBeginExecuteWithRollbackFailureAndCheckConnectionAndDBState(t *t
|
||||||
insQuery := "insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)"
|
insQuery := "insert into vitess_test (intval, floatval, charval, binval) values (4, null, null, null)"
|
||||||
selQuery := "select intval from vitess_test where intval = 4"
|
selQuery := "select intval from vitess_test where intval = 4"
|
||||||
|
|
||||||
connQr, err := client.ReserveBeginExecute(connQuery, nil, nil)
|
connQr, err := client.ReserveBeginExecute(connQuery, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
_, err = client.Execute(insQuery, nil)
|
_, err = client.Execute(insQuery, nil)
|
||||||
|
@ -835,7 +900,7 @@ func TestReserveExecuteDDLWithTx(t *testing.T) {
|
||||||
dropQuery := "drop table vitess_test_ddl"
|
dropQuery := "drop table vitess_test_ddl"
|
||||||
descQuery := "describe vitess_test_ddl"
|
descQuery := "describe vitess_test_ddl"
|
||||||
|
|
||||||
qr1, err := client.ReserveBeginExecute(connQuery, nil, nil)
|
qr1, err := client.ReserveBeginExecute(connQuery, nil, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
_, err = client.Execute(createQuery, nil)
|
_, err = client.Execute(createQuery, nil)
|
||||||
|
|
|
@ -410,7 +410,7 @@ func (q *query) ReserveBeginExecute(ctx context.Context, request *querypb.Reserv
|
||||||
request.EffectiveCallerId,
|
request.EffectiveCallerId,
|
||||||
request.ImmediateCallerId,
|
request.ImmediateCallerId,
|
||||||
)
|
)
|
||||||
result, transactionID, reservedID, alias, err := q.server.ReserveBeginExecute(ctx, request.Target, request.PreQueries, request.Query.Sql, request.Query.BindVariables, request.Options)
|
result, transactionID, reservedID, alias, err := q.server.ReserveBeginExecute(ctx, request.Target, request.PreQueries, request.PostBeginQueries, request.Query.Sql, request.Query.BindVariables, request.Options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// if we have a valid reservedID, return the error in-band
|
// if we have a valid reservedID, return the error in-band
|
||||||
if reservedID != 0 {
|
if reservedID != 0 {
|
||||||
|
|
|
@ -736,7 +736,7 @@ func (conn *gRPCQueryClient) HandlePanic(err *error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//ReserveBeginExecute implements the queryservice interface
|
//ReserveBeginExecute implements the queryservice interface
|
||||||
func (conn *gRPCQueryClient) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
func (conn *gRPCQueryClient) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
||||||
conn.mu.RLock()
|
conn.mu.RLock()
|
||||||
defer conn.mu.RUnlock()
|
defer conn.mu.RUnlock()
|
||||||
if conn.cc == nil {
|
if conn.cc == nil {
|
||||||
|
@ -749,6 +749,7 @@ func (conn *gRPCQueryClient) ReserveBeginExecute(ctx context.Context, target *qu
|
||||||
ImmediateCallerId: callerid.ImmediateCallerIDFromContext(ctx),
|
ImmediateCallerId: callerid.ImmediateCallerIDFromContext(ctx),
|
||||||
Options: options,
|
Options: options,
|
||||||
PreQueries: preQueries,
|
PreQueries: preQueries,
|
||||||
|
PostBeginQueries: postBeginQueries,
|
||||||
Query: &querypb.BoundQuery{
|
Query: &querypb.BoundQuery{
|
||||||
Sql: sql,
|
Sql: sql,
|
||||||
BindVariables: bindVariables,
|
BindVariables: bindVariables,
|
||||||
|
|
|
@ -119,7 +119,7 @@ func (b *BenchmarkService) HandlePanic(err *error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *BenchmarkService) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
func (b *BenchmarkService) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
||||||
panic("should not be called")
|
panic("should not be called")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,7 @@ type QueryService interface {
|
||||||
// HandlePanic will be called if any of the functions panic.
|
// HandlePanic will be called if any of the functions panic.
|
||||||
HandlePanic(err *error)
|
HandlePanic(err *error)
|
||||||
|
|
||||||
ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error)
|
ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error)
|
||||||
|
|
||||||
ReserveExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, *topodatapb.TabletAlias, error)
|
ReserveExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, transactionID int64, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, *topodatapb.TabletAlias, error)
|
||||||
|
|
||||||
|
|
|
@ -282,13 +282,13 @@ func (ws *wrappedService) HandlePanic(err *error) {
|
||||||
// No-op. Wrappers must call HandlePanic.
|
// No-op. Wrappers must call HandlePanic.
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ws *wrappedService) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
func (ws *wrappedService) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
||||||
var res *sqltypes.Result
|
var res *sqltypes.Result
|
||||||
var transactionID, reservedID int64
|
var transactionID, reservedID int64
|
||||||
var alias *topodatapb.TabletAlias
|
var alias *topodatapb.TabletAlias
|
||||||
err := ws.wrapper(ctx, target, ws.impl, "ReserveBeginExecute", false, func(ctx context.Context, target *querypb.Target, conn QueryService) (bool, error) {
|
err := ws.wrapper(ctx, target, ws.impl, "ReserveBeginExecute", false, func(ctx context.Context, target *querypb.Target, conn QueryService) (bool, error) {
|
||||||
var err error
|
var err error
|
||||||
res, transactionID, reservedID, alias, err = conn.ReserveBeginExecute(ctx, target, preQueries, sql, bindVariables, options)
|
res, transactionID, reservedID, alias, err = conn.ReserveBeginExecute(ctx, target, preQueries, postBeginQueries, sql, bindVariables, options)
|
||||||
return canRetry(ctx, err), err
|
return canRetry(ctx, err), err
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -513,9 +513,9 @@ func (sbc *SandboxConn) HandlePanic(err *error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//ReserveBeginExecute implements the QueryService interface
|
//ReserveBeginExecute implements the QueryService interface
|
||||||
func (sbc *SandboxConn) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
func (sbc *SandboxConn) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
||||||
reservedID := sbc.reserve(ctx, target, preQueries, bindVariables, 0, options)
|
reservedID := sbc.reserve(ctx, target, preQueries, bindVariables, 0, options)
|
||||||
result, transactionID, alias, err := sbc.BeginExecute(ctx, target, nil, sql, bindVariables, reservedID, options)
|
result, transactionID, alias, err := sbc.BeginExecute(ctx, target, postBeginQueries, sql, bindVariables, reservedID, options)
|
||||||
if transactionID != 0 {
|
if transactionID != 0 {
|
||||||
sbc.setTxReservedID(transactionID, reservedID)
|
sbc.setTxReservedID(transactionID, reservedID)
|
||||||
}
|
}
|
||||||
|
|
|
@ -729,7 +729,7 @@ func (f *FakeQueryService) QueryServiceByAlias(_ *topodatapb.TabletAlias, _ *que
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReserveBeginExecute satisfies the Gateway interface
|
// ReserveBeginExecute satisfies the Gateway interface
|
||||||
func (f *FakeQueryService) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
func (f *FakeQueryService) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
||||||
panic("implement me")
|
panic("implement me")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1136,7 +1136,7 @@ func (tsv *TabletServer) VStreamResults(ctx context.Context, target *querypb.Tar
|
||||||
}
|
}
|
||||||
|
|
||||||
//ReserveBeginExecute implements the QueryService interface
|
//ReserveBeginExecute implements the QueryService interface
|
||||||
func (tsv *TabletServer) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
func (tsv *TabletServer) ReserveBeginExecute(ctx context.Context, target *querypb.Target, preQueries []string, postBeginQueries []string, sql string, bindVariables map[string]*querypb.BindVariable, options *querypb.ExecuteOptions) (*sqltypes.Result, int64, int64, *topodatapb.TabletAlias, error) {
|
||||||
|
|
||||||
var connID int64
|
var connID int64
|
||||||
var err error
|
var err error
|
||||||
|
@ -1147,7 +1147,7 @@ func (tsv *TabletServer) ReserveBeginExecute(ctx context.Context, target *queryp
|
||||||
target, options, false, /* allowOnShutdown */
|
target, options, false, /* allowOnShutdown */
|
||||||
func(ctx context.Context, logStats *tabletenv.LogStats) error {
|
func(ctx context.Context, logStats *tabletenv.LogStats) error {
|
||||||
defer tsv.stats.QueryTimings.Record("RESERVE", time.Now())
|
defer tsv.stats.QueryTimings.Record("RESERVE", time.Now())
|
||||||
connID, err = tsv.te.ReserveBegin(ctx, options, preQueries)
|
connID, err = tsv.te.ReserveBegin(ctx, options, preQueries, postBeginQueries)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -622,7 +622,7 @@ func TestMakeSureToCloseDbConnWhenBeginQueryFails(t *testing.T) {
|
||||||
options := &querypb.ExecuteOptions{}
|
options := &querypb.ExecuteOptions{}
|
||||||
|
|
||||||
// run a query with a non-existent reserved id
|
// run a query with a non-existent reserved id
|
||||||
_, _, _, _, err := tsv.ReserveBeginExecute(ctx, &target, []string{}, "select 42", nil, options)
|
_, _, _, _, err := tsv.ReserveBeginExecute(ctx, &target, []string{}, nil, "select 42", nil, options)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -636,7 +636,7 @@ func TestTabletServerReserveAndBeginCommit(t *testing.T) {
|
||||||
options := &querypb.ExecuteOptions{}
|
options := &querypb.ExecuteOptions{}
|
||||||
|
|
||||||
// reserve a connection and a transaction
|
// reserve a connection and a transaction
|
||||||
_, txID, rID, _, err := tsv.ReserveBeginExecute(ctx, &target, nil, "select 42", nil, options)
|
_, txID, rID, _, err := tsv.ReserveBeginExecute(ctx, &target, nil, nil, "select 42", nil, options)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer func() {
|
defer func() {
|
||||||
// fallback so the test finishes quickly
|
// fallback so the test finishes quickly
|
||||||
|
@ -2048,7 +2048,7 @@ func TestReserveBeginExecute(t *testing.T) {
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY}
|
target := querypb.Target{TabletType: topodatapb.TabletType_PRIMARY}
|
||||||
|
|
||||||
_, transactionID, reservedID, _, err := tsv.ReserveBeginExecute(ctx, &target, []string{"select 43"}, "select 42", nil, &querypb.ExecuteOptions{})
|
_, transactionID, reservedID, _, err := tsv.ReserveBeginExecute(ctx, &target, []string{"select 43"}, nil, "select 42", nil, &querypb.ExecuteOptions{})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
assert.Greater(t, transactionID, int64(0), "transactionID")
|
assert.Greater(t, transactionID, int64(0), "transactionID")
|
||||||
|
@ -2153,7 +2153,7 @@ func TestRelease(t *testing.T) {
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case test.begin && test.reserve:
|
case test.begin && test.reserve:
|
||||||
_, transactionID, reservedID, _, err = tsv.ReserveBeginExecute(ctx, &target, []string{"select 1212"}, "select 42", nil, &querypb.ExecuteOptions{})
|
_, transactionID, reservedID, _, err = tsv.ReserveBeginExecute(ctx, &target, []string{"select 1212"}, nil, "select 42", nil, &querypb.ExecuteOptions{})
|
||||||
require.NotEqual(t, int64(0), transactionID)
|
require.NotEqual(t, int64(0), transactionID)
|
||||||
require.NotEqual(t, int64(0), reservedID)
|
require.NotEqual(t, int64(0), reservedID)
|
||||||
case test.begin:
|
case test.begin:
|
||||||
|
@ -2191,7 +2191,7 @@ func TestReserveStats(t *testing.T) {
|
||||||
ctx := callerid.NewContext(context.Background(), nil, callerID)
|
ctx := callerid.NewContext(context.Background(), nil, callerID)
|
||||||
|
|
||||||
// Starts reserved connection and transaction
|
// Starts reserved connection and transaction
|
||||||
_, rbeTxID, rbeRID, _, err := tsv.ReserveBeginExecute(ctx, &target, nil, "select 42", nil, &querypb.ExecuteOptions{})
|
_, rbeTxID, rbeRID, _, err := tsv.ReserveBeginExecute(ctx, &target, nil, nil, "select 42", nil, &querypb.ExecuteOptions{})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.EqualValues(t, 1, tsv.te.txPool.env.Stats().UserActiveReservedCount.Counts()["test"])
|
assert.EqualValues(t, 1, tsv.te.txPool.env.Stats().UserActiveReservedCount.Counts()["test"])
|
||||||
|
|
||||||
|
@ -2477,7 +2477,7 @@ func TestDatabaseNameReplaceByKeyspaceNameReserveBeginExecuteMethod(t *testing.T
|
||||||
target := tsv.sm.target
|
target := tsv.sm.target
|
||||||
|
|
||||||
// Test for ReserveBeginExecute
|
// Test for ReserveBeginExecute
|
||||||
res, transactionID, reservedID, _, err := tsv.ReserveBeginExecute(ctx, target, nil, executeSQL, nil, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL})
|
res, transactionID, reservedID, _, err := tsv.ReserveBeginExecute(ctx, target, nil, nil, executeSQL, nil, &querypb.ExecuteOptions{IncludedFields: querypb.ExecuteOptions_ALL})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
for _, field := range res.Fields {
|
for _, field := range res.Fields {
|
||||||
require.Equal(t, "keyspaceName", field.Database)
|
require.Equal(t, "keyspaceName", field.Database)
|
||||||
|
|
|
@ -491,7 +491,7 @@ func (te *TxEngine) stopWatchdog() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReserveBegin creates a reserved connection, and in it opens a transaction
|
// ReserveBegin creates a reserved connection, and in it opens a transaction
|
||||||
func (te *TxEngine) ReserveBegin(ctx context.Context, options *querypb.ExecuteOptions, preQueries []string) (int64, error) {
|
func (te *TxEngine) ReserveBegin(ctx context.Context, options *querypb.ExecuteOptions, preQueries []string, postBeginQueries []string) (int64, error) {
|
||||||
span, ctx := trace.NewSpan(ctx, "TxEngine.ReserveBegin")
|
span, ctx := trace.NewSpan(ctx, "TxEngine.ReserveBegin")
|
||||||
defer span.Finish()
|
defer span.Finish()
|
||||||
err := te.isTxPoolAvailable(te.beginRequests.Add)
|
err := te.isTxPoolAvailable(te.beginRequests.Add)
|
||||||
|
@ -505,7 +505,7 @@ func (te *TxEngine) ReserveBegin(ctx context.Context, options *querypb.ExecuteOp
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
defer conn.UnlockUpdateTime()
|
defer conn.UnlockUpdateTime()
|
||||||
_, err = te.txPool.begin(ctx, options, te.state == AcceptingReadOnly, conn, nil)
|
_, err = te.txPool.begin(ctx, options, te.state == AcceptingReadOnly, conn, postBeginQueries)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
conn.Close()
|
conn.Close()
|
||||||
conn.Release(tx.ConnInitFail)
|
conn.Release(tx.ConnInitFail)
|
||||||
|
|
|
@ -135,7 +135,7 @@ func TestTxEngineClose(t *testing.T) {
|
||||||
te.AcceptReadWrite()
|
te.AcceptReadWrite()
|
||||||
_, err = te.Reserve(ctx, &querypb.ExecuteOptions{}, 0, nil)
|
_, err = te.Reserve(ctx, &querypb.ExecuteOptions{}, 0, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
_, err = te.ReserveBegin(ctx, &querypb.ExecuteOptions{}, nil)
|
_, err = te.ReserveBegin(ctx, &querypb.ExecuteOptions{}, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
start = time.Now()
|
start = time.Now()
|
||||||
te.Close()
|
te.Close()
|
||||||
|
@ -158,7 +158,7 @@ func TestTxEngineBegin(t *testing.T) {
|
||||||
return tx, err
|
return tx, err
|
||||||
},
|
},
|
||||||
func() (int64, error) {
|
func() (int64, error) {
|
||||||
return te.ReserveBegin(ctx, &querypb.ExecuteOptions{}, nil)
|
return te.ReserveBegin(ctx, &querypb.ExecuteOptions{}, nil, nil)
|
||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
te.AcceptReadOnly()
|
te.AcceptReadOnly()
|
||||||
|
@ -197,7 +197,7 @@ func TestTxEngineRenewFails(t *testing.T) {
|
||||||
te := NewTxEngine(tabletenv.NewEnv(config, "TabletServerTest"))
|
te := NewTxEngine(tabletenv.NewEnv(config, "TabletServerTest"))
|
||||||
te.AcceptReadOnly()
|
te.AcceptReadOnly()
|
||||||
options := &querypb.ExecuteOptions{}
|
options := &querypb.ExecuteOptions{}
|
||||||
connID, err := te.ReserveBegin(ctx, options, nil)
|
connID, err := te.ReserveBegin(ctx, options, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
conn, err := te.txPool.GetAndLock(connID, "for test")
|
conn, err := te.txPool.GetAndLock(connID, "for test")
|
||||||
|
@ -568,7 +568,7 @@ func TestTxEngineFailReserve(t *testing.T) {
|
||||||
_, err := te.Reserve(ctx, options, 0, nil)
|
_, err := te.Reserve(ctx, options, 0, nil)
|
||||||
assert.EqualError(t, err, "tx engine can't accept new connections in state NotServing")
|
assert.EqualError(t, err, "tx engine can't accept new connections in state NotServing")
|
||||||
|
|
||||||
_, err = te.ReserveBegin(ctx, options, nil)
|
_, err = te.ReserveBegin(ctx, options, nil, nil)
|
||||||
assert.EqualError(t, err, "tx engine can't accept new connections in state NotServing")
|
assert.EqualError(t, err, "tx engine can't accept new connections in state NotServing")
|
||||||
|
|
||||||
te.AcceptReadOnly()
|
te.AcceptReadOnly()
|
||||||
|
@ -577,7 +577,7 @@ func TestTxEngineFailReserve(t *testing.T) {
|
||||||
_, err = te.Reserve(ctx, options, 0, []string{"dummy_query"})
|
_, err = te.Reserve(ctx, options, 0, []string{"dummy_query"})
|
||||||
assert.EqualError(t, err, "unknown error: failed executing dummy_query (errno 1105) (sqlstate HY000) during query: dummy_query")
|
assert.EqualError(t, err, "unknown error: failed executing dummy_query (errno 1105) (sqlstate HY000) during query: dummy_query")
|
||||||
|
|
||||||
_, err = te.ReserveBegin(ctx, options, []string{"dummy_query"})
|
_, err = te.ReserveBegin(ctx, options, []string{"dummy_query"}, nil)
|
||||||
assert.EqualError(t, err, "unknown error: failed executing dummy_query (errno 1105) (sqlstate HY000) during query: dummy_query")
|
assert.EqualError(t, err, "unknown error: failed executing dummy_query (errno 1105) (sqlstate HY000) during query: dummy_query")
|
||||||
|
|
||||||
nonExistingID := int64(42)
|
nonExistingID := int64(42)
|
||||||
|
|
|
@ -721,6 +721,7 @@ message ReserveBeginExecuteRequest {
|
||||||
BoundQuery query = 4;
|
BoundQuery query = 4;
|
||||||
ExecuteOptions options = 5;
|
ExecuteOptions options = 5;
|
||||||
repeated string pre_queries = 6;
|
repeated string pre_queries = 6;
|
||||||
|
repeated string post_begin_queries = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReserveBeginExecuteResponse is the returned value from ReserveBeginExecute
|
// ReserveBeginExecuteResponse is the returned value from ReserveBeginExecute
|
||||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -22929,6 +22929,9 @@ export namespace query {
|
||||||
|
|
||||||
/** ReserveBeginExecuteRequest pre_queries */
|
/** ReserveBeginExecuteRequest pre_queries */
|
||||||
pre_queries?: (string[]|null);
|
pre_queries?: (string[]|null);
|
||||||
|
|
||||||
|
/** ReserveBeginExecuteRequest post_begin_queries */
|
||||||
|
post_begin_queries?: (string[]|null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Represents a ReserveBeginExecuteRequest. */
|
/** Represents a ReserveBeginExecuteRequest. */
|
||||||
|
@ -22958,6 +22961,9 @@ export namespace query {
|
||||||
/** ReserveBeginExecuteRequest pre_queries. */
|
/** ReserveBeginExecuteRequest pre_queries. */
|
||||||
public pre_queries: string[];
|
public pre_queries: string[];
|
||||||
|
|
||||||
|
/** ReserveBeginExecuteRequest post_begin_queries. */
|
||||||
|
public post_begin_queries: string[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new ReserveBeginExecuteRequest instance using the specified properties.
|
* Creates a new ReserveBeginExecuteRequest instance using the specified properties.
|
||||||
* @param [properties] Properties to set
|
* @param [properties] Properties to set
|
||||||
|
|
|
@ -53781,6 +53781,7 @@ $root.query = (function() {
|
||||||
* @property {query.IBoundQuery|null} [query] ReserveBeginExecuteRequest query
|
* @property {query.IBoundQuery|null} [query] ReserveBeginExecuteRequest query
|
||||||
* @property {query.IExecuteOptions|null} [options] ReserveBeginExecuteRequest options
|
* @property {query.IExecuteOptions|null} [options] ReserveBeginExecuteRequest options
|
||||||
* @property {Array.<string>|null} [pre_queries] ReserveBeginExecuteRequest pre_queries
|
* @property {Array.<string>|null} [pre_queries] ReserveBeginExecuteRequest pre_queries
|
||||||
|
* @property {Array.<string>|null} [post_begin_queries] ReserveBeginExecuteRequest post_begin_queries
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -53793,6 +53794,7 @@ $root.query = (function() {
|
||||||
*/
|
*/
|
||||||
function ReserveBeginExecuteRequest(properties) {
|
function ReserveBeginExecuteRequest(properties) {
|
||||||
this.pre_queries = [];
|
this.pre_queries = [];
|
||||||
|
this.post_begin_queries = [];
|
||||||
if (properties)
|
if (properties)
|
||||||
for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
|
for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
|
||||||
if (properties[keys[i]] != null)
|
if (properties[keys[i]] != null)
|
||||||
|
@ -53847,6 +53849,14 @@ $root.query = (function() {
|
||||||
*/
|
*/
|
||||||
ReserveBeginExecuteRequest.prototype.pre_queries = $util.emptyArray;
|
ReserveBeginExecuteRequest.prototype.pre_queries = $util.emptyArray;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ReserveBeginExecuteRequest post_begin_queries.
|
||||||
|
* @member {Array.<string>} post_begin_queries
|
||||||
|
* @memberof query.ReserveBeginExecuteRequest
|
||||||
|
* @instance
|
||||||
|
*/
|
||||||
|
ReserveBeginExecuteRequest.prototype.post_begin_queries = $util.emptyArray;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new ReserveBeginExecuteRequest instance using the specified properties.
|
* Creates a new ReserveBeginExecuteRequest instance using the specified properties.
|
||||||
* @function create
|
* @function create
|
||||||
|
@ -53884,6 +53894,9 @@ $root.query = (function() {
|
||||||
if (message.pre_queries != null && message.pre_queries.length)
|
if (message.pre_queries != null && message.pre_queries.length)
|
||||||
for (var i = 0; i < message.pre_queries.length; ++i)
|
for (var i = 0; i < message.pre_queries.length; ++i)
|
||||||
writer.uint32(/* id 6, wireType 2 =*/50).string(message.pre_queries[i]);
|
writer.uint32(/* id 6, wireType 2 =*/50).string(message.pre_queries[i]);
|
||||||
|
if (message.post_begin_queries != null && message.post_begin_queries.length)
|
||||||
|
for (var i = 0; i < message.post_begin_queries.length; ++i)
|
||||||
|
writer.uint32(/* id 7, wireType 2 =*/58).string(message.post_begin_queries[i]);
|
||||||
return writer;
|
return writer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -53938,6 +53951,11 @@ $root.query = (function() {
|
||||||
message.pre_queries = [];
|
message.pre_queries = [];
|
||||||
message.pre_queries.push(reader.string());
|
message.pre_queries.push(reader.string());
|
||||||
break;
|
break;
|
||||||
|
case 7:
|
||||||
|
if (!(message.post_begin_queries && message.post_begin_queries.length))
|
||||||
|
message.post_begin_queries = [];
|
||||||
|
message.post_begin_queries.push(reader.string());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
reader.skipType(tag & 7);
|
reader.skipType(tag & 7);
|
||||||
break;
|
break;
|
||||||
|
@ -54005,6 +54023,13 @@ $root.query = (function() {
|
||||||
if (!$util.isString(message.pre_queries[i]))
|
if (!$util.isString(message.pre_queries[i]))
|
||||||
return "pre_queries: string[] expected";
|
return "pre_queries: string[] expected";
|
||||||
}
|
}
|
||||||
|
if (message.post_begin_queries != null && message.hasOwnProperty("post_begin_queries")) {
|
||||||
|
if (!Array.isArray(message.post_begin_queries))
|
||||||
|
return "post_begin_queries: array expected";
|
||||||
|
for (var i = 0; i < message.post_begin_queries.length; ++i)
|
||||||
|
if (!$util.isString(message.post_begin_queries[i]))
|
||||||
|
return "post_begin_queries: string[] expected";
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -54052,6 +54077,13 @@ $root.query = (function() {
|
||||||
for (var i = 0; i < object.pre_queries.length; ++i)
|
for (var i = 0; i < object.pre_queries.length; ++i)
|
||||||
message.pre_queries[i] = String(object.pre_queries[i]);
|
message.pre_queries[i] = String(object.pre_queries[i]);
|
||||||
}
|
}
|
||||||
|
if (object.post_begin_queries) {
|
||||||
|
if (!Array.isArray(object.post_begin_queries))
|
||||||
|
throw TypeError(".query.ReserveBeginExecuteRequest.post_begin_queries: array expected");
|
||||||
|
message.post_begin_queries = [];
|
||||||
|
for (var i = 0; i < object.post_begin_queries.length; ++i)
|
||||||
|
message.post_begin_queries[i] = String(object.post_begin_queries[i]);
|
||||||
|
}
|
||||||
return message;
|
return message;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -54068,8 +54100,10 @@ $root.query = (function() {
|
||||||
if (!options)
|
if (!options)
|
||||||
options = {};
|
options = {};
|
||||||
var object = {};
|
var object = {};
|
||||||
if (options.arrays || options.defaults)
|
if (options.arrays || options.defaults) {
|
||||||
object.pre_queries = [];
|
object.pre_queries = [];
|
||||||
|
object.post_begin_queries = [];
|
||||||
|
}
|
||||||
if (options.defaults) {
|
if (options.defaults) {
|
||||||
object.effective_caller_id = null;
|
object.effective_caller_id = null;
|
||||||
object.immediate_caller_id = null;
|
object.immediate_caller_id = null;
|
||||||
|
@ -54092,6 +54126,11 @@ $root.query = (function() {
|
||||||
for (var j = 0; j < message.pre_queries.length; ++j)
|
for (var j = 0; j < message.pre_queries.length; ++j)
|
||||||
object.pre_queries[j] = message.pre_queries[j];
|
object.pre_queries[j] = message.pre_queries[j];
|
||||||
}
|
}
|
||||||
|
if (message.post_begin_queries && message.post_begin_queries.length) {
|
||||||
|
object.post_begin_queries = [];
|
||||||
|
for (var j = 0; j < message.post_begin_queries.length; ++j)
|
||||||
|
object.post_begin_queries[j] = message.post_begin_queries[j];
|
||||||
|
}
|
||||||
return object;
|
return object;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче