Bryan Pendleton <[EMAIL PROTECTED]> writes: >> Long story short someone who works with the client pointed out that >> the client is sending a QRYROWSET of size "0" when it sends the >> OPNQRY > > Hi Army, > > Page 698 of V.3 says: > > A QRYROWSET value of zero on the OPNQRY and EXCSQLSTT commands instructs > the server to return no rows with the OPNQRYRM for the cursor or result > set. A QRYROWSET value of zero on the CNTQRY command is invalid for > non-rowset cursors and results in the application server generating a > SYNTAXRM with a SYNERRCD value of '15'x (reserved value not allowed). > > I'd say that our current behavior, as you describe it, seems wrong; we should > not be returning any rows when the client has set QRYROWSET to 0 on OPNQRY. > > I think that we should modify the server code for 10.2 so that: > > - on OPNQRY and EXCSQLSTT, we only return rows if QRYROWSET is > 0.
... or if (QRYPRCTYP == LMTBLKPRC && QRYROWSET is not set). > - on CNTQRY, we throw a syntax exception if QRYROWSET is 0 > > I'm quite interested to hear what others think about this. I agree that the current behaviour is wrong and that it should be changed as you describe. I don't have the DB2 ODBC driver, but I ran a couple of tests with the client driver, and this is what it does on OPNQRY: Forward-only/read-only: - no QRYROWSET is sent - QRYPRCTYP = LMTBLKPRC - up to 32 KB of data is pre-fetched Forward-only/updatable: - no QRYROWSET is sent - QRYPRCTYP = FIXROWPRC - doesn't pre-fetch data Scrollable/read-only: - QRYROWSET = 64 - QRYPRCTYP = LMTBLKPRC - min(32 KB, 64 rows) is pre-fetched Scrollable/updatable: - QRYROWSET = 64 - QRYPRCTYP = FIXROWPRC - no pre-fetching Since the client never sends QRYROWSET=0 on OPNQRY, I don't think the client will have this problem. When I look at writeQRYDTA and writeFDODTA in DRDAConnThread, it seems to me that we actually break the DRDA spec in two ways: 1) QRYROWSET=0 has the same effect as QRYROWSET=1 2) For forward-only/read-only result sets, QRYROWSET will be ignored (both on OPNQRY and CNTQRY) - haven't verified this since the client doesn't send QRYROWSET in this case. 1 is causing the reported problem with the ODBC driver. I don't know if 2 is a problem. The client driver never sends an explicit QRYROWSET when the result set is forward-only, but maybe the ODBC driver does. -- Knut Anders