postgresql-interfaces / psqlodbc

Other
16 stars 15 forks source link

SQLRowCount set affected row numbers is incorrect when use SQLBindParameter and SQLSetStmtAttr for SQL_ATTR_PARAMSET_SIZE #34

Open Oliver0624 opened 4 months ago

Oliver0624 commented 4 months ago

Hi,

I'm tring to insert and update a lot of records using SQLBindParameter and SQLSetStmtAttr, but SQLRowsCount returned record number affected by ONLY the LAST SINGLE SQL STATEMENT.

Here is my code sequence.

  1. status = SQLBindParameter(cda, parm_pos, param_type, ftype, mapped_sqltype, temp_column_size, sqltype == SQL_TYPE_TIMESTAMP ? odbc_date_scale : 0,
    v.p_v, buflen, v.p_len);

  2. status = SQLSetStmtAttr(cda, SQL_ATTR_PARAMSET_SIZE, temp_iters, SQL_NTS);

  3. status = SQLExecute(cda);

  4. SQLRowCount(cda, affected_num);

    I inserted 1000 records into the table, but affected_num set by SQLRowCount is 1

I searched the source code for this issue, and found in CC_send_query_append (connection.c:2062)

image

My question is : Is this line (connection.cpp : 2062) has a bug? I think it may use '+=' rather than '='. lack of libpg.dll and headers, I cannot compile the source code and check my idea.


July 23,2024 OK. I've found how to fix this bug, and have checked it on my computer. ( It's not so easy to fix this bug ) Can I send a pull request ?