Re: affected rows after insert
Ondrej Holecek <[email protected]>
| Newsgroups | gmane.comp.db.tds.freetds |
|---|---|
| Message-ID | <CACJMB=iBks3U8V1iRoRL5Kc0dUaizrjAKR6jvcFcYDxT6iaLMA@mail.gmail.com> |
Hi, I made a test with the same code but sybase lib and it works like expected. It seems there is a bug in FreeTDS. Could you please check my patch? thx, Ondrej On Tue, Jun 2, 2015 at 10:49 AM, Ondrej Holecek <[email protected]> wrote: > Hi, > > I have a problem obtaining number of affected rows while inserting. > The problem occurs when I pass the values by ct_param() call. > So, this command order works well: > > ct_cmd_alloc() > ct_command(CS_LANG_CMD, "INSERT INTO test (number) VALUES(5)") > ct_send() > ct_result() // the result type is CS_CMD_DONE so I can call... > ct_res_info(CS_ROW_COUNT) // as expected 1 row affected > > > but when I call it like this, It skips CS_CMD_DONE, so I can't read > the affected rows number. > > ct_cmd_alloc() > ct_command(CS_LANG_CMD, "INSERT INTO test (number) VALUES(@par1)") > ct_param("@par1", 1) > ct_send() > ct_result() // the result type is CS_END_RESULT > // can't do anything here :-( > > > The row is inserted in both cases correctly just in the second case I > can't read the number of affected rows. > > I did some ctlib debugging and I created the patch which would fix > this behavior. However, I just changed the code blindly (based on the > debugging) not knowing what is the real purpose of the case. > > > in ct_result() function I changed the case _CS_RES_INIT: > > case _CS_RES_INIT: /* commalindlnd had no result set */ > if (tds->rows_affected > 0) { > *result_type = CS_CMD_DONE; > cmd->results_state = _CS_RES_INIT; > return CS_SUCCEED; > } > break; > > now it seems with the patch it works correctly. But I have no idea if > it is really the correct way. > > Any ideas? > > Thanks, > > Ondrej