affected rows after insert

Ondrej Holecek <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <CACJMB=gYF9QLaQBMHphp53Fq8f1qYwxKUB6Uyjgh92cZFVQHDg@mail.gmail.com>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.