From c987d4c67aea75bbce7087c158fdaeecc9317ceb Mon Sep 17 00:00:00 2001 From: Benjamin MARTIN Date: Thu, 8 Feb 2024 10:08:36 +0100 Subject: [PATCH] fix: prevent database rebuild when server starting --- server/loader.go | 22 +++++++++++++++++++--- server/source.go | 4 ++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/server/loader.go b/server/loader.go index 633076ed1..12829d137 100644 --- a/server/loader.go +++ b/server/loader.go @@ -7,16 +7,16 @@ import ( "github.com/goccy/bigquery-emulator/types" ) -func (s *Server) addProjects(ctx context.Context, projects []*types.Project) error { +func (s *Server) addProjects(ctx context.Context, projects []*types.Project, reload bool) error { for _, project := range projects { - if err := s.addProject(ctx, project); err != nil { + if err := s.addProject(ctx, project, reload); err != nil { return err } } return nil } -func (s *Server) addProject(ctx context.Context, project *types.Project) error { +func (s *Server) addProject(ctx context.Context, project *types.Project, reload bool) error { conn, err := s.connMgr.Connection(ctx, project.ID, "") if err != nil { return err @@ -40,6 +40,22 @@ func (s *Server) addProject(ctx context.Context, project *types.Project) error { return err } if found != nil { + if !reload { + return nil + } + + for _, dataset := range found.Datasets() { + for _, table := range dataset.Tables() { + if err := table.Delete(ctx, tx.Tx()); err != nil { + return err + } + } + + if err := dataset.Delete(ctx, tx.Tx()); err != nil { + return err + } + } + if err := s.metaRepo.UpdateProject(ctx, tx.Tx(), p); err != nil { return err } diff --git a/server/source.go b/server/source.go index dfd0c3790..67702c22c 100644 --- a/server/source.go +++ b/server/source.go @@ -32,12 +32,12 @@ func YAMLSource(path string) Source { if err := dec.Decode(&v); err != nil { return errors.New(yaml.FormatError(err, false, true)) } - return s.addProjects(context.Background(), v.Projects) + return s.addProjects(context.Background(), v.Projects, true) } } func StructSource(projects ...*types.Project) Source { return func(s *Server) error { - return s.addProjects(context.Background(), projects) + return s.addProjects(context.Background(), projects, false) } }