@@ -447,6 +447,7 @@ def test_prepared_id_is_update(self):
447447 """
448448 prepared_statement = self .session .prepare ("SELECT * from {} WHERE a = ?" .format (self .table_name ))
449449 id_before = prepared_statement .result_metadata_id
450+ self .assertEqual (len (prepared_statement .result_metadata ), 3 )
450451
451452 self .session .execute ("ALTER TABLE {} ADD c int" .format (self .table_name ))
452453 bound_statement = prepared_statement .bind ((1 , ))
@@ -455,6 +456,7 @@ def test_prepared_id_is_update(self):
455456 id_after = prepared_statement .result_metadata_id
456457
457458 self .assertNotEqual (id_before , id_after )
459+ self .assertEqual (len (prepared_statement .result_metadata ), 4 )
458460
459461 def test_prepared_id_is_updated_across_pages (self ):
460462 """
@@ -468,6 +470,7 @@ def test_prepared_id_is_updated_across_pages(self):
468470 """
469471 prepared_statement = self .session .prepare ("SELECT * from {}" .format (self .table_name ))
470472 id_before = prepared_statement .result_metadata_id
473+ self .assertEqual (len (prepared_statement .result_metadata ), 3 )
471474
472475 prepared_statement .fetch_size = 2
473476 result = self .session .execute (prepared_statement .bind ((None )))
@@ -483,6 +486,7 @@ def test_prepared_id_is_updated_across_pages(self):
483486
484487 self .assertEqual (result_set , expected_result_set )
485488 self .assertNotEqual (id_before , id_after )
489+ self .assertEqual (len (prepared_statement .result_metadata ), 4 )
486490
487491 def test_prepare_id_is_updated_across_session (self ):
488492 """
@@ -499,6 +503,7 @@ def test_prepare_id_is_updated_across_session(self):
499503
500504 stm = "SELECT * from {} WHERE a = ?" .format (self .table_name )
501505 one_prepared_stm = one_session .prepare (stm )
506+ self .assertEqual (len (one_prepared_stm .result_metadata ), 3 )
502507
503508 one_id_before = one_prepared_stm .result_metadata_id
504509
@@ -507,6 +512,7 @@ def test_prepare_id_is_updated_across_session(self):
507512
508513 one_id_after = one_prepared_stm .result_metadata_id
509514 self .assertNotEqual (one_id_before , one_id_after )
515+ self .assertEqual (len (one_prepared_stm .result_metadata ), 4 )
510516
511517 def test_not_reprepare_invalid_statements (self ):
512518 """
@@ -521,3 +527,59 @@ def test_not_reprepare_invalid_statements(self):
521527 self .session .execute ("ALTER TABLE {} DROP d" .format (self .table_name ))
522528 with self .assertRaises (InvalidRequest ):
523529 self .session .execute (prepared_statement .bind ((1 , )))
530+
531+ def test_id_is_not_updated_conditional_v4 (self ):
532+ """
533+ Test that verifies that the result_metadata and the
534+ result_metadata_id are udpated correctly in conditional statements
535+ in protocol V4
536+
537+ @since 3.13
538+ @jira_ticket PYTHON-847
539+ """
540+ cluster = Cluster (protocol_version = ProtocolVersion .V4 )
541+ session = cluster .connect ()
542+ self .addCleanup (cluster .shutdown )
543+ self ._test_updated_conditional (session , 9 )
544+
545+ def test_id_is_not_updated_conditional_v5 (self ):
546+ """
547+ Test that verifies that the result_metadata and the
548+ result_metadata_id are udpated correctly in conditional statements
549+ in protocol V5
550+
551+ @since 3.13
552+ @jira_ticket PYTHON-847
553+ """
554+ cluster = Cluster (protocol_version = ProtocolVersion .V5 )
555+ session = cluster .connect ()
556+ self .addCleanup (cluster .shutdown )
557+ self ._test_updated_conditional (session , 10 )
558+
559+ def _test_updated_conditional (self , session , value ):
560+ prepared_statement = session .prepare ("INSERT INTO {}(a, b, d) VALUES "
561+ "(?, ? , ?) IF NOT EXISTS" .format (self .table_name ))
562+ first_id = prepared_statement .result_metadata_id
563+ self .assertEqual (prepared_statement .result_metadata , [])
564+
565+ # Sucessfull conditional update
566+ result = session .execute (prepared_statement , (value , value , value ))
567+ self .assertEqual (result [0 ], (True , ))
568+ second_id = prepared_statement .result_metadata_id
569+ self .assertEqual (first_id , second_id )
570+
571+ # Failed conditional update
572+ result = session .execute (prepared_statement , (value , value , value ))
573+ self .assertEqual (result [0 ], (False , value , value , value ))
574+ third_id = prepared_statement .result_metadata_id
575+ self .assertEqual (first_id , third_id )
576+ self .assertEqual (prepared_statement .result_metadata , [])
577+
578+ session .execute ("ALTER TABLE {} ADD c int" .format (self .table_name ))
579+
580+ # Failed conditional update
581+ result = session .execute (prepared_statement , (value , value , value ))
582+ self .assertEqual (result [0 ], (False , value , value , None , value ))
583+ fourth_id = prepared_statement .result_metadata_id
584+ self .assertEqual (first_id , fourth_id )
585+ self .assertEqual (prepared_statement .result_metadata , [])
0 commit comments