Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicit� Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Guida all'uso di OrientDB: comandi SQL
Scritto da Luca Garulli il 26-05-2011 ore 10:18
Intel Parallel Studio 2016
Eccoci di nuovo insieme per approfondire il linguaggio SQL di OrientDB con particolare riferimento alle estensioni per la manipolazione di tipi complessi. Come di consueto passiamo subito all'azione con il costrutto INSERT; le differenze principali con lo standard SQL sono le seguenti:
  • l'elenco dei campi sempre obbligatorio. Il motivo semplice: in un DBMS schema-less potrebbe non esserci uno schema definito. Con il linguaggio SQL standard invece esso pu essere omesso e in questo caso si intendono tutte le colonne nell'ordine definito;
  • possibile inserire array e mappe associative come valori, utilizzando rispettiamente le parentesi quadre e graffe.
Per sperimentare la prima INSERT apriamo la console e connettiamoci al database "demo" delle volte precedenti. Per i nostri esperimenti creiamo una nuova classe "test" con il comando:
  1. > CREATE class test
e poi inseriamo un nuovo record con i campi "name" e "surname":
  1. > INSERT INTO test (name,surname) VALUES ('Jay','Miner')
Per verificare l'esito dell'operazione facciamo una query sulla classe "test" con:
  1. > SELECT FROM test
Di seguito uno screenshot di queste operazioni.

5761244914_63790cb376_b.jpg

Notate nulla di strano? Non abbiamo definito uno schema per la classe "test", eppure il record stato creato senza problemi. Questa la caratteristica schema-less di OrientDB, che si traduce nel poter aggiungere, modificare ed eliminare campi (l'equivalente delle colonne degli RDBMS) a livello di singolo record. OrientDB permette di lavorare anche in modalit schema-full, o ibrida, ma questo verr trattato nelle prossime puntate. In base all'output dei comandi precedenti ci sono altre cose interessanti che vale la pena di analizzare. Ad ogni inserimento la console ci propone la forma testuale del record:
  1. test#25:0{name:Jay,surname:Miner} v0
La prima parte, ove specificata, il nome della classe del record seguito dal record Id e, tra parentesi graffe, l'elenco dei campi come coppia di nome/valore. Conclude la stringa il numero di versione del record. Alla creazione sempre 0, ma a ogni modifica il valore viene incrementato automaticamente di 1. Torneremo pi avanti sulla versione quando tratterremo il contesto multiutente e le transazioni.

Il record Id assegnato #25:0, che significa primo record del cluster numero 25. Quando abbiamo creato la classe infatti stato creato automaticamente un cluster (di tipo fisico) con lo stesso nome della classe.

5760700575_d31afbafc6_b.jpg

Adesso inseriamo un nuovo record con questo comando:
  1. > INSERT INTO test (name,age) VALUES ('Luca',34)
Abbiamo appena inserito, all'interno della stessa classe (e quindi dello stesso cluster), un record con uno nuovo campo "age" e senza il campo "surname". Adesso effettuiamo una modifica con il comando UPDATE, aggiungendo un nuovo campo al record appena creato:
  1. > UPDATE test SET city = 'Rome' WHERE name = 'Luca'
Di seguito il risultato:

5760700683_52ebe32965_b.jpg

Un'altra caratteristica del linguaggio SQL di OrientDB la capacit di manipolare array e mappe associative di valori.
Il comando UPDATE stato esteso con nuove keyword da utilizzare al posto di SET:
  • ADD e PUT per inserire un elemento, rispettivamente in un array e in una mappa. Se l'array o la mappa non esiste verr creata automaticamente;
  • REMOVE, per eliminare un elemento.
Creiamo una nuova collection di string, che rappresentar il set di tag che assoceremo ai record:
  1. > UPDATE test ADD tags = 'tutorial'


5761245246_f56531734c_b.jpg

Si noti che quando effettuiamo query, i valori all'interno degli array non vengono visualizzati: compare solamente l'indicazione di quanti elementi sono contenuti. Per visualizzare il contenuto occorre utilizzare il comando:
  1. > display 0
Il valore 0 il numero del record nell'ultimo risultato. In questo caso 0 il primo, ossia il record #25:0. Completiamo l'esercizio inserendo i numeri telefonici come mappa associativa: il tipo di telefono come chiave e il numero come valore.
  1. > UPDATE test put phones = 'office', '+3906222222' WHERE name = 'Luca'
  1. > UPDATE test put phones = 'mobile', '+393333888' WHERE name = 'Luca'
Questo il risultato:

5761245358_6ac64834b1_b.jpg

Per estrarre questo record possiamo utilizzare gli operatori sulle mappe come size() e contains().

5761245474_2daf10e8bc_b.jpg

I record si rimuovono dal database con il comando DELETE. L'ho lasciato per ultimo perch esattamente lo stesso del linguaggio SQL standard, a eccezione del fatto che nella WHERE condition possiamo utilizzare tutti gli operatori esclusivi di OrientDB. Per rimuovere tutti i record con almeno un tag:
  1. > DELETE FROM test WHERE tags.size() > 0
Per qualunque domanda o maggiori informazioni sugli argomenti trattati vi il forum ufficiale: gratuito, ma necessario scrivere in inglese.
Precedente: Animazioni CSS3 con keyframe
Successiva: Insolito ma vero: un emulatore di TI-59 per Android (2/2)
Copyright Programmazione.it™ 1999-2016. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.255 secondi.