@@ -223,27 +223,31 @@ func TestSkipReadOnly(t *testing.T) {
223223 readonly : false ,
224224 },
225225 {
226- cmd : & cmd.Command {Type : pnet .ComStmtPrepare , Payload : append ([]byte {pnet .ComStmtPrepare .Byte ()}, []byte ("select ?" )... )},
226+ cmd : & cmd.Command {Type : pnet .ComStmtPrepare , CapturedPsID : 1 , Payload : append ([]byte {pnet .ComStmtPrepare .Byte ()}, []byte ("select ?" )... )},
227227 readonly : true ,
228228 },
229229 {
230- cmd : & cmd.Command {Type : pnet .ComStmtExecute , Payload : []byte {pnet .ComStmtExecute .Byte (), 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }},
230+ cmd : & cmd.Command {Type : pnet .ComStmtExecute , CapturedPsID : 1 , Payload : []byte {pnet .ComStmtExecute .Byte (), 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }},
231231 readonly : true ,
232232 },
233233 {
234- cmd : & cmd.Command {Type : pnet .ComStmtFetch , Payload : []byte {pnet .ComStmtFetch .Byte (), 1 , 0 , 0 , 0 }},
234+ cmd : & cmd.Command {Type : pnet .ComStmtFetch , CapturedPsID : 1 , Payload : []byte {pnet .ComStmtFetch .Byte (), 1 , 0 , 0 , 0 }},
235235 readonly : true ,
236236 },
237237 {
238- cmd : & cmd.Command {Type : pnet .ComStmtPrepare , Payload : append ([]byte {pnet .ComStmtPrepare .Byte ()}, []byte ("insert into t value(?)" )... )},
239- readonly : true ,
238+ cmd : & cmd.Command {Type : pnet .ComStmtPrepare , CapturedPsID : 2 , Payload : append ([]byte {pnet .ComStmtPrepare .Byte ()}, []byte ("insert into t value(?)" )... )},
239+ readonly : false ,
240+ },
241+ {
242+ cmd : & cmd.Command {Type : pnet .ComStmtExecute , CapturedPsID : 2 , Payload : []byte {pnet .ComStmtExecute .Byte (), 2 , 0 , 0 , 0 }},
243+ readonly : false ,
240244 },
241245 {
242- cmd : & cmd.Command {Type : pnet .ComStmtExecute , Payload : []byte {pnet .ComStmtExecute .Byte (), 2 , 0 , 0 , 0 }},
246+ cmd : & cmd.Command {Type : pnet .ComStmtSendLongData , CapturedPsID : 2 , Payload : []byte {pnet .ComStmtFetch .Byte (), 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }},
243247 readonly : false ,
244248 },
245249 {
246- cmd : & cmd.Command {Type : pnet .ComStmtSendLongData , Payload : []byte {pnet .ComStmtFetch .Byte (), 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }},
250+ cmd : & cmd.Command {Type : pnet .ComStmtClose , CapturedPsID : 2 , Payload : []byte {pnet .ComStmtClose .Byte (), 2 , 0 , 0 , 0 }},
247251 readonly : false ,
248252 },
249253 {
@@ -315,7 +319,7 @@ func TestReadOnly(t *testing.T) {
315319 {
316320 cmd : pnet .ComStmtPrepare ,
317321 stmt : "insert into t value(?)" ,
318- readOnly : true ,
322+ readOnly : false ,
319323 },
320324 {
321325 cmd : pnet .ComStmtExecute ,
@@ -327,10 +331,15 @@ func TestReadOnly(t *testing.T) {
327331 stmt : "insert into t value(?)" ,
328332 readOnly : false ,
329333 },
334+ {
335+ cmd : pnet .ComStmtExecute ,
336+ stmt : "" ,
337+ readOnly : false ,
338+ },
330339 {
331340 cmd : pnet .ComStmtClose ,
332341 stmt : "insert into t value(?)" ,
333- readOnly : true ,
342+ readOnly : false ,
334343 },
335344 {
336345 cmd : pnet .ComQuit ,
@@ -346,13 +355,19 @@ func TestReadOnly(t *testing.T) {
346355 backendConn := newMockBackendConn ()
347356 conn .backendConn = backendConn
348357 for i , test := range tests {
358+ clear (conn .psIDMapping )
349359 var payload []byte
350360 switch test .cmd {
351- case pnet .ComQuery :
361+ case pnet .ComQuery , pnet . ComStmtPrepare :
352362 payload = append ([]byte {test .cmd .Byte ()}, []byte (test .stmt )... )
353- default :
354- conn .preparedStmts [1 ] = preparedStmt {text : test .stmt }
363+ case pnet .ComStmtExecute , pnet .ComStmtClose , pnet .ComStmtFetch , pnet .ComStmtReset , pnet .ComStmtSendLongData :
364+ prepare := cmd .NewCommand (append ([]byte {pnet .ComStmtPrepare .Byte ()}, []byte (test .stmt )... ), time.Time {}, 100 )
365+ if conn .isReadOnly (prepare ) {
366+ conn .psIDMapping [1 ] = 1
367+ }
355368 payload = []byte {test .cmd .Byte (), 1 , 0 , 0 , 0 }
369+ default :
370+ payload = []byte {test .cmd .Byte ()}
356371 }
357372 command := cmd .NewCommand (payload , time.Time {}, 100 )
358373 require .Equal (t , test .readOnly , conn .isReadOnly (command ), "case %d" , i )
0 commit comments