attempt to tamper with cursors...

Sowebio - Développement (via ada-france Mailing List) <[email protected]> Thu, 7 Sep 2023 19:19:12 +0200
Newsgroups gmane.comp.lang.ada.france
Organization Sowebio
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------A466CFADCB44CADE32FC8ECE
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 8bit

Avé la liste...

Je me demande bien ce que j'ai loupé - vu les recherches, je ne suis pas
le seul, mais ça ne me console pas ;)

Dans l'ads j'ai :

---------------------------------
type Schema_Line is record
      Command : Schema_Command;
      Name : String;
      Attribute : String;
      Comment : String;
   end record;

   package Schema_Lines_List is new Ada.Containers.Vectors (Index_Type
=> Natural, Element_Type => Schema_Line);

private

   Schema : Schema_Lines_List.Vector;
---------------------------------

Dans l'adb, je m'en sert à chaque nouvelle DB à ouvrir/créer pour
recueillir tout le schéma de la DB. Mais à la fin du traitement d'une
DB, je souhaite vider cette liste pour une éventuelle autre DB... Dans
la fonction de finalisation, j'ai tout essayé, genre :


---------------------------------
         C : Schema_Lines_List.Cursor := Schema.First;
         Next : Schema_Lines_List.Cursor;
         use Schema_Lines_List; -- < obligatoire pour gérer les opérateurs
      begin

       -- D'abord la procédure normale :
       Schema.Clear;

       -- Puis une manip de Jeffrey Carter (en sauvegardant le Curseur
pour tromper le compilo)
         loop
            exit when C = Schema_Lines_List.No_Element;
            declare
            begin
               Next := Schema_Lines_List.Next (C);
               Schema.Delete (Position => C);
               C := Next;
            end;
         end loop;

        -- Et même un simple Delete_Last
        Schema.Delete_Last;

---------------------------------

Dans tous les cas, j'ai :

-------------------------------------------------------------------------------------
Exception time         : 20230907-155408
Program uptime         :  0h0 0m0 0s
Program build DT stamp : build 2023-09-07 15:53:58
Program name & version : testapi v0.7
Library name & version : v22 v0.1
Start directory        : /home/sr/opt/v22/bin
Home directory         : /home/sr
Ada mem. alloc. (bytes): Ada Cur: [ 12540 ] Max: [ 19672 ]
All mem. alloc. (bytes): All Cur: [ 15335424 ] Max: [ 15335424 ]

raised PROGRAM_ERROR :
v22.Sql.Schema_Lines_List.*Implementation.TC_Check: attempt to tamper
with cursors*

Tout le reste de l'API marche nickel...

Quelques (rares) références sur le sujet :

https://groups.google.com/g/comp.lang.ada/c/xCEmY9_ZI1o
https://comp.lang.ada.narkive.com/MXzQLQUC/deleting-elements-from-a-vector

Merci d'avance... Si vous avez des idées...

Un conteneur dont on ne peut pas effacer les éléments, c'est pas très
cossu :)

Stef
-- 
Sowebio Développement
[email protected] <mailto:[email protected]>
Sowebio <http://www.soweb.io>
www.soweb.io <http://www.soweb.io>
[email protected] <mailto:[email protected]>
+33 (0) 5 46 85 58 40



_______________________________________________
Ada-france mailing list
[email protected]

--------------A466CFADCB44CADE32FC8ECE
Content-Type: multipart/related;
 boundary="------------5E9B6E0028A0F6FA4F98CC04"


--------------5E9B6E0028A0F6FA4F98CC04
Content-Type: text/html; charset=iso-8859-15
Content-Transfer-Encoding: 8bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=iso-8859-15">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p><font face="Calibri">Avé la liste...</font></p>
    <p><font face="Calibri">Je me demande bien ce que j'ai loupé - vu
        les recherches, je ne suis pas le seul, mais ça ne me console
        pas ;)<br>
      </font></p>
    <p><font face="Calibri">Dans l'ads j'ai :</font></p>
    <p><tt>---------------------------------<br>
        type Schema_Line is record<br>
              Command : Schema_Command;<br>
              Name : String;<br>
              Attribute : String;<br>
              Comment : String;<br>
           end record;<br>
        <br>
           package Schema_Lines_List is new Ada.Containers.Vectors
        (Index_Type =&gt; Natural, Element_Type =&gt; Schema_Line);<br>
      </tt></p>
    <p><tt>private<br>
      </tt></p>
    <p><tt>   Schema : Schema_Lines_List.Vector;<br>
      </tt><tt>---------------------------------</tt></p>
    <p><font face="Calibri">Dans l'adb, je m'en sert à chaque nouvelle
        DB à ouvrir/créer pour recueillir tout le schéma de la DB. Mais
        à la fin du traitement d'une DB, je souhaite vider cette liste
        pour une éventuelle autre DB... Dans la fonction de
        finalisation, j'ai tout essayé, genre :<br>
      </font></p>
    <p><tt><br>
      </tt><tt>---------------------------------<br>
                 C : Schema_Lines_List.Cursor := Schema.First;<br>
                 Next : Schema_Lines_List.Cursor;<br>
                 use Schema_Lines_List; -- &lt; obligatoire pour gérer
        les opérateurs<br>
              begin<br>
      </tt></p>
    <p><tt>       -- D'abord la procédure normale :<br>
               Schema.Clear;<br>
        <br>
               -- Puis une manip de Jeffrey Carter (en sauvegardant le
        Curseur pour tromper le compilo)<br>
                 loop<br>
                    exit when C = Schema_Lines_List.No_Element;<br>
                    declare<br>
                    begin<br>
                       Next := Schema_Lines_List.Next (C);<br>
                       Schema.Delete (Position =&gt; C);<br>
                       C := Next;<br>
                    end;<br>
                 end loop;<br>
        <br>
                -- Et même un simple Delete_Last<br>
                Schema.Delete_Last;</tt></p>
    <tt>---------------------------------</tt><br>
    <br>
    Dans tous les cas, j'ai :<br>
    <br>
