Umesto ručnog parsiranja (prethodni commit), migracija 103 rekreira obe tabele sa DATETIME kolonom (kao svuda drugde u šemi) — SQLite ne podržava ALTER COLUMN, pa je urađeno kreiraj-novu/prebaci-podatke/obriši-staru/ preimenuj. Fizički format podataka se ne menja (SQLite nema pravi numerički afinitet za DATETIME nad ovakvim stringom), menja se samo deklarisani tip kolone koji driver čita da odluči string vs time.Time pri Scan-u. Uklonjen parseDatumUnosa workaround iz utils.go — skenirajUslugu/skenirajTrosak sada rade identično kao svi ostali skenirajX helperi (direktan Scan u time.Time). Potvrđeno: migracija testirana na praznoj i na postojećoj bazi sa podacima (6 usluga, ID-jevi i datumi netaknuti), /usluge i /troskovi vraćaju 200.
58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
package sqlite
|
|
|
|
import (
|
|
"database/sql"
|
|
"time"
|
|
)
|
|
|
|
// nullString pretvara prazan Go string u sql.NullString sa NULL vrednošću —
|
|
// koristi se pri unosu i izmeni kada polje u bazi sme biti NULL
|
|
func nullString(s string) sql.NullString {
|
|
return sql.NullString{String: s, Valid: s != ""}
|
|
}
|
|
|
|
// nullInt64 pretvara *int64 pokazivač u sql.NullInt64 —
|
|
// koristi se za opciona FK polja koja smeju biti NULL u bazi
|
|
func nullInt64(v *int64) sql.NullInt64 {
|
|
if v == nil {
|
|
return sql.NullInt64{}
|
|
}
|
|
return sql.NullInt64{Int64: *v, Valid: true}
|
|
}
|
|
|
|
// nullInt pretvara *int pokazivač u sql.NullInt64 —
|
|
// koristi se za opciona celobrojna polja (npr. trajanje garancije u danima)
|
|
func nullInt(v *int) sql.NullInt64 {
|
|
if v == nil {
|
|
return sql.NullInt64{}
|
|
}
|
|
return sql.NullInt64{Int64: int64(*v), Valid: true}
|
|
}
|
|
|
|
// nullFloat64 pretvara *float64 pokazivač u sql.NullFloat64 —
|
|
// koristi se za opciona numerička polja kao što su cene
|
|
func nullFloat64(v *float64) sql.NullFloat64 {
|
|
if v == nil {
|
|
return sql.NullFloat64{}
|
|
}
|
|
return sql.NullFloat64{Float64: *v, Valid: true}
|
|
}
|
|
|
|
// nullTime pretvara *time.Time pokazivač u sql.NullTime —
|
|
// koristi se za opciona datumska polja kao što je datum završetka
|
|
func nullTime(v *time.Time) sql.NullTime {
|
|
if v == nil {
|
|
return sql.NullTime{}
|
|
}
|
|
return sql.NullTime{Time: *v, Valid: true}
|
|
}
|
|
|
|
// nullDateString upisuje *time.Time kao "YYYY-MM-DD" string ili NULL —
|
|
// koristiti za DATE kolone gde sql.NullTime nije kompatibilan s driver-om
|
|
func nullDateString(v *time.Time) sql.NullString {
|
|
if v == nil {
|
|
return sql.NullString{}
|
|
}
|
|
return sql.NullString{String: v.Format("2006-01-02"), Valid: true}
|
|
}
|