Intégration de la branche release-7.1.0
This commit is contained in:
		
						commit
						97851ef4d8
					
				| @ -1,3 +1,9 @@ | ||||
| ## Version 7.1.0 du 10/09/2017-19:20 | ||||
| 
 | ||||
| * `f131e21` uwatch: ajout de l'option -r | ||||
| * `d99718e` cosmetic | ||||
| * `1aee0cb` maj sqlcsv | ||||
| 
 | ||||
| ## Version 7.0.0 du 25/08/2017-15:53 | ||||
| 
 | ||||
| * `e4f154e` uawk: possibilité de lancer les versions locale-aware | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| 7.0.0 | ||||
| 7.1.0 | ||||
|  | ||||
							
								
								
									
										68
									
								
								sqlcsv
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								sqlcsv
									
									
									
									
									
								
							| @ -49,6 +49,7 @@ import java.util.Properties; | ||||
| import java.util.logging.ConsoleHandler; | ||||
| import java.util.logging.Level; | ||||
| import java.util.logging.Logger; | ||||
| import java.util.prefs.Preferences; | ||||
| import java.util.regex.Matcher; | ||||
| import java.util.regex.Pattern; | ||||
| 
 | ||||
| @ -572,6 +573,10 @@ public class sqlcsv { | ||||
|             "org.hsqldb.jdbcDriver", | ||||
|             "org.postgresql.Driver"}; | ||||
| 
 | ||||
|     static final boolean isOracle(String jdbcUrl) { | ||||
|         return jdbcUrl.startsWith("jdbc:oracle:"); | ||||
|     } | ||||
| 
 | ||||