-------------------------------------------------------------------------------------<br>
    <tt>Exception time         : 20230907-155408</tt><tt><br>
    </tt><tt>Program uptime         :  0h0 0m0 0s</tt><tt><br>
    </tt><tt>Program build DT stamp : build 2023-09-07 15:53:58</tt><tt><br>
    </tt><tt>Program name &amp; version : testapi v0.7</tt><tt><br>
    </tt><tt>Library name &amp; version : v22 v0.1</tt><tt><br>
    </tt><tt>Start directory        : /home/sr/opt/v22/bin</tt><tt><br>
    </tt><tt>Home directory         : /home/sr</tt><tt><br>
    </tt><tt>Ada mem. alloc. (bytes): Ada Cur: [ 12540 ] Max: [ 19672 ]</tt><tt><br>
    </tt><tt>All mem. alloc. (bytes): All Cur: [ 15335424 ] Max: [
      15335424 ]</tt><tt><br>
    </tt><tt><br>
    </tt><tt>raised PROGRAM_ERROR : v22.Sql.Schema_Lines_List.</tt><tt><b>Implementation.TC_Check:
        attempt to tamper with cursors</b></tt><br>
    <br>
    Tout le reste de l'API marche nickel...<br>
    <p><font face="Calibri">Quelques (rares) références sur le sujet :<br>
      </font></p>
    <p><font face="Calibri"><a class="moz-txt-link-freetext"
          href="https://groups.google.com/g/comp.lang.ada/c/xCEmY9_ZI1o">https://groups.google.com/g/comp.lang.ada/c/xCEmY9_ZI1o</a><br>
        <a class="moz-txt-link-freetext"
href="https://comp.lang.ada.narkive.com/MXzQLQUC/deleting-elements-from-a-vector">https://comp.lang.ada.narkive.com/MXzQLQUC/deleting-elements-from-a-vector</a><br>
      </font></p>
    <p><font face="Calibri">Merci d'avance... Si vous avez des idées...<br>
      </font></p>
    <p><font face="Calibri">Un conteneur dont on ne peut pas effacer les
        éléments, c'est pas très cossu :)<br>
      </font></p>
    <font face="Calibri">Stef</font>
    <div class="moz-signature">-- <br>
      <meta http-equiv="content-type" content="text/html;
        charset=iso-8859-15">
      <table width="160" height="148" border="0" cellspacing="2"
        cellpadding="2">
        <tbody>
          <tr>
            <td valign="top"> <font face="Helvetica, Arial, sans-serif"
                size="-2"> Sowebio Développement<br>
                <a href="mailto:[email protected]">[email protected]</a><br>
              </font> </td>
          </tr>
          <tr>
            <td valign="top"><a href="http://www.soweb.io"><img
                  title="Cliquer pour accéder au site Web" alt="Sowebio"
                  src="cid:[email protected]" width="150"
                  height="30" border="0"></a></td>
          </tr>
          <tr>
            <td valign="top"> <font face="Helvetica, Arial, sans-serif"
                size="-2"> <a href="http://www.soweb.io">www.soweb.io</a><br>
                <a href="mailto:[email protected]">[email protected]</a><br>
                +33 (0) 5 46 85 58 40 </font> </td>
          </tr>
        </tbody>
      </table>
      <br>
    </div>
  <div style="background: transparent; border: none; clear: both; display: block; float: none; position: static"><br/>_______________________________________________<br/>Ada-france mailing list<br/>[email protected]</div></body>
</html>

--------------5E9B6E0028A0F6FA4F98CC04
Content-Type: image/png;
 name="ccbknelenmbbbaeo.png"
Content-Transfer-Encoding: base64
Content-ID: <[email protected]>
Content-Disposition: inline;
 filename="ccbknelenmbbbaeo.png"

