Tip: IncludeSlike ili Video: IspodOpis i dodatne informacije: Ispod.
Download link: https://github.com/daniscavalic/samp-database-migrationScan link: repoCredits: Danis Cavalic (Slade), pBlueG and team (MySQL), JaTochNietDan (FileManager), ostali koji su pomagali u razvijanju prethodno pomenuta dva plugina.
Već dugo generalno koristim SQL, i iskreno dosadilo mi je konstantno executeovati query i na remote mašini, nakon što ga executeujem lokalno, da bi imao up-to-date infrastrukturu baze kako lokalno tako i remotely. U javi sam koristio flyway db za migriranje, i skontao sam da SA-MP nema database manager, pa sam napisao jedan jednostavan library, prije svega zbog sebe, pa evo i da ga objavim, koji ce vrsiti redom migracije po verzijama, slicno kao Flyway (buduci da je samo include, nije moguce napraviti bas identicno, a da ne bude milion nekih nepotrebnih provjera). Short story long, ovaj include vam omogucava da dakle imate automatsku migraciju baze prilikom pokretanja servera.
Migracije se nalaze u folderu:
scriptfiles/schemas/Format fajla mora biti:
V{verzija}_{naziv_migracije}.sql
Vazno za napomenuti:- Migracije
NE SMIJU IMATI istu verziju.
- Kao i na Flywayu, library sprema checksum fajla, i samim time nije dozvoljeno mjenjati fajl migracije nakon sto je ona izvrsena, napisite novu, jer u slucaju invalid checksuma, samo ce tu stati proces migracije, zbog sigurnosti infrastrukture vase baze.
- Migracije moraju ici po redu, dakle: 2-3-4-5-6, bez preskakanja brojeva. U slucaju da napravite 5 migracija, i iduca vam je broj 8, nakon 5-te petlja nece naci 6-tu i misliti ce da je izvrsila sve migracije.
- Prvi put kada ubacite include i sve setupujete, server ce pri prvom pokretanju napraviti schemas folder, .sql fajl inicijalne migracije koja ce napraviti tabelu u vasoj bazi koja memorise migracije, i samim time i sama sebe upisati kao prva migracija.
Za sve sto sam zaboravio pomenuti, mozete provjeriti na repozitoriju, imate example usage, i moguce neke korake koje sam zaboravio ovdje napisati.
Prakticno, usage je, da dodate odmah ispod funkcije za konekciju
MigrateSchemas funkciju, example:
[pawn]#include <database_migration>
new MySQL: Database;
hook OnGameModeInit()
{
new MySQLOpt: option_id = mysql_init_options();
mysql_set_option(option_id, AUTO_RECONNECT, true);
Database = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DATABASE, option_id);
if(Database == MYSQL_INVALID_HANDLE || mysql_errno(Database) != 0) {
SendRconCommand("exit");
return 1;
}
MigrateSchemas(Database);
return Y_HOOKS_CONTINUE_RETURN_1;
}[/pawn]
Note: Funkcija ima i
debugMigration parametar, koji je po defaultu false, kao drugi parametar posaljite true za detaljne logove.
Tabela u bazi:
(note: query-i kao sto mozete vidjeti po checksumu su duplikati (5-11), samo radi testiranja).
(https://user-images.githubusercontent.com/87475152/241810564-0e5f4931-232c-4d69-be16-467947f775f8.png)
Server-Log:
(https://user-images.githubusercontent.com/87475152/241810593-68d5d941-70ee-42d2-8f5d-aeff9ab76daf.png)
Primjer schemas foldera sa 11 migracija:
(https://user-images.githubusercontent.com/87475152/241810624-ab7ae292-b65e-43c2-b4ff-b402ada9564f.png)
Nazalost, zbog cinjenice da je ovo include, a ne plugin, ima negdje sigurno i losih praksi, ali su neophodne da include funkcionise. Ako neko ima ideja kako unaprijediti isti, napisite, ili jos bolje, otvorite PR sa fixom :D.