maj sqlcsv
This commit is contained in:
parent
f05382cdac
commit
1aee0cb4e6
60
sqlcsv
60
sqlcsv
|
@ -49,6 +49,7 @@ import java.util.Properties;
|
||||||
import java.util.logging.ConsoleHandler;
|
import java.util.logging.ConsoleHandler;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
import java.util.prefs.Preferences;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
@ -572,6 +573,10 @@ public class sqlcsv {
|
||||||
"org.hsqldb.jdbcDriver",
|
"org.hsqldb.jdbcDriver",
|
||||||
"org.postgresql.Driver"};
|
"org.postgresql.Driver"};
|
||||||
|
|
||||||
|
static final boolean isOracle(String jdbcUrl) {
|
||||||
|
return jdbcUrl.startsWith("jdbc:oracle:");
|
||||||
|
}
|
||||||
|
|
||||||
static final class Exit extends RuntimeException {
|
static final class Exit extends RuntimeException {
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ -789,14 +794,25 @@ public class sqlcsv {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// requêtes à ignorer, en l'occurence lignes spéciques à sqlplus pour une connexion à Oracle
|
||||||
|
static final Pattern RE_ORACLE_IGNORE_STMT = Pattern.compile("(?i)set\\b");
|
||||||
|
|
||||||
static final Pattern RE_CREATE_STMT = Pattern
|
static final Pattern RE_CREATE_STMT = Pattern
|
||||||
.compile("(?i)create\\s+(?:or\\s+replace)?(?:procedure|trigger|function|package)");
|
.compile("(?i)create\\s+(?:or\\s+replace)?(?:procedure|trigger|function|package)");
|
||||||
|
|
||||||
static final Pattern RE_SEPARATOR = Pattern.compile(";$");
|
static final Pattern RE_SEPARATOR = Pattern.compile(";$");
|
||||||
|
|
||||||
static String nextStatement(BufferedReader inf) throws IOException {
|
static String nextStatement(BufferedReader inf, String jdbcUrl) throws IOException {
|
||||||
String line = nextLine(inf);
|
boolean ignore;
|
||||||
if (line == null) return null;
|
String line;
|
||||||
|
do {
|
||||||
|
ignore = false;
|
||||||
|
line = nextLine(inf);
|
||||||
|
if (line == null) return null;
|
||||||
|
if (isOracle(jdbcUrl) && RE_ORACLE_IGNORE_STMT.matcher(line).lookingAt()) {
|
||||||
|
ignore = true;
|
||||||
|
}
|
||||||
|
} while (ignore);
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
|
@ -889,7 +905,7 @@ public class sqlcsv {
|
||||||
static final Pattern RE_NAME_EXT = Pattern.compile("(.+?)(?:(\\d+))?(?:(\\.[^.]+))?");
|
static final Pattern RE_NAME_EXT = Pattern.compile("(.+?)(?:(\\d+))?(?:(\\.[^.]+))?");
|
||||||
|
|
||||||
void executeQueries(Connection conn, Object[] args, ArrayList<BufferedReader> infs,
|
void executeQueries(Connection conn, Object[] args, ArrayList<BufferedReader> infs,
|
||||||
ArrayList<String> outputs, Options o) throws IOException, SQLException {
|
ArrayList<String> outputs, Options o, String jdbcUrl) throws IOException, SQLException {
|
||||||
int stcount = 0;
|
int stcount = 0;
|
||||||
Iterator<String> outputIt = outputs.iterator();
|
Iterator<String> outputIt = outputs.iterator();
|
||||||
String output = null, prevOutput = null, actualOutput = null;
|
String output = null, prevOutput = null, actualOutput = null;
|
||||||
|
@ -898,7 +914,7 @@ public class sqlcsv {
|
||||||
for (BufferedReader inf : infs) {
|
for (BufferedReader inf : infs) {
|
||||||
try {
|
try {
|
||||||
while (true) {
|
while (true) {
|
||||||
String statement = nextStatement(inf);
|
String statement = nextStatement(inf, jdbcUrl);
|
||||||
if (statement == null) break;
|
if (statement == null) break;
|
||||||
stcount++;
|
stcount++;
|
||||||
|
|
||||||
|
@ -1052,6 +1068,11 @@ public class sqlcsv {
|
||||||
+ "\n obligatoire. Si cette option n'est pas fournie, il faut spécifier un"
|
+ "\n obligatoire. Si cette option n'est pas fournie, il faut spécifier un"
|
||||||
+ "\n fichier de configuration avec l'option -C dans lequel *une seule*"
|
+ "\n fichier de configuration avec l'option -C dans lequel *une seule*"
|
||||||
+ "\n propriété 'CONN.url' est définie."
|
+ "\n propriété 'CONN.url' est définie."
|
||||||
|
+ "\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 -u, --user USER"
|
+ "\n -u, --user USER"
|
||||||
+ "\n -p, --password PASSWORD"
|
+ "\n -p, --password PASSWORD"
|
||||||
+ "\n Spécifier un nom de connexion et un mot de passe si l'url ne le fournit"
|
+ "\n Spécifier un nom de connexion et un mot de passe si l'url ne le fournit"
|
||||||
|
@ -1106,13 +1127,18 @@ public class sqlcsv {
|
||||||
+ "\n l'application avec le niveau de log ALL ce qui permet de voir les logs"
|
+ "\n l'application avec le niveau de log ALL ce qui permet de voir les logs"
|
||||||
+ "\n concernant le chargement des jar. Un fichier SQL_DEBUG permet d'activer"
|
+ "\n concernant le chargement des jar. Un fichier SQL_DEBUG permet d'activer"
|
||||||
+ "\n la trace de DriverManager. Exemple:"
|
+ "\n la trace de DriverManager. Exemple:"
|
||||||
+ "\n mkdir -p ~/.sqlcsv && touch ~/.sqlcsv/{DEBUG,SQL_DEBUG}");
|
+ "\n mkdir -p ~/.sqlcsv && touch ~/.sqlcsv/{DEBUG,SQL_DEBUG}"
|
||||||
|
+ "\n -v, --verbose"
|
||||||
|
+ "\n Equivalent à --loglevel FINER pour afficher le maximum de messages"
|
||||||
|
+ "\n -z, --reset-prefs"
|
||||||
|
+ "\n Effacer les préférences avant de faire le calcul de l'identifiant par"
|
||||||
|
+ "\n défaut");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String config = null, connid = null, user = null, password = null;
|
String config = null, connid = null, user = null, password = null;
|
||||||
Options o = new Options();
|
Options o = new Options();
|
||||||
boolean autocommit = false, autoNa = false;
|
boolean autocommit = false, autoNa = false, resetPrefs = false;
|
||||||
String loglevel = null;
|
String loglevel = null;
|
||||||
ArrayList<String> inputs = new ArrayList<String>();
|
ArrayList<String> inputs = new ArrayList<String>();
|
||||||
ArrayList<String> outputs = new ArrayList<String>();
|
ArrayList<String> outputs = new ArrayList<String>();
|
||||||
|
@ -1156,6 +1182,10 @@ public class sqlcsv {
|
||||||
o.outputUc = true;
|
o.outputUc = true;
|
||||||
} else if (arg.equals("--loglevel")) {
|
} else if (arg.equals("--loglevel")) {
|
||||||
loglevel = getArg(args, ++i, "Vous devez spécifier le niveau de logs");
|
loglevel = getArg(args, ++i, "Vous devez spécifier le niveau de logs");
|
||||||
|
} else if (arg.equals("-v") || arg.equals("--verbose")) {
|
||||||
|
loglevel = "FINER";
|
||||||
|
} else if (arg.equals("-z") || arg.equals("--reset-prefs")) {
|
||||||
|
resetPrefs = true;
|
||||||
} else if (arg.equals("--")) {
|
} else if (arg.equals("--")) {
|
||||||
i++;
|
i++;
|
||||||
break;
|
break;
|
||||||
|
@ -1170,6 +1200,14 @@ public class sqlcsv {
|
||||||
log.setLevel(Level.parse(loglevel.toUpperCase()));
|
log.setLevel(Level.parse(loglevel.toUpperCase()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Preferences prefs = null;
|
||||||
|
boolean usePrefs = config == null;
|
||||||
|
if (usePrefs || resetPrefs) {
|
||||||
|
prefs = Preferences.userNodeForPackage(sqlcsv.class);
|
||||||
|
if (resetPrefs) prefs.clear();
|
||||||
|
if (usePrefs && connid == null) connid = prefs.get("lastConnid", null);
|
||||||
|
}
|
||||||
|
|
||||||
// Charger les propriétés...
|
// Charger les propriétés...
|
||||||
// essayer depuis le répertoire courant et les répertoires parents jusqu'à $HOME
|
// essayer depuis le répertoire courant et les répertoires parents jusqu'à $HOME
|
||||||
if (config == null) {
|
if (config == null) {
|
||||||
|
@ -1252,7 +1290,11 @@ public class sqlcsv {
|
||||||
jdbcUrl = connid;
|
jdbcUrl = connid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (jdbcUrl == null) throw new Exit("Vous devez spécifier l'url de connexion");
|
if (jdbcUrl == null) {
|
||||||
|
if (resetPrefs) throw new Exit();
|
||||||
|
else throw new Exit("Vous devez spécifier l'url de connexion");
|
||||||
|
}
|
||||||
|
if (usePrefs) prefs.put("lastConnid", connid);
|
||||||
|
|
||||||
// Ouvrir les fichiers en entrée
|
// Ouvrir les fichiers en entrée
|
||||||
ArrayList<BufferedReader> infs = new ArrayList<BufferedReader>();
|
ArrayList<BufferedReader> infs = new ArrayList<BufferedReader>();
|
||||||
|
@ -1298,7 +1340,7 @@ public class sqlcsv {
|
||||||
|
|
||||||
// Exécuter les requêtes
|
// Exécuter les requêtes
|
||||||
try {
|
try {
|
||||||
executeQueries(conn, null, infs, outputs, o);
|
executeQueries(conn, null, infs, outputs, o, jdbcUrl);
|
||||||
} finally {
|
} finally {
|
||||||
close(conn);
|
close(conn);
|
||||||
for (BufferedReader inf : infs) {
|
for (BufferedReader inf : infs) {
|
||||||
|
|
Loading…
Reference in New Issue