mirror of
https://github.com/drakkan/sftpgo.git
synced 2025-12-07 14:50:55 +03:00
dataprovider: preserve initial sort order for related resources
Folders and groups now retain their initial order, improving compatibility and predictability when used with Terraform Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
@@ -193,6 +193,24 @@ CREATE TABLE "{{shared_sessions}}" ("key" varchar(128) NOT NULL PRIMARY KEY, "da
|
||||
"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");
|
||||
`
|
||||
sqliteV33SQL = `ALTER TABLE "{{admins_groups_mapping}}" ADD COLUMN "sort_order" integer DEFAULT 0 NOT NULL;
|
||||
ALTER TABLE "{{groups_folders_mapping}}" ADD COLUMN "sort_order" integer DEFAULT 0 NOT NULL;
|
||||
ALTER TABLE "{{users_folders_mapping}}" ADD COLUMN "sort_order" integer DEFAULT 0 NOT NULL;
|
||||
ALTER TABLE "{{users_groups_mapping}}" ADD COLUMN "sort_order" integer DEFAULT 0 NOT NULL;
|
||||
CREATE INDEX "{{prefix}}admins_groups_mapping_sort_order_idx" ON "{{admins_groups_mapping}}" ("sort_order");
|
||||
CREATE INDEX "{{prefix}}groups_folders_mapping_sort_order_idx" ON "{{groups_folders_mapping}}" ("sort_order");
|
||||
CREATE INDEX "{{prefix}}users_folders_mapping_sort_order_idx" ON "{{users_folders_mapping}}" ("sort_order");
|
||||
CREATE INDEX "{{prefix}}users_groups_mapping_sort_order_idx" ON "{{users_groups_mapping}}" ("sort_order");
|
||||
`
|
||||
sqliteV33DownSQL = `DROP INDEX "{{prefix}}users_groups_mapping_sort_order_idx";
|
||||
DROP INDEX "{{prefix}}users_folders_mapping_sort_order_idx";
|
||||
DROP INDEX "{{prefix}}groups_folders_mapping_sort_order_idx";
|
||||
DROP INDEX "{{prefix}}admins_groups_mapping_sort_order_idx";
|
||||
ALTER TABLE "{{users_groups_mapping}}" DROP COLUMN "sort_order";
|
||||
ALTER TABLE "{{users_folders_mapping}}" DROP COLUMN "sort_order";
|
||||
ALTER TABLE "{{groups_folders_mapping}}" DROP COLUMN "sort_order";
|
||||
ALTER TABLE "{{admins_groups_mapping}}" DROP COLUMN "sort_order";
|
||||
`
|
||||
)
|
||||
|
||||
@@ -742,6 +760,8 @@ func (p *SQLiteProvider) migrateDatabase() error { //nolint:dupl
|
||||
return updateSQLiteDatabaseFromV30(p.dbHandle)
|
||||
case version == 31:
|
||||
return updateSQLiteDatabaseFromV31(p.dbHandle)
|
||||
case version == 32:
|
||||
return updateSQLiteDatabaseFromV32(p.dbHandle)
|
||||
default:
|
||||
if version > sqlDatabaseVersion {
|
||||
providerLog(logger.LevelError, "database schema version %d is newer than the supported one: %d", version,
|
||||
@@ -770,6 +790,8 @@ func (p *SQLiteProvider) revertDatabase(targetVersion int) error {
|
||||
return downgradeSQLiteDatabaseFromV31(p.dbHandle)
|
||||
case 32:
|
||||
return downgradeSQLiteDatabaseFromV32(p.dbHandle)
|
||||
case 33:
|
||||
return downgradeSQLiteDatabaseFromV33(p.dbHandle)
|
||||
default:
|
||||
return fmt.Errorf("database schema version not handled: %d", dbVersion.Version)
|
||||
}
|
||||
@@ -830,7 +852,14 @@ func updateSQLiteDatabaseFromV30(dbHandle *sql.DB) error {
|
||||
}
|
||||
|
||||
func updateSQLiteDatabaseFromV31(dbHandle *sql.DB) error {
|
||||
return updateSQLDatabaseFrom31To32(dbHandle)
|
||||
if err := updateSQLDatabaseFrom31To32(dbHandle); err != nil {
|
||||
return err
|
||||
}
|
||||
return updateSQLiteDatabaseFromV32(dbHandle)
|
||||
}
|
||||
|
||||
func updateSQLiteDatabaseFromV32(dbHandle *sql.DB) error {
|
||||
return updateSQLiteDatabaseFrom32To33(dbHandle)
|
||||
}
|
||||
|
||||
func downgradeSQLiteDatabaseFromV30(dbHandle *sql.DB) error {
|
||||
@@ -851,6 +880,13 @@ func downgradeSQLiteDatabaseFromV32(dbHandle *sql.DB) error {
|
||||
return downgradeSQLiteDatabaseFromV31(dbHandle)
|
||||
}
|
||||
|
||||
func downgradeSQLiteDatabaseFromV33(dbHandle *sql.DB) error {
|
||||
if err := downgradeSQLiteDatabaseFrom33To32(dbHandle); err != nil {
|
||||
return err
|
||||
}
|
||||
return downgradeSQLiteDatabaseFromV32(dbHandle)
|
||||
}
|
||||
|
||||
func updateSQLiteDatabaseFrom29To30(dbHandle *sql.DB) error {
|
||||
logger.InfoToConsole("updating database schema version: 29 -> 30")
|
||||
providerLog(logger.LevelInfo, "updating database schema version: 29 -> 30")
|
||||
@@ -885,6 +921,31 @@ func downgradeSQLiteDatabaseFrom31To30(dbHandle *sql.DB) error {
|
||||
return sqlCommonExecSQLAndUpdateDBVersion(dbHandle, []string{sql}, 30, false)
|
||||
}
|
||||
|
||||
func updateSQLiteDatabaseFrom32To33(dbHandle *sql.DB) error {
|
||||
logger.InfoToConsole("updating database schema version: 32 -> 33")
|
||||
providerLog(logger.LevelInfo, "updating database schema version: 32 -> 33")
|
||||
|
||||
sql := strings.ReplaceAll(sqliteV33SQL, "{{prefix}}", config.SQLTablesPrefix)
|
||||
sql = strings.ReplaceAll(sql, "{{users_folders_mapping}}", sqlTableUsersFoldersMapping)
|
||||
sql = strings.ReplaceAll(sql, "{{users_groups_mapping}}", sqlTableUsersGroupsMapping)
|
||||
sql = strings.ReplaceAll(sql, "{{admins_groups_mapping}}", sqlTableAdminsGroupsMapping)
|
||||
sql = strings.ReplaceAll(sql, "{{groups_folders_mapping}}", sqlTableGroupsFoldersMapping)
|
||||
sql = strings.ReplaceAll(sql, "{{prefix}}", config.SQLTablesPrefix)
|
||||
return sqlCommonExecSQLAndUpdateDBVersion(dbHandle, []string{sql}, 33, true)
|
||||
}
|
||||
|
||||
func downgradeSQLiteDatabaseFrom33To32(dbHandle *sql.DB) error {
|
||||
logger.InfoToConsole("downgrading database schema version: 33 -> 32")
|
||||
providerLog(logger.LevelInfo, "downgrading database schema version: 33 -> 32")
|
||||
|
||||
sql := strings.ReplaceAll(sqliteV33DownSQL, "{{prefix}}", config.SQLTablesPrefix)
|
||||
sql = strings.ReplaceAll(sql, "{{users_folders_mapping}}", sqlTableUsersFoldersMapping)
|
||||
sql = strings.ReplaceAll(sql, "{{users_groups_mapping}}", sqlTableUsersGroupsMapping)
|
||||
sql = strings.ReplaceAll(sql, "{{admins_groups_mapping}}", sqlTableAdminsGroupsMapping)
|
||||
sql = strings.ReplaceAll(sql, "{{groups_folders_mapping}}", sqlTableGroupsFoldersMapping)
|
||||
return sqlCommonExecSQLAndUpdateDBVersion(dbHandle, []string{sql}, 32, 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