mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-17036: BULK with replace doesn't take the first parameter in account
INSERT and REPLACE served by the same function, so flags (and processing) should be the same.
This commit is contained in:
@ -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 }
|
||||
};
|
||||
|
Reference in New Issue
Block a user