Re: Procedure or function has too many arguments specified
Frediano Ziglio <[email protected]>
| Newsgroups | gmane.comp.db.tds.freetds |
|---|---|
| Message-ID | <1225867541.7417.3.camel@freddy> |
Il giorno mar, 04/11/2008 alle 20.48 -0800, Man Min Yan ha scritto: > Hi Frediano, > > You're right, tds_free_dynamic doesn't seem to be right. It's not removing the items from the tds->dyns list properly. Also, my previous patch is not right as it would throw away any previously prepared statement. Here's my 2nd go at fixing this problem. > > I've also tried to identify where the prepares were happening, and it seems to be a freetds problem. Here's the call stack: > main() > perl_run() > Perl_runops_standard() > Perl_pp_entersub() > XS_DBI_dispatch() > XS_DBD__ODBC__st_execute() > odbc_st_execute() > SQLExecute() from libodbc.so.1 > SQLExecute() at odbc.c:3343 > _SQLExecute() at odbc.c:3142 > tds_submit_prepare() at query.c:1007 > > The code in _SQLExecute is actually un-preparing the statement, re-preparing it, then executing it every time it is called. > > Rgds, > Man Min > Mmmm... currently there are 3 issues: - generated ids can create duplication leading to dynamic reuse, perhaps we should throw error on same id and generate betters ids. TODO: test in libTDS to check no duplication on generated ids - on reused dynamic I had cur_dyn set but no dynamic on list... that is a huge memory problem! TODO: test in odbc to remove the problem - odbc prepare too much, in this case due to rebinding. TODO: cache argument and query in libTDS to avoid this case. freddy77