Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
dcc00d2b
Commit
dcc00d2b
authored
Nov 28, 2017
by
Eugene Kosov
Committed by
GitHub
Nov 28, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
IB: combine is_delete, vers_delete into enum [closes #337]
parent
f826f124
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
51 additions
and
51 deletions
+51
-51
storage/innobase/handler/ha_innodb.cc
storage/innobase/handler/ha_innodb.cc
+8
-7
storage/innobase/include/row0upd.h
storage/innobase/include/row0upd.h
+8
-3
storage/innobase/pars/pars0pars.cc
storage/innobase/pars/pars0pars.cc
+3
-3
storage/innobase/row/row0ins.cc
storage/innobase/row/row0ins.cc
+12
-17
storage/innobase/row/row0mysql.cc
storage/innobase/row/row0mysql.cc
+9
-11
storage/innobase/row/row0upd.cc
storage/innobase/row/row0upd.cc
+11
-10
No files found.
storage/innobase/handler/ha_innodb.cc
View file @
dcc00d2b
...
@@ -9168,8 +9168,7 @@ ha_innobase::update_row(
...
@@ -9168,8 +9168,7 @@ ha_innobase::update_row(
}
}
/* This is not a delete */
/* This is not a delete */
m_prebuilt
->
upd_node
->
is_delete
=
FALSE
;
m_prebuilt
->
upd_node
->
is_delete
=
NO_DELETE
;
m_prebuilt
->
upd_node
->
vers_delete
=
false
;
{
{
const
bool
vers_set_fields
const
bool
vers_set_fields
...
@@ -9181,8 +9180,8 @@ ha_innobase::update_row(
...
@@ -9181,8 +9180,8 @@ ha_innobase::update_row(
||
thd_sql_command
(
m_user_thd
)
||
thd_sql_command
(
m_user_thd
)
!=
SQLCOM_ALTER_TABLE
);
!=
SQLCOM_ALTER_TABLE
);
m_prebuilt
->
upd_node
->
vers_delete
=
vers_set_fields
if
(
vers_set_fields
&&
!
vers_ins_row
)
&&
!
vers_ins_row
;
m_prebuilt
->
upd_node
->
is_delete
=
VERSIONED_DELETE
;
innobase_srv_conc_enter_innodb
(
m_prebuilt
);
innobase_srv_conc_enter_innodb
(
m_prebuilt
);
...
@@ -9306,9 +9305,11 @@ ha_innobase::delete_row(
...
@@ -9306,9 +9305,11 @@ ha_innobase::delete_row(
/* This is a delete */
/* This is a delete */
m_prebuilt
->
upd_node
->
is_delete
=
TRUE
;
if
(
table
->
versioned_write
()
&&
table
->
vers_end_field
()
->
is_max
())
{
m_prebuilt
->
upd_node
->
vers_delete
=
table
->
versioned_write
()
m_prebuilt
->
upd_node
->
is_delete
=
VERSIONED_DELETE
;
&&
table
->
vers_end_field
()
->
is_max
();
}
else
{
m_prebuilt
->
upd_node
->
is_delete
=
PLAIN_DELETE
;
}
innobase_srv_conc_enter_innodb
(
m_prebuilt
);
innobase_srv_conc_enter_innodb
(
m_prebuilt
);
...
...
storage/innobase/include/row0upd.h
View file @
dcc00d2b
...
@@ -511,12 +511,19 @@ struct upd_t{
...
@@ -511,12 +511,19 @@ struct upd_t{
};
};
/** Kinds of update operation */
enum
delete_mode_t
{
NO_DELETE
=
0
,
/*!< this operation does not delete */
PLAIN_DELETE
,
/*!< ordinary delete */
VERSIONED_DELETE
/*!< update old and insert a new row */
};
/* Update node structure which also implements the delete operation
/* Update node structure which also implements the delete operation
of a row */
of a row */
struct
upd_node_t
{
struct
upd_node_t
{
que_common_t
common
;
/*!< node type: QUE_NODE_UPDATE */
que_common_t
common
;
/*!< node type: QUE_NODE_UPDATE */
ibool
is_delete
;
/* TRUE if delete, FALSE if update
*/
delete_mode_t
is_delete
;
/*!< kind of DELETE
*/
ibool
searched_update
;
ibool
searched_update
;
/* TRUE if searched update, FALSE if
/* TRUE if searched update, FALSE if
positioned */
positioned */
...
@@ -584,8 +591,6 @@ struct upd_node_t{
...
@@ -584,8 +591,6 @@ struct upd_node_t{
compilation; speeds up execution:
compilation; speeds up execution:
UPD_NODE_NO_ORD_CHANGE and
UPD_NODE_NO_ORD_CHANGE and
UPD_NODE_NO_SIZE_CHANGE, ORed */
UPD_NODE_NO_SIZE_CHANGE, ORed */
/** set sys_trx_end = CUR_TRX_ID */
bool
vers_delete
;
/*----------------------*/
/*----------------------*/
/* Local storage for this graph node */
/* Local storage for this graph node */
ulint
state
;
/*!< node execution state */
ulint
state
;
/*!< node execution state */
...
...
storage/innobase/pars/pars0pars.cc
View file @
dcc00d2b
...
@@ -1085,7 +1085,7 @@ pars_update_statement_start(
...
@@ -1085,7 +1085,7 @@ pars_update_statement_start(
node
=
upd_node_create
(
pars_sym_tab_global
->
heap
);
node
=
upd_node_create
(
pars_sym_tab_global
->
heap
);
node
->
is_delete
=
is_delete
;
node
->
is_delete
=
is_delete
?
PLAIN_DELETE
:
NO_DELETE
;
node
->
table_sym
=
table_sym
;
node
->
table_sym
=
table_sym
;
node
->
col_assign_list
=
col_assign_list
;
node
->
col_assign_list
=
col_assign_list
;
...
@@ -1250,9 +1250,9 @@ pars_update_statement(
...
@@ -1250,9 +1250,9 @@ pars_update_statement(
node
->
select
=
sel_node
;
node
->
select
=
sel_node
;
ut_a
(
!
node
->
is_delete
||
(
node
->
col_assign_list
==
NULL
));
ut_a
(
!
node
->
is_delete
||
(
node
->
col_assign_list
==
NULL
));
ut_a
(
node
->
is_delete
||
(
node
->
col_assign_list
!=
NULL
)
);
ut_a
(
node
->
is_delete
==
PLAIN_DELETE
||
node
->
col_assign_list
!=
NULL
);
if
(
node
->
is_delete
)
{
if
(
node
->
is_delete
==
PLAIN_DELETE
)
{
node
->
cmpl_info
=
0
;
node
->
cmpl_info
=
0
;
}
else
{
}
else
{
pars_process_assign_list
(
node
);
pars_process_assign_list
(
node
);
...
...
storage/innobase/row/row0ins.cc
View file @
dcc00d2b
...
@@ -429,8 +429,7 @@ row_ins_cascade_ancestor_updates_table(
...
@@ -429,8 +429,7 @@ row_ins_cascade_ancestor_updates_table(
upd_node
=
static_cast
<
upd_node_t
*>
(
parent
);
upd_node
=
static_cast
<
upd_node_t
*>
(
parent
);
if
(
upd_node
->
table
==
table
&&
!
upd_node
->
is_delete
if
(
upd_node
->
table
==
table
&&
!
upd_node
->
is_delete
)
{
&&
!
upd_node
->
vers_delete
)
{
return
(
TRUE
);
return
(
TRUE
);
}
}
...
@@ -975,8 +974,6 @@ row_ins_foreign_fill_virtual(
...
@@ -975,8 +974,6 @@ row_ins_foreign_fill_virtual(
innobase_init_vc_templ
(
index
->
table
);
innobase_init_vc_templ
(
index
->
table
);
}
}
bool
is_delete
=
node
->
is_delete
||
node
->
vers_delete
;
for
(
ulint
i
=
0
;
i
<
n_v_fld
;
i
++
)
{
for
(
ulint
i
=
0
;
i
<
n_v_fld
;
i
++
)
{
dict_v_col_t
*
col
=
dict_table_get_nth_v_col
(
dict_v_col_t
*
col
=
dict_table_get_nth_v_col
(
...
@@ -1008,14 +1005,14 @@ row_ins_foreign_fill_virtual(
...
@@ -1008,14 +1005,14 @@ row_ins_foreign_fill_virtual(
upd_field_set_v_field_no
(
upd_field
,
i
,
index
);
upd_field_set_v_field_no
(
upd_field
,
i
,
index
);
if
(
is_delete
if
(
node
->
is_delete
?
(
foreign
->
type
&
DICT_FOREIGN_ON_DELETE_SET_NULL
)
?
(
foreign
->
type
&
DICT_FOREIGN_ON_DELETE_SET_NULL
)
:
(
foreign
->
type
&
DICT_FOREIGN_ON_UPDATE_SET_NULL
))
{
:
(
foreign
->
type
&
DICT_FOREIGN_ON_UPDATE_SET_NULL
))
{
dfield_set_null
(
&
upd_field
->
new_val
);
dfield_set_null
(
&
upd_field
->
new_val
);
}
}
if
(
!
is_delete
if
(
!
node
->
is_delete
&&
(
foreign
->
type
&
DICT_FOREIGN_ON_UPDATE_CASCADE
))
{
&&
(
foreign
->
type
&
DICT_FOREIGN_ON_UPDATE_CASCADE
))
{
dfield_t
*
new_vfield
=
innobase_get_computed_value
(
dfield_t
*
new_vfield
=
innobase_get_computed_value
(
...
@@ -1108,9 +1105,7 @@ row_ins_foreign_check_on_constraint(
...
@@ -1108,9 +1105,7 @@ row_ins_foreign_check_on_constraint(
node
=
static_cast
<
upd_node_t
*>
(
thr
->
run_node
);
node
=
static_cast
<
upd_node_t
*>
(
thr
->
run_node
);
bool
is_delete
=
node
->
is_delete
||
node
->
vers_delete
;
if
(
node
->
is_delete
&&
0
==
(
foreign
->
type
if
(
is_delete
&&
0
==
(
foreign
->
type
&
(
DICT_FOREIGN_ON_DELETE_CASCADE
&
(
DICT_FOREIGN_ON_DELETE_CASCADE
|
DICT_FOREIGN_ON_DELETE_SET_NULL
)))
{
|
DICT_FOREIGN_ON_DELETE_SET_NULL
)))
{
...
@@ -1121,7 +1116,7 @@ row_ins_foreign_check_on_constraint(
...
@@ -1121,7 +1116,7 @@ row_ins_foreign_check_on_constraint(
DBUG_RETURN
(
DB_ROW_IS_REFERENCED
);
DBUG_RETURN
(
DB_ROW_IS_REFERENCED
);
}
}
if
(
!
is_delete
&&
0
==
(
foreign
->
type
if
(
!
node
->
is_delete
&&
0
==
(
foreign
->
type
&
(
DICT_FOREIGN_ON_UPDATE_CASCADE
&
(
DICT_FOREIGN_ON_UPDATE_CASCADE
|
DICT_FOREIGN_ON_UPDATE_SET_NULL
)))
{
|
DICT_FOREIGN_ON_UPDATE_SET_NULL
)))
{
...
@@ -1150,11 +1145,11 @@ row_ins_foreign_check_on_constraint(
...
@@ -1150,11 +1145,11 @@ row_ins_foreign_check_on_constraint(
cascade
->
foreign
=
foreign
;
cascade
->
foreign
=
foreign
;
if
(
is_delete
if
(
node
->
is_delete
&&
(
foreign
->
type
&
DICT_FOREIGN_ON_DELETE_CASCADE
))
{
&&
(
foreign
->
type
&
DICT_FOREIGN_ON_DELETE_CASCADE
))
{
cascade
->
is_delete
=
TRU
E
;
cascade
->
is_delete
=
PLAIN_DELET
E
;
}
else
{
}
else
{
cascade
->
is_delete
=
FALS
E
;
cascade
->
is_delete
=
NO_DELET
E
;
if
(
foreign
->
n_fields
>
cascade
->
update_n_fields
)
{
if
(
foreign
->
n_fields
>
cascade
->
update_n_fields
)
{
/* We have to make the update vector longer */
/* We have to make the update vector longer */
...
@@ -1289,7 +1284,7 @@ row_ins_foreign_check_on_constraint(
...
@@ -1289,7 +1284,7 @@ row_ins_foreign_check_on_constraint(
clust_index
,
tmp_heap
);
clust_index
,
tmp_heap
);
}
}
if
(
is_delete
if
(
node
->
is_delete
?
(
foreign
->
type
&
DICT_FOREIGN_ON_DELETE_SET_NULL
)
?
(
foreign
->
type
&
DICT_FOREIGN_ON_DELETE_SET_NULL
)
:
(
foreign
->
type
&
DICT_FOREIGN_ON_UPDATE_SET_NULL
))
{
:
(
foreign
->
type
&
DICT_FOREIGN_ON_UPDATE_SET_NULL
))
{
...
@@ -1351,7 +1346,7 @@ row_ins_foreign_check_on_constraint(
...
@@ -1351,7 +1346,7 @@ row_ins_foreign_check_on_constraint(
goto
nonstandard_exit_func
;
goto
nonstandard_exit_func
;
}
}
}
}
}
else
if
(
table
->
fts
&&
cascade
->
is_delete
)
{
}
else
if
(
table
->
fts
&&
cascade
->
is_delete
==
PLAIN_DELETE
)
{
/* DICT_FOREIGN_ON_DELETE_CASCADE case */
/* DICT_FOREIGN_ON_DELETE_CASCADE case */
for
(
i
=
0
;
i
<
foreign
->
n_fields
;
i
++
)
{
for
(
i
=
0
;
i
<
foreign
->
n_fields
;
i
++
)
{
if
(
table
->
fts
&&
dict_table_is_fts_column
(
if
(
table
->
fts
&&
dict_table_is_fts_column
(
...
@@ -1369,7 +1364,7 @@ row_ins_foreign_check_on_constraint(
...
@@ -1369,7 +1364,7 @@ row_ins_foreign_check_on_constraint(
}
}
}
}
if
(
!
is_delete
if
(
!
node
->
is_delete
&&
(
foreign
->
type
&
DICT_FOREIGN_ON_UPDATE_CASCADE
))
{
&&
(
foreign
->
type
&
DICT_FOREIGN_ON_UPDATE_CASCADE
))
{
/* Build the appropriate update vector which sets changing
/* Build the appropriate update vector which sets changing
...
@@ -1709,7 +1704,7 @@ row_ins_check_foreign_constraint(
...
@@ -1709,7 +1704,7 @@ row_ins_check_foreign_constraint(
if
(
que_node_get_type
(
thr
->
run_node
)
==
QUE_NODE_UPDATE
)
{
if
(
que_node_get_type
(
thr
->
run_node
)
==
QUE_NODE_UPDATE
)
{
upd_node
=
static_cast
<
upd_node_t
*>
(
thr
->
run_node
);
upd_node
=
static_cast
<
upd_node_t
*>
(
thr
->
run_node
);
if
(
!
(
upd_node
->
is_delete
)
&&
!
(
upd_node
->
vers_delete
)
&&
upd_node
->
foreign
==
foreign
)
{
if
(
!
(
upd_node
->
is_delete
)
&&
upd_node
->
foreign
==
foreign
)
{
/* If a cascaded update is done as defined by a
/* If a cascaded update is done as defined by a
foreign key constraint, do not check that
foreign key constraint, do not check that
constraint for the child row. In ON UPDATE CASCADE
constraint for the child row. In ON UPDATE CASCADE
...
...
storage/innobase/row/row0mysql.cc
View file @
dcc00d2b
...
@@ -1711,7 +1711,7 @@ row_create_update_node_for_mysql(
...
@@ -1711,7 +1711,7 @@ row_create_update_node_for_mysql(
node
=
upd_node_create
(
heap
);
node
=
upd_node_create
(
heap
);
node
->
in_mysql_interface
=
TRUE
;
node
->
in_mysql_interface
=
TRUE
;
node
->
is_delete
=
FALS
E
;
node
->
is_delete
=
NO_DELET
E
;
node
->
searched_update
=
FALSE
;
node
->
searched_update
=
FALSE
;
node
->
select
=
NULL
;
node
->
select
=
NULL
;
node
->
pcur
=
btr_pcur_create_for_mysql
();
node
->
pcur
=
btr_pcur_create_for_mysql
();
...
@@ -1806,7 +1806,7 @@ row_fts_update_or_delete(
...
@@ -1806,7 +1806,7 @@ row_fts_update_or_delete(
ut_a
(
dict_table_has_fts_index
(
node
->
table
));
ut_a
(
dict_table_has_fts_index
(
node
->
table
));
/* Deletes are simple; get them out of the way first. */
/* Deletes are simple; get them out of the way first. */
if
(
node
->
is_delete
)
{
if
(
node
->
is_delete
==
PLAIN_DELETE
)
{
/* A delete affects all FTS indexes, so we pass NULL */
/* A delete affects all FTS indexes, so we pass NULL */
fts_trx_add_op
(
trx
,
table
,
old_doc_id
,
FTS_DELETE
,
NULL
);
fts_trx_add_op
(
trx
,
table
,
old_doc_id
,
FTS_DELETE
,
NULL
);
}
else
{
}
else
{
...
@@ -1893,7 +1893,6 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
...
@@ -1893,7 +1893,6 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
upd_cascade_t
*
new_upd_nodes
;
upd_cascade_t
*
new_upd_nodes
;
upd_cascade_t
*
processed_cascades
;
upd_cascade_t
*
processed_cascades
;
bool
got_s_lock
=
false
;
bool
got_s_lock
=
false
;
const
bool
vers_delete
=
prebuilt
->
upd_node
->
vers_delete
;
DBUG_ENTER
(
"row_update_for_mysql"
);
DBUG_ENTER
(
"row_update_for_mysql"
);
...
@@ -1936,7 +1935,7 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
...
@@ -1936,7 +1935,7 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
}
}
node
=
prebuilt
->
upd_node
;
node
=
prebuilt
->
upd_node
;
const
bool
is_delete
=
node
->
is_delete
;
const
bool
is_delete
=
node
->
is_delete
==
PLAIN_DELETE
;
ut_ad
(
node
->
table
==
table
);
ut_ad
(
node
->
table
==
table
);
if
(
node
->
cascade_heap
)
{
if
(
node
->
cascade_heap
)
{
...
@@ -2006,7 +2005,7 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
...
@@ -2006,7 +2005,7 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
bool
vers_set_fields
=
prebuilt
->
versioned_write
bool
vers_set_fields
=
prebuilt
->
versioned_write
&&
node
->
table
->
versioned
()
&&
node
->
table
->
versioned
()
&&
(
node
->
is_delete
?
node
->
vers_delete
&&
(
node
->
is_delete
?
node
->
is_delete
==
VERSIONED_DELETE
:
node
->
update
->
affects_versioned
());
:
node
->
update
->
affects_versioned
());
run_again:
run_again:
if
(
vers_set_fields
)
{
if
(
vers_set_fields
)
{
...
@@ -2019,11 +2018,10 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
...
@@ -2019,11 +2018,10 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
upd_field_t
*
ufield
;
upd_field_t
*
ufield
;
dict_col_t
*
col
;
dict_col_t
*
col
;
unsigned
col_idx
;
unsigned
col_idx
;
if
(
node
->
is_delete
||
vers_delete
)
{
if
(
node
->
is_delete
)
{
ufield
=
&
uvect
->
fields
[
0
];
ufield
=
&
uvect
->
fields
[
0
];
uvect
->
n_fields
=
0
;
uvect
->
n_fields
=
0
;
node
->
is_delete
=
false
;
node
->
is_delete
=
VERSIONED_DELETE
;
node
->
vers_delete
=
true
;
col_idx
=
table
->
vers_end
;
col_idx
=
table
->
vers_end
;
}
else
{
}
else
{
ut_ad
(
uvect
->
n_fields
<
table
->
n_cols
);
ut_ad
(
uvect
->
n_fields
<
table
->
n_cols
);
...
@@ -2145,8 +2143,8 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
...
@@ -2145,8 +2143,8 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
cascade_upd_nodes
->
pop_front
();
cascade_upd_nodes
->
pop_front
();
thr
->
fk_cascade_depth
++
;
thr
->
fk_cascade_depth
++
;
vers_set_fields
=
node
->
table
->
versioned
()
vers_set_fields
=
node
->
table
->
versioned
()
&&
(
node
->
is_delete
&&
(
node
->
is_delete
==
PLAIN_DELETE
||
node
->
update
->
affects_versioned
());
||
node
->
update
->
affects_versioned
());
goto
run_again
;
goto
run_again
;
}
}
...
@@ -2169,7 +2167,7 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
...
@@ -2169,7 +2167,7 @@ row_update_for_mysql(row_prebuilt_t* prebuilt)
node
=
*
i
;
node
=
*
i
;
if
(
node
->
is_delete
)
{
if
(
node
->
is_delete
==
PLAIN_DELETE
)
{
/* Not protected by dict_table_stats_lock() for
/* Not protected by dict_table_stats_lock() for
performance reasons, we would rather get garbage
performance reasons, we would rather get garbage
in stat_n_rows (which is just an estimate anyway)
in stat_n_rows (which is just an estimate anyway)
...
...
storage/innobase/row/row0upd.cc
View file @
dcc00d2b
...
@@ -272,7 +272,6 @@ row_upd_check_references_constraints(
...
@@ -272,7 +272,6 @@ row_upd_check_references_constraints(
if
(
foreign
->
referenced_index
==
index
if
(
foreign
->
referenced_index
==
index
&&
(
node
->
is_delete
&&
(
node
->
is_delete
||
node
->
vers_delete
||
row_upd_changes_first_fields_binary
(
||
row_upd_changes_first_fields_binary
(
entry
,
index
,
node
->
update
,
entry
,
index
,
node
->
update
,
foreign
->
n_fields
)))
{
foreign
->
n_fields
)))
{
...
@@ -413,7 +412,6 @@ wsrep_row_upd_check_foreign_constraints(
...
@@ -413,7 +412,6 @@ wsrep_row_upd_check_foreign_constraints(
if
(
foreign
->
foreign_index
==
index
if
(
foreign
->
foreign_index
==
index
&&
(
node
->
is_delete
&&
(
node
->
is_delete
||
node
->
vers_delete
||
row_upd_changes_first_fields_binary
(
||
row_upd_changes_first_fields_binary
(
entry
,
index
,
node
->
update
,
entry
,
index
,
node
->
update
,
foreign
->
n_fields
)))
{
foreign
->
n_fields
)))
{
...
@@ -2229,11 +2227,13 @@ row_upd_store_row(
...
@@ -2229,11 +2227,13 @@ row_upd_store_row(
NULL
,
NULL
,
NULL
,
ext
,
node
->
heap
);
NULL
,
NULL
,
NULL
,
ext
,
node
->
heap
);
if
(
node
->
table
->
n_v_cols
)
{
if
(
node
->
table
->
n_v_cols
)
{
row_upd_store_v_row
(
node
,
node
->
is_delete
?
NULL
:
node
->
update
,
row_upd_store_v_row
(
thd
,
mysql_table
);
node
,
node
->
is_delete
==
PLAIN_DELETE
?
NULL
:
node
->
update
,
thd
,
mysql_table
);
}
}
if
(
node
->
is_delete
)
{
if
(
node
->
is_delete
==
PLAIN_DELETE
)
{
node
->
upd_row
=
NULL
;
node
->
upd_row
=
NULL
;
node
->
upd_ext
=
NULL
;
node
->
upd_ext
=
NULL
;
}
else
{
}
else
{
...
@@ -2508,7 +2508,7 @@ row_upd_sec_index_entry(
...
@@ -2508,7 +2508,7 @@ row_upd_sec_index_entry(
btr_pcur_close
(
&
pcur
);
btr_pcur_close
(
&
pcur
);
mtr_commit
(
&
mtr
);
mtr_commit
(
&
mtr
);
if
(
node
->
is_delete
||
err
!=
DB_SUCCESS
)
{
if
(
node
->
is_delete
==
PLAIN_DELETE
||
err
!=
DB_SUCCESS
)
{
goto
func_exit
;
goto
func_exit
;
}
}
...
@@ -2961,7 +2961,7 @@ row_upd_del_mark_clust_rec(
...
@@ -2961,7 +2961,7 @@ row_upd_del_mark_clust_rec(
ut_ad
(
node
);
ut_ad
(
node
);
ut_ad
(
dict_index_is_clust
(
index
));
ut_ad
(
dict_index_is_clust
(
index
));
ut_ad
(
node
->
is_delete
);
ut_ad
(
node
->
is_delete
==
PLAIN_DELETE
);
pcur
=
node
->
pcur
;
pcur
=
node
->
pcur
;
btr_cur
=
btr_pcur_get_btr_cur
(
pcur
);
btr_cur
=
btr_pcur_get_btr_cur
(
pcur
);
...
@@ -3113,7 +3113,8 @@ row_upd_clust_step(
...
@@ -3113,7 +3113,8 @@ row_upd_clust_step(
then we have to free the file segments of the index tree associated
then we have to free the file segments of the index tree associated
with the index */
with the index */
if
(
node
->
is_delete
&&
node
->
table
->
id
==
DICT_INDEXES_ID
)
{
if
(
node
->
is_delete
==
PLAIN_DELETE
&&
node
->
table
->
id
==
DICT_INDEXES_ID
)
{
ut_ad
(
!
dict_index_is_online_ddl
(
index
));
ut_ad
(
!
dict_index_is_online_ddl
(
index
));
...
@@ -3157,7 +3158,7 @@ row_upd_clust_step(
...
@@ -3157,7 +3158,7 @@ row_upd_clust_step(
/* NOTE: the following function calls will also commit mtr */
/* NOTE: the following function calls will also commit mtr */
if
(
node
->
is_delete
)
{
if
(
node
->
is_delete
==
PLAIN_DELETE
)
{
err
=
row_upd_del_mark_clust_rec
(
err
=
row_upd_del_mark_clust_rec
(
node
,
index
,
offsets
,
thr
,
referenced
,
foreign
,
&
mtr
);
node
,
index
,
offsets
,
thr
,
referenced
,
foreign
,
&
mtr
);
...
@@ -3262,7 +3263,7 @@ row_upd(
...
@@ -3262,7 +3263,7 @@ row_upd(
/* We do not get the cmpl_info value from the MySQL
/* We do not get the cmpl_info value from the MySQL
interpreter: we must calculate it on the fly: */
interpreter: we must calculate it on the fly: */
if
(
node
->
is_delete
if
(
node
->
is_delete
==
PLAIN_DELETE
||
row_upd_changes_some_index_ord_field_binary
(
||
row_upd_changes_some_index_ord_field_binary
(
node
->
table
,
node
->
update
))
{
node
->
table
,
node
->
update
))
{
node
->
cmpl_info
=
0
;
node
->
cmpl_info
=
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment