spanner/spannertest: support adding columns to tables with data

This is restricted to new columns without a NOT NULL qualification.

Updates #1181.

Change-Id: I30533a06fbec9de05a1383a60a7b26f198f1cc4c
Reviewed-on: https://code-review.googlesource.com/c/gocloud/+/43235
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Knut Olav Løite <koloite@gmail.com>
diff --git a/spanner/spannertest/db.go b/spanner/spannertest/db.go
index fdc434e..a253a40 100644
--- a/spanner/spannertest/db.go
+++ b/spanner/spannertest/db.go
@@ -148,6 +148,9 @@
 		default:
 			return status.Newf(codes.Unimplemented, "unhandled DDL table alteration type %T", alt)
 		case spansql.AddColumn:
+			if alt.Def.NotNull {
+				return status.Newf(codes.InvalidArgument, "new non-key columns cannot be NOT NULL")
+			}
 			t.addColumn(alt.Def)
 			return nil
 		}
@@ -450,8 +453,13 @@
 	defer t.mu.Unlock()
 
 	if len(t.rows) > 0 {
-		// TODO: fill with placeholder data instead
-		return status.Newf(codes.Unimplemented, "can't add columns to non-empty tables")
+		if cd.NotNull {
+			// TODO: what happens in this case?
+			return status.Newf(codes.Unimplemented, "can't add NOT NULL columns to non-empty tables yet")
+		}
+		for i := range t.rows {
+			t.rows[i] = append(t.rows[i], nil)
+		}
 	}
 
 	t.cols = append(t.cols, colInfo{