summaryrefslogtreecommitdiff
path: root/innobase
diff options
context:
space:
mode:
authorunknown <heikki@donna.mysql.fi>2001-03-07 17:22:27 +0200
committerunknown <heikki@donna.mysql.fi>2001-03-07 17:22:27 +0200
commit1b738d5c0960cb6b7d64dc8d5f049697aabf125e (patch)
tree325abe4be4489b4c59d98839f9bf2c29cacefb94 /innobase
parent9b8ddd1a6d0afc8ab9fa3d0f808b53781b9bab1f (diff)
downloadmariadb-git-1b738d5c0960cb6b7d64dc8d5f049697aabf125e.tar.gz
row0mysql.c Fix REPLACE problem, non-latin1 charset bug
row0upd.c Fix REPLACE problem, non-latin1 charset bug rem0cmp.c Fix REPLACE problem, non-latin1 charset bug innobase/rem/rem0cmp.c: Fix REPLACE problem, non-latin1 charset bug innobase/row/row0mysql.c: Fix REPLACE problem, non-latin1 charset bug innobase/row/row0upd.c: Fix REPLACE problem, non-latin1 charset bug
Diffstat (limited to 'innobase')
-rw-r--r--innobase/rem/rem0cmp.c1
-rw-r--r--innobase/row/row0mysql.c37
-rw-r--r--innobase/row/row0upd.c2
3 files changed, 15 insertions, 25 deletions
diff --git a/innobase/rem/rem0cmp.c b/innobase/rem/rem0cmp.c
index edf3903cd51..d5208f2d486 100644
--- a/innobase/rem/rem0cmp.c
+++ b/innobase/rem/rem0cmp.c
@@ -171,6 +171,7 @@ cmp_whole_field(
}
return(0);
+ case DATA_VARMYSQL:
case DATA_MYSQL:
return(innobase_mysql_cmp(
(int)(type->prtype & ~DATA_NOT_NULL),
diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c
index 10ddf381166..117a3b02228 100644
--- a/innobase/row/row0mysql.c
+++ b/innobase/row/row0mysql.c
@@ -634,31 +634,21 @@ row_update_for_mysql(
clust_index = dict_table_get_first_index(table);
- if (prebuilt->in_update_remember_pos) {
- if (prebuilt->index == clust_index) {
- btr_pcur_copy_stored_position(node->pcur,
- prebuilt->pcur);
- } else {
- btr_pcur_copy_stored_position(node->pcur,
- prebuilt->clust_pcur);
- }
-
- ut_a(node->pcur->rel_pos == BTR_PCUR_ON);
-
- goto skip_cursor_search;
- } else {
- /* MySQL seems to call rnd_pos before updating each row it
- has cached: we can get the correct cursor position from
- prebuilt->pcur; NOTE that we cannot build the row reference
- from mysql_rec if the clustered index was automatically
- generated for the table: MySQL does not know anything about
- the row id used as the clustered index key */
-
+ if (prebuilt->pcur->btr_cur.index == clust_index) {
btr_pcur_copy_stored_position(node->pcur, prebuilt->pcur);
- ut_a(node->pcur->rel_pos == BTR_PCUR_ON);
-
- goto skip_cursor_search;
+ } else {
+ btr_pcur_copy_stored_position(node->pcur, prebuilt->clust_pcur);
}
+
+ ut_a(node->pcur->rel_pos == BTR_PCUR_ON);
+
+ /* MySQL seems to call rnd_pos before updating each row it
+ has cached: we can get the correct cursor position from
+ prebuilt->pcur; NOTE that we cannot build the row reference
+ from mysql_rec if the clustered index was automatically
+ generated for the table: MySQL does not know anything about
+ the row id used as the clustered index key */
+
#ifdef notdefined
/* We have to search for the correct cursor position */
@@ -691,7 +681,6 @@ row_update_for_mysql(
mem_heap_free(heap);
#endif
-skip_cursor_search:
savept = trx_savept_take(trx);
thr = que_fork_get_first_thr(prebuilt->upd_graph);
diff --git a/innobase/row/row0upd.c b/innobase/row/row0upd.c
index c0f1035046b..10dd64b8b1a 100644
--- a/innobase/row/row0upd.c
+++ b/innobase/row/row0upd.c
@@ -1196,7 +1196,7 @@ row_upd(
}
}
- if (node->cmpl_info & UPD_NODE_NO_ORD_CHANGE) {
+ if (!node->is_delete && (node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) {
goto function_exit;
}