finish setup data insertion, add world insertion

This commit is contained in:
lbenedar
2026-04-22 18:18:43 +03:00
parent 21abe68858
commit f46ff8333e
66 changed files with 2257 additions and 676 deletions

View File

@@ -2,13 +2,16 @@ package db
import (
"context"
"database/sql"
"errors"
"fmt"
"github.com/jmoiron/sqlx"
"golang.org/x/sync/errgroup"
)
type PackageWarning struct {
ID string
ID uint
Key string
Value *PackageWarningsData
@@ -16,8 +19,9 @@ type PackageWarning struct {
func (p *PackageWarning) Query(data *InsertId[uint]) {
data.query = fmt.Sprintf(`
INSERT INTO package_warnings (%s, id)
VALUES ($1, $2)`, data.fieldName)
INSERT INTO package_warnings (%s, key_)
VALUES ($1, $2)
RETURNING id`, data.fieldName)
}
func (p *PackageWarning) Insert(tx *sqlx.Tx, data *InsertId[uint]) error {
@@ -25,14 +29,14 @@ func (p *PackageWarning) Insert(tx *sqlx.Tx, data *InsertId[uint]) error {
return ErrNoQuery
}
args := []any{data.id, p.ID}
args := []any{data.id, p.Key}
_, err := tx.Exec(data.query, args...)
err := tx.QueryRowx(data.query, args...).Scan(&p.ID)
if err != nil {
return err
}
InsertWithCtx(tx, p.Value, &InsertId[string]{id: p.ID})
InsertWithCtx(tx, p.Value, InsertId[uint]{id: p.ID})
return nil
}
@@ -42,16 +46,14 @@ func (p *PackageWarning) InsertCtx(ctx context.Context, tx *sqlx.Tx, data *Inser
return ErrNoQuery
}
args := []any{data.id, p.ID}
args := []any{data.id, p.Key}
_, err := tx.Exec(data.query, args...)
err := tx.QueryRowxContext(ctx, data.query, args...).Scan(&p.ID)
if err != nil {
return err
}
InsertWithCtx(tx, p.Value, &InsertId[string]{id: p.ID})
return nil
return InsertWithCtx(tx, p.Value, InsertId[uint]{id: p.ID})
}
type PackageWarningsData struct {
@@ -65,23 +67,27 @@ type PackageWarningsData struct {
}
func (p *PackageWarningsData) InsertObjects(tx *sqlx.Tx) error {
syncDB := NewSyncDB()
defer close(syncDB.errChan)
group, _ := errgroup.WithContext(context.Background())
warningData := &InsertId[string]{id: p.ID, fieldName: "package_warnings_data_id", tableName: "package_warnings_data_warning"}
InsertSimpleSliceParallel(syncDB, tx, p.Warning, warningData)
InsertSimpleSliceParallel(group, tx, p.Warning, warningData)
errorData := &InsertId[string]{id: p.ID, fieldName: "package_warnings_data_id", tableName: "package_warnings_data_error"}
InsertSimpleSliceParallel(syncDB, tx, p.Warning, errorData)
InsertSimpleSliceParallel(group, tx, p.Warning, errorData)
return syncDB.Wait()
err := group.Wait()
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return err
}
return nil
}
func (p *PackageWarningsData) Query(data *InsertId[string]) {
data.query = fmt.Sprintf(`
INSERT INTO package_warnings_data (%s, id, type, reinstallable, manifest)
VALUES ($1, $2, $3, $4, $5)`, data.fieldName)
func (p *PackageWarningsData) Query(data *InsertId[uint]) {
data.query = `
INSERT INTO package_warnings_data (package_warnings_id, id, type, reinstallable, manifest)
VALUES ($1, $2, $3, $4, $5)`
}
func (p *PackageWarningsData) Insert(tx *sqlx.Tx, data *InsertId[string]) error {
func (p *PackageWarningsData) Insert(tx *sqlx.Tx, data *InsertId[uint]) error {
if data.query == "" {
return ErrNoQuery
}
@@ -96,7 +102,7 @@ func (p *PackageWarningsData) Insert(tx *sqlx.Tx, data *InsertId[string]) error
return p.InsertObjects(tx)
}
func (p *PackageWarningsData) InsertCtx(ctx context.Context, tx *sqlx.Tx, data *InsertId[string]) error {
func (p *PackageWarningsData) InsertCtx(ctx context.Context, tx *sqlx.Tx, data *InsertId[uint]) error {
if data.query == "" {
return ErrNoQuery
}