#!/usr/bin/python
# -*- coding: UTF-8 -*-


"""
    Programme pour tester les acces a une base de donnees de type SQLite.
"""


###############################################################################
# Informations de versions
###############################################################################
__project__   = 'Applications Bases de donnees'
__author__    = 'Simon CHOLLET (s.chollet@llr.in2p3.fr)'
__modifiers__ = ''
__date__      = '19/09/2011'
__version__   = '1.0'


###############################################################################
# Importations
###############################################################################
# Les fonctions du module SQLLite
import sqlite3


###############################################################################
# Definitions specifiques
###############################################################################
# Chemin du fichier contenant les donnees
SQLITE_DATA_FILE = "../output/annuaire"


###############################################################################
# Declaration des classes / fonctions
###############################################################################


#
#
# Fonction appelee lors de la demande
# d'execution de la classe/module
if __name__ == "__main__":

    # Ouverture de la connexion vers la base de donnees
    db = sqlite3.connect(SQLITE_DATA_FILE)
    
    # Creation d'un curseur de parcours de donnees
    cursor = db.cursor()
    
    # Affichage de messages d'informations
    print ">>>> PySQLite <<<<"
    print " * Creation de la table : persons"
    
    # Suppression de la table si elle existe
    cursor.execute("DROP TABLE IF EXISTS persons")
    
    # Creation de la table persons de l'annuaire
    cursor.execute("""
        CREATE TABLE persons
        (
            ID int PRIMARY KEY ASC,
            title char(255),
            name  char(255),
            sname char(255),
            birth date,
            exper int
        )
        """)
    
    # Remplissage de la table
    cursor.execute("""
        INSERT INTO persons VALUES ('1', 'Mr', 'DUPONT', 'Pierre', '1960-06-30', '30')
        """)
    cursor.execute("""
        INSERT INTO persons VALUES ('2', 'Melle', 'LA PIERRE', 'Marie', '1963-07-21', '20')
        """)
    cursor.execute("""
        INSERT INTO persons VALUES ('3', 'Mme', 'MOUTE', 'Catherine', '1970-04-23', '15')
        """)
    cursor.execute("""
        INSERT INTO persons VALUES ('4', 'Mr', 'DURAND', 'Jean-Pierre', '1980-01-12', '5')
        """)
    # Sauvegarde des changements
    db.commit()
    
    # Lecture de toutes les personnes enregistrees
    cursor.execute("SELECT * FROM persons")
    nbPersons = 0
    for row in cursor:
        nbPersons += 1
    
    # Affichage de messages d'informations
    print " * Ajout de %d personnes dans l'annuaire" % (nbPersons)
    print " * Liste des personnes inserees :"
    print "   sqlite: SELECT * FROM persons"
    print "    > ID, Titre, Nom, Prenom, Naissance, Experience"
    
    # Extraction des donnees
    cursor.execute("SELECT * FROM persons")
    for row in cursor:
        # Affichage de la ligne
        print "    > %d, %s, %s, %s, %s, %d" % (row[0], row[1], row[2], row[3], row[4], row[5])
    
    # Recherche d'une personne dans l'annuaire
    cursor.execute("SELECT * FROM persons WHERE ID >= 2")
    print " "
    print " * Recherche de personnes dans l'annuaire, avec ID >= 2 :"
    print "   sqlite: SELECT * FROM persons WHERE ID >= 2"
    print "    > ID, Titre, Nom, Prenom, Naissance, Experience"
    
    # Extraction des donnees
    for row in cursor:
        # Affichage de la ligne
        print "    > %d, %s, %s, %s, %s, %d" % (row[0], row[1], row[2], row[3], row[4], row[5])
    
    # Modification d'une personne dans l'annuaire
    cursor.execute("UPDATE persons SET name=\"LAPIERRE\" WHERE ID=2")
    print " "
    print " * Modification de la personne ID=2 dans l'annuaire :"
    print "   sqlite: UPDATE persons SET name=\"LAPIERRE\" WHERE ID=2"
    print "    > ID, Titre, Nom, Prenom, Naissance, Experience"
    cursor.execute("SELECT * FROM persons WHERE ID = 2")
    
    # Extraction des donnees
    for row in cursor:
        # Affichage de la ligne
        print "    > %d, %s, %s, %s, %s, %d" % (row[0], row[1], row[2], row[3], row[4], row[5])
    
    # Suppression d'une personne dans l'annuaire
    cursor.execute("DELETE FROM persons WHERE ID=3")
    print " "
    print " * Suppression de la personne ID=3 dans l'annuaire :"
    print "   sqlite: DELETE FROM persons WHERE ID=3"
    print "    > ID, Titre, Nom, Prenom, Naissance, Experience"
    cursor.execute("SELECT * FROM persons")
    
    # Extraction des donnees
    for row in cursor:
        # Affichage de la ligne
        print "    > %d, %s, %s, %s, %s, %d" % (row[0], row[1], row[2], row[3], row[4], row[5])
    
    # Fermeture du curseur de parcours de donnees
    cursor.close()
    
    # Fermeture de la connexion vers la base de donnees
    db.close()
