BUGFIX: fix duplicate space participants error, making participants in a space unique
This commit is contained in:
parent
cc632e0654
commit
3d7166c4aa
@ -142,6 +142,7 @@ create table space_participants(rowid integer primary key,
|
|||||||
user_id integer not null,
|
user_id integer not null,
|
||||||
space_id not null,
|
space_id not null,
|
||||||
|
|
||||||
|
unique(user_id, space_id)
|
||||||
foreign key(space_id) references spaces(id)
|
foreign key(space_id) references spaces(id)
|
||||||
-- No foreign key for users, since they may not be downloaded yet and I don't want to
|
-- No foreign key for users, since they may not be downloaded yet and I don't want to
|
||||||
-- download every user who joins a space
|
-- download every user who joins a space
|
||||||
|
@ -44,7 +44,7 @@ func (p Profile) SaveSpace(s scraper.Space) error {
|
|||||||
}
|
}
|
||||||
if len(space_participants) > 0 {
|
if len(space_participants) > 0 {
|
||||||
_, err = p.DB.NamedExec(`
|
_, err = p.DB.NamedExec(`
|
||||||
insert into space_participants (user_id, space_id) values (:user_id, :space_id)
|
insert or replace into space_participants (user_id, space_id) values (:user_id, :space_id)
|
||||||
`, space_participants)
|
`, space_participants)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error saving participants (space ID %q, participants: %#v):\n %w", s.ID, space_participants, err)
|
return fmt.Errorf("Error saving participants (space ID %q, participants: %#v):\n %w", s.ID, space_participants, err)
|
||||||
|
@ -8,8 +8,6 @@ import (
|
|||||||
"offline_twitter/terminal_utils"
|
"offline_twitter/terminal_utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
const ENGINE_DATABASE_VERSION = 17
|
|
||||||
|
|
||||||
type VersionMismatchError struct {
|
type VersionMismatchError struct {
|
||||||
EngineVersion int
|
EngineVersion int
|
||||||
DatabaseVersion int
|
DatabaseVersion int
|
||||||
@ -23,10 +21,7 @@ Please upgrade this application to a newer version to use this profile. Or down
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// The Nth entry is the migration that moves you from version N to version N+1.
|
||||||
* The Nth entry is the migration that moves you from version N to version N+1.
|
|
||||||
* `len(MIGRATIONS)` should always equal `ENGINE_DATABASE_VERSION`.
|
|
||||||
*/
|
|
||||||
var MIGRATIONS = []string{
|
var MIGRATIONS = []string{
|
||||||
`create table polls (rowid integer primary key,
|
`create table polls (rowid integer primary key,
|
||||||
id integer unique not null check(typeof(id) = 'integer'),
|
id integer unique not null check(typeof(id) = 'integer'),
|
||||||
@ -98,12 +93,26 @@ var MIGRATIONS = []string{
|
|||||||
);`,
|
);`,
|
||||||
`create index if not exists index_tweets_user_id on tweets (user_id);`,
|
`create index if not exists index_tweets_user_id on tweets (user_id);`,
|
||||||
`alter table tweets add column is_expandable bool not null default 0;`,
|
`alter table tweets add column is_expandable bool not null default 0;`,
|
||||||
}
|
`create table space_participants_uniq(rowid integer primary key,
|
||||||
|
user_id integer not null,
|
||||||
|
space_id not null,
|
||||||
|
|
||||||
/**
|
unique(user_id, space_id)
|
||||||
* This should only get called on a newly created Profile.
|
foreign key(space_id) references spaces(id)
|
||||||
* Subsequent updates should change the number, not insert a new row.
|
-- No foreign key for users, since they may not be downloaded yet and I don't want to
|
||||||
*/
|
-- download every user who joins a space
|
||||||
|
);
|
||||||
|
|
||||||
|
insert or replace into space_participants_uniq(rowid, user_id, space_id) select rowid, user_id, space_id from space_participants;
|
||||||
|
|
||||||
|
drop table space_participants;
|
||||||
|
alter table space_participants_uniq rename to space_participants;
|
||||||
|
vacuum;`,
|
||||||
|
}
|
||||||
|
var ENGINE_DATABASE_VERSION = len(MIGRATIONS)
|
||||||
|
|
||||||
|
// This should only get called on a newly created Profile.
|
||||||
|
// Subsequent updates should change the number, not insert a new row.
|
||||||
func InitializeDatabaseVersion(db *sql.DB) {
|
func InitializeDatabaseVersion(db *sql.DB) {
|
||||||
db.MustExec("insert into database_version (version_number) values (?)", ENGINE_DATABASE_VERSION)
|
db.MustExec("insert into database_version (version_number) values (?)", ENGINE_DATABASE_VERSION)
|
||||||
}
|
}
|
||||||
@ -142,9 +151,7 @@ func (p Profile) check_and_update_version() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// Run all the migrations from version X to version Y, and update the `database_version` table's `version_number`
|
||||||
* Run all the migrations from version X to version Y, and update the `database_version` table's `version_number`
|
|
||||||
*/
|
|
||||||
func (p Profile) UpgradeFromXToY(x int, y int) error {
|
func (p Profile) UpgradeFromXToY(x int, y int) error {
|
||||||
for i := x; i < y; i++ {
|
for i := x; i < y; i++ {
|
||||||
fmt.Printf(terminal_utils.COLOR_CYAN)
|
fmt.Printf(terminal_utils.COLOR_CYAN)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user