|     static final class Exit extends RuntimeException { | ||||
|         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 | ||||
|             .compile("(?i)create\\s+(?:or\\s+replace)?(?:procedure|trigger|function|package)"); | ||||
| 
 | ||||
|     static final Pattern RE_SEPARATOR = Pattern.compile(";$"); | ||||
| 
 | ||||
|     static String nextStatement(BufferedReader inf) throws IOException { | ||||
|         String line = nextLine(inf); | ||||
|         if (line == null) return null; | ||||
|     static String nextStatement(BufferedReader inf, String jdbcUrl) throws IOException { | ||||
|         boolean ignore; | ||||
|         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(); | ||||
|         boolean first = true; | ||||
| @ -889,7 +905,7 @@ public class sqlcsv { | ||||
|     static final Pattern RE_NAME_EXT = Pattern.compile("(.+?)(?:(\\d+))?(?:(\\.[^.]+))?"); | ||||
| 
 | ||||
|     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; | ||||
|         Iterator<String> outputIt = outputs.iterator(); | ||||
|         String output = null, prevOutput = null, actualOutput = null; | ||||
| @ -898,7 +914,7 @@ public class sqlcsv { | ||||
|         for (BufferedReader inf : infs) { | ||||
|             try { | ||||
|                 while (true) { | ||||
|                     String statement = nextStatement(inf); | ||||
|                     String statement = nextStatement(inf, jdbcUrl); | ||||
|                     if (statement == null) break; | ||||
|                     stcount++; | ||||
| 
 | ||||
| @ -1052,6 +1068,11 @@ public class sqlcsv { | ||||
|                     + "\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        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    -p, --password PASSWORD" | ||||
|                     + "\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        concernant le chargement des jar. Un fichier SQL_DEBUG permet d'activer" | ||||
|                     + "\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; | ||||
|         } | ||||
| 
 | ||||
|         String config = null, connid = null, user = null, password = null; | ||||
|         Options o = new Options(); | ||||
|         boolean autocommit = false, autoNa = false; | ||||
|         boolean autocommit = false, autoNa = false, resetPrefs = false; | ||||
|         String loglevel = null; | ||||
|         ArrayList<String> inputs = new ArrayList<String>(); | ||||
|         ArrayList<String> outputs = new ArrayList<String>(); | ||||
| @ -1156,6 +1182,10 @@ public class sqlcsv { | ||||
|                 o.outputUc = true; | ||||
|             } else if (arg.equals("--loglevel")) { | ||||
|                 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("--")) { | ||||
|                 i++; | ||||
|                 break; | ||||
| @ -1170,6 +1200,19 @@ public class sqlcsv { | ||||
|             log.setLevel(Level.parse(loglevel.toUpperCase())); | ||||
|         } | ||||
| 
 | ||||
|         Preferences prefs = null; | ||||
|         boolean usePrefs = config == null; | ||||
|         if (resetPrefs || usePrefs) { | ||||
|             prefs = Preferences.userNodeForPackage(sqlcsv.class); | ||||
|             if (resetPrefs) prefs.clear(); | ||||
|             if (usePrefs && connid == null) { | ||||
|                 connid = prefs.get("lastConnid", null); | ||||
|                 if (connid != null) { | ||||
|                     log.fine("Sélection de la valeur par défaut connid=" + connid); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // Charger les propriétés... | ||||
|         // essayer depuis le répertoire courant et les répertoires parents jusqu'à $HOME | ||||
|         if (config == null) { | ||||
| @ -1252,7 +1295,14 @@ public class sqlcsv { | ||||
|                 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) { | ||||
|             log.fine("Enregistrement de la valeur connid=" + connid); | ||||
|             prefs.put("lastConnid", connid); | ||||
|         } | ||||
| 
 | ||||
|         // Ouvrir les fichiers en entrée | ||||
|         ArrayList<BufferedReader> infs = new ArrayList<BufferedReader>(); | ||||
| @ -1298,7 +1348,7 @@ public class sqlcsv { | ||||
| 
 | ||||
|         // Exécuter les requêtes | ||||
|         try { | ||||
|             executeQueries(conn, null, infs, outputs, o); | ||||
|             executeQueries(conn, null, infs, outputs, o, jdbcUrl); | ||||
|         } finally { | ||||
|             close(conn); | ||||
|             for (BufferedReader inf : infs) { | ||||
|  | ||||
							
								
								
									
										45
									
								
								uwatch
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								uwatch
									
									
									
									
									
								
							| @ -14,11 +14,16 @@ OPTIONS | ||||
|         Afficher l'heure (par défaut) | ||||
|     -c, --count | ||||
|         Afficher le temps écoulé depuis le lancement de ce script | ||||
|     -r, --rcount | ||||
|         Afficher un décompte depuis DURATION jusqu'à 0 puis terminer le script. | ||||
|         DURATION exprimé en secondes est le premier argument du script et vaut | ||||
|         par défaut ${DEFAULT_DURATION} soit $(($DEFAULT_DURATION / 60)) minutes. | ||||
|     -u, --units | ||||
|         Avec l'option --count, afficher l'unité: sec., min. ou heures | ||||
|     -o, --offset NBSEC | ||||
|         Avec l'option --count, spécifier un nombre de secondes à partir duquel | ||||
|         compter | ||||
|         compter. Avec l'option --rcount, le nombre de secondes est soustrait à | ||||
|         DURATION. | ||||
|     -s, --step NBSECS[=1] | ||||
|         Spécifier la période de rafraichissement de l'affichage | ||||
|     -a, --prefix PREFIX | ||||
| @ -26,12 +31,15 @@ OPTIONS | ||||
|     -z, --suffix SUFFIX | ||||
|         Spécifier une chaine à afficher après l'heure | ||||
|     --cc | ||||
|         Equivalent à -c -s 5 -a 'Connecté sur \$MYHOST depuis ' -z '...' | ||||
|         Equivalent à -c -s 5 -u -a 'Connecté sur \$MYHOST depuis ' -z '...' | ||||
|         Permet de garantir une activité sur une connexion SSH utilisée | ||||
|         uniquement pour faire une redirection de port" | ||||
|         uniquement pour faire une redirection de port | ||||
|     --rc | ||||
|         Equivalent à -r -s 1 -u -a 'Attendre ' -z ''" | ||||
| } | ||||
| 
 | ||||
| DEFAULT_STEP=1 | ||||
| DEFAULT_DURATION=300 | ||||
| 
 | ||||
| what=time | ||||
| units= | ||||
| @ -43,18 +51,31 @@ args=( | ||||
|     --help '$exit_with display_help' | ||||
|     -t,--time what=time | ||||
|     -c,--count what=count | ||||
|     -r,--rcount what=rcount | ||||
|     -u,--units units=1 | ||||
|     -o:,--offset: offset= | ||||
|     -s:,--step: step= | ||||
|     -a:,--prefix: prefix= | ||||
|     -z:,--suffix: suffix= | ||||
|     --cc '$what=count; units=1; step=5; prefix="Connecté sur $MYHOST depuis "; suffix="..."' | ||||
|     --rc '$what=rcount; units=1; step=1; prefix="Attendre "; suffix=""' | ||||
| ) | ||||
| parse_args "$@"; set -- "${args[@]}" | ||||
| 
 | ||||
| [ -n "$step" ] || step="$DEFAULT_STEP" | ||||
| setx start=date +%s | ||||
| [ -n "$offset" ] && start=$(($start - $offset)) | ||||
| 
 | ||||
| case "$what" in | ||||
| count) | ||||
|     [ -n "$offset" ] && start=$(($start - $offset)) | ||||
|     ;; | ||||
| rcount) | ||||
|     duration="${1:-$DEFAULT_DURATION}" | ||||
|     [ -n "$offset" ] && duration=$(($duration - $offset)) | ||||
|     end=$(($start + $duration)) | ||||
|     TZ= setx until=date -d "@$end" +%H:%M:%S | ||||
|     ;; | ||||
| esac | ||||
| 
 | ||||
| while true; do | ||||
|     case "$what" in | ||||
| @ -73,6 +94,22 @@ while true; do | ||||
|         fi | ||||
|         [ ${#msg} -eq 2 ] && msg="${msg#0}" | ||||
|         ;; | ||||
|     rcount) | ||||
|         setx now=date +%s | ||||
|         if [ $now -ge $end ]; then | ||||
|             echo | ||||
|             break | ||||
|         fi | ||||
|         TZ= setx msg=date -d "@$(($end - $now))" +%H:%M:%S | ||||
|         msg="${msg#00:}"; msg="${msg#00:}" | ||||
|         if [ -n "$units" ]; then | ||||
|             if [ ${#msg} -ge 8 ]; then msg="$msg heures" | ||||
|             elif [ ${#msg} -eq 5 ]; then msg="$msg min" | ||||
|             elif [ ${#msg} -eq 2 ]; then msg="${msg#0} sec" | ||||
|             fi | ||||
|         fi | ||||
|         [ ${#msg} -eq 2 ] && msg="${msg#0}" | ||||
|         msg="$msg (jusqu'à $until)" | ||||
|     esac | ||||
|     echo -n $'\e[1G\e[K'"$prefix$msg$suffix" | ||||
|     sleep "$step" | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user