Andmebaasi versioneerimine Kloonige https://bitbucket.org/mkalmo/icd0011ver repo ja importige see IDE-sse. Toorik on konfigureeritud kasutama andmebaasi aadressilt jdbc:hsqldb:hsql://localhost/db1 Hsql andmebaasi serveri käivitamiseks on klass HsqlDbServer. 1. Kontrollige millised andmebaasi skriptid on käivitamise ootel > gradlew clean build flywayInfo (NB! Mac-is on ./gradlew ...) 2. Käivitage ootel skriptid > gradlew clean build flywayMigrate -i 3. Failis scripts/add_some_data.sql on mõned näidisandmed. a) tehke see skript flyway-le nähtavaks b) kontrollige, millised skriptid on käivitunud ja millised ootel (flywayInfo) c) käivitage ootel skript (flywayMigrate) Failis scripts/alter_person_table.sql skript tabelisse välja lisamiseks a) tehke see skript flyway-le nähtavaks b) kontrollige, millised skriptid on käivitunud ja millised ootel (flywayInfo) c) käivitage ootel skript (flywayMigrate) 4. Eesmärk on muuta olemasolevat skeemi nii, et isiku ja telefonide seos on määratud vahetabeliga. Selleks peaks tegema järgmised muudatused. Soovitatav on iga sammu järel kontrollida, kas see ka õnnestus. a) Lisama telefonide tabelisse id välja (add_id_to_phone.sql) b) Lisama seoste jaoks uue tabeli (add_joining_table.sql). c) Lisama seostabelisse vastavad kirjed. Kirjete lisamiseks kasutage Java koodi. Toorik on klassis tmp.create_joining_entries. Flyway on konfigureeritud otsima Java koodi paketist flyway. d) Kustutage phone tabelist nüüdseks üleliigne person_id väli. 5. Paketis order on lihtne näide ajalootabelite kasutamise kohta. Klassis Main on kood, mis loob vajalikud tabelid. Teie ülesanne on kirjutada klassi OrderRepository meetod tellimuste salvestamiseks. Uue kirje lisamisel lisatakse see tabelisse orders versiooniga 1. Olemasoleva kirje muutmiseks tuleb vana kirje kopeerida ajalotabelisse ja suurendada orders tabeli kirjel versiooni numbrit. Et vältida paralleelsete muudatustega seotud probleeme peaks muudetava kirje eelnevalt lukustama. Vastavad päringud on toorikus olemas. Kontrollige, et loodud kood töötab. 5. Paketis invoice on lihtne näide ajaloo kirjete samas tabelis hoidmise kohta. Klassis Main on kood, mis loob vajalikud tabelid. Teie ülesanne on kirjutada klassi InvoiceRepository meetod tellimuste salvestamiseks ja andmete pärimiseks. Uue kirje lisamisel lisatakse see tabelisse invoice nii, et start_date on praegune hetk (sql now() funktsioon) ja end_date on null. Olemasoleva kirje muutmisels tuleb vana kirje kopeerida samasse tabelisse määrates loodud kirje end_date väärtuseks praeguse hetke. Et vältida paralleelsete muudatustega seotud probleeme peaks muudetava kirje eelnevalt lukustama. Vastavad päringud on toorikus olemas. Kontrollige, et loodud kood töötab. 6. Lisage InvoiceRepository klassi ka meetodid kirjete pärimiseks. a) Antud hetkel kehtiv kire (findById(Long invoiceId)). b) Suvalisel hetkel kehtiv kirje (findById(Long invoiceId, LocalDateTime moment)). Meetodite kontrollimiseks on ette valmistatud mõned näidisandmed (invoice_data.sql). Hetke aja päeva täpsusega saate nii: LocalDate.parse("2022-01-01").atStartOfDay(). 7. Lisaülesanne. Lisage võimlus ka arveridade salvestamiseks (tabel invoice_row failis invoice_schema.sql). Lahendused: https://youtu.be/pXbhy3xgFqk