- accueil CHATA 
 - exemples 
 - Documentation
   - Tranche

 - Résumé

 - PONX 
 - PLUIE
 - MClaveau

 

CHATA

 (Champs & Tables)

Micro SGBD purement Python, en mémoire

 


  

 Stage 01 

# -*- coding: cp1252 -*-

import chata


#déclaration d'une base
dabase=chata.base()


#définition des champs
article=chata.champ(index=True)
libelle=chata.champ()
prix=chata.champ()
famille=chata.champ()


#définition d'une table
tarticle=chata.table(article,libelle,prix,famille)


#finalise la structure
chata.autoname(globals())


#remplissage d'une table
tarticle.set(1,'cd',"CD-ROM à l'unité",0.56,'informatique')
tarticle.set(2,'dvd',"DVD-ROM à l'unité",0.86,'informatique')
tarticle.set(3,'pastis',"Bouteille de pastis",13.99,'boisson')
tarticle.set(6,'chateauneuf',"Châteauneuf du pape",34,'boisson')
tarticle.set(5,'eau',"eau",2.20,'boisson')
tarticle.append('eauf',"Eau ferrugineuse",2.80,'boisson')
num=tarticle.append('python','Super-langage informatique')
famille.value='informatique'
prix.value=0.00


#visualisation du contenu
tarticle.visuall()


#enregistreùent de la base
dabase.enregistre()


print
print "modifie le contenu d'un article"
tarticle.moveto(5)
print
print 'article',article.value,':',libelle.value
libelle.value='Eau plate'
print 'article',article.value,':',libelle.value
print libelle.fromrecord(5)  #une autre forme de visu


#sauve les modifications
tarticle.commit()


print
print "supprime l'enregistrement 5"
tarticle.delete(5)
tarticle.visuall()


print
print "annule les modifs, depuis le dernier commit"
tarticle.rollback()
tarticle.visuall()


print
print "visu de l'index article"
tarticle.idxd[article].visu()


print
print "différentes visus d'enregistrement"
tarticle.visu()
tarticle.visu(3)
tarticle.moveto(2)
tarticle.visu()


print
print "recherche d'un enregistrement par l'index"
print'recherche par un index'
article.idx.searchexact('cd')
tarticle.visu()


print
print "accès direct au champ article de l'enregistrement 3  (pour info))"
print tarticle.rec[3][article.position]


print
print "mini stats"
print 'max:',tarticle.cmax(2)
print 'max:',tarticle.cmax(prix)
print 'min:',tarticle.cmin(prix)
print 'sum:',tarticle.csum(prix)
print 'nb :',tarticle.cnb(prix)


 

 Stage 02 

# -*- coding: cp1252 -*-

import chata


#déclaration d'une base
dabase=chata.base()


#définition des champs
article=chata.champ(index=True)
libelle=chata.champ()
prix=chata.champ()
famille=chata.champ()


#définition d'une table
tarticle=chata.table(article,libelle,prix,famille)

#finalise la structure
chata.autoname(globals())


#chargement des données précédentes
dabase.charge()


#ajout de quelques enregistrements
tarticle.append('javascript','langage objet par prototypage',0.00,'informatique')
tarticle.append('rhum','Agricole, à déguster',26,'boisson')
tarticle.append('vodka',"le grand frisson de l'est",22,'boisson')
tarticle.append('graveur','graveur de cd/dvd',34,'informatique')
tarticle.append('gin','Genevrier',19.50,'boisson')
tarticle.append('cognac','Vieilli en fût de chêne',38,'boisson')
tarticle.append('armagnac','le cousin du cognac',36,'boisson')
tarticle.append('ante','antésite',2.2,'boisson')


print
print "visualisation du contenu"
tarticle.visuall()

 

print
print "sélection famille=='boisson'"
s1=tarticle.selectioninterval(famille, 'boisson','boisson')
chata.selection.visu(s1, famille,article,libelle,prix)


print
print "sélection prix entre 10 et 99"
s2=tarticle.selectioninterval(prix, 10,99)
chata.selection.visu(s2, famille,article,libelle,prix)


print
print "intersection des sélections (==> boisson entre 10 et 99)"
s3=s1.intersection(s2)
chata.selection.visu(s3, famille,article,libelle,prix)


print
print "union des sélections (==> boisson et aussi articles avec prix entre 10 et 99)"
s4=s1.union(s2)
chata.selection.visu(s4, famille,article,libelle,prix)


print
print "tri de sélection (boisson, triées par prix + libelle)"
ls=chata.selection.sort(s1,prix,libelle)
chata.listselect.visu(ls, article,prix,famille,libelle)


