package Ġio . github . w ulkan owy . data . db . migrations Ċ Ċ import Ġandroidx . room . migration . Migration Ċ import Ġandroidx . sqlite . db . Support SQLite Database Ċ Ċ class ĠMigration 1 3 Ġ: ĠMigration ( 1 2 , Ġ 1 3 ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd ClassName To Students ( database , Ġget Students Ids ( database )) ĊĠĠĠĠĠĠĠ Ġupdate Se me sters Table ( database ) ĊĠĠĠĠĠĠĠ Ġmark At Least And Only One Se mester At Current ( database , Ġget Students And Class Ids ( database )) ĊĠĠĠĠĠĠĠ Ġclear Messages Table ( database ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd ClassName To Students ( database : ĠSupport SQLite Database , Ġstudents : ĠList < Pair < Int , ĠString >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" ALTER ĠTABLE ĠStudent s ĠADD ĠCOLUMN Ġclass _ name ĠTEXT ĠDEFAULT Ġ\" \" ĠNOT ĠNULL ") ĊĊĠĠĠĠĠĠĠ Ġstudents . forEach Ġ{ Ġ( id , Ġname ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschool Name Ġ= Ġname . substring After (" Ġ- Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġname . substring Before (" Ġ- Ġ", Ġ""). replace (" K las a Ġ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" UPDATE ĠStudent s ĠSET Ġclass _ name Ġ= Ġ'$ className ' ĠWHERE Ġid Ġ= Ġ'$ id '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" UPDATE ĠStudent s ĠSET Ġschool _ name Ġ= Ġ'$ school Name ' ĠWHERE Ġid Ġ= Ġ'$ id '") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Students Ids ( database : ĠSupport SQLite Database ): ĠMutable List < Pair < Int , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstudents Ġ= Ġmutable ListOf < Pair < Int , ĠString >>() ĊĠĠĠĠĠĠĠ Ġval Ġstudents Cursor Ġ= Ġdatabase . query (" SELECT Ġid , Ġschool _ name ĠFROM ĠStudent s ") ĊĠĠĠĠĠĠĠ Ġif Ġ( students Cursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudents . add ( students Cursor . getInt ( 0 ) Ġto Ġstudents Cursor . getString ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( students Cursor . moveTo Next ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġstudents ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Se me sters Table ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" ALTER ĠTABLE ĠSe me sters ĠADD ĠCOLUMN Ġschool _ year ĠINTEGER ĠDEFAULT Ġ 1 9 7 0 ĠNOT ĠNULL ") ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" ALTER ĠTABLE ĠSe me sters ĠADD ĠCOLUMN Ġstart ĠINTEGER ĠDEFAULT Ġ 0 ĠNOT ĠNULL ") ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" ALTER ĠTABLE ĠSe me sters ĠADD ĠCOLUMN Ġ` end ` ĠINTEGER ĠDEFAULT Ġ 0 ĠNOT ĠNULL ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Students And Class Ids ( database : ĠSupport SQLite Database ): ĠList < Pair < Int , ĠInt >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstudents Ġ= Ġmutable ListOf < Pair < Int , ĠInt >>() ĊĠĠĠĠĠĠĠ Ġval Ġstudents Cursor Ġ= Ġdatabase . query (" SELECT Ġstudent _ id , Ġclass _ id ĠFROM ĠStudent s ") ĊĠĠĠĠĠĠĠ Ġif Ġ( students Cursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudents . add ( students Cursor . getInt ( 0 ) Ġto Ġstudents Cursor . getInt ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( students Cursor . moveTo Next ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġstudents ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmark At Least And Only One Se mester At Current ( database : ĠSupport SQLite Database , Ġstudents : ĠList < Pair < Int , ĠInt >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġstudents . forEach Ġ{ Ġ( student Id , Ġclass Id ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" UPDATE ĠSe me sters ĠSET Ġis _ current Ġ= Ġ 0 ĠWHERE Ġstudent _ id Ġ= Ġ'$ student Id ' ĠAND Ġclass _ id Ġ= Ġ'$ class Id '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" UPDATE ĠSe me sters ĠSET Ġis _ current Ġ= Ġ 1 ĠWHERE Ġid Ġ= Ġ( SELECT Ġid ĠFROM ĠSe me sters ĠWHERE Ġstudent _ id Ġ= Ġ'$ student Id ' ĠAND Ġclass _ id Ġ= Ġ'$ class Id ' ĠORDER ĠBY Ġse mester _ id ĠDESC )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Messages Table ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" DELETE ĠFROM ĠMessages ") ĊĠĠĠ Ġ} Ċ } Ċ