{"id":248588,"date":"2022-03-15T09:51:20","date_gmt":"2022-03-15T08:51:20","guid":{"rendered":"https:\/\/blog.jetbrains.com\/datagrip\/2022\/03\/15\/working-with-source-code-in-datagrip\/"},"modified":"2022-05-24T15:56:22","modified_gmt":"2022-05-24T14:56:22","slug":"travailler-avec-le-code-source-dans-datagrip","status":"publish","type":"datagrip","link":"https:\/\/blog.jetbrains.com\/fr\/datagrip\/2022\/03\/15\/travailler-avec-le-code-source-dans-datagrip\/","title":{"rendered":"Travailler avec le code source dans DataGrip"},"content":{"rendered":"<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-248594 size-medium\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/03\/Travail-avec-code-source-dans-DataGrip_Blog_featured-1200x563.png\" alt=\"Travailler avec le code source dans DataGrip\" width=\"1200\" height=\"563\"><\/figure>\n<h2 id=\"basics\"><span id=\"Basics\" class=\"ez-toc-section\"><\/span>Les Bases<\/h2>\n<p>Le code source de l&#8217;objet est la partie <strong>principale<\/strong> du script DDL qui est n\u00e9cessaire pour cr\u00e9er cet objet. En d&#8217;autres termes, l&#8217;instruction <em>CREATE<\/em> ne fait pas partie du code source de l&#8217;objet. Le code source est stock\u00e9 dans la base de donn\u00e9es. Les objets les plus courants dans le code source sont les vues, les fonctions et les proc\u00e9dures stock\u00e9es.<\/p>\n<p>Pour mettre \u00e0 jour le code source, de nombreux outils requi\u00e8rent de g\u00e9n\u00e9rer le script <em>CREATE OR REPLACE<\/em>, d&#8217;effectuer les modifications n\u00e9cessaires et d&#8217;ex\u00e9cuter le script. Dans Datagrip, cela fonctionne diff\u00e9remment. Il vous suffit d&#8217;effectuer les modifications et le script sera g\u00e9n\u00e9r\u00e9 pour vous.<\/p>\n<p>Les personnes utilisant d&#8217;autres outils font toutes la m\u00eame chose&nbsp;: elles ouvrent le DDL, le copient, le modifient, ajustent la d\u00e9claration <em>CREATE<\/em> (g\u00e9n\u00e9ralement en ajoutant la partie <em>OR REPLACE<\/em>) et ex\u00e9cutent le nouveau script. <strong> Ce n&#8217;est pas la mani\u00e8re de proc\u00e9der pour mettre \u00e0 jour le code source<\/strong><\/p>\n<h2 id=\"loading-sources\"><span id=\"Loading_sources\" class=\"ez-toc-section\"><\/span>Chargement des sources<\/h2>\n<p>Quelle que soit la source de donn\u00e9es, DataGrip ex\u00e9cute un processus \u00ab&nbsp;d&#8217;introspection&nbsp;\u00bb \u2013 l&#8217;IDE r\u00e9cup\u00e8re toutes les m\u00e9tadonn\u00e9es des objets \u00e0 l&#8217;avance. Ainsi, l&#8217;ensemble du code source est charg\u00e9 lorsque l&#8217;introspection est effectu\u00e9e.<\/p>\n<p>Vous pouvez g\u00e9rer ce processus en choisissant la valeur requise dans les options <em>Load Sources for<\/em> des propri\u00e9t\u00e9s de la source de donn\u00e9es.<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231636\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/SettingsLoadSources.png\" alt=\"\" width=\"2000\" height=\"1560\"><\/figure>\n<p>Dans Oracle, il est possible de ne pas charger les sources en choisissant un niveau d&#8217;introspection inf\u00e9rieur&nbsp;:<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231647\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/SettingsIntrospectionLevel.png\" alt=\"\" width=\"2000\" height=\"1560\"><\/figure>\n<p>Vous vous demandez peut-\u00eatre&nbsp;: si le code source est charg\u00e9 lors de l&#8217;introspection, cela ne signifie-t-il pas qu&#8217;il est obsol\u00e8te&nbsp;?<\/p>\n<p>En effet, il l&#8217;est. Nous verrons comment g\u00e9rer cette situation plus tard dans ce tutoriel.<\/p>\n<h2 id=\"the-flow\"><span id=\"The_flow\" class=\"ez-toc-section\"><\/span>Le flux<\/h2>\n<p>Pour ouvrir l&#8217;\u00e9diteur DDL, double-cliquez sur l&#8217;objet dans l&#8217;explorateur de base de donn\u00e9es ou appuyez sur <em>Cmd\/Ctrl+B<\/em> dans le script SQL. Double-cliquer sur la vue dans l&#8217;explorateur de bases de donn\u00e9es ouvrira les donn\u00e9es. Pour ouvrir l&#8217;explorateur DDL, cliquez sur le bouton DDL dans la barre d&#8217;outils.<\/p>\n<p>L&#8217;\u00e9diteur DDL s&#8217;ouvrira. L\u00e0, vous trouverez le script <em>CREATE<\/em> pour l&#8217;objet.<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231658\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/OpenDDLBasics.gif\" alt=\"\" width=\"2000\" height=\"918\"><\/figure>\n<p><strong>Important ! <\/strong>Les r\u00e9f\u00e9rences de l&#8217;objet dans le script g\u00e9n\u00e9r\u00e9 ne sont pas qualifi\u00e9es. En d&#8217;autres termes, <em>%view_name%<\/em> est utilis\u00e9 \u00e0 la place de <em>%schema_name%.%view_name%<\/em>. Vous avez ainsi la possibilit\u00e9 de copier le script et de l&#8217;appliquer dans un autre contexte. Si vous voulez un script avec des r\u00e9f\u00e9rences qualifi\u00e9es, utilisez le <a href=\"https:\/\/www.jetbrains.com\/help\/datagrip\/export-data.html#generate-ddl-definitions-for-dat\" target=\"_blank\" rel=\"noopener\">g\u00e9n\u00e9rateur SQL<\/a>.<\/p>\n<p>Le code source peut \u00eatre modifi\u00e9 dans l&#8217;\u00e9diteur DDL. Lorsque vous modifiez le code source d&#8217;un objet, DataGrip suit les modifications et les met en \u00e9vidence dans la goutti\u00e8re.<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231669\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/ChangesOnGutter.png\" alt=\"\" width=\"2000\" height=\"821\"><\/figure>\n<p>Ajoutez par exemple une ligne de commentaire \u00e0 une proc\u00e9dure ou \u00e0 une fonction. La ligne que vous avez ajout\u00e9e est mise en \u00e9vidence. Si vous cliquez sur la ligne mise en \u00e9vidence dans la goutti\u00e8re, une petite barre d&#8217;outils avec le bouton <em>Show Diff<\/em> s&#8217;affiche. Pour voir la diff\u00e9rence entre le code que vous avez ajout\u00e9 et le code source, cliquez sur le bouton <em>Show Diff<\/em>.<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231817\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/DiffSmall.png\" alt=\"\" width=\"2000\" height=\"560\"><\/figure>\n<p>Apr\u00e8s avoir effectu\u00e9 les modifications, cliquez sur le bouton <em>Submit<\/em>.<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231680\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/SubmitButton.png\" alt=\"\" width=\"2000\" height=\"821\"><\/figure>\n<p>DataGrip g\u00e9n\u00e8re alors le script de modification et vous en montre un aper\u00e7u.<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231691\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/MigrationDialog.png\" alt=\"\" width=\"2000\" height=\"1233\"><\/figure>\n<p>Si le r\u00e9sultat vous convient, cliquez sur OK et le script sera ex\u00e9cut\u00e9 dans la base de donn\u00e9es. Le code source concern\u00e9 sera alors modifi\u00e9.&nbsp;<\/p>\n<p>DataGrip ne fait pas qu&#8217;ajouter <em>OR REPLACE<\/em> au script de cr\u00e9ation, il peut \u00e9galement g\u00e9rer des situations plus complexes, telles que la modification de la signature de l&#8217;objet ou le renommage de l&#8217;objet. Des scripts <em>DROP<\/em> et <em>CREATE<\/em> seront cr\u00e9\u00e9s quand cela sera n\u00e9cessaire.<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231806\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/DropCreateScript-1.png\" alt=\"\" width=\"2000\" height=\"1371\"><\/figure>\n<h2 id=\"changing-several-objects-at-once\"><span id=\"Changing_several_objects_at_once\" class=\"ez-toc-section\"><\/span>Modification de plusieurs objets simultan\u00e9ment<\/h2>\n<p>Lorsque des modifications ont \u00e9t\u00e9 effectu\u00e9es dans l&#8217;\u00e9diteur DDL mais qu&#8217;elles ne sont pas encore valid\u00e9es, DataGrip les stocke jusqu&#8217;\u00e0 ce que vous le fassiez. Par exemple, si vous avez modifi\u00e9 plusieurs objets, plusieurs DDL modifi\u00e9s sont mis en cache en attendant d&#8217;\u00eatre appliqu\u00e9s. Dans la fen\u00eatre d&#8217;outils <em>Database Changes<\/em>, vous pouvez voir toutes les modifications de code source en attente et toutes les valider simultan\u00e9ment.<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231828\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/DataBaseChanges.png\" alt=\"\" width=\"2336\" height=\"1380\"><\/figure>\n<h2 id=\"outdated-cached-objects\"><span id=\"Outdated_cached_objects%EF%BB%BF\" class=\"ez-toc-section\"><\/span>Objets en cache obsol\u00e8tes<\/h2>\n<p>Comme nous l&#8217;avons mentionn\u00e9 plus haut, DataGrip met en cache le code source qui a \u00e9t\u00e9 charg\u00e9 lors de l&#8217;introspection. Si un objet que vous avez ouvert a \u00e9t\u00e9 mis \u00e0 jour depuis un emplacement tiers, vous recevrez une notification indiquant que l&#8217;objet mis en cache diff\u00e8re du code source du m\u00eame objet dans la base de donn\u00e9es.<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231724\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/ChachedObjectDif.png\" alt=\"\" width=\"2000\" height=\"872\"><\/figure>\n<p>Si cet avertissement appara\u00eet dans l&#8217;IDE, vous pouvez choisir l&#8217;une des actions suivantes&nbsp;:<\/p>\n<ul>\n<li><em>Synchronize<\/em> : r\u00e9cup\u00e8re les modifications de la base de donn\u00e9es et met \u00e0 jour l&#8217;objet local mis en cache.<\/li>\n<li><em>Disable check<\/em> : d\u00e9sactive cette notification.<\/li>\n<\/ul>\n<p>Il est aussi possible qu&#8217;il y ait un conflit entre votre version du code source de l&#8217;objet et celle de la base de donn\u00e9es. Cela peut se produire lorsque vous avez modifi\u00e9 le m\u00eame code source qu&#8217;une autre personne, puis cliqu\u00e9 sur <strong>Submit<\/strong> par exemple.<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231735\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/PossibleLossOfchanges.png\" alt=\"\" width=\"2000\" height=\"953\"><\/figure>\n<p>Vous pouvez forcer le remplacement du code source de l&#8217;objet dans la base de donn\u00e9es en utilisant <em>Force Refactoring<\/em> ou synchroniser l&#8217;\u00e9tat de l&#8217;objet et proc\u00e9der ensuite aux modifications en cliquant sur <em>Abort Refactoring and Synchronize<\/em>.<\/p>\n<p>Si vous avez s\u00e9lectionn\u00e9 <em>Abort Refactoring and Synchronize<\/em>, DataGrip abandonne l&#8217;op\u00e9ration d&#8217;envoi et r\u00e9cup\u00e8re les modifications de la base de donn\u00e9es, tout comme si vous aviez cliqu\u00e9 sur <em>Synchronize<\/em>. Si le conflit existe toujours, vous verrez la notification suivante.<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231746\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/ObjectChanged-1.png\" alt=\"\" width=\"2000\" height=\"953\"><\/figure>\n<p>Dans cette notification, vous pouvez choisir entre plusieurs options :<\/p>\n<ul>\n<li><em>Revert local changes<\/em> : pour annuler toutes vos modifications et les remplacer par la version de la base de donn\u00e9es.<\/li>\n<li><em>Keep local changes<\/em> : pour utiliser vos modifications et \u00e9craser les modifications dans la base de donn\u00e9es.<\/li>\n<li><em>Merge<\/em> : pour afficher la bo\u00eete de dialogue Diff et fusionner les versions du code source de l&#8217;objet.<\/li>\n<\/ul>\n<h2 id=\"local-history\"><span id=\"Local_history\" class=\"ez-toc-section\"><\/span>Historique locale<\/h2>\n<p>Toutes les modifications que vous apportez au code source sont stock\u00e9es localement. Pour revenir en arri\u00e8re et v\u00e9rifier le code source de la fonction avant les derni\u00e8res mises \u00e0 jour, utilisez <em>Local History.<\/em><\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231757\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/ShowLocalHistory.png\" alt=\"\" width=\"2000\" height=\"1321\"><\/figure>\n<p>Dans <em>Local History <\/em>, les r\u00e9visions contiennent toutes vos modifications locales et incluent \u00e9galement les versions r\u00e9cup\u00e9r\u00e9es dans la base de donn\u00e9es lors des introspections. Ainsi, les versions de l&#8217;objet qui ont \u00e9t\u00e9 introduites \u00e0 partir de sources tierces et qui n&#8217;ont pas \u00e9t\u00e9 \u00ab&nbsp;charg\u00e9es&nbsp;\u00bb pendant l&#8217;introspection peuvent manquer. Vous pouvez comparer toute r\u00e9vision historique avec la version actuelle du code source.<\/p>\n<figure class=\"wp-block-image size-full is-style-editorskit-shadow\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-231768\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/02\/LocalHistory.png\" alt=\"\" width=\"2340\" height=\"1108\"><\/figure>\n<p>Si vous \u00eates la seule personne qui travaille avec une base de donn\u00e9es particuli\u00e8re et que vous modifiez les sources uniquement \u00e0 partir de DataGrip, vous disposez d&#8217;un historique complet des modifications des objets dans <em>Local History<\/em>.&nbsp;<\/p>\n<p>Et voil\u00e0 ! Nous avons conscience que ce flux peut para\u00eetre surprenant, surtout si vous avez l&#8217;habitude d&#8217;utiliser un outil diff\u00e9rent, mais il vous simplifiera la t\u00e2che en supprimant les op\u00e9rations r\u00e9p\u00e9titives.<\/p>\n<p>L&#8217;\u00c9quipe DataGrip.<\/p>\n<p>P.S. Le mod\u00e8le de couleurs utilis\u00e9 pour les captures d&#8217;\u00e9cran est <em>Monocai<\/em>.<\/p>\n<p><em>Auteur de l&#8217;article original en anglais<\/em> :<\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":813,"featured_media":248594,"comment_status":"closed","ping_status":"closed","template":"","categories":[2347],"tags":[91,792],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/datagrip\/248588"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/datagrip"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/datagrip"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=248588"}],"version-history":[{"count":7,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/datagrip\/248588\/revisions"}],"predecessor-version":[{"id":248619,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/datagrip\/248588\/revisions\/248619"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/248594"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=248588"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=248588"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=248588"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=248588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}