@@ -345,6 +345,74 @@ func TestTableRowsConcurrent(t *testing.T) {
345345 }
346346}
347347
348+ func TestModifyColumnFamilies (t * testing.T ) {
349+ s := & server {
350+ tables : make (map [string ]* table ),
351+ }
352+ ctx := context .Background ()
353+ tblInfo , err := populateTable (ctx , s )
354+ if err != nil {
355+ t .Fatal (err )
356+ }
357+
358+ readRows := func (expectChunks , expectCols , expectFams int ) {
359+ t .Helper ()
360+ mock := & MockReadRowsServer {}
361+ req := & btpb.ReadRowsRequest {TableName : tblInfo .Name }
362+ if err := s .ReadRows (req , mock ); err != nil {
363+ t .Fatalf ("ReadRows error: %v" , err )
364+ }
365+ cols := map [string ]bool {}
366+ fams := map [string ]bool {}
367+ chunks := 0
368+ for _ , r := range mock .responses {
369+ for _ , c := range r .Chunks {
370+ chunks ++
371+ colName := c .FamilyName .Value + "." + string (c .Qualifier .Value )
372+ cols [colName ] = true
373+ fams [c .FamilyName .Value ] = true
374+ }
375+ }
376+ if got , want := len (fams ), expectFams ; got != want {
377+ t .Errorf ("col count: got %d, want %d" , got , want )
378+ }
379+ if got , want := len (cols ), expectCols ; got != want {
380+ t .Errorf ("col count: got %d, want %d" , got , want )
381+ }
382+ if got , want := chunks , expectChunks ; got != want {
383+ t .Errorf ("chunk count: got %d, want %d" , got , want )
384+ }
385+ }
386+
387+ readRows (27 , 9 , 3 )
388+
389+ // Now drop the middle column.
390+ if _ , err := s .ModifyColumnFamilies (ctx , & btapb.ModifyColumnFamiliesRequest {
391+ Name : tblInfo .Name ,
392+ Modifications : []* btapb.ModifyColumnFamiliesRequest_Modification {{
393+ Id : "cf1" ,
394+ Mod : & btapb.ModifyColumnFamiliesRequest_Modification_Drop {Drop : true },
395+ }},
396+ }); err != nil {
397+ t .Fatalf ("ModifyColumnFamilies error: %v" , err )
398+ }
399+
400+ readRows (18 , 6 , 2 )
401+
402+ // adding the column back should not re-create the data.
403+ if _ , err := s .ModifyColumnFamilies (ctx , & btapb.ModifyColumnFamiliesRequest {
404+ Name : tblInfo .Name ,
405+ Modifications : []* btapb.ModifyColumnFamiliesRequest_Modification {{
406+ Id : "cf1" ,
407+ Mod : & btapb.ModifyColumnFamiliesRequest_Modification_Create {Create : & btapb.ColumnFamily {}},
408+ }},
409+ }); err != nil {
410+ t .Fatalf ("ModifyColumnFamilies error: %v" , err )
411+ }
412+
413+ readRows (18 , 6 , 2 )
414+ }
415+
348416func TestDropRowRange (t * testing.T ) {
349417 s := & server {
350418 tables : make (map [string ]* table ),
0 commit comments