I tipi di database di Nios4

 

La piattaforma Nios4 utilizza tre tipi di database in base al sistema operativo dove deve girare. Non essendo Nios4 principalmente una webapp ma un collana di software sviluppati in codice nativo per ogni tipo di dispositivo, comporta anche avere soluzioni database diverse tra di loro.

I dati e la loro struttura sono identici in tutti i database per permettere la gestione "crossplatform", ma ovviamente questo comporta non poter utilizzare tutte le caratteristiche proprie di quel tipo di database.

I tipi di database

Per la versione Windows si è scelto di utilizzare le soluzioni Microsoft, partendo dal sistema Access per l'utilizzo standard, per poi passare a SQLServer quando il carico di dati risulta troppo oneroso per la prima metodologia.

Le versioni mobile di Nios4, quindi Android e IOS, e anche la versione Mac OS utilizzano il sistema SQLLite.

La versione web utilizza invece il sistema MySQL.

Quindi tutti i motori database utilizzano di base la tecnologia sql per la gestione ma ognuno nel dettaglio ha le sue specifiche. Per questo quando occorre interrogare o gestire i dati bisogna utilizzare solo comandi sql standard riconosciuti da tutti i sistemi.

La gestione delle date

Una delle differenze tra i vari sistemi risulta nel campi di tipo data. Questi a seconda del database vengono salvati in formati diversi. Questo significa che anche il formato dei comandi sql deve cambiare.

Mentre all'interno di Windows il valore della data viene salvato in formato esteso  YYYY/MM/DD (formato che varia in base alle regole internazionali applicate) negli altri sistemi le date vengono salvate come numero formattato YYYYMMDDhhmmss.

Esempio di interrogazione sql utilizzando le date


----------------------------------------------------
-- creo due date
-- il formato delle date in lua è di tipo timestamp
----------------------------------------------------
data1 = utility.getnow()
data2 = utility.dateadddays(data1,1)

----------------------------------------------------
-- estraggo le componenti della data
----------------------------------------------------

igiorno = string.format("%02d",tostring(utility.dateday(data1)))
imese   = string.format("%02d",tostring(utility.datemonth(data1)))
ianno   = string.format("%04d",tostring(utility.dateyear(data1)))
fgiorno = string.format("%02d",tostring(utility.dateday(data2)))
fmese   = string.format("%02d",tostring(utility.datemonth(data2)))
fanno   = string.format("%04d",tostring(utility.dateyear(data2)))    

----------------------------------------------------
-- creo le date per la versione windows
----------------------------------------------------

windows_data_inizio = igiorno.."/"..imese.."/"..ianno
windows_data_fine   = fgiorno.."/"..fmese.."/"..fanno

----------------------------------------------------
-- creo le date per le altre versioni
----------------------------------------------------

data_inizio = ianno .. imese .. igiorno .. "000000"
data_fine   = fanno .. fmese .. fgiorno .. "235959"

----------------------------------------------------
-- interrogo il database
----------------------------------------------------

tabella = nil

if program.type() = = 1 then
    tabella = database.getsql("select * from interventi where data >= format('"..windows_data_inizio.."','dd/mm/yyyy') AND data < format('"..windows_data_fine.."','dd/mm/yyyy')") 
else
    tabella = database.getsql("select * from interventi where data >= "..data_inizio.." AND data <= "..data_fine) 
end

if tabella != nil then
   righe = tabella.getrows()
   for i = 1,tabella.countrows() do
       riga = righe[i]
       output.print(riga.getvalue("data"))
   end
end

In questo esempio di script vediamo come interrogare il database utilizzando un range di date.

Come prima cosa abbiamo creato due date prendendo la data attuale e aggiungendo alla seconda un giorno rispetto alla prima.

Considerando che il formato utilizzato dentro il linguaggio lua, per quanto riguarda le date è il timestamp, abbiamo estrapolato l'anno il mese e il giorno per le due date.

Poi abbiamo montato le date per windows nel formato di data standard, anche se per essere più precisi sarebbe stato meglio inserire anche l'ora, i minuti e i secondi. Infatti se non vengono riportati il sistema imposta automatica l'ora 00:00:00. Questo significa che se vengono poi eseguite ricerche come in questo caso controllando l'inclusione del valore in un range minimo e massimo, non è detto che tutti i valori vengano intercettati.

Per la data degli altri sistemi ora, minuti e secondi sono comunque obbligatori, visto che il numero della data è sempre composto da 14 cifre.

Quindi ad esempio il risultato della data sarà per windows "26/09/2022" mentre per gli altri sistemi 20220926000000.

Creati i valori in base al type del programma utilizzeremo il formato delle date corretto.

Altre differenze tra i database

Esistono naturalmente altre differenze tra i vari database. Il consiglio è sempre quello di eseguire sempre comandi sql standard, a meno che non occorra eseguire specifiche operazioni su una specifica versione.


 

 

 

 



Commenti