From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,ee0dc912649d50d4 X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit From: Brian May Newsgroups: comp.lang.ada Subject: Re: Ada DB bindings and APQ References: <1km3c584awura$.y7djkir1ozya$.dlg@40tude.net> <_%6wd.154$jT5.98@read1.cgocable.net> Date: Fri, 17 Dec 2004 15:55:44 +1100 Message-ID: User-Agent: Gnus/5.1007 (Gnus v5.10.7) Emacs/21.3 (gnu/linux) Cancel-Lock: sha1:HLlEQvAjYjwTPgt3dW8XzkES6W4= MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii NNTP-Posting-Host: snoopy.microcomaustralia.com.au X-Trace: news.melbourne.pipenetworks.com 1103259319 202.173.153.89 (17 Dec 2004 14:55:19 +1000) X-Complaints-To: abuse@pipenetworks.com X-Abuse-Info: Please forward all headers to enable your complaint to be properly processed. Path: g2news1.google.com!news3.google.com!newsfeed2.dallas1.level3.net!news.level3.com!newsfeed-00.mathworks.com!prodigy.com!newsswing.news.prodigy.com!prodigy.net!newsfeed.cwix.com!news1.optus.net.au!optus!news.mel.connect.com.au!news-north.connect.com.au!news.alphalink.com.au!news.melbourne.pipenetworks.com!not-for-mail Xref: g2news1.google.com comp.lang.ada:7017 Date: 2004-12-17T15:55:44+11:00 List-Id: >>>>> "Warren" == Warren W Gay VE3WWG writes: Warren> I like the neatness of this approach, but the danger is Warren> that you might do the "..." part on a row that might Warren> not exist. Though I suppose the Query_Type object could Warren> maintain enough state such that it can raise an exception Warren> if any "Values" were fetched from the row that is not there. Warren> Just a quibble: I'd prefer something like "No_Row(Q)" perhaps. Warren> An even neater loop is this, IMHO ;-) >> loop >> Fetch(Q); >> exit when No_More_Data(Q); >> >> ... >> end loop; How about Valid_Row : Boolean; loop Fetch(Q, Valid_Row); exit when not Valid_Row; ... end loop; Where Valid_Row is an out variable from Fetch. This would avoid breaking any existing software, and make it obvious that Valid_Row has to be checked. I suspect this should work regardless of what the database is. Other questions that might be significant, especially to some of my proposed changes. 1. What happens if an unexpected exception occurs within the above loop, and it prevents continuing the loop. In fact, the code that handles the exception may not realize it occurred in middle of the fetch operation. Is there any way of recovering the database connection? 2. With Mysql what happens if I do this: declare Q1 : Root_Query_Type'Class := New_Query(C); Q2 : Root_Query_Type'Class := New_Query(C); begin Prepare(Q1, ...); Prepare(Q2, ...) Set_Fetch_Mode(Q1, Sequential_Fetch); Set_Fetch_Mode(Q2, Sequential_Fetch); Execute(Q1, C); Execute(Q2, C); loop Fetch(Q1); Fetch(Q2); ... end loop; end; Will this work, trigger an error, or will it kill the Mysql connection as requests are intermixed? -- Brian May