4ad01e8170
it was being used in ways that implied it should be NOT NULL
even though it was possibly null. we used to get this data
from the satellite db's added_at column as seen in 30369b02
,
so backfill it using that data where joined_at is NULL, and
then alter the table to constrain the column to be NOT NULL.
Fixes #3866.
Change-Id: If2d856189209740d985f71dada7b93525e625ef3
131 lines
2.6 KiB
Go
131 lines
2.6 KiB
Go
// Copyright (C) 2019 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package testdata
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"storj.io/storj/private/dbutil/dbschema"
|
|
"storj.io/storj/private/dbutil/sqliteutil"
|
|
)
|
|
|
|
// States is the global variable that stores all the states for testing
|
|
var States = MultiDBStates{
|
|
List: []*MultiDBState{
|
|
&v0,
|
|
&v1,
|
|
&v2,
|
|
&v3,
|
|
&v4,
|
|
&v5,
|
|
&v6,
|
|
&v7,
|
|
&v8,
|
|
&v9,
|
|
&v10,
|
|
&v11,
|
|
&v12,
|
|
&v13,
|
|
&v14,
|
|
&v15,
|
|
&v16,
|
|
&v17,
|
|
&v18,
|
|
&v19,
|
|
&v20,
|
|
&v21,
|
|
&v22,
|
|
&v23,
|
|
&v24,
|
|
&v25,
|
|
&v26,
|
|
&v27,
|
|
&v28,
|
|
&v29,
|
|
&v30,
|
|
&v31,
|
|
&v32,
|
|
&v33,
|
|
&v34,
|
|
&v35,
|
|
&v36,
|
|
&v37,
|
|
&v38,
|
|
},
|
|
}
|
|
|
|
// MultiDBStates provides a convenient list of MultiDBState
|
|
type MultiDBStates struct {
|
|
List []*MultiDBState
|
|
}
|
|
|
|
// FindVersion finds a MultiDBState with the specified version.
|
|
func (mdbs *MultiDBStates) FindVersion(version int) (*MultiDBState, bool) {
|
|
for _, state := range mdbs.List {
|
|
if state.Version == version {
|
|
return state, true
|
|
}
|
|
}
|
|
return nil, false
|
|
}
|
|
|
|
// MultiDBState represents an expected state across multiple DBs, defined in SQL
|
|
// commands.
|
|
type MultiDBState struct {
|
|
Version int
|
|
DBStates DBStates
|
|
}
|
|
|
|
// DBStates is a convenience type
|
|
type DBStates map[string]*DBState
|
|
|
|
// DBState allows you to define the desired state of the DB using SQl commands.
|
|
// Both the SQl and NewData fields contains SQL that will be executed to create
|
|
// the expected DB. The NewData SQL additionally will be executed on the testDB
|
|
// to ensure data is consistent.
|
|
type DBState struct {
|
|
SQL string
|
|
NewData string
|
|
}
|
|
|
|
// MultiDBSnapshot represents an expected state among multiple databases
|
|
type MultiDBSnapshot struct {
|
|
Version int
|
|
DBSnapshots DBSnapshots
|
|
}
|
|
|
|
// NewMultiDBSnapshot returns a new MultiDBSnapshot
|
|
func NewMultiDBSnapshot() *MultiDBSnapshot {
|
|
return &MultiDBSnapshot{
|
|
DBSnapshots: DBSnapshots{},
|
|
}
|
|
}
|
|
|
|
// DBSnapshots is a convenience type
|
|
type DBSnapshots map[string]*DBSnapshot
|
|
|
|
// DBSnapshot is a snapshot of a single DB.
|
|
type DBSnapshot struct {
|
|
Schema *dbschema.Schema
|
|
Data *dbschema.Data
|
|
}
|
|
|
|
// LoadMultiDBSnapshot converts a MultiDBState into a MultiDBSnapshot. It
|
|
// executes the SQL and stores the shema and data.
|
|
func LoadMultiDBSnapshot(ctx context.Context, multiDBState *MultiDBState) (*MultiDBSnapshot, error) {
|
|
multiDBSnapshot := NewMultiDBSnapshot()
|
|
for dbName, dbState := range multiDBState.DBStates {
|
|
snapshot, err := sqliteutil.LoadSnapshotFromSQL(ctx, fmt.Sprintf("%s\n%s", dbState.SQL, dbState.NewData))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
multiDBSnapshot.DBSnapshots[dbName] = &DBSnapshot{
|
|
Schema: snapshot.Schema,
|
|
Data: snapshot.Data,
|
|
}
|
|
}
|
|
return multiDBSnapshot, nil
|
|
}
|