mirror of
https://github.com/drakkan/sftpgo.git
synced 2025-12-07 06:40:54 +03:00
db shared sessions: set key and type as primary key
Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
@@ -183,6 +183,18 @@ INSERT INTO {{schema_version}} (version) VALUES (29);
|
||||
`
|
||||
sqliteV30SQL = `ALTER TABLE "{{shares}}" ADD COLUMN "options" text NULL;`
|
||||
sqliteV30DownSQL = `ALTER TABLE "{{shares}}" DROP COLUMN "options";`
|
||||
sqliteV31SQL = `DROP TABLE "{{shared_sessions}}";
|
||||
CREATE TABLE "{{shared_sessions}}" ("key" varchar(128) NOT NULL, "type" integer NOT NULL,
|
||||
"data" text NOT NULL, "timestamp" bigint NOT NULL, PRIMARY KEY ("key", "type"));
|
||||
CREATE INDEX "{{prefix}}shared_sessions_type_idx" ON "{{shared_sessions}}" ("type");
|
||||
CREATE INDEX "{{prefix}}shared_sessions_timestamp_idx" ON "{{shared_sessions}}" ("timestamp");
|
||||
`
|
||||
sqliteV31DownSQL = `DROP TABLE "{{shared_sessions}}";
|
||||
CREATE TABLE "{{shared_sessions}}" ("key" varchar(128) NOT NULL PRIMARY KEY, "data" text NOT NULL,
|
||||
"type" integer NOT NULL, "timestamp" bigint NOT NULL);
|
||||
CREATE INDEX "{{prefix}}shared_sessions_type_idx" ON "{{shared_sessions}}" ("type");
|
||||
CREATE INDEX "{{prefix}}shared_sessions_timestamp_idx" ON "{{shared_sessions}}" ("timestamp");
|
||||
`
|
||||
)
|
||||
|
||||
// SQLiteProvider defines the auth provider for SQLite database
|
||||
@@ -511,12 +523,12 @@ func (p *SQLiteProvider) addSharedSession(session Session) error {
|
||||
return sqlCommonAddSession(session, p.dbHandle)
|
||||
}
|
||||
|
||||
func (p *SQLiteProvider) deleteSharedSession(key string) error {
|
||||
return sqlCommonDeleteSession(key, p.dbHandle)
|
||||
func (p *SQLiteProvider) deleteSharedSession(key string, sessionType SessionType) error {
|
||||
return sqlCommonDeleteSession(key, sessionType, p.dbHandle)
|
||||
}
|
||||
|
||||
func (p *SQLiteProvider) getSharedSession(key string) (Session, error) {
|
||||
return sqlCommonGetSession(key, p.dbHandle)
|
||||
func (p *SQLiteProvider) getSharedSession(key string, sessionType SessionType) (Session, error) {
|
||||
return sqlCommonGetSession(key, sessionType, p.dbHandle)
|
||||
}
|
||||
|
||||
func (p *SQLiteProvider) cleanupSharedSessions(sessionType SessionType, before int64) error {
|
||||
@@ -727,6 +739,8 @@ func (p *SQLiteProvider) migrateDatabase() error { //nolint:dupl
|
||||
return err
|
||||
case version == 29:
|
||||
return updateSQLiteDatabaseFromV29(p.dbHandle)
|
||||
case version == 30:
|
||||
return updateSQLiteDatabaseFromV30(p.dbHandle)
|
||||
default:
|
||||
if version > sqlDatabaseVersion {
|
||||
providerLog(logger.LevelError, "database schema version %d is newer than the supported one: %d", version,
|
||||
@@ -751,6 +765,8 @@ func (p *SQLiteProvider) revertDatabase(targetVersion int) error {
|
||||
switch dbVersion.Version {
|
||||
case 30:
|
||||
return downgradeSQLiteDatabaseFromV30(p.dbHandle)
|
||||
case 31:
|
||||
return downgradeSQLiteDatabaseFromV31(p.dbHandle)
|
||||
default:
|
||||
return fmt.Errorf("database schema version not handled: %d", dbVersion.Version)
|
||||
}
|
||||
@@ -797,13 +813,27 @@ func executePragmaOptimize(dbHandle *sql.DB) error {
|
||||
}
|
||||
|
||||
func updateSQLiteDatabaseFromV29(dbHandle *sql.DB) error {
|
||||
return updateSQLiteDatabaseFrom29To30(dbHandle)
|
||||
if err := updateSQLiteDatabaseFrom29To30(dbHandle); err != nil {
|
||||
return err
|
||||
}
|
||||
return updateSQLiteDatabaseFromV30(dbHandle)
|
||||
}
|
||||
|
||||
func updateSQLiteDatabaseFromV30(dbHandle *sql.DB) error {
|
||||
return updateSQLiteDatabaseFrom30To31(dbHandle)
|
||||
}
|
||||
|
||||
func downgradeSQLiteDatabaseFromV30(dbHandle *sql.DB) error {
|
||||
return downgradeSQLiteDatabaseFrom30To29(dbHandle)
|
||||
}
|
||||
|
||||
func downgradeSQLiteDatabaseFromV31(dbHandle *sql.DB) error {
|
||||
if err := downgradeSQLiteDatabaseFrom31To30(dbHandle); err != nil {
|
||||
return err
|
||||
}
|
||||
return downgradeSQLiteDatabaseFromV30(dbHandle)
|
||||
}
|
||||
|
||||
func updateSQLiteDatabaseFrom29To30(dbHandle *sql.DB) error {
|
||||
logger.InfoToConsole("updating database schema version: 29 -> 30")
|
||||
providerLog(logger.LevelInfo, "updating database schema version: 29 -> 30")
|
||||
@@ -820,6 +850,24 @@ func downgradeSQLiteDatabaseFrom30To29(dbHandle *sql.DB) error {
|
||||
return sqlCommonExecSQLAndUpdateDBVersion(dbHandle, []string{sql}, 29, false)
|
||||
}
|
||||
|
||||
func updateSQLiteDatabaseFrom30To31(dbHandle *sql.DB) error {
|
||||
logger.InfoToConsole("updating database schema version: 30 -> 31")
|
||||
providerLog(logger.LevelInfo, "updating database schema version: 30 -> 31")
|
||||
|
||||
sql := strings.ReplaceAll(sqliteV31SQL, "{{shared_sessions}}", sqlTableSharedSessions)
|
||||
sql = strings.ReplaceAll(sql, "{{prefix}}", config.SQLTablesPrefix)
|
||||
return sqlCommonExecSQLAndUpdateDBVersion(dbHandle, []string{sql}, 31, true)
|
||||
}
|
||||
|
||||
func downgradeSQLiteDatabaseFrom31To30(dbHandle *sql.DB) error {
|
||||
logger.InfoToConsole("downgrading database schema version: 31 -> 30")
|
||||
providerLog(logger.LevelInfo, "downgrading database schema version: 31 -> 30")
|
||||
|
||||
sql := strings.ReplaceAll(sqliteV31DownSQL, "{{shared_sessions}}", sqlTableSharedSessions)
|
||||
sql = strings.ReplaceAll(sql, "{{prefix}}", config.SQLTablesPrefix)
|
||||
return sqlCommonExecSQLAndUpdateDBVersion(dbHandle, []string{sql}, 30, false)
|
||||
}
|
||||
|
||||
/*func setPragmaFK(dbHandle *sql.DB, value string) error {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), longSQLQueryTimeout)
|
||||
defer cancel()
|
||||
|
||||
Reference in New Issue
Block a user