/* (gH) -_- catb.rex ; TimeStamp (unix) : 16 Juin 2008 vers 23:03 */ /* catb.rex : affichage paramétrable de bases et tables mysql */ /**************************************************************/ /* */ /* ATTENTION : ce programme utilise FILEUT.rex */ /* */ /**************************************************************/ versCatb = "v 1.7" dbg = 0 ; /* 0 en normal, 1 pour dbg */ parse arg ligneArg ligSyntax = " catb [ -v | -h | Base [ -r [ -s ] ] [ Table [ [ deb | -d [ -x ] | -x | -n ] nb ] ] ] [--passw]" /* 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 "--passwd" . /* valeurs par défaut */ pStru = 0 pRedu = 0 nbl1 = 1 nbl2 = 10 nomT = "????" modeDump = 0 modeXml = 0 modeDar = 0 /* 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 */ pmdr = wordpos("-d",resteParms) if pmdr > 0 then do modeDump = 1 resteParms = delword(resteParms,pmdr,1) end /* fin de si on gère l'option -d */ pmdr = wordpos("-x",resteParms) if pmdr > 0 then do modeXml = 1 resteParms = delword(resteParms,pmdr,1) end /* fin de si on gère l'option -x */ pmdr = wordpos("-n",resteParms) if pmdr > 0 then do modeDar = 1 resteParms = delword(resteParms,pmdr,1) end /* fin de si on gère l'option -n */ /* préparation du mode d'appel de mysql suivant le lieu */ uname = FILEUT("uName") if uname = "sirius" then do say say " mais... il n'y a pas de MYSQL sur sirius ! " say exit(-1) end hostName = "localhost" user = "anonymous" password = "anonymous" if uname="forge" then do hostName = "forge" user = "anonymous" password = "anonymous" end if uname="ghCHU" then do hostName = "localhost" user = "root" password = "" end if uname="ubuntu" then do hostName = "localhost" user = "anonymous" password = "anonymous" end /* gestion du nb d'enregistrements et du numéro du premier enr. */ parse var resteParms nomT nbl1 nbl2 noc /* gestion de l'utilsiateur et du mot de passe si --passwd */ modePas = 0 pdp = wordpos("--passw",ligneArg) if (wordpos("--passw",ligneArg)>0) then do modePas = 1 call charout , " utilisateur ? " parse pull utili call charout , " mdp ? " parse pull mdp if nomT = "--passw" then nomT = "????" end /* fin de si on veut la version seulement */ /* reprise des valeurs */ if nbl1 = "" then nbl1 = 01 if nbl2 = "" then nbl2 = 10 if nomT = "" then nomT = "????" if words(noc)=0 then do say say " (gH) ; catb : affichage paramétrable de bases et tables mysql " say end badP = 1 if dbg=1 then do say " Hote : " hostName say " Base : " nomB say " Table : " nomT say " Start : " nbl1 say " NbEnr : " nbl2 say " Redu : " pRedu say " Stru : " pStru say " Dump : " modeDump say " Xml : " modeXml say " User : " user say " Pwd : " password if modePas=1 then do say " User : " utili say " pass : " mdp end end ftmp = "catb.tmp" ftmpS = "catb.str" ftmpD = "catb.dat" if nomT = "????" then nomT = "" /* aucun nom de table donné, on affiche la liste des tables de la base */ if nomT = "" then do badP = 0 debcmd = "mysql " if modeXml=0 then do cmd = debcmd " --host="hostName" --user="user" --password="password" -N -e 'show tables' " nomB cmd = cmd ' > ' ftmp if dbg=1 then say " " cmd cmd if dbg>1 then do say say " stop. (requested by ghdbg=1)" say exit end nblG = 0 nomTab. = "" do while lines(ftmp)>0 nblG = nblG + 1 lig = linein(ftmp) nomTab.nblG = lig end rf = fileut("closeFile^"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 rf = fileut("closeFile^"ftmp) /* rcf = fileut("delFile^"ftmp) */ end ; else do fxml = "catb.xml" debcmd = debcmd " --xml " cmd = debcmd " --host="hostName" --user="user" --password="password" -N -e 'show tables' " nomB cmd = cmd ' > ' fxml cmd say say " vous pouvez utiliser " fxml end 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 --host='hostName' --user='user' --password='password' -t -e " describe ' nomT ' " ' nomB if modePas=1 then cmd = cmd "--host=sirius --user="utili "--password="mdp "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é sauf si paramètre -d cat (dump) */ if modeDump=0 then do debcmd = "mysql " if modeXml+modeDar=0 then do if (nbl1>0) & (nbl2>0) then do cmd = debcmd " --host="hostName" --user="user" --password="password" -t -e ' select * from " nomT " limit " nbl1-1 " , " nbl2 "' " nomB if modePas=1 then cmd = cmd "--host=sirius --user="utili "--password="mdp say cmd "echo " cmd " > " ftmpD say cmd = cmd " >> " ftmpD cmd call montreFtmp ftmpD end end ; else do if modeXml=1 then do fxml = "catb.xml" debcmd = debcmd " --xml " cmd = debcmd " --host="hostName" --user="user" --password="password" -t -e ' select * from " nomT "' " nomB cmd = cmd " > " fxml cmd say say " vous pouvez utiliser " fxml end ; else do /* ce doit etre le mode dar ici */ fdar = nomB"_"nomT".dar" cmd = debcmd " --host="hostName" --user="user" --password="password" -e ' select * from " nomT "' " nomB cmd = cmd " > " fdar cmd say say " vous pouvez utiliser " fdar end /* finsi modeXml=1 */ end /* finsi modeXml+modeDar=0 */ if words(noc)=0 then call cpy exit 0 end ; else do debcmd = "mysqldump --force " if modeXml=0 then do fdump = "catb_dump.mysql" cmd = debcmd " --host="hostName" --user="user" --password="password nomB nomT " > " fdump " 2>> /dev/null " cmd if dbg=1 then do ; say ; say " " cmd ; end say say " vous pouvez utiliser " fdump exit 0 end ; else do fdump = "catb_dump_mysql.xml" debcmd = debcmd " --xml" cmd = debcmd " --host="hostName" --user="user" --password="password nomB nomT " > " fdump " 2>> /dev/null " cmd if dbg=1 then do ; say ; say " " cmd ; end say say " vous pouvez utiliser " fdump exit 0 end /* finsi modeXml=0 */ end /* finsi modeDump=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 base 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 --passwd permet de saisir un nom d'utilisateur et le mot de passe" say " . l'option -d fait un ''dump'' de la table " say " . l'option -x produit un fichier xml de la stucture et des données" say 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" 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) say " -- catb statdata vins -s 0 0 "d2c(10) say " affiche la structure de la table vins dans la base statdata" 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 rf = fileut("closeFile^"ftmp) nbl = -4 do while lines(ftmp)>0 nbl = nbl + 1 lig = linein(ftmp) if (nbl>0) & (nbl0 then exit 0 return /**** fin de fichier catb.rex */