import create_table, rename_column, add_column, types from require "lapis.db.schema" import process_tags from require "helpers" import Tracks, Tags from require "models" { [1]: => create_table "tracks", { { "id", types.serial primary_key: true } { "artist", types.text null: true } { "name", types.text null: true } { "url", types.text null: true } { "status", types.integer default: 1 } } [2]: => rename_column "tracks", "name", "title" rename_column "tracks", "url", "link" for column in *{ { "art_url", types.text null: true } { "file_url", types.text null: true } { "file_size", types.integer null: true } { "album", types.text null: true } { "genre", types.text null: true } { "tags", types.text default: " untagged " } { "quality", types.integer default: 1 } { "mood", types.text null: true } } add_column "tracks", unpack column [3]: => return true -- formerly a bad migration [4]: => return true -- formerly a bad migration [5]: => create_table "tags", { { "id", types.serial primary_key: true } { "name", types.text unique: true } { "count", types.integer default: -1 } } tags = {} for track in *Tracks\select "*" for name in track.tags\gmatch "%S+" if tags[name] tags[name] += 1 else tags[name] = 1 for name, count in pairs tags Tags\create { :name, :count } [6]: => return true -- formerly a bad migration [7]: => -- WARNING: removes all tags fields! for track in *Tracks\select "*" tags = "" for field in *{"artist", "mood", "link", "genre"} if track[field] and #track[field] > 0 tags ..= " #{field}:#{track[field]\gsub "%s+", "_"}" if #tags > 0 track.tags = process_tags "untagged" .. tags else track.tags = " untagged " track\update "tags" }