Vous êtes sur le wiki de développement du projet SLIS

Bibliothèques perl de gestion de la base de donnée

Les deux bibliothèque sont Slis::Common::SQLHelper et Slis::Common::SQLParser

Elles sont utilisées pour avoir accès à la base de données à partir de scripts Perl , comme par exemple pour configurer un service.

l'usage courant est fait de cette façon :

use Slis::Common::SQLHelper;
use Slis::Common::SQLParser;
 
load_config; # Charge la config SLIS
##############################
## Open a channel to syslog ##
##############################
 
setlogsock('unix');
openlog('init_postgresql_services_options','pid',$slisconf{LOG_FACILITY});
 
####################
## SQL CONNECTION ##
####################
my $dbh = sql_connect(1); # Allow fallback as we can be run during
                          # slis-postgresql-config
 
my ($version, $target, $reqlist, $sth, $query) ;
 
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
eval {
    Slis::Common::SQLHelper::create_component_metadata_table ($dbh, "postgresql", 0) ;
 
    if (Slis::Common::SQLHelper::table_exists ($dbh, "options")) {
	Slis::Common::SQLHelper::update_component_db_version ($dbh, "postgresql", "4.1.4") ;
	$dbh->commit ;
    }
 
    $version = Slis::Common::SQLHelper::get_component_db_version ($dbh, "postgresql") ;
    $target = "4.1.4" ;
    if (Slis::Common::SQLHelper::is_lesser ($version, $target)) {
	$reqlist = Slis::Common::SQLParser::parse_sql_file ("/usr/share/interfacedu/postgres/hadmin.sql") ;
	foreach my $s (@$reqlist) {
	    $query = $s ;
	    $sth = $dbh->prepare ($query) ;
	    $sth->execute () ;
	    $sth->finish () ;
	}
	@$reqlist = () ;
 
	Slis::Common::SQLHelper::update_component_db_version ($dbh, "postgresql", $target) ;
	$dbh->commit () ;
    }
 
    # End of eval block, only reached if everything went fine
    # Issuing rollback, but each of the previous blocks should have done commits ayway
 
    $dbh->rollback ;
} ;
 
if ($@) {
    syslog('warning', "init : transaction aborted because $@");
    syslog('warning', "Last SQL query was:\n$query\n(end of query)") ;
    $dbh->rollback ;
    $version = Slis::Common::SQLHelper::get_component_db_version ($dbh, "postgresql") ;
    if ($version) {
	syslog('warning', "Database schema is at version $version") ;
    } else {
	syslog('warning', "Couldn't get your database schema version.") ;
    }
    exit 1 ;
}
 
$dbh->disconnect();

Les principales fonctions utilisées sont les suivantes :

  • Slis::Common::SQLHelper::create_component_metadata_table ($dbh,"nom_table",version) : cette fonction crée une table de métadonnées pour un composant du SLIS. Elle porte le nom du composant et le numéro de version. Cette table n'est crée que si elle n'existe pas déjà.
  • Slis::Common::SQLHelper::table_exists($dbh,"table") : renvoie un booléen qui caractérise l'existence de la table.
  • Slis::Common::SQLHelper::get_component_db_version($dbh,"component") : donne le numéro de version d'un composant.
  • Slis::Common::SQLHelper::is_lesser($version,$target) : indique si la version en cours d'un composant est inférieur ou pas à la version cible. Les version du type a.b.c sont comparées correctement.
  • On voit ensuite la façon de parcourir un fichier SQL avec un rollback en cas de non fonctionnement. La fonction Slis::Common:SQLParser::parse_sql_file($file) qui transforme le fichier SQL en requetes successives.

QR Code
QR Code devel:bibliotheques:perlsql (generated for current page)