[ODBC-117] Connector shouldn't deploy MariaDB bulk functionality for statements other than INSERT and UPDATE Created: 2017-09-29  Updated: 2017-10-06  Resolved: 2017-09-30

Status: Closed
Project: MariaDB Connector/ODBC
Component/s: None
Affects Version/s: 3.0.1
Fix Version/s: 3.0.2

Type: Bug Priority: Major
Reporter: Lawrin Novitsky Assignee: Lawrin Novitsky
Resolution: Fixed Votes: 0
Labels: None
Environment:

10.2 server



 Description   

Server supports prepared statements bulk operations for INSERT and UPDATE, and not for DELETE, in particular. That might change with new releases, but currently that will result in error, if application tries to DELETE with parameters array.

Code to repeat the problem
ODBC_TEST(t_bulk_delete)
{
SQLINTEGER a[3]=

{1, 3, 2}

;
SQLCHAR val[7], insert_val[][7]=

{"first", "third", "second"}

;
SQLLEN val_indicator[]=

{SQL_NTS, SQL_NTS, SQL_NTS}

, id_ind[]=

{4, 4, 4}

;

OK_SIMPLE_STMT(Stmt, "DROP TABLE IF EXISTS t_bulk_delete");
OK_SIMPLE_STMT(Stmt, "CREATE TABLE t_bulk_delete (id INT unsigned not null primary key, val VARCHAR(20) not null)");
/OK_SIMPLE_STMT(Stmt, "INSERT INTO t_bulk_delete VALUES(1, 'first'), (2, 'second'), (3, 'third')");/

CHECK_STMT_RC(Stmt, SQLFreeStmt(Stmt, SQL_CLOSE));

CHECK_STMT_RC(Stmt, SQLSetStmtAttr(Stmt, SQL_ATTR_PARAMSET_SIZE,
(SQLPOINTER)3, 0));
CHECK_STMT_RC(Stmt, SQLBindParameter(Stmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, a, 0, id_ind));
CHECK_STMT_RC(Stmt, SQLBindParameter(Stmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, insert_val, 0, val_indicator));

OK_SIMPLE_STMT(Stmt, "INSERT INTO t_bulk_delete VALUES(?, ?)");

CHECK_STMT_RC(Stmt, SQLSetStmtAttr(Stmt, SQL_ATTR_PARAMSET_SIZE,
(SQLPOINTER)2, 0));
OK_SIMPLE_STMT(Stmt, "DELETE FROM t_bulk_delete WHERE id=?");

OK_SIMPLE_STMT(Stmt, "SELECT id, val FROM t_bulk_insert");

CHECK_STMT_RC(Stmt, SQLFetch(Stmt));
is_num(my_fetch_int(Stmt, 1), 2);
IS_STR(my_fetch_str(Stmt, val, 1), "second", 7);

EXPECT_STMT(Stmt, SQLFetch(Stmt), SQL_NO_DATA);

CHECK_STMT_RC(Stmt, SQLFreeStmt(Stmt, SQL_CLOSE));

CHECK_STMT_RC(Stmt, SQLSetStmtAttr(Stmt, SQL_ATTR_ROW_ARRAY_SIZE,
(SQLPOINTER)1, 0));

OK_SIMPLE_STMT(Stmt, "DROP TABLE IF EXISTS t_bulk_delete");

return OK;
}



 Comments   
Comment by Lawrin Novitsky [ 2017-09-30 ]

The fix has been pushed as part of d6ce17918492e8fdb1d6203dae1c1b787403402d commit. Testcase had been pushed separately(previous commit)

Generated at Thu Feb 08 03:26:21 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.