[Sqlrelay-discussion] SegFault from SendQuery on v0.41
Brought to you by:
mused
From: Carlos V. <cve...@em...> - 2010-08-30 16:23:05
|
Cal, you are right about it not being specific to nested loops. I've narrowed it down to a series of statements: ===>Sending Query: select * from DialogColumn where DialogQueryID = 41 Order By ColName Query Done ===>Sending Query: select * from DialogColumn where DialogQueryID = 26 Order By ColName Segmentation fault Seems to be any time I do multiple of these where the 2nd select returns more rows that the first. If I reverse the order of the statements where the result set is smaller for the 2nd statement, it runs ok. As if the first query is setting some sort of buffer size that overflows by a larger result set later. There are some "text" fields with large data being returned here. I am going to keep trying to narrow this down at a deeper level. I am worried about losing critical performance if I have to start a new cursor for every query on these very tight loops. CJ Vergara From: Cal Heldenbrand [mailto:ca...@fb...] Sent: Monday, August 30, 2010 10:02 AM To: Discussion of topics related to SQL Relay Subject: [SPAM] - Re: [Sqlrelay-discussion] SegFault from SendQuery on v0.41 - Email found in subject Yeah, I've run into this before. Your cursors can't step on each other, you'll have to use separate cursors. I've also run into issues with reusing the same cursor for multiple queries, unnested. (It was a rare case that was difficult to recreate) The only thing I can suggest is to write a few wrapper functions to handle running queries. I set my code to create & destroy a cursor for each new query run. --Cal On Mon, Aug 30, 2010 at 9:51 AM, Carlos Vergara <cve...@em...<mailto:cve...@em...>> wrote: Has anyone encountered a segmentation fault when running nested queries through the same cursor? I am running through 3 nested for loops of queries with code looking something like this: My $sh = connectSQLRelay(); My $results = $sh->select(select * from Dialogs where pflag=1) For (0 .. $#results){ My $results2 = $sh->select(select * from Dialogs2 where something = $results[$i]->{column1}); For (0 .. $results2) { My $results3 = $sh->select(select * from Dialogs3 where something = $results2[$i]->{column1}); } } I could rewrite it to use separate cursors in each loop and that works, but I have a large application and I don't want to track down all the places this could be a problem. This code worked fine using Perl's ctLib.pm using no new cursors, so I don't think it's a cursor issue. An strace is showing it fails during the call to SendQuery doing a system read after 2 writes. It always occurs on the most inner for loop (trying to fetch results3). I am putting together a test script to recreate the issue consistently and I will post it here. Please let me know if anyone has seen this behavior though. CJ Vergara Lead Web Developer III Mindbrix, LP 8317 Whitley Rd. Fort Worth, TX 76148 817-488-4485 Confidentiality Note: This e-mail, and any attachment to it, contains privileged and confidential information intended only for the use of the individual(s) or entity named on the e-mail. If the reader of this e-mail is not the intended recipient, you are hereby notified that reading it is strictly prohibited. If you have received this e-mail erroniously, please immediately return it to the sender and delete it from your system. Thank you. ------------------------------------------------------------------------------ Sell apps to millions through the Intel(R) Atom(Tm) Developer Program Be part of this innovative community and reach millions of netbook users worldwide. Take advantage of special opportunities to increase revenue and speed time-to-market. Join now, and jumpstart your future. http://p.sf.net/sfu/intel-atom-d2d _______________________________________________ Sqlrelay-discussion mailing list Sql...@li...<mailto:Sql...@li...> https://lists.sourceforge.net/lists/listinfo/sqlrelay-discussion |