[erlang-questions] Erlang ODBC App returns wrong for multi-statement request

Tuan Cao tuanbeo0502@REDACTED
Fri Dec 16 19:33:25 CET 2016


Hi Erlang community,


When running multi-statement request in which the first statement returns
zero rows, the Erlang ODBC App returns wrong result.

To reproduce:

1> odbc:start().

ok

2> {ok, Ref}=odbc:connect("Driver=ODBC Driver 13 for SQL
Server;Server=XXX;Database=YYY;Uid=ZZZ;Pwd=PPP;Encrypt=yes;TrustServerCertificate=no;Connection
Timeout=30;", []).

{ok,<0.40.0>}

3> odbc:sql_query(Ref, "create table z1(i integer);").

{updated,undefined}

4> odbc:sql_query(Ref, "insert into z1 select * from z1 where 1<0; select
1;").

{updated,0}


As you can see, odbc_sql_query only returns the first result, and ignore
all subsequence results.

Looking at the source code, I found that this code block swallow
subsequence result:



/* OTP-5759, fails when 0 rows deleted */
if (result == SQL_NO_DATA_FOUND) {
msg = encode_result(state);
} else {
/* Handle multiple result sets */
do {
ei_x_encode_list_header(&dynamic_buffer(state), 1);
msg = encode_result(state);
/* We don't want to continue if an error occured */
if (msg.length != 0) {
break;
}
msg = more_result_sets(state);
/* We don't want to continue if an error occured */
if (msg.length != 0) {
break;
}
} while (exists_more_result_sets(state));
ei_x_encode_empty_list(&dynamic_buffer(state));
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20161216/65fc6f66/attachment.htm>


More information about the erlang-questions mailing list