Skip to content

Commit 08777cb

Browse files
committed
Added tests for prepared metadata id and conditional statements
1 parent 0855cbd commit 08777cb

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

tests/integration/standard/test_prepared_statements.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)