From 48e43599b83f1eb005f04ab389562cea24e3c387 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 20 Dec 2017 19:01:10 +0400 Subject: [PATCH] =?UTF-8?q?sqlcsv:=20possibilit=C3=A9=20de=20sp=C3=A9cifie?= =?UTF-8?q?r=20le=20chemin=20de=20chargement=20des=20drivers=20jdbc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sqlcsv | 49 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/sqlcsv b/sqlcsv index 91e080c..7af00e4 100755 --- a/sqlcsv +++ b/sqlcsv @@ -1050,6 +1050,15 @@ public class sqlcsv { + "\najoutés au CLASSPATH. La présence de certains fichiers est testée pour activer" + "\néventuellement les logs détaillés." + "\n\nOPTIONS" + + "\n -J" + + "\n +J" + + "\n Spécifier un répertoire de chargement des drivers JDBC." + + "\n Avec l'option -J, le répertoire spécifié est ajouté aux répertoires de" + + "\n configuration par défaut ~/.sqlcsv et /etc/sqlcsv. Avec la variante +J," + + "\n seul le répertoire spécifié est analysé." + + "\n Cette option *doit* être spécifiée en premier et il ne doit pas y avoir" + + "\n d'espace entre l'option et son argument." + + "\n" + "\n -C, --config CONFIG" + "\n Prendre les informations de connexion depuis le fichier de propriété" + "\n spécifié. Pour l'identifiant CONN, la propriété 'CONN.url' doit exister" @@ -1071,8 +1080,8 @@ public class sqlcsv { + "\n Si -C n'est pas spécifié et que -l est spécifié, alors l'identifiant de" + "\n connexion est enregistré dans les préférences utilisateur. Si ni -C" + "\n ni -l ne sont spécifiés, alors le dernier identifiant est utilisé s'il" - + "\n existe. L'option -z permet de démarrer comme si aucun identifiant n'avait" - + "\n jamais été enregistré." + + "\n existe. L'option -z permet de démarrer comme si aucun identifiant" + + "\n n'avait jamais été enregistré." + "\n -u, --user USER" + "\n -p, --password PASSWORD" + "\n Spécifier un nom de connexion et un mot de passe si l'url ne le fournit" @@ -1091,7 +1100,7 @@ public class sqlcsv { + "\n requête. Sinon, il est possible de spécifier plusieurs fois cette option" + "\n pour nommer les fichiers correspondant à chaque requête." + "\n -t, --autocommit" - + "\n Activer le mode autocommit" + + "\n Activer le mode autocommit. Par défaut, le mode autocommit n'est pas activé" + "\n -c, --ignore-io-error" + "\n Continuer le traitement même en cas d'erreur du système de fichiers." + "\n Cependant le traitement s'arrête et la transaction est annulée si une" @@ -1146,7 +1155,9 @@ public class sqlcsv { int i = 0, max = args.length; while (i < max) { String arg = args[i]; - if (arg.equals("-C") || arg.equals("--config")) { + if (arg.substring(0, 2).equals("-J") || arg.substring(0, 2).equals("+J")) { + die("L'option -J doit être spécifiée en premier", null); + } else if (arg.equals("-C") || arg.equals("--config")) { config = getArg(args, ++i, "Vous devez spécifier le fichier de configuration"); } else if (arg.equals("-l") || arg.equals("--conn")) { connid = getArg(args, ++i, "Vous devez spécifier l'identifiant de connexion"); @@ -1387,10 +1398,36 @@ public class sqlcsv { || new File(SYSTEM_CONFDIR + "/SQL_DEBUG").exists()) { DriverManager.setLogWriter(new PrintWriter(System.err)); } + boolean jardirOption = false; + String jardir = null; + boolean jardirOnly = false; + if (args.length > 0) { + String firstOption = args[0].substring(0, 2); + if (firstOption.equals("-J")) { + jardirOption = true; + jardir = args[0].substring(2); + jardirOnly = false; + } else if (firstOption.equals("+J")) { + jardirOption = true; + jardir = args[0].substring(2); + jardirOnly = true; + } + if (jardirOption) { + if (jardir.length() == 0) die("L'option -J doit avoir un argument", null); + String[] newArgs = new String[args.length - 1]; + System.arraycopy(args, 1, newArgs, 0, newArgs.length); + args = newArgs; + } + } boolean shouldUpdateClasspath = false; ArrayList urls = new ArrayList(); - shouldUpdateClasspath |= findJars(new File(USER_CONFDIR), urls); - shouldUpdateClasspath |= findJars(new File(SYSTEM_CONFDIR), urls); + if (jardirOption) { + shouldUpdateClasspath |= findJars(new File(jardir), urls); + } + if (!jardirOption || !jardirOnly) { + shouldUpdateClasspath |= findJars(new File(USER_CONFDIR), urls); + shouldUpdateClasspath |= findJars(new File(SYSTEM_CONFDIR), urls); + } if (shouldUpdateClasspath) { ClassLoader parentLoader = Thread.currentThread().getContextClassLoader(); ClassLoader loader = new URLClassLoader(urls.toArray(new URL[0]), parentLoader);