diff options
| author | Fuwn <[email protected]> | 2026-05-27 09:24:11 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-05-27 09:24:11 +0000 |
| commit | 4fa334eaba979797669a1308460810adb9c4732c (patch) | |
| tree | 5b6933e9cfc4d79ff1d8adfcdcebd77b593924e8 | |
| parent | refactor: Tighten naming, drop dead paths, reject empty names (diff) | |
| download | mayu-4fa334eaba979797669a1308460810adb9c4732c.tar.xz mayu-4fa334eaba979797669a1308460810adb9c4732c.zip | |
fix: Check existing columns before adding in setup migration
| -rw-r--r-- | src/database.gleam | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/src/database.gleam b/src/database.gleam index 053bc28..7a1f86b 100644 --- a/src/database.gleam +++ b/src/database.gleam @@ -1,4 +1,5 @@ import gleam/dynamic +import gleam/list import gleam/option import sqlight import wisp @@ -17,22 +18,40 @@ pub fn setup(connection) { ) strict;", connection, ) - let add_column = fn(name) { - let _ = - sqlight.exec( - "alter table tb_count add column " <> name <> " text;", - connection, - ) + let existing_column_names = existing_columns(connection) + let ensure_column = fn(name) { + case list.contains(existing_column_names, name) { + True -> Nil + False -> { + let assert Ok(_) = + sqlight.exec( + "alter table tb_count add column " <> name <> " text;", + connection, + ) - Nil + Nil + } + } } - add_column("created_at") - add_column("updated_at") + ensure_column("created_at") + ensure_column("updated_at") Nil } +fn existing_columns(connection) -> List(String) { + let assert Ok(columns) = + sqlight.query( + "pragma table_info('tb_count');", + with: [], + on: connection, + expecting: dynamic.element(1, dynamic.string), + ) + + columns +} + pub fn get_counter(connection, name) { case name { "demo" -> Ok(Counter("demo", 1_234_567_890, "", "")) |