Michele Liberi software

versione 1.04, giugno 2026

Michele Liberi
mail: mliberi@gmail.com
cell: +393485211456
telegram: @MicheleLiberi

liberix

woha, web oriented hyerarchical database

Il comando woha può essere usato anche da linea di comando per eseguire operazioni batch su un database.

Si tratta dello stesso eseguibile documentato nel capitolo Applicazioni web che può essere usato anche da linea di comando.

La modalità batch si attiva automaticamente se non è presente la variabile d'ambiente REQUEST_METHOD, oppure può essere forzata con l'opzione -b.

Un'altra opzione molto importante in questo contesto è -M, che serve per disabilitare l'esecuzione dei metodi. In alcuni casi infatti, ad esempio per caricamenti massivi di dati, è meglio non far scattare i metodi automatici che rallenterebbero il processo.

In modalità batch il woha ha queste funzioni:

select
Questa funzione permette di estrarre dati e metadati dagli oggetti di una classe o una gerarchia di classi.

La selezione degli oggetti da estrarre avviene indicando uno o più filtri, che vengono applicati in AND logico, oppure indicando esplicitamente una lista di rowid (identificatore unico per un oggetto nel DB).

L'ordine con cui vengono estratti gli oggetti dipende dall'indicazione di uno o più criteri di ordinamento, che vengono applicati in sequenza.

È possibile indicare quali attributi si vogliono estrarre, e in quale ordine.

Il risultato della select viene prodotto su standard output, un oggetto per riga e con i valori degli attributi separati dal carattere '|' (pipe). Opzionalmente può essere prodotta una riga di header con i nomi degli attributi.

N.B.: il file prodotto in output può contenere alcune sequenze speciali che vanno gestite opportunamente:

insert
Questa funzione permette di inserire nuovi oggetti in una classe.

I dati vengono letti da standard input nello stesso formato prodotto dalla funzione select. La riga di header in questo caso è obbligatoria in quanto permette di mappare correttamente i dati.

È possibile indicare un valore di default per gli attributi non valorizzati, ed una directory dove prelevare i file associati ad attributi del tipo fileset.

L'operazione di insert ha successo solo se nella classe non esiste un altro record con la stessa chiave.

update
Questa funzione lavora in modo del tutto analogo alla funzione insert, con la differenza che l'oggetto (identificato con il rowid o tramite la chiave) deve esistere.
add
Questa funzione corrisponde a insert OR update. Se l'oggetto non esiste viene creato, se esiste viene aggiornato. In ogni caso il file di input deve contenere indicazione esplicita di tutti i campi chiave, oppure del rowid, per poter identificare l'oggetto (se esiste) senza ambiguità.
delete
Questa funzione permette di rimuovere una lista di oggetti da una classe. La lista degli oggetti che si vogliono rimuovere viene letta da standard input nello stesso formato prodotto dalla funzione select, ed usato anche dalle funzioni insert, update e add. In tal caso lo standard input deve contenere indicazione esplicita di tutti i campi chiave, oppure del rowid, per poter identificare l'oggetto (se esiste) senza ambiguità.

In alternativa è possibile specificare direttamente nella linea di comando la lista dei rowid che si vogliono cancellare.

next
Ogni database woha può avere delle sequenze, variabili che hanno un nome ed un valore numerico. Le sequenze vengono utilizzate per valorizzare un attributo con valori incrementali. La funzione next permette di incrementare atomicamente il valore di una sequenza e produce su standard output il nuovo valore.
path
Questa funzione permette di sapere in quale pathname è fisicamente residente un database. Il valore viene prodotto su standard output.
fts
Questa funzione permette di ricostruire gli indici di una classe, o gerarchia di classi. Per motivi di efficienza la cancellazione di oggetti non li rimuove fisicamente dal DB, vengono semplicemente marcati come cancellati. La funzione fts rimuove fisicamente gli oggetti cancellati (liberando spazio) e ricostruisce gli indici.

Per ulteriori informazioni sulla sintassi di attivazione e sulle opzioni disponibili lanciare il comando con l'opzione -h.

(c) M. Liberi, last updated: 2026-06-15