# -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
##@creator: jclain
##@created: 27/04/2016 03:19
##@modifier: jclain
##@changecount: 1
##@tags:
##@title: sqlcsv

{{{
USAGE:
    sqlcsv [query]

query   est la requête SQL à exécuter. Si query n'est pas spécifiée ou si elle
        vaut '-', la requête SQL est lue sur l'entrée standard, ou depuis un
        fichier si l'option -f est spécifiée.

DEMARRAGE

Au démarrage, les répertoires de configuration (utilisateur ~/.sqlcsv et système
/etc/sqlcsv) sont analysés. Les fichiers *.jar situés dans ces répertoires sont
ajoutés au CLASSPATH. La présence de certains fichiers est testée pour activer
éventuellement les logs détaillés.

OPTIONS
    -C, --config CONFIG
        Prendre les informations de connexion depuis le fichier de propriété
        spécifié. Pour l'identifiant CONN, la propriété 'CONN.url' doit exister
        dans ce fichier avec la valeur de l'url jdbc de connexion. De plus, les
        propriétés 'CONN.user' et 'CONN.password' contiennent respectivement si
        nécessaire le nom et le mot de passe de connexion. La propriété
        'loglevel', si elle existe, est utilisée pour configurer le niveau
        d'affichage des logs, comme avec l'option --loglevel
        Si cette option n'est pas spécifiée, un fichier nommé sqlcsv.properties
        est recherché dans l'ordre: dans le répertoire courant, dans le
        répertoire de configuration utilisateur, puis dans le répertoire de
        configuration système. Si le fichier est trouvé, il est chargé
        automatiquement.
    -l, --conn CONN
        Spécifier l'identifiant (ou l'url) de connexion. Cette information est
        obligatoire. Si cette option n'est pas fournie, il faut spécifier un
        fichier de configuration avec l'option -C dans lequel *une seule*
        propriété 'CONN.url' est définie.
    -u, --user USER
    -p, --password PASSWORD
        Spécifier un nom de connexion et un mot de passe si l'url ne le fournit
        pas. Ces valeurs ont la priorité sur les valeurs éventuellement déjà
        présentes dans le fichier de propriété.
    -f, --input INPUT
        Lire la requête depuis le fichier INPUT au lieu de la lire depuis la
        ligne de commande ou l'entrée standard. Ne pas spécifier cette option ou
        utiliser '-' pour lire depuis l'entrée standard. Cette option est
        ignorée si la requête est fournie sur la ligne de commande.
    -o, --output OUTPUT
        Ecrire le résultat dans le fichier OUTPUT. Utiliser '-' pour spécifier
        la sortie standard (c'est la valeur par défaut). S'il y a plusieurs
        requêtes et que le fichier de sortie n'est pas la sortie standard,
        ajouter un numéro incrémental au nom du fichier en sortie pour chaque
        requête. Sinon, il est possible de spécifier plusieurs fois cette option
        pour nommer les fichiers correspondant à chaque requête.
    -t, --autocommit
        Activer le mode autocommit
    -c, --ignore-io-error
        Continuer le traitement même en cas d'erreur du système de fichiers.
        Cependant le traitement s'arrête et la transaction est annulée si une
        autre erreur se produit.
    -y, --ignore-any-error
        Continuer le traitement même en cas d'erreur quelconque.
    -n, --no-headers
        Ne JAMAIS inclure les en-têtes dans la sortie, même avec l'option -h
    -a, --append
        Ajouter le résultat au fichier OUTPUT au lieu de l'écraser.
    -A, --auto-na
        Activer les option -n -a si le fichier OUTPUT existe et qu'il est non
        vide. Le test n'est effectué que pour le premier fichier spécifié.
    -s, --same-output
        Utiliser le même fichier pour écrire le résultat de toutes les requêtes.
        Normalement, un numéro incrémental est ajouté au fichier en sortie si
        plusieurs requêtes sont spécifiées. Si les en-têtes sont les mêmes,
        ajouter le résultat au fichier directement à la suite. Sinon, sauter une
        ligne blanche et afficher les nouveaux en-têtes.
    -h, --force-headers
        En cas d'écriture du résultat de plusieurs requêtes dans un même
        fichier, ne pas tenter de concaténer les résultats même si les en-têtes
        sont les mêmes.
    --uc-output
        Ajouter dans la sortie les résultat de toutes les requêtes, pas
        seulement celles de type DQML
    --loglevel LOGLEVEL
        Spécifier le niveau de logs à afficher. Les valeurs valides sont à
        choisir parmi ALL, FINEST, FINER, FINE, CONFIG, INFO, WARNING, ERROR
        La présence de certains fichiers dans les répertoires de configuration
        utilisateur ou système configure les logs avant que les options de la
        ligne de commande ne soient analysés: un fichier DEBUG fait démarrer
        l'application avec le niveau de log ALL ce qui permet de voir les logs
        concernant le chargement des jar. Un fichier SQL_DEBUG permet d'activer
        la trace de DriverManager. Exemple:
            mkdir -p ~/.sqlcsv && touch ~/.sqlcsv/{DEBUG,SQL_DEBUG}
}}}