print
print "sélection sur index (ultra-rapide"
s5=tarticle.idxselectionintervalle(article, 'd','pz')
chata.selection.visu(s5, article,libelle)


#sauvegarde, pour la suite...
tarticle.commit()


 

 Stage 03 

# -*- coding: cp1252 -*-

import chata


#déclaration d'une base
dabase=chata.base()


#définition des champs
article=chata.champ(index=True)
libelle=chata.champ()
prix=chata.champ()
famille=chata.champ()


#définition d'une table
tarticle=chata.table(article,libelle,prix,famille)

#finalise la structure
chata.autoname(globals())


#chargement des données précédentes
dabase.charge()


#définition de 3 nouveaux champs et d'une autre table
#noter la définition de la jointure pour le champ farticle
# (une jointure utilise toujours un champ indexé)
farticle=chata.champ(joint=article)
facture=chata.champ()
quantite=chata.champ()
tlfact=chata.table(facture,farticle,quantite)


#finalise la structure
chata.autoname(globals())


#on ajoute quelques lignes de facturation
tlfact.set(1,2007001,'cd',100)
tlfact.append(2007001,'dvd',100)
tlfact.append(2007001,'rhum',1)
tlfact.append(2007001,'cognac',1)
tlfact.append(2007001,'pastis',5)
tlfact.append(2007001,'eau',12)


print
print "sélection de tout ce qui est facturé en quantité>1"
s1=tlfact.selectioninterval(quantite, 1.1,999999)
chata.selection.visu(s1,facture,farticle,libelle,quantite)

print
print "sélection articles 'boisson'"
s2=tarticle.selectioninterval(famille, 'boisson','boisson')
chata.selection.visu(s2,article,famille,libelle)

print
print "sélection sur jointure (sélection précédente + facturé)"
s3=tlfact.selectionjointure(farticle, s2)
chata.selection.visu(s3,facture,farticle,famille,quantite)

print
print "intersection  ('boisson' + facturé + quantité>1)"
s4=s3.intersection(s1)
chata.selection.visu(s4,facture,farticle,famille,libelle,quantite)


print
print "sélection(facturé avec qté 1) + récupération résultat dans une liste de liste"
s5=tlfact.selectioninterval(quantite,1,1)
lst=chata.selection.recuplist(s5, facture,farticle,libelle,quantite,prix)
for l in lst:  print l

print
print "la même chose, triée sur code_article"
lt=chata.selection.sort(s5,farticle)
lst=chata.listselect.recuplist(lt, facture,farticle,libelle,quantite,prix)
for l in lst:  print l


 

 Stage 04 

# -*- coding: cp1252 -*-

import chata


#déclaration d'une base
dabase=chata.base()


#définition des champs
article=chata.champ(index=True)
libelle=chata.champ()
prix=chata.champ()
famille=chata.champ()


#définition d'une table
tarticle=chata.table(article,libelle,prix,famille)


#finalise la structure
chata.autoname(globals())


#chargement des données précédentes
dabase.charge()


# fonctions pour callback dans les déclencheurs (= triggers)
def majqte(num, champ, dataold, datanew):
    #on additionne les quantités par facture
    if dataold:
        fqtetotale.value=fqtetotale.value-dataold
    if datanew:
        fqtetotale.value=fqtetotale.value+datanew

def majlignes(num, champ, dataold, datanew):
    #on compte les lignes par factures
    if dataold:
        fnblignes.value-=1
    if datanew:
        fnblignes.value+=1


#définition de nouveaux champs et de la table facture-enTêtes
tfacture=chata.champ(index=True)
fqtetotale=chata.champ()
fnblignes=chata.champ()
ttfact=chata.table(tfacture,fqtetotale,fnblignes)


#définition de nouveaux champs et de la tables facture-lignes
farticle=chata.champ(joint=article)
facture=chata.champ(joint=tfacture,trigafterupdate=majlignes)
quantite=chata.champ(trigafterupdate=majqte)
tlfact=chata.table(facture,farticle,quantite)


#finalise la structure
chata.autoname(globals())


#on crée 2 factures (en-têtes)
ttfact.set(1,2007001,0,0)
ttfact.set(2,2007002,0,0)

 
#on crée 8 lignes, 6 dans 1 facture, 2 dans l'autre
tlfact.set(1,2007001,'cd',100)
tlfact.append(2007001,'dvd',100)
tlfact.append(2007001,'rhum',1)
tlfact.append(2007001,'cognac',1)
tlfact.append(2007001,'pastis',5)
tlfact.append(2007002,'cd',2000)
tlfact.append(2007001,'eau',12)
tlfact.append(2007002,'dvd',2000)

 

print
print "sélection de tout ce qui est facturé en quantité>1"
s1=tlfact.selectioninterval(quantite, 1.1,999999)
chata.selection.visu(s1,facture,farticle,libelle,quantite)

 

