@@ -307,6 +307,78 @@ fn test_row_count() -> TestResult {
307307 Ok ( ( ) )
308308}
309309
310+ #[ test]
311+ fn test_transactional ( ) -> TestResult {
312+ let mut buffer = Buffer :: new ( ProtocolVersion :: V2 ) ;
313+
314+ // transactional since there are no recorded tables yet
315+ assert_eq ! ( buffer. row_count( ) , 0 ) ;
316+ assert ! ( buffer. transactional( ) ) ;
317+
318+ buffer. set_marker ( ) ?;
319+ buffer. table ( "table 1.test" ) ?. symbol ( "a" , "b" ) ?. at_now ( ) ?;
320+ assert_eq ! ( buffer. row_count( ) , 1 ) ; // tables={'table 1.test'}
321+
322+ // still transactional since there is only one single table.
323+ assert ! ( buffer. transactional( ) ) ;
324+
325+ buffer. table ( "table 2.test" ) ?. symbol ( "c" , "d" ) ?. at_now ( ) ?;
326+
327+ // not transactional since we have both tables "x" and "y".
328+ assert_eq ! ( buffer. row_count( ) , 2 ) ; // tables={'table 1.test', 'table 2.test'}
329+ assert ! ( !buffer. transactional( ) ) ;
330+
331+ buffer. rewind_to_marker ( ) ?;
332+ // no tables, so we're transactional again
333+ assert_eq ! ( buffer. row_count( ) , 0 ) ; // tables=[]
334+ assert ! ( buffer. transactional( ) ) ;
335+ assert ! ( buffer. is_empty( ) ) ;
336+
337+ // We add another new and different table, so we are still transactional.
338+ buffer. table ( "test=table=3" ) ?. symbol ( "e" , "f" ) ?. at_now ( ) ?;
339+ assert_eq ! ( buffer. row_count( ) , 1 ) ; // tables={'test=table=3'}
340+ assert ! ( buffer. transactional( ) ) ;
341+
342+ // Same table again, so we are still transactional.
343+ buffer. table ( "test=table=3" ) ?. symbol ( "g" , "h" ) ?. at_now ( ) ?;
344+ assert_eq ! ( buffer. row_count( ) , 2 ) ; // tables={'test=table=3'}
345+ assert ! ( buffer. transactional( ) ) ;
346+
347+ buffer. set_marker ( ) ?;
348+ // We add a new different table: Name differs in length.
349+ buffer. table ( "test=table=3 " ) ?. symbol ( "i" , "j" ) ?. at_now ( ) ?;
350+ assert_eq ! ( buffer. row_count( ) , 3 ) ; // tables={'test=table=3', 'test=table=3 '}
351+ assert ! ( !buffer. transactional( ) ) ;
352+
353+ buffer. rewind_to_marker ( ) ?;
354+ assert_eq ! ( buffer. row_count( ) , 2 ) ; // tables={'test=table=3'}
355+ assert ! ( buffer. transactional( ) ) ;
356+
357+ buffer. set_marker ( ) ?;
358+ // We add a new different table: Name differs in content, but not in length.
359+ buffer. table ( "test=table=4" ) ?. symbol ( "k" , "l" ) ?. at_now ( ) ?;
360+ assert_eq ! ( buffer. row_count( ) , 3 ) ; // tables={'test=table=3', 'test=table=4'}
361+ assert ! ( !buffer. transactional( ) ) ;
362+
363+ buffer. rewind_to_marker ( ) ?;
364+ assert_eq ! ( buffer. row_count( ) , 2 ) ; // tables={'test=table=3'}
365+ assert ! ( buffer. transactional( ) ) ;
366+
367+ buffer. clear ( ) ;
368+ assert_eq ! ( buffer. row_count( ) , 0 ) ; // tables=[]
369+ assert ! ( buffer. transactional( ) ) ;
370+ assert ! ( buffer. is_empty( ) ) ;
371+
372+ // We add three rows of the same new table, so we are still transactional.
373+ buffer. table ( "test=table=5" ) ?. symbol ( "m" , "n" ) ?. at_now ( ) ?;
374+ buffer. table ( "test=table=5" ) ?. symbol ( "o" , "p" ) ?. at_now ( ) ?;
375+ buffer. table ( "test=table=5" ) ?. symbol ( "q" , "r" ) ?. at_now ( ) ?;
376+ assert_eq ! ( buffer. row_count( ) , 3 ) ; // tables={'test=table=5'}
377+ assert ! ( buffer. transactional( ) ) ;
378+
379+ Ok ( ( ) )
380+ }
381+
310382#[ test]
311383fn test_auth_inconsistent_keys ( ) -> TestResult {
312384 test_bad_key ( "fLKYEaoEb9lrn3nkwLDA-M_xnuFOdSt9y0Z7_vWSHLU" , // d
0 commit comments