Mirror of @tangled.org/core. Running on a Raspberry Pi Zero 2 (Please be gentle).
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

spindle: recreate repos table

This new db migration won't migrate existing records in repos table.
Instead, it will simply rename the legacy table to `repos_old` and
create a new one with same name.

repo backfill will be done with tap

Signed-off-by: Seongmin Lee <git@boltless.me>

+46 -5
+45 -4
spindle/db/db.go
··· 1 1 package db 2 2 3 3 import ( 4 + "context" 4 5 "database/sql" 5 6 "strings" 6 7 7 8 _ "github.com/mattn/go-sqlite3" 9 + "tangled.org/core/log" 10 + "tangled.org/core/orm" 8 11 ) 9 12 10 13 type DB struct { 11 14 *sql.DB 12 15 } 13 16 14 - func Make(dbPath string) (*DB, error) { 17 + func Make(ctx context.Context, dbPath string) (*DB, error) { 15 18 // https://github.com/mattn/go-sqlite3#connection-string 16 19 opts := []string{ 17 20 "_foreign_keys=1", ··· 23 20 "_auto_vacuum=incremental", 24 21 } 25 22 23 + logger := log.FromContext(ctx) 24 + logger = log.SubLogger(logger, "db") 25 + 26 26 db, err := sql.Open("sqlite3", dbPath+"?"+strings.Join(opts, "&")) 27 27 if err != nil { 28 28 return nil, err 29 29 } 30 30 31 - // NOTE: If any other migration is added here, you MUST 32 - // copy the pattern in appview: use a single sql.Conn 33 - // for every migration. 31 + conn, err := db.Conn(ctx) 32 + if err != nil { 33 + return nil, err 34 + } 35 + defer conn.Close() 34 36 35 37 _, err = db.Exec(` 36 38 create table if not exists _jetstream ( ··· 83 75 if err != nil { 84 76 return nil, err 85 77 } 78 + 79 + // run migrations 80 + 81 + // NOTE: this won't migrate existing records 82 + // they will be fetched again with tap instead 83 + orm.RunMigration(conn, logger, "add-rkey-to-repos", func(tx *sql.Tx) error { 84 + // archive legacy repos (just in case) 85 + _, err = tx.Exec(`alter table repos rename to repos_old`) 86 + if err != nil { 87 + return err 88 + } 89 + 90 + _, err := tx.Exec(` 91 + create table repos ( 92 + -- identifiers 93 + id integer primary key autoincrement, 94 + did text not null, 95 + rkey text not null, 96 + at_uri text generated always as ('at://' || did || '/' || 'sh.tangled.repo' || '/' || rkey) stored, 97 + 98 + name text not null, 99 + knot text not null, 100 + 101 + addedAt text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')), 102 + unique(did, rkey) 103 + ); 104 + `) 105 + if err != nil { 106 + return err 107 + } 108 + 109 + return nil 110 + }) 86 111 87 112 return &DB{db}, nil 88 113 }
+1 -1
spindle/server.go
··· 53 53 func New(ctx context.Context, cfg *config.Config, engines map[string]models.Engine) (*Spindle, error) { 54 54 logger := log.FromContext(ctx) 55 55 56 - d, err := db.Make(cfg.Server.DBPath) 56 + d, err := db.Make(ctx, cfg.Server.DBPath) 57 57 if err != nil { 58 58 return nil, fmt.Errorf("failed to setup db: %w", err) 59 59 }