print
print "sélection articles 'boisson'"
s2=tarticle.selectioninterval(famille, 'boisson','boisson')
chata.selection.visu(s2,article,famille,libelle)


print
print "sélection sur jointure (sélection précédente + facturé)"
s3=tlfact.selectionjointure(farticle, s2)
chata.selection.visu(s3,facture,farticle,famille,quantite)


print
print "intersection  ('boisson' + facturé + quantité>1)"
s4=s3.intersection(s1)
chata.selection.visu(s4,facture,farticle,famille,libelle,quantite)


print
print "affiche têtes de facture, pour voir le résultat des déclencheurs"
ttfact.visuall()


 

 Stage 05 

# -*- coding: cp1252 -*-

import chata


#déclaration d'une base
dabase=chata.base()


#définition des champs
article=chata.champ(index=True,uniq=True,long=10)
libelle=chata.champ()
prix=chata.champ(mini=0,maxi=99)
famille=chata.champ()


#définition d'une table
tarticle=chata.table(article,libelle,prix,famille)


#finalise la structure
chata.autoname(globals())


#remplissage d'une table
tarticle.set(1,'cd',"CD-ROM à l'unité",0.56,'informatique')
tarticle.set(2,'dvd',"DVD-ROM à l'unité",0.86,'informatique')
tarticle.set(3,'pastis',"Bouteille de pastis",13.99,'boisson')
tarticle.set(6,'chateauneuf',"Châteauneuf du pape",34,'boisson')
tarticle.set(5,'eau',"eau",2.20,'boisson')
tarticle.append('eauf',"Eau ferrugineuse",2.80,'boisson')
num=tarticle.append('python','Super-langage informatique')
famille.value='informatique'
prix.value=0.00


print
print "visualisation du contenu"
tarticle.visuall()


print
print "test des contraintes"
tarticle.append('python','Xxxxxx xx')   #doublon : insertion rejetée
tarticle.append('cher','produit de luxe',1000)  #prix ramené à 99
tarticle.append('payant','produit pas assez cher',-12.50)  #prix ramené à 0
tarticle.append('longcodearticle','trop long code article')  #code raccourci
libelle.value=[1,22,333,4444]


print "visualisation du contenu, après contraintes"
tarticle.visuall()

dabase.enregistre()


 

 Stage 06 

# -*- coding: cp1252 -*-

import chata


#déclaration d'une base
dabase=chata.base()


#définition des champs et tables
article=chata.champ(index=True)
libelle=chata.champ()
prix=chata.champ()
famille=chata.champ()
tarticle=chata.table(article,libelle,prix,famille)

cond=chata.champ(index=True)
clibelle=chata.champ()
tconditionnement=chata.table(cond,clibelle)


#finalise la structure
chata.autoname(globals())


#remplissage d'une table
tarticle.set(1,'cd',"CD-ROM à l'unité",0.56,'informatique')
tarticle.set(2,'dvd',"DVD-ROM à l'unité",0.86,'informatique')
tarticle.set(3,'pastis',"Bouteille de pastis",13.99,'boisson')
tarticle.set(6,'chateauneuf',"Châteauneuf du pape",34,'boisson')
tarticle.set(5,'eau',"eau",2.20,'boisson')
tarticle.append('eauf',"Eau ferrugineuse",2.80,'boisson')


tconditionnement.append(12,'douzaine')
tconditionnement.append(1,'unité')
tconditionnement.append(6,'demi-douzaine')
print
print 'tconditionnement'
tconditionnement.visuall()
print

#visualisation du contenu
print 'tarticle'
tarticle.visuall()
tarticle.infotable()
tarticle.infochamp()
tarticle.infojoint()

#enregistreùent de la base
dabase.enregistre()

print
print "  _______________________________________________________________________"
print
print "  Ajout champ conditionnement avant prix, avec 12 comme valeur par défaut"
print "  _______________________________________________________________________"
print
print

conditionnement=chata.champ(joint=cond)
tarticle.alter(conditionnement,addbefore=prix,default=12)
#finalise la structure
chata.autoname(globals())

print
print 'tarticle'
tarticle.visuall()
tarticle.infotable()
tarticle.infochamp()
tarticle.infojoint()


print
print "  ____________________________________"
print
print "  Suppression du champ conditionnement"
print "  ____________________________________"
print
print


tarticle.alter(conditionnement,remove=True)
#finalise la structure
chata.autoname(globals())

print
for i,j in tarticle.rec.iteritems():
    print j
print

print
print 'tarticle'
tarticle.visuall()
tarticle.infotable()
tarticle.infochamp()
tarticle.infojoint()