Use already parsed SQL-query in the current thread when determining

was the query REPLACE or LOAD DATA INFILE REPLACE.
This commit is contained in:
jan@hundin.mysql.fi 2004-10-15 11:28:19 +03:00
commit f45aacd9a3
2 changed files with 37 additions and 10 deletions

View file

@ -50,6 +50,15 @@ innobase_invalidate_query_cache(
ulint full_name_len); /* in: full name length where also the null
chars count */
/**********************************************************************
This function returns true if SQL-query in the current thread
is either REPLACE or LOAD DATA INFILE REPLACE.
NOTE that /mysql/innobase/row/row0ins.c must contain the
prototype for this function ! */
ibool
innobase_query_is_replace(void);
/*===========================*/
/*************************************************************************
Creates an insert node struct. */
@ -1524,10 +1533,7 @@ row_ins_scan_sec_index_for_duplicate(
trx = thr_get_trx(thr);
ut_ad(trx);
ptr = dict_scan_to(*(trx->mysql_query_str),
"REPLACE");
if ( ptr && *ptr != '\0') {
if (innobase_query_is_replace()) {
/* The manual defines the REPLACE semantics that it
is either an INSERT or DELETE(s) for duplicate key
@ -1641,9 +1647,7 @@ row_ins_duplicate_error_in_clust(
sure that in roll-forward we get the same duplicate
errors as in original execution */
ptr = dict_scan_to(*(trx->mysql_query_str), "REPLACE");
if (ptr && *ptr != '\0') {
if (innobase_query_is_replace()) {
/* The manual defines the REPLACE semantics
that it is either an INSERT or DELETE(s)
@ -1686,9 +1690,7 @@ row_ins_duplicate_error_in_clust(
+ INSERT. Therefore, we should take X-lock for
duplicates. */
ptr = dict_scan_to(*(trx->mysql_query_str), "REPLACE");
if (ptr && *ptr != '\0') {
if (innobase_query_is_replace()) {
err = row_ins_set_exclusive_rec_lock(
LOCK_REC_NOT_GAP,