Re: Adding NVARCHAR columns causes ct_cancel (ctlib) to hang
Frediano Ziglio <[email protected]>
| Newsgroups | gmane.comp.db.tds.freetds |
|---|---|
| Message-ID | <CAHt6W4fptkVB4teTqG6MJ87Kar1O5JW7Q9BVGZThxEkpyiCQsw@mail.gmail.com> |
2015-01-16 22:17 GMT+00:00 Gregory Holtorf <[email protected]>: > When calling ct_cancel in the freetds library, on unix, ct_cancel() > sometimes takes several minutes to run. This is bad because it usually > takes a few milliseconds to run. This bug works on freetds-0.91 and > freetds-0.64 In order to reproduce the bug, I needed to: > > 1. Run a select statement on a large table > > 2. The table has to contain nvarchar columns. varchar columns do not > trigger the bug. > > 3. The select statement must contain an order by clause > > > select <nvarchar columns> > > from <table name> > > order by <nvarchar column> > > > After completing the select statement, call ct_cancel(). For instance, > before you make another select statement or when you log out. > > ct_cancel(m_pCtConnection, NULL, CS_CANCEL_ALL); > > > When I turn on logging I can see that after I call ct_cancel() for the last > time, it is followed by an absolutely huge number of packets received. I > attached a log file, but I had to force quit the program or else the log > file ends up being several thousand megabytes long. > > Is there a way to fix this issue? Is freetds unable to make select > statements on nvarchar columns or is it something I did in my code? > > > Thanks, > > Greg > Hi, unfortunately is a server problem. Looking at the log FreeTDS correctly send the cancel request but server does not process it in a time fashion so at the end it output all results to client. The only problem can raise from FreeTDS is the conversion from nvarchar(max) -> ntext caused by protocol. You should try with git master version and 7.2 protocol. Frediano