update.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use rusqlite::{Connection, Result};
|
||||
|
||||
/// Versão atual do schema do banco de dados.
|
||||
const VERSAO_SCHEMA_ATUAL: i64 = 1;
|
||||
const VERSAO_SCHEMA_ATUAL: i64 = 2;
|
||||
|
||||
/// Aplica todas as migrations necessárias para atualizar o banco
|
||||
/// para a versão mais recente.
|
||||
@@ -21,15 +21,34 @@ pub fn aplicar_migrations(conn: &Connection) -> Result<()> {
|
||||
)
|
||||
.unwrap_or(0);
|
||||
|
||||
if versao_atual < VERSAO_SCHEMA_ATUAL {
|
||||
if versao_atual < 1 {
|
||||
migration_v1(conn)?;
|
||||
if versao_atual == 0 {
|
||||
conn.execute("INSERT INTO schema_version (versao) VALUES (?1);", [VERSAO_SCHEMA_ATUAL])?;
|
||||
} else {
|
||||
conn.execute("UPDATE schema_version SET versao = ?1;", [VERSAO_SCHEMA_ATUAL])?;
|
||||
}
|
||||
}
|
||||
if versao_atual < 2 {
|
||||
migration_v2(conn)?;
|
||||
}
|
||||
|
||||
if versao_atual == 0 {
|
||||
conn.execute("INSERT INTO schema_version (versao) VALUES (?1);", [VERSAO_SCHEMA_ATUAL])?;
|
||||
} else if versao_atual < VERSAO_SCHEMA_ATUAL {
|
||||
conn.execute("UPDATE schema_version SET versao = ?1;", [VERSAO_SCHEMA_ATUAL])?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Migration v2: adicionar índice único em layouts.nome.
|
||||
/// Renomeia duplicatas (sufixo com id) antes de criar o índice para não falhar
|
||||
/// em bancos que já possuem nomes repetidos.
|
||||
fn migration_v2(conn: &Connection) -> Result<()> {
|
||||
conn.execute_batch(
|
||||
"UPDATE layouts
|
||||
SET nome = nome || ' (' || id || ')'
|
||||
WHERE id NOT IN (
|
||||
SELECT MIN(id) FROM layouts GROUP BY nome
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_layouts_nome ON layouts (nome);",
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user