@@ -307,6 +307,78 @@ fn test_row_count() -> TestResult {
307
307
Ok ( ( ) )
308
308
}
309
309
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
+
310
382
#[ test]
311
383
fn test_auth_inconsistent_keys ( ) -> TestResult {
312
384
test_bad_key ( "fLKYEaoEb9lrn3nkwLDA-M_xnuFOdSt9y0Z7_vWSHLU" , // d
0 commit comments