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
7c584d82
Commit
7c584d82
authored
Apr 06, 2022
by
Marko Mäkelä
Browse files
Options
Browse Files
Download
Plain Diff
Merge 10.2 into 10.3
parents
2d2c3da8
75b9014f
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
84 additions
and
306 deletions
+84
-306
extra/innochecksum.cc
extra/innochecksum.cc
+22
-22
include/my_time.h
include/my_time.h
+4
-1
mysql-test/main/ps.result
mysql-test/main/ps.result
+22
-0
mysql-test/main/ps.test
mysql-test/main/ps.test
+13
-0
mysql-test/suite/encryption/r/innochecksum.result
mysql-test/suite/encryption/r/innochecksum.result
+1
-1
mysql-test/suite/encryption/t/innochecksum.test
mysql-test/suite/encryption/t/innochecksum.test
+2
-2
mysql-test/suite/mariabackup/full_backup.result
mysql-test/suite/mariabackup/full_backup.result
+1
-0
mysql-test/suite/mariabackup/full_backup.test
mysql-test/suite/mariabackup/full_backup.test
+8
-1
sql/ha_partition.h
sql/ha_partition.h
+1
-5
sql/handler.cc
sql/handler.cc
+1
-188
sql/handler.h
sql/handler.h
+1
-85
sql/sql_select.cc
sql/sql_select.cc
+6
-0
storage/federatedx/ha_federatedx.cc
storage/federatedx/ha_federatedx.cc
+1
-1
storage/innobase/fil/fil0fil.cc
storage/innobase/fil/fil0fil.cc
+1
-0
No files found.
extra/innochecksum.cc
View file @
7c584d82
/*
/*
Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2014, 202
1
, MariaDB Corporation.
Copyright (c) 2014, 202
2
, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
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
it under the terms of the GNU General Public License as published by
...
@@ -884,7 +884,7 @@ parse_page(
...
@@ -884,7 +884,7 @@ parse_page(
is_leaf
=
(
!*
(
const
uint16
*
)
(
page
+
(
PAGE_HEADER
+
PAGE_LEVEL
)));
is_leaf
=
(
!*
(
const
uint16
*
)
(
page
+
(
PAGE_HEADER
+
PAGE_LEVEL
)));
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Index page
\t\t\t
|"
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Index page
\t\t\t
|"
"
\t
index id=%llu,"
,
cur_page_num
,
id
);
"
\t
index id=%llu,"
,
cur_page_num
,
id
);
...
@@ -937,7 +937,7 @@ parse_page(
...
@@ -937,7 +937,7 @@ parse_page(
index
.
total_data_bytes
+=
data_bytes
;
index
.
total_data_bytes
+=
data_bytes
;
index
.
pages_in_size_range
[
size_range_id
]
++
;
index
.
pages_in_size_range
[
size_range_id
]
++
;
}
}
}
else
{
}
else
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Encrypted Index page
\t\t\t
|"
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Encrypted Index page
\t\t\t
|"
"
\t
key_version "
UINT32PF
",%s
\n
"
,
cur_page_num
,
key_version
,
str
);
"
\t
key_version "
UINT32PF
",%s
\n
"
,
cur_page_num
,
key_version
,
str
);
}
}
...
@@ -948,7 +948,7 @@ parse_page(
...
@@ -948,7 +948,7 @@ parse_page(
page_type
.
n_fil_page_undo_log
++
;
page_type
.
n_fil_page_undo_log
++
;
undo_page_type
=
mach_read_from_2
(
page
+
undo_page_type
=
mach_read_from_2
(
page
+
TRX_UNDO_PAGE_HDR
+
TRX_UNDO_PAGE_TYPE
);
TRX_UNDO_PAGE_HDR
+
TRX_UNDO_PAGE_TYPE
);
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Undo log page
\t\t\t
|"
,
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Undo log page
\t\t\t
|"
,
cur_page_num
);
cur_page_num
);
}
}
...
@@ -958,7 +958,7 @@ parse_page(
...
@@ -958,7 +958,7 @@ parse_page(
switch
(
undo_page_type
)
{
switch
(
undo_page_type
)
{
case
TRX_UNDO_ACTIVE
:
case
TRX_UNDO_ACTIVE
:
page_type
.
n_undo_state_active
++
;
page_type
.
n_undo_state_active
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
", %s"
,
"Undo log of "
fprintf
(
file
,
", %s"
,
"Undo log of "
"an active transaction"
);
"an active transaction"
);
}
}
...
@@ -966,7 +966,7 @@ parse_page(
...
@@ -966,7 +966,7 @@ parse_page(
case
TRX_UNDO_CACHED
:
case
TRX_UNDO_CACHED
:
page_type
.
n_undo_state_cached
++
;
page_type
.
n_undo_state_cached
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
", %s"
,
"Page is "
fprintf
(
file
,
", %s"
,
"Page is "
"cached for quick reuse"
);
"cached for quick reuse"
);
}
}
...
@@ -974,7 +974,7 @@ parse_page(
...
@@ -974,7 +974,7 @@ parse_page(
case
TRX_UNDO_TO_PURGE
:
case
TRX_UNDO_TO_PURGE
:
page_type
.
n_undo_state_to_purge
++
;
page_type
.
n_undo_state_to_purge
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
", %s"
,
"Will be "
fprintf
(
file
,
", %s"
,
"Will be "
"freed in purge when all undo"
"freed in purge when all undo"
"data in it is removed"
);
"data in it is removed"
);
...
@@ -983,7 +983,7 @@ parse_page(
...
@@ -983,7 +983,7 @@ parse_page(
case
TRX_UNDO_PREPARED
:
case
TRX_UNDO_PREPARED
:
page_type
.
n_undo_state_prepared
++
;
page_type
.
n_undo_state_prepared
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
", %s"
,
"Undo log of "
fprintf
(
file
,
", %s"
,
"Undo log of "
"an prepared transaction"
);
"an prepared transaction"
);
}
}
...
@@ -993,14 +993,14 @@ parse_page(
...
@@ -993,14 +993,14 @@ parse_page(
page_type
.
n_undo_state_other
++
;
page_type
.
n_undo_state_other
++
;
break
;
break
;
}
}
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
", %s
\n
"
,
str
);
fprintf
(
file
,
", %s
\n
"
,
str
);
}
}
break
;
break
;
case
FIL_PAGE_INODE
:
case
FIL_PAGE_INODE
:
page_type
.
n_fil_page_inode
++
;
page_type
.
n_fil_page_inode
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Inode page
\t\t\t
|"
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Inode page
\t\t\t
|"
"
\t
%s
\n
"
,
cur_page_num
,
str
);
"
\t
%s
\n
"
,
cur_page_num
,
str
);
}
}
...
@@ -1008,7 +1008,7 @@ parse_page(
...
@@ -1008,7 +1008,7 @@ parse_page(
case
FIL_PAGE_IBUF_FREE_LIST
:
case
FIL_PAGE_IBUF_FREE_LIST
:
page_type
.
n_fil_page_ibuf_free_list
++
;
page_type
.
n_fil_page_ibuf_free_list
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Insert buffer free list"
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Insert buffer free list"
" page
\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
" page
\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
}
}
...
@@ -1016,7 +1016,7 @@ parse_page(
...
@@ -1016,7 +1016,7 @@ parse_page(
case
FIL_PAGE_TYPE_ALLOCATED
:
case
FIL_PAGE_TYPE_ALLOCATED
:
page_type
.
n_fil_page_type_allocated
++
;
page_type
.
n_fil_page_type_allocated
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Freshly allocated "
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Freshly allocated "
"page
\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
"page
\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
}
}
...
@@ -1024,7 +1024,7 @@ parse_page(
...
@@ -1024,7 +1024,7 @@ parse_page(
case
FIL_PAGE_IBUF_BITMAP
:
case
FIL_PAGE_IBUF_BITMAP
:
page_type
.
n_fil_page_ibuf_bitmap
++
;
page_type
.
n_fil_page_ibuf_bitmap
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Insert Buffer "
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Insert Buffer "
"Bitmap
\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
"Bitmap
\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
}
}
...
@@ -1032,7 +1032,7 @@ parse_page(
...
@@ -1032,7 +1032,7 @@ parse_page(
case
FIL_PAGE_TYPE_SYS
:
case
FIL_PAGE_TYPE_SYS
:
page_type
.
n_fil_page_type_sys
++
;
page_type
.
n_fil_page_type_sys
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
System page
\t\t\t
|"
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
System page
\t\t\t
|"
"
\t
%s
\n
"
,
cur_page_num
,
str
);
"
\t
%s
\n
"
,
cur_page_num
,
str
);
}
}
...
@@ -1040,7 +1040,7 @@ parse_page(
...
@@ -1040,7 +1040,7 @@ parse_page(
case
FIL_PAGE_TYPE_TRX_SYS
:
case
FIL_PAGE_TYPE_TRX_SYS
:
page_type
.
n_fil_page_type_trx_sys
++
;
page_type
.
n_fil_page_type_trx_sys
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Transaction system "
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Transaction system "
"page
\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
"page
\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
}
}
...
@@ -1048,7 +1048,7 @@ parse_page(
...
@@ -1048,7 +1048,7 @@ parse_page(
case
FIL_PAGE_TYPE_FSP_HDR
:
case
FIL_PAGE_TYPE_FSP_HDR
:
page_type
.
n_fil_page_type_fsp_hdr
++
;
page_type
.
n_fil_page_type_fsp_hdr
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
File Space "
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
File Space "
"Header
\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
"Header
\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
}
}
...
@@ -1056,7 +1056,7 @@ parse_page(
...
@@ -1056,7 +1056,7 @@ parse_page(
case
FIL_PAGE_TYPE_XDES
:
case
FIL_PAGE_TYPE_XDES
:
page_type
.
n_fil_page_type_xdes
++
;
page_type
.
n_fil_page_type_xdes
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Extent descriptor "
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Extent descriptor "
"page
\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
"page
\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
}
}
...
@@ -1064,7 +1064,7 @@ parse_page(
...
@@ -1064,7 +1064,7 @@ parse_page(
case
FIL_PAGE_TYPE_BLOB
:
case
FIL_PAGE_TYPE_BLOB
:
page_type
.
n_fil_page_type_blob
++
;
page_type
.
n_fil_page_type_blob
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
BLOB page
\t\t\t
|
\t
%s
\n
"
,
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
BLOB page
\t\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
cur_page_num
,
str
);
}
}
...
@@ -1072,7 +1072,7 @@ parse_page(
...
@@ -1072,7 +1072,7 @@ parse_page(
case
FIL_PAGE_TYPE_ZBLOB
:
case
FIL_PAGE_TYPE_ZBLOB
:
page_type
.
n_fil_page_type_zblob
++
;
page_type
.
n_fil_page_type_zblob
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Compressed BLOB "
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Compressed BLOB "
"page
\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
"page
\t\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
}
}
...
@@ -1080,7 +1080,7 @@ parse_page(
...
@@ -1080,7 +1080,7 @@ parse_page(
case
FIL_PAGE_TYPE_ZBLOB2
:
case
FIL_PAGE_TYPE_ZBLOB2
:
page_type
.
n_fil_page_type_zblob2
++
;
page_type
.
n_fil_page_type_zblob2
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Subsequent Compressed "
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Subsequent Compressed "
"BLOB page
\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
"BLOB page
\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
}
}
...
@@ -1088,7 +1088,7 @@ parse_page(
...
@@ -1088,7 +1088,7 @@ parse_page(
case
FIL_PAGE_PAGE_COMPRESSED
:
case
FIL_PAGE_PAGE_COMPRESSED
:
page_type
.
n_fil_page_type_page_compressed
++
;
page_type
.
n_fil_page_type_page_compressed
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Page compressed "
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Page compressed "
"page
\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
"page
\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
}
}
...
@@ -1096,7 +1096,7 @@ parse_page(
...
@@ -1096,7 +1096,7 @@ parse_page(
case
FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED
:
case
FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED
:
page_type
.
n_fil_page_type_page_compressed_encrypted
++
;
page_type
.
n_fil_page_type_page_compressed_encrypted
++
;
if
(
page_type_dump
)
{
if
(
file
)
{
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Page compressed encrypted "
fprintf
(
file
,
"#::"
UINT32PF
"
\t\t
|
\t\t
Page compressed encrypted "
"page
\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
"page
\t
|
\t
%s
\n
"
,
cur_page_num
,
str
);
}
}
...
...
include/my_time.h
View file @
7c584d82
...
@@ -217,9 +217,12 @@ static inline void my_time_trunc(MYSQL_TIME *ltime, uint decimals)
...
@@ -217,9 +217,12 @@ static inline void my_time_trunc(MYSQL_TIME *ltime, uint decimals)
{
{
ltime
->
second_part
-=
my_time_fraction_remainder
(
ltime
->
second_part
,
decimals
);
ltime
->
second_part
-=
my_time_fraction_remainder
(
ltime
->
second_part
,
decimals
);
}
}
#ifdef _WIN32
#define suseconds_t long
#endif
static
inline
void
my_timeval_trunc
(
struct
timeval
*
tv
,
uint
decimals
)
static
inline
void
my_timeval_trunc
(
struct
timeval
*
tv
,
uint
decimals
)
{
{
tv
->
tv_usec
-=
my_time_fraction_remainder
(
tv
->
tv_usec
,
decimals
);
tv
->
tv_usec
-=
(
suseconds_t
)
my_time_fraction_remainder
(
tv
->
tv_usec
,
decimals
);
}
}
...
...
mysql-test/main/ps.result
View file @
7c584d82
...
@@ -5564,6 +5564,28 @@ a
...
@@ -5564,6 +5564,28 @@ a
DEALLOCATE PREPARE stmt;
DEALLOCATE PREPARE stmt;
DROP VIEW v1;
DROP VIEW v1;
DROP TABLE t1;
DROP TABLE t1;
#
# MDEV-19631: Assertion `0' failed in st_select_lex_unit::optimize or
# different plan upon 2nd execution of PS with EXPLAIN
#
CREATE TABLE t1 (a INT);
PREPARE stmt FROM 'EXPLAIN SELECT * FROM t1 HAVING 6 IN ( SELECT 6 UNION SELECT 5 )';
EXECUTE stmt;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 system NULL NULL NULL NULL 0 Const row not found
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
3 UNION NULL NULL NULL NULL NULL NULL NULL No tables used
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
# Without the patch the second execution of the 'stmt' prepared statement
# would result in server crash.
EXECUTE stmt;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 system NULL NULL NULL NULL 0 Const row not found
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
3 UNION NULL NULL NULL NULL NULL NULL NULL No tables used
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
DEALLOCATE PREPARE stmt;
DROP TABLE t1;
# End of 10.2 tests
# End of 10.2 tests
#
#
#
#
...
...
mysql-test/main/ps.test
View file @
7c584d82
...
@@ -5013,6 +5013,19 @@ DEALLOCATE PREPARE stmt;
...
@@ -5013,6 +5013,19 @@ DEALLOCATE PREPARE stmt;
DROP
VIEW
v1
;
DROP
VIEW
v1
;
DROP
TABLE
t1
;
DROP
TABLE
t1
;
--
echo
#
--
echo
# MDEV-19631: Assertion `0' failed in st_select_lex_unit::optimize or
--
echo
# different plan upon 2nd execution of PS with EXPLAIN
--
echo
#
CREATE
TABLE
t1
(
a
INT
);
PREPARE
stmt
FROM
'EXPLAIN SELECT * FROM t1 HAVING 6 IN ( SELECT 6 UNION SELECT 5 )'
;
EXECUTE
stmt
;
--
echo
# Without the patch the second execution of the 'stmt' prepared statement
--
echo
# would result in server crash.
EXECUTE
stmt
;
# Cleanup
DEALLOCATE
PREPARE
stmt
;
DROP
TABLE
t1
;
--
echo
# End of 10.2 tests
--
echo
# End of 10.2 tests
--
echo
#
--
echo
#
...
...
mysql-test/suite/encryption/r/innochecksum.result
View file @
7c584d82
...
@@ -7,7 +7,7 @@ CREATE TABLE t3 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB ROW_FOR
...
@@ -7,7 +7,7 @@ CREATE TABLE t3 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB ROW_FOR
CREATE TABLE t4 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB PAGE_COMPRESSED=1;
CREATE TABLE t4 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB PAGE_COMPRESSED=1;
CREATE TABLE t5 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB PAGE_COMPRESSED=1 ENCRYPTED=YES ENCRYPTION_KEY_ID=4;
CREATE TABLE t5 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB PAGE_COMPRESSED=1 ENCRYPTED=YES ENCRYPTION_KEY_ID=4;
CREATE TABLE t6 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB;
CREATE TABLE t6 (a INT AUTO_INCREMENT PRIMARY KEY, b TEXT) ENGINE=InnoDB;
# Run innochecksum on t1
# Run innochecksum on t1
, check -S does not cause crash for encrypted file
# Run innochecksum on t2
# Run innochecksum on t2
# Run innochecksum on t3
# Run innochecksum on t3
# Run innochecksum on t4
# Run innochecksum on t4
...
...
mysql-test/suite/encryption/t/innochecksum.test
View file @
7c584d82
...
@@ -55,9 +55,9 @@ let MYSQLD_DATADIR=`select @@datadir`;
...
@@ -55,9 +55,9 @@ let MYSQLD_DATADIR=`select @@datadir`;
--
source
include
/
shutdown_mysqld
.
inc
--
source
include
/
shutdown_mysqld
.
inc
--
echo
# Run innochecksum on t1
--
disable_result_log
--
disable_result_log
--
exec
$INNOCHECKSUM
$t1_IBD
--
echo
# Run innochecksum on t1, check -S does not cause crash for encrypted file
--
exec
$INNOCHECKSUM
-
S
$t1_IBD
--
echo
# Run innochecksum on t2
--
echo
# Run innochecksum on t2
...
...
mysql-test/suite/mariabackup/full_backup.result
View file @
7c584d82
CREATE TABLE t(i INT) ENGINE INNODB;
CREATE TABLE t(i INT) ENGINE INNODB;
INSERT INTO t VALUES(1);
INSERT INTO t VALUES(1);
# xtrabackup backup
# xtrabackup backup
NOT FOUND /InnoDB: Allocated tablespace ID/ in backup.log
INSERT INTO t VALUES(2);
INSERT INTO t VALUES(2);
# xtrabackup prepare
# xtrabackup prepare
# shutdown server
# shutdown server
...
...
mysql-test/suite/mariabackup/full_backup.test
View file @
7c584d82
...
@@ -4,11 +4,18 @@ CREATE TABLE t(i INT) ENGINE INNODB;
...
@@ -4,11 +4,18 @@ CREATE TABLE t(i INT) ENGINE INNODB;
INSERT
INTO
t
VALUES
(
1
);
INSERT
INTO
t
VALUES
(
1
);
echo
# xtrabackup backup;
echo
# xtrabackup backup;
let
$targetdir
=
$MYSQLTEST_VARDIR
/
tmp
/
backup
;
let
$targetdir
=
$MYSQLTEST_VARDIR
/
tmp
/
backup
;
--
let
$backup_log
=
$MYSQLTEST_VARDIR
/
tmp
/
backup
.
log
--
disable_result_log
--
disable_result_log
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
target
-
dir
=
$targetdir
;
exec
$XTRABACKUP
--
defaults
-
file
=
$MYSQLTEST_VARDIR
/
my
.
cnf
--
backup
--
target
-
dir
=
$targetdir
>
$backup_log
2
>&
1
;
--
enable_result_log
--
enable_result_log
# The following warning must not appear after MDEV-27343 fix
--
let
SEARCH_PATTERN
=
InnoDB
:
Allocated
tablespace
ID
--
let
SEARCH_FILE
=
$backup_log
--
source
include
/
search_pattern_in_file
.
inc
--
remove_file
$backup_log
INSERT
INTO
t
VALUES
(
2
);
INSERT
INTO
t
VALUES
(
2
);
...
...
sql/ha_partition.h
View file @
7c584d82
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
/*
/*
Copyright (c) 2005, 2012, Oracle and/or its affiliates.
Copyright (c) 2005, 2012, Oracle and/or its affiliates.
Copyright (c) 2009, 202
1
, MariaDB Corporation.
Copyright (c) 2009, 202
2
, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
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
it under the terms of the GNU General Public License as published by
...
@@ -1093,10 +1093,6 @@ class ha_partition :public handler
...
@@ -1093,10 +1093,6 @@ class ha_partition :public handler
NOTE: This cannot be cached since it can depend on TRANSACTION ISOLATION
NOTE: This cannot be cached since it can depend on TRANSACTION ISOLATION
LEVEL which is dynamic, see bug#39084.
LEVEL which is dynamic, see bug#39084.
HA_READ_RND_SAME:
Not currently used. (Means that the handler supports the rnd_same() call)
(MyISAM, HEAP)
HA_TABLE_SCAN_ON_INDEX:
HA_TABLE_SCAN_ON_INDEX:
Used to avoid scanning full tables on an index. If this flag is set then
Used to avoid scanning full tables on an index. If this flag is set then
the handler always has a primary key (hidden if not defined) and this
the handler always has a primary key (hidden if not defined) and this
...
...
sql/handler.cc
View file @
7c584d82
/* Copyright (c) 2000, 2016, Oracle and/or its affiliates.
/* Copyright (c) 2000, 2016, Oracle and/or its affiliates.
Copyright (c) 2009, 20
19
, MariaDB Corporation.
Copyright (c) 2009, 20
22
, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
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
it under the terms of the GNU General Public License as published by
...
@@ -2703,11 +2703,6 @@ double handler::keyread_time(uint index, uint ranges, ha_rows rows)
...
@@ -2703,11 +2703,6 @@ double handler::keyread_time(uint index, uint ranges, ha_rows rows)
len
*
rows
/
(
stats
.
block_size
+
1
)
/
TIME_FOR_COMPARE
;
len
*
rows
/
(
stats
.
block_size
+
1
)
/
TIME_FOR_COMPARE
;
}
}
void
**
handler
::
ha_data
(
THD
*
thd
)
const
{
return
thd_ha_data
(
thd
,
ht
);
}
THD
*
handler
::
ha_thd
(
void
)
const
THD
*
handler
::
ha_thd
(
void
)
const
{
{
DBUG_ASSERT
(
!
table
||
!
table
->
in_use
||
table
->
in_use
==
current_thd
);
DBUG_ASSERT
(
!
table
||
!
table
->
in_use
||
table
->
in_use
==
current_thd
);
...
@@ -6714,17 +6709,6 @@ void handler::unlock_shared_ha_data()
...
@@ -6714,17 +6709,6 @@ void handler::unlock_shared_ha_data()
mysql_mutex_unlock
(
&
table_share
->
LOCK_ha_data
);
mysql_mutex_unlock
(
&
table_share
->
LOCK_ha_data
);
}
}
/** @brief
Dummy function which accept information about log files which is not need
by handlers
*/
void
signal_log_not_needed
(
struct
handlerton
,
char
*
log_file
)
{
DBUG_ENTER
(
"signal_log_not_needed"
);
DBUG_PRINT
(
"enter"
,
(
"logfile '%s'"
,
log_file
));
DBUG_VOID_RETURN
;
}
void
handler
::
set_lock_type
(
enum
thr_lock_type
lock
)
void
handler
::
set_lock_type
(
enum
thr_lock_type
lock
)
{
{
table
->
reginfo
.
lock_type
=
lock
;
table
->
reginfo
.
lock_type
=
lock
;
...
@@ -6827,177 +6811,6 @@ void ha_fake_trx_id(THD *thd)
...
@@ -6827,177 +6811,6 @@ void ha_fake_trx_id(THD *thd)
#endif
/* WITH_WSREP */
#endif
/* WITH_WSREP */
#ifdef TRANS_LOG_MGM_EXAMPLE_CODE
/*
Example of transaction log management functions based on assumption that logs
placed into a directory
*/
#include <my_dir.h>
#include <my_sys.h>
int
example_of_iterator_using_for_logs_cleanup
(
handlerton
*
hton
)
{
void
*
buffer
;
int
res
=
1
;
struct
handler_iterator
iterator
;
struct
handler_log_file_data
data
;
if
(
!
hton
->
create_iterator
)
return
1
;
/* iterator creator is not supported */
if
((
*
hton
->
create_iterator
)(
hton
,
HA_TRANSACTLOG_ITERATOR
,
&
iterator
)
!=
HA_ITERATOR_OK
)
{
/* error during creation of log iterator or iterator is not supported */
return
1
;
}
while
((
*
iterator
.
next
)(
&
iterator
,
(
void
*
)
&
data
)
==
0
)
{
printf
(
"%s
\n
"
,
data
.
filename
.
str
);
if
(
data
.
status
==
HA_LOG_STATUS_FREE
&&
mysql_file_delete
(
INSTRUMENT_ME
,
data
.
filename
.
str
,
MYF
(
MY_WME
)))
goto
err
;
}
res
=
0
;
err:
(
*
iterator
.
destroy
)(
&
iterator
);
return
res
;
}
/*
Here we should get info from handler where it save logs but here is
just example, so we use constant.
IMHO FN_ROOTDIR ("/") is safe enough for example, because nobody has
rights on it except root and it consist of directories only at lest for
*nix (sorry, can't find windows-safe solution here, but it is only example).
*/
#define fl_dir FN_ROOTDIR
/** @brief
Dummy function to return log status should be replaced by function which
really detect the log status and check that the file is a log of this
handler.
*/
enum
log_status
fl_get_log_status
(
char
*
log
)
{
MY_STAT
stat_buff
;
if
(
mysql_file_stat
(
INSTRUMENT_ME
,
log
,
&
stat_buff
,
MYF
(
0
)))
return
HA_LOG_STATUS_INUSE
;
return
HA_LOG_STATUS_NOSUCHLOG
;
}
struct
fl_buff
{
LEX_STRING
*
names
;
enum
log_status
*
statuses
;
uint32
entries
;
uint32
current
;
};
int
fl_log_iterator_next
(
struct
handler_iterator
*
iterator
,
void
*
iterator_object
)
{
struct
fl_buff
*
buff
=
(
struct
fl_buff
*
)
iterator
->
buffer
;
struct
handler_log_file_data
*
data
=
(
struct
handler_log_file_data
*
)
iterator_object
;
if
(
buff
->
current
>=
buff
->
entries
)
return
1
;
data
->
filename
=
buff
->
names
[
buff
->
current
];
data
->
status
=
buff
->
statuses
[
buff
->
current
];
buff
->
current
++
;
return
0
;
}
void
fl_log_iterator_destroy
(
struct
handler_iterator
*
iterator
)
{
my_free
(
iterator
->
buffer
);
}
/** @brief
returns buffer, to be assigned in handler_iterator struct
*/
enum
handler_create_iterator_result
fl_log_iterator_buffer_init
(
struct
handler_iterator
*
iterator
)
{
MY_DIR
*
dirp
;
struct
fl_buff
*
buff
;
char
*
name_ptr
;
uchar
*
ptr
;
FILEINFO
*
file
;
uint32
i
;
/* to be able to make my_free without crash in case of error */
iterator
->
buffer
=
0
;
if
(
!
(
dirp
=
my_dir
(
fl_dir
,
MYF
(
MY_THREAD_SPECIFIC
))))
{
return
HA_ITERATOR_ERROR
;
}
if
((
ptr
=
(
uchar
*
)
my_malloc
(
ALIGN_SIZE
(
sizeof
(
fl_buff
))
+
((
ALIGN_SIZE
(
sizeof
(
LEX_STRING
))
+
sizeof
(
enum
log_status
)
+
+
FN_REFLEN
+
1
)
*
(
uint
)
dirp
->
number_off_files
),
MYF
(
MY_THREAD_SPECIFIC
)))
==
0
)
{
return
HA_ITERATOR_ERROR
;
}
buff
=
(
struct
fl_buff
*
)
ptr
;
buff
->
entries
=
buff
->
current
=
0
;
ptr
=
ptr
+
(
ALIGN_SIZE
(
sizeof
(
fl_buff
)));
buff
->
names
=
(
LEX_STRING
*
)
(
ptr
);
ptr
=
ptr
+
((
ALIGN_SIZE
(
sizeof
(
LEX_STRING
))
*
(
uint
)
dirp
->
number_off_files
));
buff
->
statuses
=
(
enum
log_status
*
)(
ptr
);
name_ptr
=
(
char
*
)(
ptr
+
(
sizeof
(
enum
log_status
)
*
(
uint
)
dirp
->
number_off_files
));
for
(
i
=
0
;
i
<
(
uint
)
dirp
->
number_off_files
;
i
++
)
{
enum
log_status
st
;
file
=
dirp
->
dir_entry
+
i
;
if
((
file
->
name
[
0
]
==
'.'
&&
((
file
->
name
[
1
]
==
'.'
&&
file
->
name
[
2
]
==
'\0'
)
||
file
->
name
[
1
]
==
'\0'
)))
continue
;
if
((
st
=
fl_get_log_status
(
file
->
name
))
==
HA_LOG_STATUS_NOSUCHLOG
)
continue
;
name_ptr
=
strxnmov
(
buff
->
names
[
buff
->
entries
].
str
=
name_ptr
,
FN_REFLEN
,
fl_dir
,
file
->
name
,
NullS
);
buff
->
names
[
buff
->
entries
].
length
=
(
name_ptr
-
buff
->
names
[
buff
->
entries
].
str
);
buff
->
statuses
[
buff
->
entries
]
=
st
;
buff
->
entries
++
;
}
iterator
->
buffer
=
buff
;
iterator
->
next
=
&
fl_log_iterator_next
;
iterator
->
destroy
=
&
fl_log_iterator_destroy
;
my_dirend
(
dirp
);
return
HA_ITERATOR_OK
;
}
/* An example of a iterator creator */
enum
handler_create_iterator_result
fl_create_iterator
(
enum
handler_iterator_type
type
,
struct
handler_iterator
*
iterator
)
{
switch
(
type
)
{
case
HA_TRANSACTLOG_ITERATOR
:
return
fl_log_iterator_buffer_init
(
iterator
);
default:
return
HA_ITERATOR_UNSUPPORTED
;
}
}
#endif
/*TRANS_LOG_MGM_EXAMPLE_CODE*/
bool
HA_CREATE_INFO
::
check_conflicting_charset_declarations
(
CHARSET_INFO
*
cs
)
bool
HA_CREATE_INFO
::
check_conflicting_charset_declarations
(
CHARSET_INFO
*
cs
)
{
{
if
((
used_fields
&
HA_CREATE_USED_DEFAULT_CHARSET
)
&&
if
((
used_fields
&
HA_CREATE_USED_DEFAULT_CHARSET
)
&&
...
...
sql/handler.h
View file @
7c584d82
...
@@ -1021,31 +1021,6 @@ typedef bool (stat_print_fn)(THD *thd, const char *type, size_t type_len,
...
@@ -1021,31 +1021,6 @@ typedef bool (stat_print_fn)(THD *thd, const char *type, size_t type_len,
enum
ha_stat_type
{
HA_ENGINE_STATUS
,
HA_ENGINE_LOGS
,
HA_ENGINE_MUTEX
};
enum
ha_stat_type
{
HA_ENGINE_STATUS
,
HA_ENGINE_LOGS
,
HA_ENGINE_MUTEX
};
extern
MYSQL_PLUGIN_IMPORT
st_plugin_int
*
hton2plugin
[
MAX_HA
];
extern
MYSQL_PLUGIN_IMPORT
st_plugin_int
*
hton2plugin
[
MAX_HA
];
/* Transaction log maintains type definitions */
enum
log_status
{
HA_LOG_STATUS_FREE
=
0
,
/* log is free and can be deleted */
HA_LOG_STATUS_INUSE
=
1
,
/* log can't be deleted because it is in use */
HA_LOG_STATUS_NOSUCHLOG
=
2
/* no such log (can't be returned by
the log iterator status) */
};
/*
Function for signaling that the log file changed its state from
LOG_STATUS_INUSE to LOG_STATUS_FREE
Now it do nothing, will be implemented as part of new transaction
log management for engines.
TODO: implement the function.
*/
void
signal_log_not_needed
(
struct
handlerton
,
char
*
log_file
);
/*
Data of transaction log iterator.
*/
struct
handler_log_file_data
{
LEX_STRING
filename
;
enum
log_status
status
;
};
/*
/*
Definitions for engine-specific table/field/index options in the CREATE TABLE.
Definitions for engine-specific table/field/index options in the CREATE TABLE.
...
@@ -1160,46 +1135,6 @@ typedef struct st_ha_create_table_option {
...
@@ -1160,46 +1135,6 @@ typedef struct st_ha_create_table_option {
struct
st_mysql_sys_var
*
var
;
struct
st_mysql_sys_var
*
var
;
}
ha_create_table_option
;
}
ha_create_table_option
;
enum
handler_iterator_type
{
/* request of transaction log iterator */
HA_TRANSACTLOG_ITERATOR
=
1
};
enum
handler_create_iterator_result
{
HA_ITERATOR_OK
,
/* iterator created */
HA_ITERATOR_UNSUPPORTED
,
/* such type of iterator is not supported */
HA_ITERATOR_ERROR
/* error during iterator creation */
};
/*
Iterator structure. Can be used by handler/handlerton for different purposes.
Iterator should be created in the way to point "before" the first object
it iterate, so next() call move it to the first object or return !=0 if
there is nothing to iterate through.
*/
struct
handler_iterator
{
/*
Moves iterator to next record and return 0 or return !=0
if there is no records.
iterator_object will be filled by this function if next() returns 0.
Content of the iterator_object depend on iterator type.
*/
int
(
*
next
)(
struct
handler_iterator
*
,
void
*
iterator_object
);
/*
Free resources allocated by iterator, after this call iterator
is not usable.
*/
void
(
*
destroy
)(
struct
handler_iterator
*
);
/*
Pointer to buffer for the iterator to use.
Should be allocated by function which created the iterator and
destroyed by freed by above "destroy" call
*/
void
*
buffer
;
};
class
handler
;
class
handler
;
class
group_by_handler
;
class
group_by_handler
;
struct
Query
;
struct
Query
;
...
@@ -1461,22 +1396,6 @@ struct handlerton
...
@@ -1461,22 +1396,6 @@ struct handlerton
const
char
*
query
,
uint
query_length
,
const
char
*
query
,
uint
query_length
,
const
char
*
db
,
const
char
*
table_name
);
const
char
*
db
,
const
char
*
table_name
);
/*
Get log status.
If log_status is null then the handler do not support transaction
log information (i.e. log iterator can't be created).
(see example of implementation in handler.cc, TRANS_LOG_MGM_EXAMPLE_CODE)
*/
enum
log_status
(
*
get_log_status
)(
handlerton
*
hton
,
char
*
log
);
/*
Iterators creator.
Presence of the pointer should be checked before using
*/
enum
handler_create_iterator_result
(
*
create_iterator
)(
handlerton
*
hton
,
enum
handler_iterator_type
type
,
struct
handler_iterator
*
fill_this_in
);
void
(
*
abort_transaction
)(
handlerton
*
hton
,
THD
*
bf_thd
,
void
(
*
abort_transaction
)(
handlerton
*
hton
,
THD
*
bf_thd
,
THD
*
victim_thd
,
my_bool
signal
);
THD
*
victim_thd
,
my_bool
signal
);
int
(
*
set_checkpoint
)(
handlerton
*
hton
,
const
XID
*
xid
);
int
(
*
set_checkpoint
)(
handlerton
*
hton
,
const
XID
*
xid
);
...
@@ -3654,15 +3573,13 @@ class handler :public Sql_alloc
...
@@ -3654,15 +3573,13 @@ class handler :public Sql_alloc
inline
int
ha_read_first_row
(
uchar
*
buf
,
uint
primary_key
);
inline
int
ha_read_first_row
(
uchar
*
buf
,
uint
primary_key
);
/**
/**
The following
3
function is only needed for tables that may be
The following
2
function is only needed for tables that may be
internal temporary tables during joins.
internal temporary tables during joins.
*/
*/
virtual
int
remember_rnd_pos
()
virtual
int
remember_rnd_pos
()
{
return
HA_ERR_WRONG_COMMAND
;
}
{
return
HA_ERR_WRONG_COMMAND
;
}
virtual
int
restart_rnd_next
(
uchar
*
buf
)
virtual
int
restart_rnd_next
(
uchar
*
buf
)
{
return
HA_ERR_WRONG_COMMAND
;
}
{
return
HA_ERR_WRONG_COMMAND
;
}
virtual
int
rnd_same
(
uchar
*
buf
,
uint
inx
)
{
return
HA_ERR_WRONG_COMMAND
;
}
virtual
ha_rows
records_in_range
(
uint
inx
,
key_range
*
min_key
,
virtual
ha_rows
records_in_range
(
uint
inx
,
key_range
*
min_key
,
key_range
*
max_key
)
key_range
*
max_key
)
...
@@ -4377,7 +4294,6 @@ class handler :public Sql_alloc
...
@@ -4377,7 +4294,6 @@ class handler :public Sql_alloc
TABLE_SHARE
*
get_table_share
()
{
return
table_share
;
}
TABLE_SHARE
*
get_table_share
()
{
return
table_share
;
}
protected:
protected:
/* Service methods for use by storage engines. */
/* Service methods for use by storage engines. */
void
**
ha_data
(
THD
*
)
const
;
THD
*
ha_thd
(
void
)
const
;
THD
*
ha_thd
(
void
)
const
;
/**
/**
...
...
sql/sql_select.cc
View file @
7c584d82
...
@@ -26450,8 +26450,11 @@ bool mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, select_result *result)
...
@@ -26450,8 +26450,11 @@ bool mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, select_result *result)
if
(
unit
->
is_unit_op
()
||
unit
->
fake_select_lex
)
if
(
unit
->
is_unit_op
()
||
unit
->
fake_select_lex
)
{
{
ulonglong
save_options
=
0
;
if
(
unit
->
union_needs_tmp_table
()
&&
unit
->
fake_select_lex
)
if
(
unit
->
union_needs_tmp_table
()
&&
unit
->
fake_select_lex
)
{
{
save_options
=
unit
->
fake_select_lex
->
options
;
unit
->
fake_select_lex
->
select_number
=
FAKE_SELECT_LEX_ID
;
// just for initialization
unit
->
fake_select_lex
->
select_number
=
FAKE_SELECT_LEX_ID
;
// just for initialization
unit
->
fake_select_lex
->
type
=
unit_operation_text
[
unit
->
common_op
()];
unit
->
fake_select_lex
->
type
=
unit_operation_text
[
unit
->
common_op
()];
unit
->
fake_select_lex
->
options
|=
SELECT_DESCRIBE
;
unit
->
fake_select_lex
->
options
|=
SELECT_DESCRIBE
;
...
@@ -26459,6 +26462,9 @@ bool mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, select_result *result)
...
@@ -26459,6 +26462,9 @@ bool mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, select_result *result)
if
(
!
(
res
=
unit
->
prepare
(
unit
->
derived
,
result
,
if
(
!
(
res
=
unit
->
prepare
(
unit
->
derived
,
result
,
SELECT_NO_UNLOCK
|
SELECT_DESCRIBE
)))
SELECT_NO_UNLOCK
|
SELECT_DESCRIBE
)))
res
=
unit
->
exec
();
res
=
unit
->
exec
();
if
(
unit
->
union_needs_tmp_table
()
&&
unit
->
fake_select_lex
)
unit
->
fake_select_lex
->
options
=
save_options
;
}
}
else
else
{
{
...
...
storage/federatedx/ha_federatedx.cc
View file @
7c584d82
...
@@ -1736,7 +1736,7 @@ ha_rows ha_federatedx::records_in_range(uint inx, key_range *start_key,
...
@@ -1736,7 +1736,7 @@ ha_rows ha_federatedx::records_in_range(uint inx, key_range *start_key,
federatedx_txn
*
ha_federatedx
::
get_txn
(
THD
*
thd
,
bool
no_create
)
federatedx_txn
*
ha_federatedx
::
get_txn
(
THD
*
thd
,
bool
no_create
)
{
{
federatedx_txn
**
txnp
=
(
federatedx_txn
**
)
ha_data
(
thd
);
federatedx_txn
**
txnp
=
(
federatedx_txn
**
)
thd_ha_data
(
thd
,
ht
);
if
(
!*
txnp
&&
!
no_create
)
if
(
!*
txnp
&&
!
no_create
)
*
txnp
=
new
federatedx_txn
();
*
txnp
=
new
federatedx_txn
();
return
*
txnp
;
return
*
txnp
;
...
...
storage/innobase/fil/fil0fil.cc
View file @
7c584d82
...
@@ -1363,6 +1363,7 @@ fil_space_create(
...
@@ -1363,6 +1363,7 @@ fil_space_create(
if
((
purpose
==
FIL_TYPE_TABLESPACE
||
purpose
==
FIL_TYPE_IMPORT
)
if
((
purpose
==
FIL_TYPE_TABLESPACE
||
purpose
==
FIL_TYPE_IMPORT
)
&&
!
recv_recovery_is_on
()
&&
!
recv_recovery_is_on
()
&&
srv_operation
!=
SRV_OPERATION_BACKUP
&&
id
>
fil_system
.
max_assigned_id
)
{
&&
id
>
fil_system
.
max_assigned_id
)
{
if
(
!
fil_system
.
space_id_reuse_warned
)
{
if
(
!
fil_system
.
space_id_reuse_warned
)
{
fil_system
.
space_id_reuse_warned
=
true
;
fil_system
.
space_id_reuse_warned
=
true
;
...
...
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