iVBORw0KGgoAAAANSUhEUgAAAJYAAAAgCAYAAADwkoGKAAAMuXpUWHRSYXcg
cHJvZmlsZSB0eXBlIGV4aWYAAHjapZhpcmS5DYT/8xQ+AneAxyG4RMwNfHx/
eFWSW2pNhNsjhVSlV28hkYnMhML59183/IuvkrqG2kT76D3yVUcdefJG4+tr
Pr9TrM/v52v092fp6/GQ38dj5lDhtbz+1PcF6eN4+rzB62Xyrv1yI13vD+zr
B6O+76/fbvR+UPEV+Sr2+0bjfaOSXx+k9w3ma1uxD5Vft2Dn9bo/dqKvn+C/
9n0d/7jJ97+rUL3deE7J+ZRUIr9LeS+g+E8JZT5vJh8rJ6bSeZ9Le458bImC
/FSnz6/Biq4vtf540hdUPt99Q6u8QQnf0ar5fUr5VuT++frj8ZDaz6g8pf/l
yVXf7/LX4ylFe63oW/X9596t99kzu5i1U+r+3tTHFp93nMdNqj9aA0vrUfhp
3EKe78G3wuoFajsunmi8HykD10017TTTTed5XWmxxJpPyMKbnFcuz0Etkkde
xfGr/p1uljLKLgqW64G9lvy5lvQ8dsQVnqcpT96JU3PiZolL/vg7/OkF965X
ifWBPr3wzdmLzTIcOf/NaSCS7ruo7Snwx/f3L8e1gGDzKnuLDAprr1tYS/9V
gvIAXTix8fpqlyT7fQNKxKMbi0kFBEAtlZZ6ipKzpEQhFYAmS8+lZgOB1Fre
LDLXUjrY0Ek8mkskPafmljkcOI6YgUSjywRsRpmAVWuDP1IVDs1WWm2t9SZN
22izl157671Ld1GcUqQGadJFRGXI1KJVm3YVVR06Rx4F0WyjDxk6xpiTZ07u
PLl6csKclq1YtRasm5jasLmgz6qrrb5k6Rpr7rzLRj9237J1jz1POlDp1NNO
P3L0jDMvVLsl3Hrb7Veu3nHnJ2pvWH/7/gPU0hu1/CDlJ8onahwV+bhFcjlp
jhmA5VATiItDAKGzYxY11ZodOccsDuSvtMwim2O2kyMGgvWk3G76wC7kF6KO
3D/CLUj9glv+f5ELDt0fIvc7bj+htt2G1oPYqwu9qLHQfTfTilrjXa3c60Lf
bNylXLq7hM7akv/KSbVPypC3pSGFR16WtXV1uezxiruU6JwbgMds0Za2uvqZ
0quFNNZgybqQLMp/ZhmzXhCiMCeXHbsYfiWjn60Uf0WXwuMLqzrPEQpadJ8Q
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
DAR2gUbNtr+PbbtxAvifgSu95S/XgelP0mstLXIEhLaBi+uWpuwBlzvAwJMh
m7Ij+WkKuRzwfkbflAH6boHuNbe35j5OH4AUdZW4AQ4OgZE8Za97vLurvbd/
zzT7+wGVu3K1AbClJQAADRppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/
eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3pr
YzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6
eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5z
OnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4
LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHht
bG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgog
ICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9z
VHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVy
bC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6
Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9u
cy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8v
bnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJn
aW1wOmRvY2lkOmdpbXA6MzNlOTQ5YjItZjU3Ni00OWFiLWI4NjMtNTVlZTZi
YzRiZjE3IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjVhOTU1NDJk
LTE4NzktNGI5Mi04YWY3LWQ3MDU2MDQwMWE2MCIKICAgeG1wTU06T3JpZ2lu
YWxEb2N1bWVudElEPSJ4bXAuZGlkOjllNGMzZjYyLWEwMTItNGIwMy1iNGZk
LTRjNDM2YzY5NzdlYSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJ
TVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1Q
OlRpbWVTdGFtcD0iMTY3NjczMzkxMzM4MjA5NCIKICAgR0lNUDpWZXJzaW9u
PSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3Jl
YXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAg
PHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNh
dmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0
YW5jZUlEPSJ4bXAuaWlkOjU0MDRiZTY1LTY0ZDYtNGRkMy1iNTlhLWNhMjUy
MTQyNTViMCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEw
IChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjMtMDItMThUMTY6MjU6
MTMrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5
PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0
YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+
7ZbrvQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAABFWwAARVsBtQF/+gAA
AAd0SU1FB+cCEg8ZDamo33YAABE9SURBVHja7Vt5lBTVvf5uLV1LV/fsIPhQ
XJ5RQJDFJYIC4ihPVNwAlRgXBEkETKKo4HkuQRaXPAXUPGRzeajIphLFLQFm
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

--------------5E9B6E0028A0F6FA4F98CC04--

--------------A466CFADCB44CADE32FC8ECE--