-+  Documenti
-+  Eventi
-+  Community
-+  Blog
-+  Link

Cerca



Tool & Feed













 


Perl in pillole!

In collaborazione con:

SQL::Abstract per non scrivere più (troppo) SQL
Giugno 2006

Non saprei stimare quanti statement SQL ho scritto nella mia vita di programmatore. Mischiare codice SQL all'interno del proprio linguaggio di programmazione, qualunque esso sia, lo rende meno leggibile, più brutto, e - specialmente se le query sono complesse - particolarmente inelegante. Anche programmando secondo il paradigma MVC (caldamente raccomandato in alcuni casi, come le applicazioni web) si finisce semplicemente con lo spostare il codice SQL nel modello, mentre forse la scelta migliore sarebbe quella di liberarsene del tutto. Il problema è che è necessario interrogare il database, quindi non è possibile rimuovere il codice SQL; si può, tuttavia, inserire qualcos'altro al suo posto. Vediamo cosa, ovviamente dal punto di vista del programmatore Perl.

Esistono moduli che permettono l'astrazione dal linguaggio SQL generando codice a partire da una struttura dati. Ciò consente di utilizzare strutture arbitrariamente complesse per generare query arbitrariamente complesse senza scrivere una riga di codice database-related all'interno del proprio programma Perl. È opportuno notare che ciò è diverso da quello che fanno gli ORM (Object Relational Mappers): questi ultimi astraggono il database in oggetti, mentre qui si parla di astrazione di query SQL. Spesso, comunque, un buon ORM (come DBIx::Class) fornisce anche l'astrazione delle query, di solito utilizzando uno dei moduli disponibili su CPAN. Probabilmente vorrete utilizzare un ORM, ma questa è un'altra storia.

In questo breve articolo verrà trattato SQL::Abstract, che tra l'altro è quello utilizzato da DBIx::Class). È piuttosto semplice imparare come scrivere semplici query con questo modulo, e con un po' di ragionamento anche quelle complesse possono essere espresse sotto forma di strutture dati Perl. Se per esempio si ha:

my $query = "SELECT users.name, users.phone, users.email
    FROM users
    WHERE users.id = 1 OR users.id = 2
    ORDER BY id
";
my $sth = $dbh->prepare($query) or die $dbh->errstr;
$sth->execute() or die $dbh->errstr;

utilizzando SQL::Abstract si può scrivere:

my $sql = SQL::Abstract->new();

my ($query, @bind) = $sql->select(
    'users',
    [ 'name', 'phone', 'email' ],
    { id => [ 1, 2 ] },
    [ 'id' ],
);
my $sth = $dbh->prepare($query) or die $dbh->errstr;
$sth->execute(@bind) or die $dbh->errstr;

Si potrebbe obiettare che il codice è più lungo, ed in effetti un po' lo è (anche se la formattazione contribuisce a ciò). Esso è tuttavia molto più chiaro: non c'è codice extra-Perl accanto ai nomi ed ai valori dei campi, e si può capire alla prima occhiata cosa fa la query. Il metodo select accetta 4 parametri: il nome della tabella su cui si intende lavorare; i nomi dei campi da ritornare; la where clause; l'opzionale ordinamento dei risultati. Come valore di ritorno si ottiene una stringa contentente la query, e l'array dei bound values da utilizzarsi al momento di chiamare execute.

Continua a leggere "SQL::Abstract per non scrivere più (troppo) SQL"

Commenti (0) | TrackBack (0)

Pillola di Dicembre: Chi ha paura delle espressioni regolari?
Gennaio 2006

La "pillola di Perl" su Computer Programming questo mese parla di espressioni regolari, con un articolo di Flavio Poletti.

Commenti (0) | TrackBack (0)

Pillola di Novembre: Class::DBI
Novembre 2005

La "pillola di Perl" su Computer Programming questo mese parla di Class::DBI, con un articolo di Stefano Rodighiero.

Il compito non è facile: ho solo 2000 caratteri, e devo spiegare qualcosa di pratico da fare in Perl. Niente oneliner o tecniche simili: Perl è uno strumento che permette magie ben più potenti. E come se non bastasse ho già usato 200 caratteri solo per divagare! Dove non sarò io abbastanza stringato, dunque, lo sarà Perl.

Continua a leggere "Pillola di Novembre: Class::DBI"

Commenti (0) | TrackBack (0)

LDAP da Perl: si può ed è semplice
Settembre 2005

In questa puntata analizziamo un interessante, e non sufficientemente conosciuta, distribuzione di moduli Perl, e cioè quelli che permettono di utilizzare il protocollo LDAP. In particolare verrà mostrato un esempio di utilizzo del modulo Net::LDAP.

Continua a leggere "LDAP da Perl: si può ed è semplice"

Commenti (1) | TrackBack (0)

Oneliner, che passione!
Luglio 2005

Iniziamo con i commenti su una serie di "pillole", a cura di Perl.it, che appariranno su Computer Programming a partire da questo mese. Si tratta di brevi articoli che spiegano come risolvere problemi specifici, o illustrano qualche particolare tecnica di programmazione. La prima pillola è dedicata agli one liner, ed è di Giuseppe Maxia, conosciuto da molti semplicemente come gmax.

Continua a leggere "Oneliner, che passione!"

Commenti (2) | TrackBack (0)

D:
Progetti e documenti in rilievo
Corso di Perl Contest 2005 Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google