pkg/analyzer/InsertInstallerManager.go (53 lines of code) (raw):

package analyzer import ( "context" "fmt" "log/slog" "strconv" "github.com/ClickHouse/clickhouse-go/v2/lib/driver" "github.com/JetBrains/ij-perf-report-aggregator/pkg/sql-util" "golang.org/x/tools/container/intsets" ) type InsertInstallerManager struct { sql_util.InsertDataManager maxId uint32 insertedIds intsets.Sparse } func NewInstallerInsertManager(insertContext context.Context, db driver.Conn) (*InsertInstallerManager, error) { //noinspection GrazieInspection insertManager := sql_util.NewBatchInsertManager(insertContext, db, "insert into installer", 1, slog.With("type", "installer")) manager := &InsertInstallerManager{ InsertDataManager: sql_util.InsertDataManager{ InsertManager: insertManager, }, insertedIds: intsets.Sparse{}, } //noinspection SqlResolve err := db.QueryRow(insertContext, "select max(id) from installer").Scan(&manager.maxId) if err != nil { return nil, fmt.Errorf("cannot query max id: %w", err) } return manager, nil } func (t *InsertInstallerManager) Insert(id int, changes []string) error { if t.insertedIds.Has(id) { return nil } if id <= int(t.maxId) { exists, err := t.CheckExists(t.InsertManager.Db.QueryRow(t.InsertManager.InsertContext, "select 1 from installer where id = "+strconv.Itoa(id)+" limit 1")) if err != nil { return err } if exists { return nil } } batch, err := t.InsertManager.PrepareForAppend() if err != nil { return err } err = batch.Append(uint32(id), changes) if err != nil { return fmt.Errorf("cannot append: %w", err) } t.insertedIds.Insert(id) return nil }