{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":184723326,"defaultBranch":"master","name":"sqleur","ownerLogin":"outtersg","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2019-05-03T08:34:34.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/864883?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1719907945.0","currentOid":""},"activityList":{"items":[{"before":"cb0ec41d9e82ccfedc390e17593c677fa3fc84f7","after":"b3acca17ef21e668ec65086c08daaf07acca08ce","ref":"refs/heads/master","pushedAt":"2024-07-02T08:12:25.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"PreproCopy: null as ''\n\n= On ne savait pas gérer les champs vides représentant un null.\n\ndarcs-hash:5ce00827038e8816ea00499296d80e9f9fb67448","shortMessageHtmlLink":"PreproCopy: null as ''"}},{"before":"98c01371c47b80ea40f27186950c78bb938e2474","after":"cb0ec41d9e82ccfedc390e17593c677fa3fc84f7","ref":"refs/heads/master","pushedAt":"2024-06-24T15:00:58.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":":SCRIPT_FILENAME absolu\n\n# La variable :SCRIPT_FILENAME était peu déterministe.\n\ndarcs-hash:c316b87fbecf5828fd405654468103da2e302991","shortMessageHtmlLink":":SCRIPT_FILENAME absolu"}},{"before":"eacc43b1bb7cd6ba2de0241030ff19e8ea94eb77","after":"98c01371c47b80ea40f27186950c78bb938e2474","ref":"refs/heads/master","pushedAt":"2024-06-17T16:22:17.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"PreproCopy: Sqleur._brut\n\n# Par défaut on ne veut pas de transfo sur nos données.\n\ndarcs-hash:264899c604ebf2c8b01befc5af97621f5de488db","shortMessageHtmlLink":"PreproCopy: Sqleur._brut"}},{"before":"ca110eb17e1a5409a4ab41afb64d8262bb9865a8","after":"eacc43b1bb7cd6ba2de0241030ff19e8ea94eb77","ref":"refs/heads/master","pushedAt":"2024-06-16T17:42:23.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"sqlminus: Masquage de bouts de requête par /*<--*/ /*-->*/\n\n= Par convention, les requêtes contenant ces marqueurs n'affichent pas ce qu'il y a entre (soit que ça soit barbant, soit que ça soit sensible).\n\ndarcs-hash:9f8c837405d204d25a39134ea2f1b59be8a0fcb8","shortMessageHtmlLink":"sqlminus: Masquage de bouts de requête par /*<--*/ /*-->*/"}},{"before":"3ceec49e963422278559a33118494daf77d0b8d8","after":"ca110eb17e1a5409a4ab41afb64d8262bb9865a8","ref":"refs/heads/master","pushedAt":"2024-05-28T16:19:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"BOGUE: PreproCopy: pitoyable fonctionnement en segmenté\n\n# Mais pourquoi ai-je oublié cette ligne dans le poussage précédent?\n\ndarcs-hash:5eef1abf7e6ad0a92419a38ddfbfd00dc8feb240","shortMessageHtmlLink":"BOGUE: PreproCopy: pitoyable fonctionnement en segmenté"}},{"before":"fba7b2eb814b56bc0523055319050c10e9abfb3b","after":"3ceec49e963422278559a33118494daf77d0b8d8","ref":"refs/heads/master","pushedAt":"2024-05-24T04:52:47.000Z","pushType":"push","commitsCount":8,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"BOGUE: PreproCopy: pitoyable fonctionnement en segmenté\n\n# On réinitialisait toutes les variables entre deux fin(), alors qu'elle sert maintenant à lotir les lignes d'un même CSV: on perdait donc tout le contexte permettant de reconnaître le prolongement d'une ligne sur la suivante, le fait que la ligne d'en-tête avait déjà été lue, le niveau d'enguillemettage.\n- Note sur le séparateur interne qui devra être géré avec la même prudence le jour où il sera configurable.\n\ndarcs-hash:65391d3e90c1538bdc1796f711fe759c9d1f66c9","shortMessageHtmlLink":"BOGUE: PreproCopy: pitoyable fonctionnement en segmenté"}},{"before":"d57e095a85612f7050d98876047f8d03e4174d20","after":"fba7b2eb814b56bc0523055319050c10e9abfb3b","ref":"refs/heads/master","pushedAt":"2024-05-17T08:52:01.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"BOGUE: PreproTestExpr: perte de compat avec classe mère\n\n# Lors du passage à _préempterSql(), _chope était restée protected ici, au lieu de public.\n\ndarcs-hash:671bda9ea3a5a96e60f2d781625567fac73c91fc","shortMessageHtmlLink":"BOGUE: PreproTestExpr: perte de compat avec classe mère"}},{"before":"0faca420faa1df310dd9aa329734ab141e8aae38","after":"d57e095a85612f7050d98876047f8d03e4174d20","ref":"refs/heads/master","pushedAt":"2024-05-15T22:30:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"BOGUE: PreproExec: risque de perte de données\n\n# La redirection > efface le contenu de la table: pour prévenir le risque d'involonté, on requiert soit de la déclarer temporaire, soit de initialisée.\n\ndarcs-hash:c4776756a6db7dade8b7f8f98d434af9ee2601f1","shortMessageHtmlLink":"BOGUE: PreproExec: risque de perte de données"}},{"before":"aafb82a0b3621ffe2305a4f66f427582ada0dc13","after":"0faca420faa1df310dd9aa329734ab141e8aae38","ref":"refs/heads/master","pushedAt":"2024-05-14T09:18:15.000Z","pushType":"push","commitsCount":38,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"composer.json: 1.13.x\n\n+ #exec.\n+ SqleurPreproFragment: inclusion de SQL dans du JSON.\n# PreproCopy: #copy gérait mal le vrai SQL.\n+ #set FONCTION(x) (avant on ne pouvait que #define FONCTION(x) ou #set d'une chaîne fixe).\n# sqlminus.sh: corrections.\n# #for: corrections.\n\ndarcs-hash:7f2806298abfb2c1d12794a75734f0f836e0f41f","shortMessageHtmlLink":"composer.json: 1.13.x"}},{"before":"b4dc2f524a176c8af78030c1e1053619c90fec04","after":"aafb82a0b3621ffe2305a4f66f427582ada0dc13","ref":"refs/heads/master","pushedAt":"2024-04-04T08:40:30.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"SqleurPreproFragment\n\n+ Inclusion et formatage de fragments de langages (SQL) dans un autre (JSON).\n- Droits 2022 parce que commencé cette année-là mais tout juste terminé aujourd'hui, les briques nécessaires dans le Sqleur venant d'être mises en place…\n\ndarcs-hash:043b1065bf52394181b3bf69876fb6d15a0738ac","shortMessageHtmlLink":"SqleurPreproFragment"}},{"before":"3af77a10f2519c169a074453bc3d5e93ea2559c5","after":"b4dc2f524a176c8af78030c1e1053619c90fec04","ref":"refs/heads/master","pushedAt":"2024-04-01T21:12:01.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"PreproIncl: définition de :SCRIPT_NAME (SQL point d'entrée)\n\n= Mécanisme complémentaire de définition de :SCRIPT_NAME (en plus de sql2csv.php et de sqlm() dans sqlminus.sh: normalement avec tout ça on devrait toujours avoir une valeur de définie).\n\ndarcs-hash:46516bc60f7c70ca4d7fb1e70af4b5196fed4dd2","shortMessageHtmlLink":"PreproIncl: définition de :SCRIPT_NAME (SQL point d'entrée)"}},{"before":"f0abf3774a72cba7fcfb118016aa609a64523074","after":"3af77a10f2519c169a074453bc3d5e93ea2559c5","ref":"refs/heads/master","pushedAt":"2024-02-28T16:53:04.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"Prépro déf: #set FONCTION(x) replace(x, /a/, \"A\")\n\n+ On allie le meilleur des deux mondes: la possibilité qu'a #define de définir non seulement des expressions \"à plat\" mais aussi des fonctions à paramètres, et la capacité qu'a #set d'appeler des fonctions PHP.\n\ndarcs-hash:879903c8824e48895f84933401f18946449afe5c","shortMessageHtmlLink":"Prépro déf: #set FONCTION(x) replace(x, /a/, \"A\")"}},{"before":"4c4496a76709cc44f991453f64adc268989615ab","after":"f0abf3774a72cba7fcfb118016aa609a64523074","ref":"refs/heads/master","pushedAt":"2024-02-26T01:13:50.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"BOGUE: #for dans une chaîne\n\n# À part le premier tour de boucle, tous les autres prenaient la dernière valeur de la variable.\n\ndarcs-hash:e56f6e6efb569c00bb6dbcdc6fcba4965fc6d473","shortMessageHtmlLink":"BOGUE: #for dans une chaîne"}},{"before":"e980fb53c79c24865214af8791a87f238d893230","after":"4c4496a76709cc44f991453f64adc268989615ab","ref":"refs/heads/master","pushedAt":"2024-02-13T10:04:59.000Z","pushType":"push","commitsCount":7,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"testautonome: version de référence\n\n= La 1.12.240211 est un bon cru.\n# Au passage excluons les directives et fonctions prépro qui ne peuvent être résolues en mode prépro seul.\n\ndarcs-hash:4b52be536fee65758e790f766f5c874953ef5230","shortMessageHtmlLink":"testautonome: version de référence"}},{"before":"e115a27c88c071345849be87a6ee646fc212a9dc","after":"e980fb53c79c24865214af8791a87f238d893230","ref":"refs/heads/master","pushedAt":"2024-02-09T17:00:48.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"composer.json: 1.12.x\n\n+ #copy sachant travailler au fil de l'eau plutôt que de tout charger en mémoire (et exploser).\n\ndarcs-hash:0e8e8a0edc09ab6dbc881fd9b813c2826a08de3d","shortMessageHtmlLink":"composer.json: 1.12.x"}},{"before":"4f7dc3a812ef8182a15fa2e4d50df91ea48c57dc","after":"e115a27c88c071345849be87a6ee646fc212a9dc","ref":"refs/heads/master","pushedAt":"2024-02-09T16:56:30.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"PreproCopy: au fil de l'eau: affichage du défilement\n\n+ On affiche le nombre de lignes intégrées quand on pousse au fil de l'eau (sous réserve qu'stderr soit un terminal).\n\ndarcs-hash:1319058b4489d25c26564730dd19374caffc743b","shortMessageHtmlLink":"PreproCopy: au fil de l'eau: affichage du défilement"}},{"before":"1865bd7873bfb5ee6dd9cbb59f6d436f034d0589","after":"4f7dc3a812ef8182a15fa2e4d50df91ea48c57dc","ref":"refs/heads/master","pushedAt":"2024-02-08T01:39:24.000Z","pushType":"push","commitsCount":12,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"PreproCopy: \\\n\n# Subtil, le \\ est interprété par pgsqlCopyFromArray; s'il se trouve avant un séparateur de champs, bim, plus assez de champs.\n\ndarcs-hash:22ec716c2e0c619e00233882f9f1371b4e02909a","shortMessageHtmlLink":"PreproCopy: \\"}},{"before":"64f2fb9d657c183e74e8d1bfaed7357735a3aba2","after":"1865bd7873bfb5ee6dd9cbb59f6d436f034d0589","ref":"refs/heads/master","pushedAt":"2024-02-02T16:56:43.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"Sqleur: getenv()\n\n+ Fonction préproc.\n\ndarcs-hash:30d263373047ff64f1e11cd5645e43176c23536e","shortMessageHtmlLink":"Sqleur: getenv()"}},{"before":"45d235370b3e74d641ce8fb39ec157ab5b7abd44","after":"64f2fb9d657c183e74e8d1bfaed7357735a3aba2","ref":"refs/heads/master","pushedAt":"2024-01-29T16:54:41.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"sqlminus.sh: sqlm(): par / plutôt que \n\n+ Syntaxe pour taper une base par nom de façade plutôt qu'ID.\n\ndarcs-hash:97440d68b572f303a141efb67dd2c83213c24dfb","shortMessageHtmlLink":"sqlminus.sh: sqlm(): par /<SERVICE_NAME> plutôt que <SID>"}},{"before":"8633debab346ac446b5cba8d8294bde6188f27a5","after":"45d235370b3e74d641ce8fb39ec157ab5b7abd44","ref":"refs/heads/master","pushedAt":"2024-01-26T10:24:02.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"Sqleur: case … end case;\n\n# En PL/SQL, le case ne se termine pas par un simple end, mais par un end case.\n= On gère les deux en même temps histoire de tolérer des syntaxes approximatives, ou différentes.\n\ndarcs-hash:190e30610411eca32f3967e8556652f42544806f","shortMessageHtmlLink":"Sqleur: case … end case;"}},{"before":"df5139a82de00236a0012d288c0014787f8686bb","after":"8633debab346ac446b5cba8d8294bde6188f27a5","ref":"refs/heads/master","pushedAt":"2024-01-10T16:01:34.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"BOGUE: sqlminus.sh: incapable de trouver sql2csv.php dans les ..\n\n# Un $SCRIPTS bourré de .. faisait consommer par les .. l'intégralité de notre protection de boucle infinie (censée remonter dossier par dossier jusqu'à trouver sql2csv.php) => on ne remontait jamais assez haut pour dénicher notre arlésienne.\n\ndarcs-hash:ced31eaf41f991ce9d95a7938fd6355db46e0a9e","shortMessageHtmlLink":"BOGUE: sqlminus.sh: incapable de trouver sql2csv.php dans les .."}},{"before":"b9730242fcb5b67443d90d97784b9a62a453d347","after":"df5139a82de00236a0012d288c0014787f8686bb","ref":"refs/heads/master","pushedAt":"2024-01-04T18:16:45.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"#copy csv header\n\n+ Sautage de la ligne d'en-tête.\n\ndarcs-hash:6b007b930843cbb21952e57273134b00a0049ab4","shortMessageHtmlLink":"#copy csv header"}},{"before":"519e99796667a917fdb0468e534e6182143caac1","after":"b9730242fcb5b67443d90d97784b9a62a453d347","ref":"refs/heads/master","pushedAt":"2023-12-26T14:53:42.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"sqlminus.sh: plus robuste à la détection d'env\n\n# _sqlm_init() n'exploitait pas toutes les possibilités de recherche.\n\ndarcs-hash:5b97c6ce8896b74f7965d0c0e60251b35971bf6e","shortMessageHtmlLink":"sqlminus.sh: plus robuste à la détection d'env"}},{"before":"3f7bd239d6dd301df92d556465b34d28e8ae228a","after":"519e99796667a917fdb0468e534e6182143caac1","ref":"refs/heads/master","pushedAt":"2023-12-24T14:21:26.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"BOGUE: sqlminus.sh: mauvais calcul de $SQLEUR, sql2csv.php introuvable\n\n# sqlminus.jar n'est qu'un artefact, dont la présence n'est pas garantie sur toutes les installs (en particulier celles qui pour taper un Oracle passent par un tunnel SSH, le .jar n'étant déployé qu'à l'autre bout du tunnel).\n# La recherche n'était en outre pas très robuste.\n\ndarcs-hash:f613d3e9d09c7d3dd167be147b11d98071a5e59c","shortMessageHtmlLink":"BOGUE: sqlminus.sh: mauvais calcul de $SQLEUR, sql2csv.php introuvable"}},{"before":"54a6573749612f006ef3c460a8ece2057d4fe82a","after":"3f7bd239d6dd301df92d556465b34d28e8ae228a","ref":"refs/heads/master","pushedAt":"2023-12-21T11:05:59.000Z","pushType":"push","commitsCount":17,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"BOGUE: Sqleur: impossibilité de #define TOTO << $$ TOTO select complément; $$;\n\n# Le masqueur de définitions antérieures faisait aussi mangeur de redéfinitions.\n\ndarcs-hash:f1189f7dc9f4c23177a80cc091eb6d587484fb2a","shortMessageHtmlLink":"BOGUE: Sqleur: impossibilité de #define TOTO << $$ TOTO select complé…"}},{"before":"9fe1ce78f743d0c3315bd1bf1ada0bfaf720f706","after":"54a6573749612f006ef3c460a8ece2057d4fe82a","ref":"refs/heads/master","pushedAt":"2023-11-19T09:40:59.000Z","pushType":"push","commitsCount":16,"pusher":{"login":"outtersg","name":"Guillaume Outters","path":"/outtersg","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/864883?s=80&v=4"},"commit":{"message":"composer.json: 1.9.x\n\n+ #define MACHIN <