@@ -546,6 +546,50 @@ TEST_F(RealtimeWriteInteTest, TestReadMemoryBeforePrepareCommit) {
546546 ASSERT_OK (writer->Close ());
547547}
548548
549+ TEST_F (RealtimeWriteInteTest, TestPlanExcludesRowsWrittenAfterMemoryEndOffset) {
550+ CreateTable (/* partition_keys=*/ {});
551+ ASSERT_OK_AND_ASSIGN (std::shared_ptr<RealtimeContext> realtime_context,
552+ RealtimeContext::Create ());
553+ ASSERT_OK_AND_ASSIGN (std::unique_ptr<FileStoreWrite> writer,
554+ CreateRealtimeWriter (realtime_context));
555+
556+ std::vector<Row> first_rows = MakeRows (/* first_id=*/ 0 , /* count=*/ 10 , /* partition=*/ " p0" );
557+ ASSERT_OK_AND_ASSIGN (std::unique_ptr<RecordBatch> first_batch,
558+ MakeBatch (first_rows, /* partitioned=*/ false ));
559+ ASSERT_OK (writer->Write (std::move (first_batch)));
560+ ASSERT_OK_AND_ASSIGN (std::shared_ptr<Plan> first_plan,
561+ CreatePlan (realtime_context, /* predicate=*/ nullptr ));
562+ ASSERT_EQ (1 , first_plan->Splits ().size ());
563+ std::shared_ptr<RealtimeSplit> first_realtime_split =
564+ std::dynamic_pointer_cast<RealtimeSplit>(first_plan->Splits ()[0 ]);
565+ ASSERT_NE (nullptr , first_realtime_split);
566+ ASSERT_EQ (10 , first_realtime_split->MemoryEndOffset ());
567+
568+ std::vector<Row> second_rows = MakeRows (/* first_id=*/ 10 , /* count=*/ 5 , /* partition=*/ " p0" );
569+ ASSERT_OK_AND_ASSIGN (std::unique_ptr<RecordBatch> second_batch,
570+ MakeBatch (second_rows, /* partitioned=*/ false ));
571+ ASSERT_OK (writer->Write (std::move (second_batch)));
572+
573+ ASSERT_OK_AND_ASSIGN (std::vector<Row> first_actual_rows,
574+ ReadRows (first_plan, realtime_context));
575+ ASSERT_EQ (first_rows, first_actual_rows);
576+
577+ ASSERT_OK_AND_ASSIGN (std::shared_ptr<Plan> second_plan,
578+ CreatePlan (realtime_context, /* predicate=*/ nullptr ));
579+ ASSERT_EQ (1 , second_plan->Splits ().size ());
580+ std::shared_ptr<RealtimeSplit> second_realtime_split =
581+ std::dynamic_pointer_cast<RealtimeSplit>(second_plan->Splits ()[0 ]);
582+ ASSERT_NE (nullptr , second_realtime_split);
583+ ASSERT_EQ (15 , second_realtime_split->MemoryEndOffset ());
584+
585+ std::vector<Row> expected_rows = first_rows;
586+ expected_rows.insert (expected_rows.end (), second_rows.begin (), second_rows.end ());
587+ ASSERT_OK_AND_ASSIGN (std::vector<Row> second_actual_rows,
588+ ReadRows (second_plan, realtime_context));
589+ ASSERT_EQ (expected_rows, second_actual_rows);
590+ ASSERT_OK (writer->Close ());
591+ }
592+
549593TEST_F (RealtimeWriteInteTest, TestReadFailsAfterRealtimeSplitTicketExpires) {
550594 options_[Options::REALTIME_READ_VIEW_TTL ] = " 10 ms" ;
551595 CreateTable (/* partition_keys=*/ {});
0 commit comments