All that was done a LONG time ago.  The MySQLTcl needs the two separate calls 
for select and other statements, so I went with the simple case to detect which 
to use.  You can use some sort of pattern match or regex just to get over the 
hump, but I think we would want to rewrite DIO to use TDBC in the long run.

Either that or just mark it as deprecated and encourage direct use of TDBC.  
Personally, I wrote a new library that does much of what DIO did in terms of 
queries and argument handling, but it doesn't use objects for anything.  All in 
all, the whole object basis of DIO is mostly unnecessary and doesn't actually 
jive with the way some of the DB libraries work.

But, it solved a need at the time. :)

D


On Sep 12, 2013, at 12:04 PM, Massimo Manghi <massimo.man...@unipr.it> wrote:

> Hi Brice,
> 
> I took a quick tour of the exec method in dio_Mysql.tcl (class ::DIO::Mysql)
> 
> It seems to me you hit hard a problem with mysqltcl and DIO
> 
> mysqltcl uses 2 calls for executing queries (actually there are 3 of them, 
> mysql::query is meant for multiple concurrent queries when one doesn't want 
> to draw on the JOIN syntax)
> 
> One call is for SELECT statements and the other for non-SELECT queries
> 
> DIO discriminates between SELECT and non-SELECT statements in a rather 
> simplicistic way: when the first 6 characters of the query match the "SELECT" 
> string ::mysql::sel is called otherwise ::mysql::exec is executed. Your query 
> is sent to ::mysql::exec and the call fails. I tried to send a trivial SELECT 
> to ::mysql::exec, I got no errors but mysql from that point on returns the 
> error
> 
> "mysql::sel/db server: Commands out of sync; you can't run this command..."
> 
> I must confess I can't recover from this error and I have to drop the handle 
> and reopen a new connection.
> 
> So I think we may try something smarter although computationally more 
> expensive like using some pattern matching using a regular exp. The problem 
> is how general a regular expression must be in order to prove to be robust 
> enough for a general SQL statement shipping a SELECT?
> 
> We can start from this simple case and see, please be patient and I will 
> provide a simple workaround while we think of something smarter.
> 
> I wonder if rewriting DIO in terms of tdbc would fix this sort of bugs. It 
> would at least concentrate on single component and a single maintainer the 
> cause of future problems
> 
> -- Massimo
> 
> 
> On 01-09-2013 3:00, Brice Hamon wrote:
>> Hi Massimo,
>> 
>> I did run a test directly using the mysqltcl package, and I did get
>> the correct data.
>> 
>> So the same sql statement returns data directly, and nothing via DIO,
>> so I am guessing the problem lies somewhere in DIO.
>> 
>> Any sql statement with parenthesis inside makes DIO not returning
>> data, for example (select * from .. where ..) union (select * from ..
>> where ....)
>> 
>> That is what I used for my test.
>> 
>> Please let me know if you need me to conduct more tests.
>> 
>> Thank you
>> B.
>> 
>> On Sat, Aug 31, 2013 at 7:19 PM, Brice Hamon <normandvik...@gmail.com
>> [2]> wrote:
>> 
>>> OK I will do the test and let you know.
>>> 
>>> Thanks,
>>> B.
>>> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: rivet-dev-unsubscr...@tcl.apache.org
> For additional commands, e-mail: rivet-dev-h...@tcl.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: rivet-dev-unsubscr...@tcl.apache.org
For additional commands, e-mail: rivet-dev-h...@tcl.apache.org

Reply via email to