Please take our Survey
logo       

Choosing A Webhost:
A web hosting service is a type of Internet hosting service that allows individuals and organizations to provide their own website accessible via the World Wide Web. Web hosts are companies that provide space on a server they own for use by their clients as well as providing Internet connectivity, typically in a data center. Web hosts can also provide data center space and connectivity to the Internet for servers they do not own to be located in their data center, called colocation. more...

RE: Issue w/ SQLColumns calling stored procedures: msg#00087

db.tds.freetds

Subject: RE: Issue w/ SQLColumns calling stored procedures

> From: Jonathan Monroe [mailto:monroej@xxxxxxxxxxxxx]
> Sent: September 16, 2003 11:03 PM
>
> The call to SQLColumns fails because the previous statement
> is still in a
> pending state. Looking through the log, the SQLFetch
> function consumed all
> the data up until the final DONEINPROC. However, the store
> procedure also
> returned an (implied) return parameter RETURNSTATUS before the final
> DONEPROC. Because the return parameter is not consumed, the
> statement is
> still pending.
...
> This wouldn't have been an issue if SQLFreeHandle had been
> called on the
> previous statement before calling SQLColumns, because
> SQLFreeHandle would
> have issued a cancel command and cleared the buffers. It
> also would not be
> an issue if the calling program had called SQLMoreResults,
> which would have
> consumed the RETURNSTATUS. However, I don't think either of
> these cases is
> required in a correct ODBC client implementation, because the
> ODBC spec says
> nothing about the presence of return parameter following the
> recordset (at least nowhere I can find).
...
> 3. record in the statement data structure the fact that sp_tables or
> sp_columns has been called, then automatically call
> SQLMoreReults right
> before SQLFetch is about to return with SQL_NO_DATA_FOUND for
> the statement.

Jonathan,

Nice bit of analysis, if I may say so. :-)

I wonder if a simpler form of #3 wouldn't be better. AFAIK, in general it's
not required to fetch return status or output parameters. Isn't it valid in
ODBC to ignore a return status from any stored procedure?

I suggest that when SQLFetch returns SQL_NO_DATA_FOUND, the driver
immediately inspect the next token, which will often be TDS_RETURNSTATUS.
If it is, scoop it up and prepare to make it available if the caller
requests it. If the caller neglects to ask for it, overwrite it when the
next result set arrives.

In any case, I think options #1 and #2 are no better. Rewriting the queries
seems retrograde; if anything, M$ will make that path harder over time. And
cancelling the query just to avoid reading the return status (especially
since the status could potentially be useful) is a rather heavy-handed way
to deal with "extra" information.

>From the TDS point of view, reading the stream smoothly is almost always the
best answer. Whether the ODBC layer needs a little or a lot of massaging in
this case, I hope our ODBC experts will be able to answer.

It would be interesting to know what the M$ driver does, if you're inclined
to find out.

Regards,

--jkl
-----------------------------------------
The information contained in this transmission may contain privileged and
confidential information and is intended only for the use of the person(s)
named above. If you are not the intended recipient, or an employee or agent
responsible for delivering this message to the intended recipient, any review,
dissemination, distribution or duplication of this communication is strictly
prohibited. If you are not the intended recipient, please contact the sender
immediately by reply e-mail and destroy all copies of the original message.
Please note that we do not accept account orders and/or instructions by e-mail,
and therefore will not be responsible for carrying out such orders and/or
instructions.


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

Recently Viewed:
hardware.arm.at...    cms.citadel.dev...    video.gstreamer...    java.facelets.u...    misc.basics.qna...    web.wiki.instik...    network.uip.use...    xdg.devel/2003-...    tex.bibtex.bibd...    finance.quotesp...    ietf.zeroconf/2...    redhat.blinux.g...    suse.db2/2003-0...    php.phpesp/2004...    uml.devel/2003-...    gnome.labyrinth...    qnx.openqnx.dev...    boot-loaders.gr...    db.dataperfect....    audio.audacity....    linux.uclinux.m...    editors.j.devel...    os.openbsd.tech...    kde.users.multi...   
Home | advertise | OSDir is an inevitable website. super tiny logo

Free Magazines

Cisco News
Receive a free quarterly e-newsletter with exclusive articles on how Cisco IT uses its own products and solutions to enable the business.
subscribe

Systems Management News, the newspaper for IT systems administration and data center managers! Each issue of Systems Management News is chock-full of news and analysis to help you understand what's happening in your field.
subscribe

The Enterprise Newsweekly eWeek is the essential technology information source for builders of e-business.
subscribe

Oracle Magazine Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world's largest enterprise software company.
subscribe

Total Telecom Total Telecom is "The Economist of the communications industry".
subscribe

Navigation