diff --git a/spanner/spannertest/db.go b/spanner/spannertest/db.go
index a099b58..6e3884b 100644
--- a/spanner/spannertest/db.go
+++ b/spanner/spannertest/db.go
@@ -189,6 +189,40 @@
 	return d.lastTS
 }
 
+func (d *database) GetDDL() []spansql.DDLStmt {
+	// This lacks fidelity, but captures the details we support.
+	d.mu.Lock()
+	defer d.mu.Unlock()
+
+	var stmts []spansql.DDLStmt
+
+	for name, t := range d.tables {
+		ct := &spansql.CreateTable{
+			Name: name,
+		}
+
+		t.mu.Lock()
+		for i, col := range t.cols {
+			ct.Columns = append(ct.Columns, spansql.ColumnDef{
+				Name: col.Name,
+				Type: col.Type,
+				// TODO: NotNull, AllowCommitTimestamp
+			})
+			if i < t.pkCols {
+				ct.PrimaryKey = append(ct.PrimaryKey, spansql.KeyPart{
+					Column: col.Name,
+					Desc:   t.pkDesc[i],
+				})
+			}
+		}
+		t.mu.Unlock()
+
+		stmts = append(stmts, ct)
+	}
+
+	return stmts
+}
+
 func (d *database) ApplyDDL(stmt spansql.DDLStmt) *status.Status {
 	d.mu.Lock()
 	defer d.mu.Unlock()
diff --git a/spanner/spannertest/inmem.go b/spanner/spannertest/inmem.go
index 37d19c8..cc8a514 100644
--- a/spanner/spannertest/inmem.go
+++ b/spanner/spannertest/inmem.go
@@ -292,6 +292,16 @@
 	return s.db.ApplyDDL(stmt)
 }
 
+func (s *server) GetDatabaseDdl(ctx context.Context, req *adminpb.GetDatabaseDdlRequest) (*adminpb.GetDatabaseDdlResponse, error) {
+	s.logf("GetDatabaseDdl(%q)", req.Database)
+
+	var resp adminpb.GetDatabaseDdlResponse
+	for _, stmt := range s.db.GetDDL() {
+		resp.Statements = append(resp.Statements, stmt.SQL())
+	}
+	return &resp, nil
+}
+
 func (s *server) CreateSession(ctx context.Context, req *spannerpb.CreateSessionRequest) (*spannerpb.Session, error) {
 	//s.logf("CreateSession(%q)", req.Database)
 	return s.newSession(), nil
