Skip to content
Permalink
Browse files
MDEV-17036: BULK with replace doesn't take the first parameter in acc…
…ount

INSERT and REPLACE served by the same function, so flags (and processing) should be the same.
  • Loading branch information
sanja-byelkin committed Apr 25, 2019
1 parent b2dbc78 commit 3dffdee
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 1 deletion.
@@ -609,7 +609,8 @@ void init_update_queries(void)
CF_CAN_GENERATE_ROW_EVENTS |
CF_OPTIMIZER_TRACE |
CF_CAN_BE_EXPLAINED |
CF_INSERTS_DATA | CF_SP_BULK_SAFE;
CF_INSERTS_DATA | CF_SP_BULK_SAFE |
CF_SP_BULK_OPTIMIZED;
sql_command_flags[SQLCOM_REPLACE_SELECT]= CF_CHANGES_DATA | CF_REEXECUTION_FRAGILE |
CF_CAN_GENERATE_ROW_EVENTS |
CF_OPTIMIZER_TRACE |
@@ -19743,6 +19743,66 @@ static void test_bulk_delete()
rc= mysql_query(mysql, "DROP TABLE t1");
myquery(rc);
}

static void test_bulk_replace()
{
int rc;
MYSQL_STMT *stmt;
MYSQL_BIND bind[2];
MYSQL_ROW row;
int i,
id[]= {1, 2, 3, 4},
val[]= {1, 1, 1, 1},
count= sizeof(id)/sizeof(id[0]);
MYSQL_RES *result;

rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1");
myquery(rc);
rc= mysql_query(mysql, "CREATE TABLE t1 (id int not null primary key, active int)");
myquery(rc);
rc= mysql_query(mysql, "insert into t1 values (1, 0), (2, 0), (3, 0)");
myquery(rc);
verify_affected_rows(3);

stmt= mysql_stmt_init(mysql);
rc= mysql_stmt_prepare(stmt, "replace into t1 (id, active) values (?, ?)", -1);
check_execute(stmt, rc);

memset(bind, 0, sizeof(bind));
bind[0].buffer_type = MYSQL_TYPE_LONG;
bind[0].buffer = (void *)id;
bind[0].buffer_length = 0;
bind[1].buffer_type = MYSQL_TYPE_LONG;
bind[1].buffer = (void *)val;
bind[1].buffer_length = 0;

mysql_stmt_attr_set(stmt, STMT_ATTR_ARRAY_SIZE, (void*)&count);
rc= mysql_stmt_bind_param(stmt, bind);
check_execute(stmt, rc);

rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);

mysql_stmt_close(stmt);

rc= mysql_query(mysql, "SELECT active FROM t1");
myquery(rc);

result= mysql_store_result(mysql);
mytest(result);

i= 0;
while ((row= mysql_fetch_row(result)))
{
i++;
DIE_IF(atoi(row[0]) != 1);
}
DIE_IF(i != 4);
mysql_free_result(result);

rc= mysql_query(mysql, "DROP TABLE t1");
myquery(rc);
}
#endif

static struct my_tests_st my_tests[]= {
@@ -20026,6 +20086,7 @@ static struct my_tests_st my_tests[]= {
{ "test_mdev12579", test_mdev12579 },
#ifndef EMBEDDED_LIBRARY
{ "test_bulk_delete", test_bulk_delete },
{ "test_bulk_replace", test_bulk_replace },
#endif
{ 0, 0 }
};

0 comments on commit 3dffdee

Please sign in to comment.