1
0
mirror of https://github.com/uptrace/go-clickhouse.git synced 2025-06-08 23:26:11 +02:00

chmigrate: add MissingMigrations

This commit is contained in:
Vladimir Mihailenco 2022-08-27 10:07:07 +03:00
parent 6bfb99e2c1
commit 2c9485da7f
2 changed files with 45 additions and 3 deletions

View File

@ -294,6 +294,25 @@ func TestDateTime64(t *testing.T) {
require.Equal(t, in.Time.UnixNano(), out.Time.UnixNano())
}
func TestInvalidType(t *testing.T) {
t.Skip()
ctx := context.Background()
db := chDB()
defer db.Close()
var dest struct {
Numbers []float32
}
err := db.NewSelect().
ColumnExpr("groupArray(number) AS numbers").
TableExpr("numbers(10)").
Scan(ctx, &dest)
require.NoError(t, err)
require.Equal(t, []float64{}, dest.Numbers)
}
type Event struct {
ch.CHModel `ch:"goch_events,partition:toYYYYMM(created_at)"`

View File

@ -82,7 +82,7 @@ func (m *Migrator) MigrationsWithStatus(ctx context.Context) (MigrationSlice, er
func (m *Migrator) migrationsWithStatus(ctx context.Context) (MigrationSlice, int64, error) {
sorted := m.migrations.Sorted()
applied, err := m.selectAppliedMigrations(ctx)
applied, err := m.AppliedMigrations(ctx)
if err != nil {
return nil, 0, err
}
@ -377,8 +377,31 @@ func (m *Migrator) MarkUnapplied(ctx context.Context, migration *Migration) erro
return err
}
// selectAppliedMigrations selects applied (applied) migrations in descending order.
func (m *Migrator) selectAppliedMigrations(ctx context.Context) (MigrationSlice, error) {
func (m *Migrator) TruncateTable(ctx context.Context) error {
_, err := m.db.Exec("TRUNCATE TABLE ?", ch.Ident(m.table))
return err
}
// MissingMigrations returns applied migrations that can no longer be found.
func (m *Migrator) MissingMigrations(ctx context.Context) (MigrationSlice, error) {
applied, err := m.AppliedMigrations(ctx)
if err != nil {
return nil, err
}
existing := migrationMap(m.migrations.ms)
for i := len(applied) - 1; i >= 0; i-- {
m := &applied[i]
if _, ok := existing[m.Name]; ok {
applied = append(applied[:i], applied[i+1:]...)
}
}
return applied, nil
}
// AppliedMigrations selects applied migrations in descending order.
func (m *Migrator) AppliedMigrations(ctx context.Context) (MigrationSlice, error) {
var ms MigrationSlice
if err := m.db.NewSelect().
ColumnExpr("*").