[Devel] [ openser-Bugs-1618322 ] avp_db_query cannot call mysql
stored procedures
Kobi Eshun
kobi at sightspeed.com
Fri Dec 22 09:47:56 CET 2006
Hi,
So it seems there are (at least) three issues here RE avp_db_query()
script-level API:
1 - mysql_real_connect() flags required to support stored procedure
invocations that return one or more result sets may not be defined in
MySQL 4;
2 - all available result sets must be retrieved, or else the
connection will become unusable;
3 - result sets need to be mapped somehow to AVPs.
- I think that item 1 can be addressed with an 'ifndef' directive
like this:
#ifndef CLIENT_MULTI_RESULTS
#define CLIENT_MULTI_RESULTS 0
#endif
By the way, I found out by accident that if a stored procedure does
not return any result set, that the existing API works just fine (at
least so far).
- Item 2 is addressed by iterating over the result sets with
mysql_next_result() until it returns NULL. I don't know how this
would jibe with MySQL 4.
- It's not clear to me how to address item 3. There's an implicit
assumption in avp_db_query() that the result of the query is an NxM
set. In general, result sets don't conform to that assumption.
Perhaps a script-level interface to retrieve the next result set, and
also to flush any pending sets might be necessary?
Cheers,
--
kobi
On Dec 21, 2006, at 2:52 AM, Adrian Georgescu wrote:
> The flag is CLIENT_MULTI_RESULTS and you must also modify the code
> that reads the results back because there are multiple result sets
> returned by a stored procedure.
On Dec 21, 2006, at 4:20 AM, Dan Pascu wrote:
>
> It is not a guarantee that there are multiple result sets after you
> call a
> stored procedure. In fact the number of result sets may be zero,
> one or
> more than one, depending on what the stored procedure does.
>
> However the important part is that you retrieve all the result sets
> that
> were generated, else the server may close the connection. Even if it
> doesn't close the connection effectively, if you do not retrieve
> all the
> results sets, the following SQL queries will fail and the database
> connection will be basically inoperational.
Comment By: Daniel-Constantin Mierla (miconda)
Date: 2006-12-20 23:57
> Message:
> Logged In: YES
> user_id=1246013
> Originator: NO
>
> If I am not wrong, these new flags are available with MySQL 5.0 or
> greater. Could you adapt the patch so it detects mysql version and
> sets the
> flags only when the version is appropriate? Otherwise, I guess,
> will give
> compilation errors for older versions of MySQL.
Submitted By: vabdulla (vabdulla)
>
> Summary: avp_db_query cannot call mysql stored procedures
>
> Initial Comment:
> Hi,
>
> When calling a mysql5 stored procedure which returns a result set
> like this:
> avp_db_query("CALL db.sp_name('$avp(s:param1)', "param2",'$oU')",
> "$avp(s:rs1);$avp(s:rs2));
>
> I get the following error:
>
> 0(1245) submit_query: PROCEDURE db.sp_name can't return a result
> set in the given context
> 0(1245) db_raw_query: Error while submitting query
> 0(1245) avpops:db_query_avp: error - cannot do the query
>
> After some research, I have found that this error come from the
> client flags passed to mysql_real_connect() function.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://openser.org/pipermail/devel/attachments/20061222/29da9630/attachment.html
More information about the Devel
mailing list