1403
1402
case SQLCOM_UPDATE:
1404
1403
assert(first_table == all_tables && first_table != 0);
1405
if (update_precheck(session, all_tables))
1404
if ((res= update_precheck(session, all_tables)))
1407
1406
assert(select_lex->offset_limit == 0);
1408
1407
unit->set_limit(select_lex);
1409
res= (up_result= mysql_update(session, all_tables,
1410
select_lex->item_list,
1413
select_lex->order_list.elements,
1414
(order_st *) select_lex->order_list.first,
1415
unit->select_limit_cnt,
1416
lex->duplicates, lex->ignore));
1417
/* mysql_update return 2 if we need to switch to multi-update */
1408
res= mysql_update(session, all_tables,
1409
select_lex->item_list,
1412
select_lex->order_list.elements,
1413
(order_st *) select_lex->order_list.first,
1414
unit->select_limit_cnt,
1415
lex->duplicates, lex->ignore);
1421
1417
case SQLCOM_UPDATE_MULTI:
1423
1419
assert(first_table == all_tables && first_table != 0);
1424
/* if we switched from normal update, rights are checked */
1427
if ((res= multi_update_precheck(session, all_tables)))
1433
res= mysql_multi_update_prepare(session);
1420
if ((res= update_precheck(session, all_tables)))
1423
if ((res= mysql_multi_update_prepare(session)))
1441
1426
res= mysql_multi_update(session, all_tables,
1442
1427
&select_lex->item_list,
3341
bool multi_update_precheck(Session *session, TableList *)
3325
bool update_precheck(Session *session, TableList *)
3343
3327
const char *msg= 0;
3344
3328
LEX *lex= session->lex;
3345
3329
SELECT_LEX *select_lex= &lex->select_lex;
3347
if (select_lex->item_list.elements != lex->value_list.elements)
3331
if (session->lex->select_lex.item_list.elements != session->lex->value_list.elements)
3349
3333
my_message(ER_WRONG_VALUE_COUNT, ER(ER_WRONG_VALUE_COUNT), MYF(0));
3353
if (select_lex->order_list.elements)
3355
else if (select_lex->select_limit)
3337
if (session->lex->select_lex.table_list.elements > 1)
3359
my_error(ER_WRONG_USAGE, MYF(0), "UPDATE", msg);
3339
if (select_lex->order_list.elements)
3341
else if (select_lex->select_limit)
3345
my_error(ER_WRONG_USAGE, MYF(0), "UPDATE", msg);
3492
simple UPDATE query pre-check.
3494
@param session Thread handler
3495
@param tables Global table list
3503
bool update_precheck(Session *session, TableList *)
3505
if (session->lex->select_lex.item_list.elements != session->lex->value_list.elements)
3507
my_message(ER_WRONG_VALUE_COUNT, ER(ER_WRONG_VALUE_COUNT), MYF(0));
3515
3479
simple INSERT query pre-check.
3517
3481
@param session Thread handler