sqlcsv: l'option -l supporte une url jdbc, et la recherche de sqlcsv.properties se fait dans tous les répertoires parent jusqu'à $HOME

This commit is contained in:
Jephté Clain 2016-10-03 11:00:41 +04:00
parent f4f49c048c
commit 40babfe24a
1 changed files with 49 additions and 15 deletions

64
sqlcsv
View File

@ -77,6 +77,25 @@ public class sqlcsv {
static final String USER_CONFIG = USER_CONFDIR + "/" + DEFAULT_CONFIG,
SYSTEM_CONFIG = SYSTEM_CONFDIR + "/" + DEFAULT_CONFIG;
// ------------------------------------------------------------------------
public static final File getCanonical(File file) {
try {
return file.getCanonicalFile();
} catch (IOException e) {
return file.getAbsoluteFile();
}
}
private static final File[] ROOTS = File.listRoots();
public static final boolean isRoot(File file) {
if (file == null) return false;
for (File root : ROOTS) {
if (root.equals(file)) return true;
}
return false;
}
// ------------------------------------------------------------------------
public static class ResultSetHelper {
public static final int CLOBBUFFERSIZE = 2048;
@ -1151,20 +1170,31 @@ public class sqlcsv {
log.setLevel(Level.parse(loglevel.toUpperCase()));
}
// Charger les propriétés
// Charger les propriétés...
// essayer depuis le répertoire courant et les répertoires parents jusqu'à $HOME
if (config == null) {
String userHome = System.getProperty("user.home");
if (userHome != null && userHome.length() == 0) userHome = null;
File dir = getCanonical(new File("."));
File homedir = null;
if (userHome != null) homedir = getCanonical(new File(userHome));
while (true) {
File file = new File(dir, DEFAULT_CONFIG);
if (file.exists()) {
config = file.getPath();
break;
}
if ((homedir != null && dir.equals(homedir)) || isRoot(dir)) break;
dir = dir.getParentFile();
if (dir == null) break;
}
}
// puis dans le répertoire de configuration utilisateur
if (config == null && new File(USER_CONFIG).exists()) config = USER_CONFIG;
// puis dans le répertoire de configuration système
if (config == null && new File(SYSTEM_CONFIG).exists()) config = SYSTEM_CONFIG;
Properties props = null;
if (config == null && new File(DEFAULT_CONFIG).exists()) {
// essayer depuis le répertoire courant
config = DEFAULT_CONFIG;
}
if (config == null && new File(USER_CONFIG).exists()) {
// puis dans le répertoire de configuration utilisateur
config = USER_CONFIG;
}
if (config == null && new File(SYSTEM_CONFIG).exists()) {
// puis dans le répertoire de configuration système
config = SYSTEM_CONFIG;
}
if (config != null) {
log.config("Chargement des propriétés de " + config);
props = new Properties();
@ -1187,7 +1217,11 @@ public class sqlcsv {
}
String jdbcUrl = null;
if (connid == null && props != null) {
if (connid != null && connid.startsWith("jdbc:")) {
jdbcUrl = connid;
connid = null;
}
if (jdbcUrl == null && connid == null && props != null) {
// Essayer de deviner connid en parcourant les propriétés de props
@SuppressWarnings("unchecked")
Enumeration<String> en = (Enumeration<String>)props.propertyNames();
@ -1206,7 +1240,7 @@ public class sqlcsv {
connid = null;
}
}
if (connid != null) {
if (jdbcUrl == null && connid != null) {
if (props != null) {
String jdbcUrlKey = connid + ".url";
if (props.containsKey(jdbcUrlKey)) jdbcUrl = props.getProperty(jdbcUrlKey);