/* TimeStamp (dos) : 24 Novembre 00 18:07 -- x:\catb.rex */ /* catb.rex : affichage paramétrable de bases et tables mysql */ versCatb = "v-1.3" parse arg ligneArg ligSyntax = " catb [ -v | -h | Base [ -r [ -s ] ] [ Table [ [ deb ] nb ] ] ]" /* detection de l'option -v pour la version */ if (wordpos("-v",ligneArg)>0) then do call versionCatb return end /* fin de si on veut la version seulement */ /* detection de l'option -h pour l'aide longue */ if (wordpos("-h",ligneArg)>0) then call aide("longue") /* detection des l'option -s et -r */ parse var ligneArg nomB resteParms /* valeurs par défaut */ pStru = 0 pRedu = 0 nbl1 = 1 nbl2 = 10 /* affichage eventuel de l'aide courte */ if nomB = "" then call aide("courte") pmds = wordpos("-s",resteParms) if pmds > 0 then do pStru = 1 resteParms = delword(resteParms,pmds,1) end /* fin de si on gère l'option -s */ pmdr = wordpos("-r",resteParms) if pmdr > 0 then do pRedu = 1 resteParms = delword(resteParms,pmdr,1) end /* fin de si on gère l'option -r */ /* gestion du nb d'enregistrements et du numéro du premier enr. */ parse var resteParms nomT nbl1 nbl2 noc if nbl1 = "" then nbl1 = 01 if nbl2 = "" then nbl2 = 10 if words(noc)=0 then do say say " (gH) ; catb : affichage paramétrable de bases et tables mysql " say end badP = 1 dbg = 0 if dbg=1 then do say " Base : " nomB say " Table : " nomT say " Start : " nbl1 say " NbEnr : " nbl2 say " Redu : " pRedu say " Stru : " pStru pull . end ftmpS = "catb.str" ftmpD = "catb.dat" /* aucun nom de table donné, on affiche la liste des tables de la base */ if nomT = "" then do badP = 0 cmd = "mysql " ' -N -e "show tables" ' nomB ' > ' ftmp cmd nblG = 0 nomTab. = "" do while lines(ftmp)>0 nblG = nblG + 1 lig = linein(ftmp) nomTab.nblG = lig end call lineout ftmp say " Liste des " nblG " tables de la base " nomB " (via show tables) " say say " BASE Enregistrements Champs" do nbl = 1 to nblG lig = nomTab.nbl fnbl = format(nbl,8) nblT = nbLig(lig) nbcT = nbCol(lig) fnblT = format(nblT,9) fnbcT = format(nbcT,3) flig = substr(lig,1,15) say fnbl " " flig copies(" ",10) fnblT copies(" ",10) fnbcT end call lineout ftmp /* rcf = fileut("delFile^"ftmp) */ if words(noc)=0 then call cpy exit 0 end /* si paramètre -s on affiche la structure (sans quitter) */ if pStru = 1 then do badP = 0 cmd = 'mysql -t -e " describe ' nomT ' " ' nomB "echo " cmd " > " ftmpS say cmd " >> " ftmpS call montreFtmp ftmpS nblT = nbLig(nomT) say say " la table " nomT " contient " nblT " enregistrement(s)." say end /* affichage demandé */ if (nbl1>0) & (nbl2>0) then do cmd = "mysql " '-t -e " select * from ' nomT ' limit ' nbl1-1 ' , ' nbl2 ' " ' nomB "echo " cmd " > " ftmpD say cmd " >> " ftmpD call montreFtmp ftmpD end if words(noc)=0 then call cpy exit 0 /* si on arrive ici, cela doit etre une erreur */ if badP = 1 then do say say " Syntaxe incorrecte. Rappel de la syntaxe : " say say " " ligSyntax say if words(noc)=0 then call cpy exit -1 end exit 0 /****************** Sous-Programme(s) *************/ aide: call versionCatb parse arg typeAide say " syntaxe : " ligSyntax say if typeAide = "courte" then do say " . exemple d'utilisation des paramètres : " say " catb lesn nint 5 10 " say " affichera 10 lignes à partir de la ligne numéro 5" say " pour la table NINT de la table LESN " say " (par défaut : 10 lignes à partir de la première)" say " . si aucun nom de table n'est donné, catb renvoie la liste" say " des tables de la base (avec leur nb de lignes et de colonnes)" say " . l'option -s affiche la structure et utilise les paramètres" say " (mettre 0 0 comme paramètres pour n'avoir que la structure)" say " . l'option -r donne un affiche réduit sur 80 col (utile en telnet)" say " . l'option -h donne une aide plus conséquente " say end ; else do say " . l'option -r réduit l'affichage à 80 caractères au maximum"d2c(10) say " . l'option -s affiche au passage la structure de la table"d2c(10) say " . le paramètre DEB choisit le numéro de la première ligne à afficher" say " par défaut, ce paramètre vaut 1"d2c(10) say " . le paramètre NB choisit le nombre de lignes à afficher" say " par défaut, ce paramètre vaut 10"d2c(10) say " . pour n'afficher que la structure, il faut forcer DEB à 0 et NB à 0"d2c(10) say " Exemples d'utilisation :"d2c(10) say " -- catb test :" say " affiche toutes les tables de la base test" say " avec leur nombre de lignes et de colonnes, par exemple :"d2c(10) say " Liste des 3 tables de la base test (via show tables)" say ""d2c(10) say " BASE Enregistrements Champs" say " 1 listeApp 12 9" say " 2 listeFic 1 9" say " 3 listeNom 0 11" say ""d2c(10) say " -- catb test -s listeApp 0 0 " say " affiche la structure seulement de la table"d2c(10) say " -- catb test -s listeApp " say " affiche la structure de la table et les enregistrements 1 à 10"d2c(10) say " -- catb test -r -s listeApp " say " affiche la structure de la table et les enregistrements 1 à 10"d2c(10) say " avec un affichage forcé à 80 caractères au maximum"d2c(10) say " -- catb test listeApp 10 15 " say " affiche seulement 15 enregistrements à partir du 10-ième"d2c(10) say " -- catb test -r listeApp 10 15 " say " affiche seulement 15 enregistrements à partir du 10-ième"d2c(10) say " avec un affichage forcé à 80 caractères au maximum"d2c(10) say " . le fichier catb.str contient une copie de l'affichage de la structure" say " si on a utilisé l'option -s"d2c(10) say " . le fichier catb.dat contient une copie de l'affichage des enregistrements"d2c(10) end /* fin de si sur type d'aide */ call cpy exit 0 return /* fin de aide */ montreFtmp: /* affichage numéroté issu de mysql : il y a des 3 lignes */ /* à ne pas numéroter et 1 ligne de fin a ne pas numéroter aussi */ parse arg ftmp nblG = -3 do while lines(ftmp)>0 nblG = nblG + 1 lig = linein(ftmp) end call lineout ftmp nbl = -4 do while lines(ftmp)>0 nbl = nbl + 1 lig = linein(ftmp) if (nbl>0) & (nbl ' ftmp cmd do while lines(ftmp)>0 leNbl = linein(ftmp) end call lineout ftmp rcf = fileut("delFile^"ftmp) return leNbl /* fin de nbLig: */ nbCol: /* calcul du nombre de colonnes (champs) lignes dans la base */ leNbc = 0 parse arg nomTa leNbl = 0 ftmp = "catb.tmp" cmd = ' mysql -N -e " describe ' nomTa ' " ' nomB ' > ' ftmp cmd do while lines(ftmp)>0 lalig = linein(ftmp) leNbc = leNbc + 1 end call lineout ftmp rcf = fileut("delFile^"ftmp) return leNbc /* fin de nbCol: */ versionCatb: say say " (gH) catb " versCatb " -- " say return /* fin de versionCatb: */ /* procédure pour automatiser l'appel à fileUtils */ fileut: procedure parse arg lcmd push lcmd call "fileUtils" parse pull lrep return lrep return /* fin de fonction fileut */ /* procédure de copyright */ cpy: say say " Copyright 2000 - Gilles.HUNAULT@univ-angers.fr " say " email : gilles.hunault@univ-angers.fr" say " http://www.info.univ-angers.fr/pub/gh/gh.html" say return /* fin de cpy: */ attends: call charout " ok ? " parse pull repUt if length(repUt)>0 then exit 0 return /**** fin de fichier catb.rex */