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
bcd16075
Commit
bcd16075
authored
Mar 05, 2021
by
Marko Mäkelä
Browse files
Options
Browse Files
Download
Plain Diff
Merge 10.2 into 10.3
parents
e9b8b76f
545cba13
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
42 additions
and
61 deletions
+42
-61
extra/mariabackup/xtrabackup.cc
extra/mariabackup/xtrabackup.cc
+3
-4
mysql-test/suite/mariabackup/log_page_corruption.result
mysql-test/suite/mariabackup/log_page_corruption.result
+4
-3
mysql-test/suite/mariabackup/log_page_corruption.test
mysql-test/suite/mariabackup/log_page_corruption.test
+11
-7
storage/innobase/handler/ha_innodb.cc
storage/innobase/handler/ha_innodb.cc
+18
-14
storage/innobase/include/row0mysql.h
storage/innobase/include/row0mysql.h
+1
-7
storage/innobase/row/row0mysql.cc
storage/innobase/row/row0mysql.cc
+1
-4
storage/innobase/row/row0sel.cc
storage/innobase/row/row0sel.cc
+4
-22
No files found.
extra/mariabackup/xtrabackup.cc
View file @
bcd16075
...
@@ -4665,13 +4665,12 @@ static bool xtrabackup_backup_func()
...
@@ -4665,13 +4665,12 @@ static bool xtrabackup_backup_func()
log_file_op
=
NULL
;
log_file_op
=
NULL
;
pthread_mutex_destroy
(
&
backup_mutex
);
pthread_mutex_destroy
(
&
backup_mutex
);
pthread_cond_destroy
(
&
scanned_lsn_cond
);
pthread_cond_destroy
(
&
scanned_lsn_cond
);
if
(
opt_log_innodb_page_corruption
&&
!
corrupted_pages
.
empty
())
{
if
(
!
corrupted_pages
.
empty
())
{
ut_ad
(
opt_log_innodb_page_corruption
);
msg
(
"Error: corrupted innodb pages are found and logged to "
msg
(
"Error: corrupted innodb pages are found and logged to "
MB_CORRUPTED_PAGES_FILE
" file"
);
MB_CORRUPTED_PAGES_FILE
" file"
);
return
false
;
}
}
else
return
(
true
);
return
(
true
);
}
}
...
...
mysql-test/suite/mariabackup/log_page_corruption.result
View file @
bcd16075
...
@@ -22,11 +22,12 @@ INSERT INTO t5_corrupted_to_rename VALUES (3), (4), (5), (6), (7), (8), (9);
...
@@ -22,11 +22,12 @@ INSERT INTO t5_corrupted_to_rename VALUES (3), (4), (5), (6), (7), (8), (9);
INSERT INTO t6_corrupted_to_drop VALUES (3), (4), (5), (6), (7), (8), (9);
INSERT INTO t6_corrupted_to_drop VALUES (3), (4), (5), (6), (7), (8), (9);
INSERT INTO t7_corrupted_to_alter VALUES (3), (4), (5), (6), (7), (8), (9);
INSERT INTO t7_corrupted_to_alter VALUES (3), (4), (5), (6), (7), (8), (9);
# Corrupt tables
# Corrupt tables
# Backup must fail due to page corruption
# Backup must
fail due to page corruption
FOUND 1 /Database page corruption detected.*/ in backup.log
FOUND 1 /Database page corruption detected.*/ in backup.log
# "innodb_corrupted_pages" file must not exist
# "innodb_corrupted_pages" file must not exist
# Backup must fail, but "innodb_corrupted_pages" file must be created due to --log-innodb-page-corruption option
# Backup must
not
fail, but "innodb_corrupted_pages" file must be created due to --log-innodb-page-corruption option
FOUND 1 /Database page corruption detected.*/ in backup.log
FOUND 1 /Database page corruption detected.*/ in backup.log
FOUND 1 /completed OK!/ in backup.log
--- "innodb_corrupted_pages" file content: ---
--- "innodb_corrupted_pages" file content: ---
test/t1_corrupted
test/t1_corrupted
6 8 9
6 8 9
...
@@ -42,7 +43,7 @@ test/t7_corrupted_to_alter
...
@@ -42,7 +43,7 @@ test/t7_corrupted_to_alter
INSERT INTO t1_inc_corrupted VALUES (3), (4), (5), (6), (7), (8), (9);
INSERT INTO t1_inc_corrupted VALUES (3), (4), (5), (6), (7), (8), (9);
INSERT INTO t2_inc_corrupted VALUES (3), (4), (5), (6), (7), (8), (9);
INSERT INTO t2_inc_corrupted VALUES (3), (4), (5), (6), (7), (8), (9);
INSERT INTO t3_inc VALUES (3), (4), (5), (6), (7), (8), (9);
INSERT INTO t3_inc VALUES (3), (4), (5), (6), (7), (8), (9);
# Backup must fail, but "innodb_corrupted_pages" file must be created due to --log-innodb-page-corruption option
# Backup must
not
fail, but "innodb_corrupted_pages" file must be created due to --log-innodb-page-corruption option
--- "innodb_corrupted_pages" file content: ---
--- "innodb_corrupted_pages" file content: ---
test/t1_corrupted
test/t1_corrupted
6 8 9
6 8 9
...
...
mysql-test/suite/mariabackup/log_page_corruption.test
View file @
bcd16075
...
@@ -59,7 +59,7 @@ EOF
...
@@ -59,7 +59,7 @@ EOF
--
let
corrupted_pages_file_filt
=
$MYSQLTEST_VARDIR
/
tmp
/
innodb_corrupted_pages_filt
--
let
corrupted_pages_file_filt
=
$MYSQLTEST_VARDIR
/
tmp
/
innodb_corrupted_pages_filt
--
let
perl_result_file
=
$MYSQLTEST_VARDIR
/
tmp
/
perl_result
--
let
perl_result_file
=
$MYSQLTEST_VARDIR
/
tmp
/
perl_result
--
echo
# Backup must fail due to page corruption
--
echo
# Backup must
fail due to page corruption
--
disable_result_log
--
disable_result_log
--
error
1
--
error
1
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
target
-
dir
=
$targetdir
>
$backuplog
;
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
target
-
dir
=
$targetdir
>
$backuplog
;
...
@@ -80,15 +80,19 @@ exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=
...
@@ -80,15 +80,19 @@ exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=
--
let
after_copy_test_t7_corrupted_to_alter
=
ALTER
TABLE
test
.
t7_corrupted_to_alter
ADD
COLUMN
(
d
INT
)
--
let
after_copy_test_t7_corrupted_to_alter
=
ALTER
TABLE
test
.
t7_corrupted_to_alter
ADD
COLUMN
(
d
INT
)
--
let
add_corrupted_page_for_test_t7_corrupted_to_alter
=
3
--
let
add_corrupted_page_for_test_t7_corrupted_to_alter
=
3
--
echo
# Backup must fail, but "innodb_corrupted_pages" file must be created due to --log-innodb-page-corruption option
--
echo
# Backup must
not
fail, but "innodb_corrupted_pages" file must be created due to --log-innodb-page-corruption option
--
disable_result_log
--
disable_result_log
--
error
1
--
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
log
-
innodb
-
page
-
corruption
--
target
-
dir
=
$targetdir
--
dbug
=+
d
,
mariabackup_events
,
mariabackup_inject_code
>
$backuplog
--
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
log
-
innodb
-
page
-
corruption
--
target
-
dir
=
$targetdir
--
dbug
=+
d
,
mariabackup_events
,
mariabackup_inject_code
>
$backuplog
--
enable_result_log
--
enable_result_log
--
let
SEARCH_PATTERN
=
Database
page
corruption
detected
.*
--
let
SEARCH_PATTERN
=
Database
page
corruption
detected
.*
--
let
SEARCH_FILE
=
$backuplog
--
let
SEARCH_FILE
=
$backuplog
--
source
include
/
search_pattern_in_file
.
inc
--
source
include
/
search_pattern_in_file
.
inc
--
let
SEARCH_PATTERN
=
completed
OK
!
--
let
SEARCH_FILE
=
$backuplog
--
source
include
/
search_pattern_in_file
.
inc
--
echo
---
"innodb_corrupted_pages"
file
content
:
---
--
echo
---
"innodb_corrupted_pages"
file
content
:
---
perl
;
perl
;
do
"
$ENV
{
MTR_SUITE_DIR
}
/include/corrupt-page.pl"
;
do
"
$ENV
{
MTR_SUITE_DIR
}
/include/corrupt-page.pl"
;
...
@@ -145,9 +149,8 @@ EOF
...
@@ -145,9 +149,8 @@ EOF
--
let
after_copy_test_t7_inc_corrupted_to_alter
=
ALTER
TABLE
test
.
t7_inc_corrupted_to_alter
ADD
COLUMN
(
d
INT
)
--
let
after_copy_test_t7_inc_corrupted_to_alter
=
ALTER
TABLE
test
.
t7_inc_corrupted_to_alter
ADD
COLUMN
(
d
INT
)
--
let
add_corrupted_page_for_test_t7_inc_corrupted_to_alter
=
3
--
let
add_corrupted_page_for_test_t7_inc_corrupted_to_alter
=
3
--
echo
# Backup must fail, but "innodb_corrupted_pages" file must be created due to --log-innodb-page-corruption option
--
echo
# Backup must
not
fail, but "innodb_corrupted_pages" file must be created due to --log-innodb-page-corruption option
--
disable_result_log
--
disable_result_log
--
error
1
--
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
log
-
innodb
-
page
-
corruption
--
target
-
dir
=
$incdir
--
incremental
-
basedir
=
$targetdir
--
dbug
=+
d
,
mariabackup_events
,
mariabackup_inject_code
>
$backuplog
--
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
log
-
innodb
-
page
-
corruption
--
target
-
dir
=
$incdir
--
incremental
-
basedir
=
$targetdir
--
dbug
=+
d
,
mariabackup_events
,
mariabackup_inject_code
>
$backuplog
--
disable_result_log
--
disable_result_log
...
@@ -161,6 +164,9 @@ EOF
...
@@ -161,6 +164,9 @@ EOF
--
let
SEARCH_PATTERN
=
Database
page
corruption
detected
.*
--
let
SEARCH_PATTERN
=
Database
page
corruption
detected
.*
--
let
SEARCH_FILE
=
$backuplog
--
let
SEARCH_FILE
=
$backuplog
--
source
include
/
search_pattern_in_file
.
inc
--
source
include
/
search_pattern_in_file
.
inc
--
let
SEARCH_PATTERN
=
completed
OK
!
--
source
include
/
search_pattern_in_file
.
inc
--
let
corrupted_pages_file
=
$incdir
/
innodb_corrupted_pages
--
let
corrupted_pages_file
=
$incdir
/
innodb_corrupted_pages
--
echo
---
"innodb_corrupted_pages"
file
content
:
---
--
echo
---
"innodb_corrupted_pages"
file
content
:
---
perl
;
perl
;
...
@@ -260,7 +266,6 @@ EOF
...
@@ -260,7 +266,6 @@ EOF
--
echo
# Full backup with --log-innodb-page-corruption
--
echo
# Full backup with --log-innodb-page-corruption
--
disable_result_log
--
disable_result_log
--
error
1
--
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
log
-
innodb
-
page
-
corruption
--
target
-
dir
=
$targetdir
--
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
log
-
innodb
-
page
-
corruption
--
target
-
dir
=
$targetdir
--
enable_result_log
--
enable_result_log
--
let
corrupted_pages_file
=
$targetdir
/
innodb_corrupted_pages
--
let
corrupted_pages_file
=
$targetdir
/
innodb_corrupted_pages
...
@@ -288,7 +293,6 @@ EOF
...
@@ -288,7 +293,6 @@ EOF
--
echo
# Incremental backup --log-innodb-page-corruption
--
echo
# Incremental backup --log-innodb-page-corruption
--
disable_result_log
--
disable_result_log
--
error
1
--
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
log
-
innodb
-
page
-
corruption
--
target
-
dir
=
$incdir
--
incremental
-
basedir
=
$targetdir
--
dbug
=+
d
,
mariabackup_events
,
mariabackup_inject_code
>
$backuplog
--
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
log
-
innodb
-
page
-
corruption
--
target
-
dir
=
$incdir
--
incremental
-
basedir
=
$targetdir
--
dbug
=+
d
,
mariabackup_events
,
mariabackup_inject_code
>
$backuplog
--
disable_result_log
--
disable_result_log
--
let
corrupted_pages_file
=
$incdir
/
innodb_corrupted_pages
--
let
corrupted_pages_file
=
$incdir
/
innodb_corrupted_pages
...
...
storage/innobase/handler/ha_innodb.cc
View file @
bcd16075
...
@@ -13326,17 +13326,10 @@ innobase_drop_database(
...
@@ -13326,17 +13326,10 @@ innobase_drop_database(
@param[in,out] trx InnoDB data dictionary transaction
@param[in,out] trx InnoDB data dictionary transaction
@param[in] from old table name
@param[in] from old table name
@param[in] to new table name
@param[in] to new table name
@param[in] commit whether to commit trx
@param[in] commit whether to commit trx (and to enforce FOREIGN KEY)
@param[in] use_fk whether to parse and enforce FOREIGN KEY constraints
@return DB_SUCCESS or error code */
@return DB_SUCCESS or error code */
inline
inline
dberr_t
innobase_rename_table
(
trx_t
*
trx
,
const
char
*
from
,
dberr_t
const
char
*
to
,
bool
commit
)
innobase_rename_table
(
trx_t
*
trx
,
const
char
*
from
,
const
char
*
to
,
bool
commit
,
bool
use_fk
)
{
{
dberr_t
error
;
dberr_t
error
;
char
norm_to
[
FN_REFLEN
];
char
norm_to
[
FN_REFLEN
];
...
@@ -13369,6 +13362,9 @@ innobase_rename_table(
...
@@ -13369,6 +13362,9 @@ innobase_rename_table(
Convert lock_wait_timeout unit from second to 250 milliseconds */
Convert lock_wait_timeout unit from second to 250 milliseconds */
long
int
lock_wait_timeout
=
thd_lock_wait_timeout
(
trx
->
mysql_thd
)
*
4
;
long
int
lock_wait_timeout
=
thd_lock_wait_timeout
(
trx
->
mysql_thd
)
*
4
;
if
(
table
!=
NULL
)
{
if
(
table
!=
NULL
)
{
if
(
commit
)
{
dict_stats_wait_bg_to_stop_using_table
(
table
,
trx
);
}
for
(
dict_index_t
*
index
=
dict_table_get_first_index
(
table
);
for
(
dict_index_t
*
index
=
dict_table_get_first_index
(
table
);
index
!=
NULL
;
index
!=
NULL
;
index
=
dict_table_get_next_index
(
index
))
{
index
=
dict_table_get_next_index
(
index
))
{
...
@@ -13382,7 +13378,9 @@ innobase_rename_table(
...
@@ -13382,7 +13378,9 @@ innobase_rename_table(
}
}
}
}
}
}
dict_table_close
(
table
,
TRUE
,
FALSE
);
if
(
!
commit
)
{
dict_table_close
(
table
,
TRUE
,
FALSE
);
}
}
}
/* FTS sync is in progress. We shall timeout this operation */
/* FTS sync is in progress. We shall timeout this operation */
...
@@ -13392,7 +13390,7 @@ innobase_rename_table(
...
@@ -13392,7 +13390,7 @@ innobase_rename_table(
}
}
error
=
row_rename_table_for_mysql
(
norm_from
,
norm_to
,
trx
,
commit
,
error
=
row_rename_table_for_mysql
(
norm_from
,
norm_to
,
trx
,
commit
,
use_fk
);
commit
);
if
(
error
!=
DB_SUCCESS
)
{
if
(
error
!=
DB_SUCCESS
)
{
if
(
error
==
DB_TABLE_NOT_FOUND
if
(
error
==
DB_TABLE_NOT_FOUND
...
@@ -13444,6 +13442,10 @@ innobase_rename_table(
...
@@ -13444,6 +13442,10 @@ innobase_rename_table(
func_exit:
func_exit:
if
(
commit
)
{
if
(
commit
)
{
if
(
table
)
{
table
->
stats_bg_flag
&=
~
BG_STAT_SHOULD_QUIT
;
dict_table_close
(
table
,
TRUE
,
FALSE
);
}
row_mysql_unlock_data_dictionary
(
trx
);
row_mysql_unlock_data_dictionary
(
trx
);
}
}
...
@@ -13498,9 +13500,11 @@ int ha_innobase::truncate()
...
@@ -13498,9 +13500,11 @@ int ha_innobase::truncate()
++
trx
->
will_lock
;
++
trx
->
will_lock
;
trx_set_dict_operation
(
trx
,
TRX_DICT_OP_TABLE
);
trx_set_dict_operation
(
trx
,
TRX_DICT_OP_TABLE
);
row_mysql_lock_data_dictionary
(
trx
);
row_mysql_lock_data_dictionary
(
trx
);
dict_stats_wait_bg_to_stop_using_table
(
ib_table
,
trx
);
int
err
=
convert_error_code_to_mysql
(
int
err
=
convert_error_code_to_mysql
(
innobase_rename_table
(
trx
,
ib_table
->
name
.
m_name
,
temp_name
,
innobase_rename_table
(
trx
,
ib_table
->
name
.
m_name
,
temp_name
,
false
,
false
),
false
),
ib_table
->
flags
,
m_user_thd
);
ib_table
->
flags
,
m_user_thd
);
if
(
err
)
{
if
(
err
)
{
trx_rollback_for_mysql
(
trx
);
trx_rollback_for_mysql
(
trx
);
...
@@ -13583,7 +13587,7 @@ ha_innobase::rename_table(
...
@@ -13583,7 +13587,7 @@ ha_innobase::rename_table(
++
trx
->
will_lock
;
++
trx
->
will_lock
;
trx_set_dict_operation
(
trx
,
TRX_DICT_OP_INDEX
);
trx_set_dict_operation
(
trx
,
TRX_DICT_OP_INDEX
);
dberr_t
error
=
innobase_rename_table
(
trx
,
from
,
to
,
true
,
true
);
dberr_t
error
=
innobase_rename_table
(
trx
,
from
,
to
,
true
);
DEBUG_SYNC
(
thd
,
"after_innobase_rename_table"
);
DEBUG_SYNC
(
thd
,
"after_innobase_rename_table"
);
...
...
storage/innobase/include/row0mysql.h
View file @
bcd16075
/*****************************************************************************
/*****************************************************************************
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 20
19
, MariaDB Corporation.
Copyright (c) 2017, 20
21
, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
the terms of the GNU General Public License as published by the Free Software
...
@@ -799,12 +799,6 @@ struct row_prebuilt_t {
...
@@ -799,12 +799,6 @@ struct row_prebuilt_t {
search key values from MySQL format
search key values from MySQL format
to InnoDB format.*/
to InnoDB format.*/
uint
srch_key_val_len
;
/*!< Size of search key */
uint
srch_key_val_len
;
/*!< Size of search key */
/** Disable prefetch. */
bool
m_no_prefetch
;
/** Return materialized key for secondary index scan */
bool
m_read_virtual_key
;
/** The MySQL table object */
/** The MySQL table object */
TABLE
*
m_mysql_table
;
TABLE
*
m_mysql_table
;
...
...
storage/innobase/row/row0mysql.cc
View file @
bcd16075
/*****************************************************************************
/*****************************************************************************
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2015, 202
0
, MariaDB Corporation.
Copyright (c) 2015, 202
1
, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
the terms of the GNU General Public License as published by the Free Software
...
@@ -963,9 +963,6 @@ row_create_prebuilt(
...
@@ -963,9 +963,6 @@ row_create_prebuilt(
prebuilt
->
fts_doc_id_in_read_set
=
0
;
prebuilt
->
fts_doc_id_in_read_set
=
0
;
prebuilt
->
blob_heap
=
NULL
;
prebuilt
->
blob_heap
=
NULL
;
prebuilt
->
m_no_prefetch
=
false
;
prebuilt
->
m_read_virtual_key
=
false
;
DBUG_RETURN
(
prebuilt
);
DBUG_RETURN
(
prebuilt
);
}
}
...
...
storage/innobase/row/row0sel.cc
View file @
bcd16075
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
Copyright (c) 1997, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 1997, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2008, Google Inc.
Copyright (c) 2008, Google Inc.
Copyright (c) 2015, 202
0
, MariaDB Corporation.
Copyright (c) 2015, 202
1
, MariaDB Corporation.
Portions of this file contain modifications contributed and copyrighted by
Portions of this file contain modifications contributed and copyrighted by
Google, Inc. Those modifications are gratefully acknowledged and are described
Google, Inc. Those modifications are gratefully acknowledged and are described
...
@@ -3081,8 +3081,7 @@ static bool row_sel_store_mysql_rec(
...
@@ -3081,8 +3081,7 @@ static bool row_sel_store_mysql_rec(
search or virtual key read is not requested. */
search or virtual key read is not requested. */
if
(
!
rec_clust
if
(
!
rec_clust
||
!
prebuilt
->
index
->
has_virtual
()
||
!
prebuilt
->
index
->
has_virtual
()
||
(
!
prebuilt
->
read_just_key
||
!
prebuilt
->
read_just_key
)
{
&&
!
prebuilt
->
m_read_virtual_key
))
{
/* Initialize the NULL bit. */
/* Initialize the NULL bit. */
mysql_rec
[
templ
->
mysql_null_byte_offset
]
mysql_rec
[
templ
->
mysql_null_byte_offset
]
|=
(
byte
)
templ
->
mysql_null_bit_mask
;
|=
(
byte
)
templ
->
mysql_null_bit_mask
;
...
@@ -3098,23 +3097,8 @@ static bool row_sel_store_mysql_rec(
...
@@ -3098,23 +3097,8 @@ static bool row_sel_store_mysql_rec(
const
dfield_t
*
dfield
=
dtuple_get_nth_v_field
(
const
dfield_t
*
dfield
=
dtuple_get_nth_v_field
(
vrow
,
col
->
v_pos
);
vrow
,
col
->
v_pos
);
/* If this is a partitioned table, it might request
InnoDB to fill out virtual column data for serach
index key values while other non key columns are also
getting selected. The non-key virtual columns may
not be materialized and we should skip them. */
if
(
dfield_get_type
(
dfield
)
->
mtype
==
DATA_MISSING
)
{
if
(
dfield_get_type
(
dfield
)
->
mtype
==
DATA_MISSING
)
{
#ifdef UNIV_DEBUG
ut_ad
(
"no ha_innopart in MariaDB"
==
0
);
ulint
prefix
;
#endif
/* UNIV_DEBUG */
ut_ad
(
prebuilt
->
m_read_virtual_key
);
/* If it is part of index key the data should
have been materialized. */
ut_ad
(
dict_index_get_nth_col_or_prefix_pos
(
prebuilt
->
index
,
col
->
v_pos
,
false
,
true
,
&
prefix
)
==
ULINT_UNDEFINED
);
continue
;
continue
;
}
}
...
@@ -4298,8 +4282,7 @@ row_search_mvcc(
...
@@ -4298,8 +4282,7 @@ row_search_mvcc(
index key, if this is covered index scan or virtual key read is
index key, if this is covered index scan or virtual key read is
requested. */
requested. */
bool
need_vrow
=
dict_index_has_virtual
(
prebuilt
->
index
)
bool
need_vrow
=
dict_index_has_virtual
(
prebuilt
->
index
)
&&
(
prebuilt
->
read_just_key
&&
prebuilt
->
read_just_key
;
||
prebuilt
->
m_read_virtual_key
);
/* Reset the new record lock info if srv_locks_unsafe_for_binlog
/* Reset the new record lock info if srv_locks_unsafe_for_binlog
is set or session is using a READ COMMITTED isolation level. Then
is set or session is using a READ COMMITTED isolation level. Then
...
@@ -5437,7 +5420,6 @@ row_search_mvcc(
...
@@ -5437,7 +5420,6 @@ row_search_mvcc(
if
((
match_mode
==
ROW_SEL_EXACT
if
((
match_mode
==
ROW_SEL_EXACT
||
prebuilt
->
n_rows_fetched
>=
MYSQL_FETCH_CACHE_THRESHOLD
)
||
prebuilt
->
n_rows_fetched
>=
MYSQL_FETCH_CACHE_THRESHOLD
)
&&
prebuilt
->
select_lock_type
==
LOCK_NONE
&&
prebuilt
->
select_lock_type
==
LOCK_NONE
&&
!
prebuilt
->
m_no_prefetch
&&
!
prebuilt
->
templ_contains_blob
&&
!
prebuilt
->
templ_contains_blob
&&
!
prebuilt
->
clust_index_was_generated
&&
!
prebuilt
->
clust_index_was_generated
&&
!
prebuilt
->
used_in_HANDLER
&&
!
prebuilt
->
used_in_HANDLER
...
...
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