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
af27f17e
Commit
af27f17e
authored
Jul 13, 2020
by
Marko Mäkelä
Browse files
Options
Browse Files
Download
Plain Diff
Merge 10.4 into 10.5
parents
27262039
de208723
Changes
14
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
2613 additions
and
52 deletions
+2613
-52
include/ilist.h
include/ilist.h
+57
-46
mysql-test/main/rowid_filter_myisam.result
mysql-test/main/rowid_filter_myisam.result
+21
-0
mysql-test/main/rowid_filter_myisam.test
mysql-test/main/rowid_filter_myisam.test
+1625
-0
mysql-test/main/upgrade_MDEV-19650.test
mysql-test/main/upgrade_MDEV-19650.test
+2
-2
mysql-test/main/upgrade_MDEV-23102-1.result
mysql-test/main/upgrade_MDEV-23102-1.result
+286
-0
mysql-test/main/upgrade_MDEV-23102-1.test
mysql-test/main/upgrade_MDEV-23102-1.test
+163
-0
mysql-test/main/upgrade_MDEV-23102-2.result
mysql-test/main/upgrade_MDEV-23102-2.result
+262
-0
mysql-test/main/upgrade_MDEV-23102-2.test
mysql-test/main/upgrade_MDEV-23102-2.test
+141
-0
mysql-test/suite/innodb/r/instant_alter_debug.result
mysql-test/suite/innodb/r/instant_alter_debug.result
+5
-0
mysql-test/suite/innodb/t/instant_alter_debug.test
mysql-test/suite/innodb/t/instant_alter_debug.test
+3
-0
plugin/auth_pam/auth_pam.c
plugin/auth_pam/auth_pam.c
+26
-1
scripts/mysql_system_tables.sql
scripts/mysql_system_tables.sql
+8
-2
storage/innobase/btr/btr0cur.cc
storage/innobase/btr/btr0cur.cc
+5
-0
storage/myisam/mi_key.c
storage/myisam/mi_key.c
+9
-1
No files found.
include/ilist.h
View file @
af27f17e
...
...
@@ -16,7 +16,8 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
*/
#pragma once
#ifndef ILIST_H
#define ILIST_H
#include <cstddef>
#include <iterator>
...
...
@@ -24,15 +25,17 @@
// Derive your class from this struct to insert to a linked list.
template
<
class
Tag
=
void
>
struct
ilist_node
{
ilist_node
()
ilist_node
()
noexcept
#ifndef DBUG_OFF
:
next
(
NULL
),
prev
(
NULL
)
:
next
(
NULL
),
prev
(
NULL
)
#endif
{
}
ilist_node
(
ilist_node
*
next
,
ilist_node
*
prev
)
:
next
(
next
),
prev
(
prev
)
{}
ilist_node
(
ilist_node
*
next
,
ilist_node
*
prev
)
noexcept
:
next
(
next
),
prev
(
prev
)
{
}
ilist_node
*
next
;
ilist_node
*
prev
;
...
...
@@ -70,40 +73,40 @@ template <class T, class Tag= void> class ilist
typedef
T
*
pointer
;
typedef
T
&
reference
;
Iterator
(
ListNode
*
node
)
:
node_
(
node
)
{}
Iterator
(
ListNode
*
node
)
noexcept
:
node_
(
node
)
{}
Iterator
&
operator
++
()
Iterator
&
operator
++
()
noexcept
{
node_
=
node_
->
next
;
return
*
this
;
}
Iterator
operator
++
(
int
)
Iterator
operator
++
(
int
)
noexcept
{
Iterator
tmp
(
*
this
);
operator
++
();
return
tmp
;
}
Iterator
&
operator
--
()
Iterator
&
operator
--
()
noexcept
{
node_
=
node_
->
prev
;
return
*
this
;
}
Iterator
operator
--
(
int
)
Iterator
operator
--
(
int
)
noexcept
{
Iterator
tmp
(
*
this
);
operator
--
();
return
tmp
;
}
reference
operator
*
()
{
return
*
static_cast
<
pointer
>
(
node_
);
}
pointer
operator
->
()
{
return
static_cast
<
pointer
>
(
node_
);
}
reference
operator
*
()
noexcept
{
return
*
static_cast
<
pointer
>
(
node_
);
}
pointer
operator
->
()
noexcept
{
return
static_cast
<
pointer
>
(
node_
);
}
friend
bool
operator
==
(
const
Iterator
&
lhs
,
const
Iterator
&
rhs
)
friend
bool
operator
==
(
const
Iterator
&
lhs
,
const
Iterator
&
rhs
)
noexcept
{
return
lhs
.
node_
==
rhs
.
node_
;
}
friend
bool
operator
!=
(
const
Iterator
&
lhs
,
const
Iterator
&
rhs
)
friend
bool
operator
!=
(
const
Iterator
&
lhs
,
const
Iterator
&
rhs
)
noexcept
{
return
!
(
lhs
==
rhs
);
}
...
...
@@ -114,30 +117,36 @@ template <class T, class Tag= void> class ilist
friend
class
ilist
;
};
ilist
()
:
sentinel_
(
&
sentinel_
,
&
sentinel_
)
{}
ilist
()
noexcept
:
sentinel_
(
&
sentinel_
,
&
sentinel_
)
{}
reference
front
()
{
return
*
begin
();
}
reference
back
()
{
return
*--
end
();
}
const_reference
front
()
const
{
return
*
begin
();
}
const_reference
back
()
const
{
return
*--
end
();
}
reference
front
()
noexcept
{
return
*
begin
();
}
reference
back
()
noexcept
{
return
*--
end
();
}
const_reference
front
()
const
noexcept
{
return
*
begin
();
}
const_reference
back
()
const
noexcept
{
return
*--
end
();
}
iterator
begin
()
{
return
iterator
(
sentinel_
.
next
);
}
const_iterator
begin
()
const
iterator
begin
()
noexcept
{
return
iterator
(
sentinel_
.
next
);
}
const_iterator
begin
()
const
noexcept
{
return
iterator
(
const_cast
<
ListNode
*>
(
sentinel_
.
next
));
}
iterator
end
()
{
return
iterator
(
&
sentinel_
);
}
const_iterator
end
()
const
iterator
end
()
noexcept
{
return
iterator
(
&
sentinel_
);
}
const_iterator
end
()
const
noexcept
{
return
iterator
(
const_cast
<
ListNode
*>
(
&
sentinel_
));
}
reverse_iterator
rbegin
()
{
return
reverse_iterator
(
end
());
}
const_reverse_iterator
rbegin
()
const
{
return
reverse_iterator
(
end
());
}
reverse_iterator
rend
()
{
return
reverse_iterator
(
begin
());
}
const_reverse_iterator
rend
()
const
{
return
reverse_iterator
(
begin
());
}
reverse_iterator
rbegin
()
noexcept
{
return
reverse_iterator
(
end
());
}
const_reverse_iterator
rbegin
()
const
noexcept
{
return
reverse_iterator
(
end
());
}
reverse_iterator
rend
()
noexcept
{
return
reverse_iterator
(
begin
());
}
const_reverse_iterator
rend
()
const
noexcept
{
return
reverse_iterator
(
begin
());
}
bool
empty
()
const
{
return
sentinel_
.
next
==
&
sentinel_
;
}
bool
empty
()
const
noexcept
{
return
sentinel_
.
next
==
&
sentinel_
;
}
// Not implemented because it's O(N)
// size_type size() const
...
...
@@ -145,13 +154,13 @@ template <class T, class Tag= void> class ilist
// return static_cast<size_type>(std::distance(begin(), end()));
// }
void
clear
()
void
clear
()
noexcept
{
sentinel_
.
next
=
&
sentinel_
;
sentinel_
.
prev
=
&
sentinel_
;
}
iterator
insert
(
iterator
pos
,
reference
value
)
iterator
insert
(
iterator
pos
,
reference
value
)
noexcept
{
ListNode
*
curr
=
pos
.
node_
;
ListNode
*
prev
=
pos
.
node_
->
prev
;
...
...
@@ -165,7 +174,7 @@ template <class T, class Tag= void> class ilist
return
iterator
(
&
value
);
}
iterator
erase
(
iterator
pos
)
iterator
erase
(
iterator
pos
)
noexcept
{
ListNode
*
prev
=
pos
.
node_
->
prev
;
ListNode
*
next
=
pos
.
node_
->
next
;
...
...
@@ -182,15 +191,15 @@ template <class T, class Tag= void> class ilist
return
next
;
}
void
push_back
(
reference
value
)
{
insert
(
end
(),
value
);
}
void
pop_back
()
{
erase
(
end
());
}
void
push_back
(
reference
value
)
noexcept
{
insert
(
end
(),
value
);
}
void
pop_back
()
noexcept
{
erase
(
end
());
}
void
push_front
(
reference
value
)
{
insert
(
begin
(),
value
);
}
void
pop_front
()
{
erase
(
begin
());
}
void
push_front
(
reference
value
)
noexcept
{
insert
(
begin
(),
value
);
}
void
pop_front
()
noexcept
{
erase
(
begin
());
}
// STL version is O(n) but this is O(1) because an element can't be inserted
// several times in the same ilist.
void
remove
(
reference
value
)
{
erase
(
iterator
(
&
value
));
}
void
remove
(
reference
value
)
noexcept
{
erase
(
iterator
(
&
value
));
}
private:
ListNode
sentinel_
;
...
...
@@ -216,36 +225,38 @@ template <class T, class Tag= void> class sized_ilist : public ilist<T, Tag>
typedef
std
::
reverse_iterator
<
iterator
>
reverse_iterator
;
typedef
std
::
reverse_iterator
<
const
iterator
>
const_reverse_iterator
;
sized_ilist
()
:
size_
(
0
)
{}
sized_ilist
()
noexcept
:
size_
(
0
)
{}
size_type
size
()
const
{
return
size_
;
}
size_type
size
()
const
noexcept
{
return
size_
;
}
void
clear
()
void
clear
()
noexcept
{
BASE
::
clear
();
size_
=
0
;
}
iterator
insert
(
iterator
pos
,
reference
value
)
iterator
insert
(
iterator
pos
,
reference
value
)
noexcept
{
++
size_
;
return
BASE
::
insert
(
pos
,
value
);
}
iterator
erase
(
iterator
pos
)
iterator
erase
(
iterator
pos
)
noexcept
{
--
size_
;
return
BASE
::
erase
(
pos
);
}
void
push_back
(
reference
value
)
{
insert
(
BASE
::
end
(),
value
);
}
void
pop_back
()
{
erase
(
BASE
::
end
());
}
void
push_back
(
reference
value
)
noexcept
{
insert
(
BASE
::
end
(),
value
);
}
void
pop_back
()
noexcept
{
erase
(
BASE
::
end
());
}
void
push_front
(
reference
value
)
{
insert
(
BASE
::
begin
(),
value
);
}
void
pop_front
()
{
erase
(
BASE
::
begin
());
}
void
push_front
(
reference
value
)
noexcept
{
insert
(
BASE
::
begin
(),
value
);
}
void
pop_front
()
noexcept
{
erase
(
BASE
::
begin
());
}
void
remove
(
reference
value
)
{
erase
(
iterator
(
&
value
));
}
void
remove
(
reference
value
)
noexcept
{
erase
(
iterator
(
&
value
));
}
private:
size_type
size_
;
};
#endif
mysql-test/main/rowid_filter_myisam.result
0 → 100644
View file @
af27f17e
#
# MDEV-22553: Assertion `info->lastpos == (~ (my_off_t) 0)' failed in mi_rkey with rowid_filer=on
#
CREATE TABLE t1 (
a smallint(6) DEFAULT NULL,
b bigint(20) DEFAULT NULL,
c varchar(64) DEFAULT NULL,
d varchar(64) DEFAULT NULL,
e smallint(6) DEFAULT NULL,
f bigint(20) DEFAULT NULL,
KEY a (a),
KEY d (d),
KEY f (f)
) ENGINE=MyISAM;
ALTER TABLE t1 DISABLE KEYS;
# Insert a lot of rows
ALTER TABLE t1 ENABLE KEYS;
# Must not crash:
SELECT * FROM t1 WHERE ( a BETWEEN 255 AND 270 OR f = 200 ) AND f IN ( 1, 4, 112, 143 ) AND d IN ('Montana', 'South Dakota');
a b c d e f
DROP TABLE t1;
mysql-test/main/rowid_filter_myisam.test
0 → 100644
View file @
af27f17e
This diff is collapsed.
Click to expand it.
mysql-test/main/upgrade_MDEV-19650.test
View file @
af27f17e
...
...
@@ -70,11 +70,11 @@ CREATE DEFINER='root'@'localhost' SQL SECURITY DEFINER VIEW IF NOT EXISTS user A
SET
sql_mode
=
''
;
delimiter
|
;
DROP
PROCEDURE
IF
EXISTS
mysql
.
AddGeometryColumn
;
DROP
PROCEDURE
IF
EXISTS
mysql
.
DropGeometryColumn
;
delimiter
|
;
CREATE
DEFINER
=
`root`
@
`localhost`
PROCEDURE
AddGeometryColumn
(
catalog
varchar
(
64
),
t_schema
varchar
(
64
),
t_name
varchar
(
64
),
geometry_column
varchar
(
64
),
t_srid
int
)
SQL
SECURITY
INVOKER
begin
...
...
mysql-test/main/upgrade_MDEV-23102-1.result
0 → 100644
View file @
af27f17e
This diff is collapsed.
Click to expand it.
mysql-test/main/upgrade_MDEV-23102-1.test
0 → 100644
View file @
af27f17e
--
echo
#
--
echo
# MDEV-23102: 10.4 create mariadb.sys user on each update even
--
echo
# is the user is not needed
--
echo
#
--
echo
# part 1: reassigning mysql.user and gis procedures to other user
--
source
include
/
mysql_upgrade_preparation
.
inc
call
mtr
.
add_suppression
(
"Cannot load from mysql.proc. The table is probably corrupted"
);
create
database
mysqltest1
;
use
mysqltest1
;
create
table
save_global_priv
as
select
*
from
mysql
.
global_priv
;
create
table
save_tables_priv
as
select
*
from
mysql
.
tables_priv
;
create
table
save_proxies_priv
as
select
*
from
mysql
.
proxies_priv
;
create
table
mysql
.
save_proc
like
mysql
.
proc
;
insert
into
mysql
.
save_proc
select
*
from
mysql
.
proc
;
set
@
save_sql_mode
=
@@
sql_mode
;
use
mysql
;
--
echo
# make changed definition of gis procedures and user view
create
user
superuser
@
localhost
;
grant
all
privileges
on
mysql
.*
to
superuser
@
localhost
;
drop
view
user
;
CREATE
DEFINER
=
'superuser'
@
'localhost'
SQL
SECURITY
DEFINER
VIEW
IF
NOT
EXISTS
user
AS
SELECT
Host
,
User
,
IF
(
JSON_VALUE
(
Priv
,
'$.plugin'
)
IN
(
'mysql_native_password'
,
'mysql_old_password'
),
IFNULL
(
JSON_VALUE
(
Priv
,
'$.authentication_string'
),
''
),
''
)
AS
Password
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
1
,
'Y'
,
'N'
)
AS
Select_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
2
,
'Y'
,
'N'
)
AS
Insert_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
4
,
'Y'
,
'N'
)
AS
Update_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
8
,
'Y'
,
'N'
)
AS
Delete_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
16
,
'Y'
,
'N'
)
AS
Create_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
32
,
'Y'
,
'N'
)
AS
Drop_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
64
,
'Y'
,
'N'
)
AS
Reload_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
128
,
'Y'
,
'N'
)
AS
Shutdown_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
256
,
'Y'
,
'N'
)
AS
Process_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
512
,
'Y'
,
'N'
)
AS
File_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
1024
,
'Y'
,
'N'
)
AS
Grant_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
2048
,
'Y'
,
'N'
)
AS
References_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
4096
,
'Y'
,
'N'
)
AS
Index_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
8192
,
'Y'
,
'N'
)
AS
Alter_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
16384
,
'Y'
,
'N'
)
AS
Show_db_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
32768
,
'Y'
,
'N'
)
AS
Super_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
65536
,
'Y'
,
'N'
)
AS
Create_tmp_table_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
131072
,
'Y'
,
'N'
)
AS
Lock_tables_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
262144
,
'Y'
,
'N'
)
AS
Execute_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
524288
,
'Y'
,
'N'
)
AS
Repl_slave_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
1048576
,
'Y'
,
'N'
)
AS
Repl_client_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
2097152
,
'Y'
,
'N'
)
AS
Create_view_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
4194304
,
'Y'
,
'N'
)
AS
Show_view_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
8388608
,
'Y'
,
'N'
)
AS
Create_routine_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
16777216
,
'Y'
,
'N'
)
AS
Alter_routine_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
33554432
,
'Y'
,
'N'
)
AS
Create_user_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
67108864
,
'Y'
,
'N'
)
AS
Event_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
134217728
,
'Y'
,
'N'
)
AS
Trigger_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
268435456
,
'Y'
,
'N'
)
AS
Create_tablespace_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
536870912
,
'Y'
,
'N'
)
AS
Delete_history_priv
,
ELT
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.ssl_type'
),
0
)
+
1
,
''
,
'ANY'
,
'X509'
,
'SPECIFIED'
)
AS
ssl_type
,
IFNULL
(
JSON_VALUE
(
Priv
,
'$.ssl_cipher'
),
''
)
AS
ssl_cipher
,
IFNULL
(
JSON_VALUE
(
Priv
,
'$.x509_issuer'
),
''
)
AS
x509_issuer
,
IFNULL
(
JSON_VALUE
(
Priv
,
'$.x509_subject'
),
''
)
AS
x509_subject
,
CAST
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.max_questions'
),
0
)
AS
UNSIGNED
)
AS
max_questions
,
CAST
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.max_updates'
),
0
)
AS
UNSIGNED
)
AS
max_updates
,
CAST
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.max_connections'
),
0
)
AS
UNSIGNED
)
AS
max_connections
,
CAST
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.max_user_connections'
),
0
)
AS
SIGNED
)
AS
max_user_connections
,
IFNULL
(
JSON_VALUE
(
Priv
,
'$.plugin'
),
''
)
AS
plugin
,
IFNULL
(
JSON_VALUE
(
Priv
,
'$.authentication_string'
),
''
)
AS
authentication_string
,
'N'
AS
password_expired
,
ELT
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.is_role'
),
0
)
+
1
,
'N'
,
'Y'
)
AS
is_role
,
IFNULL
(
JSON_VALUE
(
Priv
,
'$.default_role'
),
''
)
AS
default_role
,
CAST
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.max_statement_time'
),
0.0
)
AS
DECIMAL
(
12
,
6
))
AS
max_statement_time
FROM
global_priv
;
SET
sql_mode
=
''
;
DROP
PROCEDURE
IF
EXISTS
mysql
.
AddGeometryColumn
;
DROP
PROCEDURE
IF
EXISTS
mysql
.
DropGeometryColumn
;
delimiter
|
;
CREATE
DEFINER
=
`superuser`
@
`localhost`
PROCEDURE
AddGeometryColumn
(
catalog
varchar
(
64
),
t_schema
varchar
(
64
),
t_name
varchar
(
64
),
geometry_column
varchar
(
64
),
t_srid
int
)
SQL
SECURITY
INVOKER
begin
set
@
qwe
=
concat
(
'ALTER TABLE '
,
t_schema
,
'.'
,
t_name
,
' ADD '
,
geometry_column
,
' GEOMETRY REF_SYSTEM_ID='
,
t_srid
);
PREPARE
ls
from
@
qwe
;
execute
ls
;
deallocate
prepare
ls
;
end
|
CREATE
DEFINER
=
`superuser`
@
`localhost`
PROCEDURE
DropGeometryColumn
(
catalog
varchar
(
64
),
t_schema
varchar
(
64
),
t_name
varchar
(
64
),
geometry_column
varchar
(
64
))
SQL
SECURITY
INVOKER
begin
set
@
qwe
=
concat
(
'ALTER TABLE '
,
t_schema
,
'.'
,
t_name
,
' DROP '
,
geometry_column
);
PREPARE
ls
from
@
qwe
;
execute
ls
;
deallocate
prepare
ls
;
end
|
delimiter
;
|
set
@@
sql_mode
=
@
save_sql_mode
;
drop
user
'mariadb.sys'
@
'localhost'
;
--
echo
# check changed definitions mysql_upgrade
SELECT
count
(
*
)
FROM
information_schema
.
VIEWS
WHERE
TABLE_CATALOG
=
'def'
and
TABLE_SCHEMA
=
'mysql'
and
TABLE_NAME
=
'user'
and
DEFINER
=
'superuser@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
VIEWS
WHERE
TABLE_CATALOG
=
'def'
and
TABLE_SCHEMA
=
'mysql'
and
TABLE_NAME
=
'user'
and
DEFINER
=
'mariadb.sys@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
ROUTINES
WHERE
ROUTINE_CATALOG
=
'def'
and
ROUTINE_SCHEMA
=
'mysql'
and
ROUTINE_NAME
=
'AddGeometryColumn'
and
DEFINER
=
'superuser@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
ROUTINES
WHERE
ROUTINE_CATALOG
=
'def'
and
ROUTINE_SCHEMA
=
'mysql'
and
ROUTINE_NAME
=
'AddGeometryColumn'
and
DEFINER
=
'mariadb.sys@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
ROUTINES
WHERE
ROUTINE_CATALOG
=
'def'
and
ROUTINE_SCHEMA
=
'mysql'
and
ROUTINE_NAME
=
'DropGeometryColumn'
and
DEFINER
=
'superuser@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
ROUTINES
WHERE
ROUTINE_CATALOG
=
'def'
and
ROUTINE_SCHEMA
=
'mysql'
and
ROUTINE_NAME
=
'DropGeometryColumn'
and
DEFINER
=
'mariadb.sys@localhost'
;
SELECT
*
FROM
information_schema
.
USER_PRIVILEGES
WHERE
GRANTEE
=
"'mariadb.sys'@'localhost'"
;
SELECT
*
FROM
information_schema
.
TABLE_PRIVILEGES
WHERE
GRANTEE
=
"'mariadb.sys'@'localhost'"
;
let
$MYSQLD_DATADIR
=
`select @@datadir`
;
--
echo
# Run mysql_upgrade
--
exec
$MYSQL_UPGRADE
2
>&
1
--
file_exists
$MYSQLD_DATADIR
/
mysql_upgrade_info
--
remove_file
$MYSQLD_DATADIR
/
mysql_upgrade_info
--
echo
# check new definitions mysql_upgrade
SELECT
count
(
*
)
FROM
information_schema
.
VIEWS
WHERE
TABLE_CATALOG
=
'def'
and
TABLE_SCHEMA
=
'mysql'
and
TABLE_NAME
=
'user'
and
DEFINER
=
'superuser@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
VIEWS
WHERE
TABLE_CATALOG
=
'def'
and
TABLE_SCHEMA
=
'mysql'
and
TABLE_NAME
=
'user'
and
DEFINER
=
'mariadb.sys@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
ROUTINES
WHERE
ROUTINE_CATALOG
=
'def'
and
ROUTINE_SCHEMA
=
'mysql'
and
ROUTINE_NAME
=
'AddGeometryColumn'
and
DEFINER
=
'superuser@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
ROUTINES
WHERE
ROUTINE_CATALOG
=
'def'
and
ROUTINE_SCHEMA
=
'mysql'
and
ROUTINE_NAME
=
'AddGeometryColumn'
and
DEFINER
=
'mariadb.sys@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
ROUTINES
WHERE
ROUTINE_CATALOG
=
'def'
and
ROUTINE_SCHEMA
=
'mysql'
and
ROUTINE_NAME
=
'DropGeometryColumn'
and
DEFINER
=
'superuser@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
ROUTINES
WHERE
ROUTINE_CATALOG
=
'def'
and
ROUTINE_SCHEMA
=
'mysql'
and
ROUTINE_NAME
=
'DropGeometryColumn'
and
DEFINER
=
'mariadb.sys@localhost'
;
select
count
(
*
)
from
global_priv
where
user
=
'mariadb.sys'
and
host
=
'localhost'
;
--
echo
# above should be 0 (no mariadb.sys@localhost user)
--
echo
# restore environment
DROP
USER
'superuser'
@
'localhost'
;
DROP
VIEW
mysql
.
user
;
DROP
PROCEDURE
AddGeometryColumn
;
DROP
PROCEDURE
DropGeometryColumn
;
--
exec
$MYSQL_UPGRADE
2
>&
1
--
file_exists
$MYSQLD_DATADIR
/
mysql_upgrade_info
--
remove_file
$MYSQLD_DATADIR
/
mysql_upgrade_info
delete
from
global_priv
;
delete
from
tables_priv
;
delete
from
proxies_priv
;
delete
from
proc
;
insert
into
mysql
.
global_priv
select
*
from
mysqltest1
.
save_global_priv
;
insert
into
mysql
.
tables_priv
select
*
from
mysqltest1
.
save_tables_priv
;
insert
into
mysql
.
proxies_priv
select
*
from
mysqltest1
.
save_proxies_priv
;
rename
table
proc
to
bad_proc
;
rename
table
save_proc
to
proc
;
drop
table
bad_proc
;
flush
privileges
;
disconnect
default
;
connect
default
,
localhost
,
root
,,;
connection
default
;
drop
database
mysqltest1
;
--
echo
# End of 10.4 tests (but better do not add other tests here)
mysql-test/main/upgrade_MDEV-23102-2.result
0 → 100644
View file @
af27f17e
This diff is collapsed.
Click to expand it.
mysql-test/main/upgrade_MDEV-23102-2.test
0 → 100644
View file @
af27f17e
--
echo
#
--
echo
# MDEV-23102: 10.4 create mariadb.sys user on each update even
--
echo
# is the user is not needed
--
echo
#
--
echo
# part 2: reassigning mysql.user and deleting gis procedures
--
source
include
/
mysql_upgrade_preparation
.
inc
call
mtr
.
add_suppression
(
"Cannot load from mysql.proc. The table is probably corrupted"
);
create
database
mysqltest1
;
use
mysqltest1
;
create
table
save_global_priv
as
select
*
from
mysql
.
global_priv
;
create
table
save_tables_priv
as
select
*
from
mysql
.
tables_priv
;
create
table
save_proxies_priv
as
select
*
from
mysql
.
proxies_priv
;
create
table
mysql
.
save_proc
like
mysql
.
proc
;
insert
into
mysql
.
save_proc
select
*
from
mysql
.
proc
;
set
@
save_sql_mode
=
@@
sql_mode
;
use
mysql
;
--
echo
# make changed definition of gis procedures and user view
create
user
superuser
@
localhost
;
grant
all
privileges
on
mysql
.*
to
superuser
@
localhost
;
drop
view
user
;
CREATE
DEFINER
=
'superuser'
@
'localhost'
SQL
SECURITY
DEFINER
VIEW
IF
NOT
EXISTS
user
AS
SELECT
Host
,
User
,
IF
(
JSON_VALUE
(
Priv
,
'$.plugin'
)
IN
(
'mysql_native_password'
,
'mysql_old_password'
),
IFNULL
(
JSON_VALUE
(
Priv
,
'$.authentication_string'
),
''
),
''
)
AS
Password
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
1
,
'Y'
,
'N'
)
AS
Select_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
2
,
'Y'
,
'N'
)
AS
Insert_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
4
,
'Y'
,
'N'
)
AS
Update_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
8
,
'Y'
,
'N'
)
AS
Delete_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
16
,
'Y'
,
'N'
)
AS
Create_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
32
,
'Y'
,
'N'
)
AS
Drop_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
64
,
'Y'
,
'N'
)
AS
Reload_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
128
,
'Y'
,
'N'
)
AS
Shutdown_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
256
,
'Y'
,
'N'
)
AS
Process_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
512
,
'Y'
,
'N'
)
AS
File_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
1024
,
'Y'
,
'N'
)
AS
Grant_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
2048
,
'Y'
,
'N'
)
AS
References_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
4096
,
'Y'
,
'N'
)
AS
Index_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
8192
,
'Y'
,
'N'
)
AS
Alter_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
16384
,
'Y'
,
'N'
)
AS
Show_db_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
32768
,
'Y'
,
'N'
)
AS
Super_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
65536
,
'Y'
,
'N'
)
AS
Create_tmp_table_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
131072
,
'Y'
,
'N'
)
AS
Lock_tables_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
262144
,
'Y'
,
'N'
)
AS
Execute_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
524288
,
'Y'
,
'N'
)
AS
Repl_slave_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
1048576
,
'Y'
,
'N'
)
AS
Repl_client_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
2097152
,
'Y'
,
'N'
)
AS
Create_view_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
4194304
,
'Y'
,
'N'
)
AS
Show_view_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
8388608
,
'Y'
,
'N'
)
AS
Create_routine_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
16777216
,
'Y'
,
'N'
)
AS
Alter_routine_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
33554432
,
'Y'
,
'N'
)
AS
Create_user_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
67108864
,
'Y'
,
'N'
)
AS
Event_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
134217728
,
'Y'
,
'N'
)
AS
Trigger_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
268435456
,
'Y'
,
'N'
)
AS
Create_tablespace_priv
,
IF
(
JSON_VALUE
(
Priv
,
'$.access'
)
&
536870912
,
'Y'
,
'N'
)
AS
Delete_history_priv
,
ELT
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.ssl_type'
),
0
)
+
1
,
''
,
'ANY'
,
'X509'
,
'SPECIFIED'
)
AS
ssl_type
,
IFNULL
(
JSON_VALUE
(
Priv
,
'$.ssl_cipher'
),
''
)
AS
ssl_cipher
,
IFNULL
(
JSON_VALUE
(
Priv
,
'$.x509_issuer'
),
''
)
AS
x509_issuer
,
IFNULL
(
JSON_VALUE
(
Priv
,
'$.x509_subject'
),
''
)
AS
x509_subject
,
CAST
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.max_questions'
),
0
)
AS
UNSIGNED
)
AS
max_questions
,
CAST
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.max_updates'
),
0
)
AS
UNSIGNED
)
AS
max_updates
,
CAST
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.max_connections'
),
0
)
AS
UNSIGNED
)
AS
max_connections
,
CAST
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.max_user_connections'
),
0
)
AS
SIGNED
)
AS
max_user_connections
,
IFNULL
(
JSON_VALUE
(
Priv
,
'$.plugin'
),
''
)
AS
plugin
,
IFNULL
(
JSON_VALUE
(
Priv
,
'$.authentication_string'
),
''
)
AS
authentication_string
,
'N'
AS
password_expired
,
ELT
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.is_role'
),
0
)
+
1
,
'N'
,
'Y'
)
AS
is_role
,
IFNULL
(
JSON_VALUE
(
Priv
,
'$.default_role'
),
''
)
AS
default_role
,
CAST
(
IFNULL
(
JSON_VALUE
(
Priv
,
'$.max_statement_time'
),
0.0
)
AS
DECIMAL
(
12
,
6
))
AS
max_statement_time
FROM
global_priv
;
DROP
PROCEDURE
IF
EXISTS
mysql
.
AddGeometryColumn
;
DROP
PROCEDURE
IF
EXISTS
mysql
.
DropGeometryColumn
;
drop
user
'mariadb.sys'
@
'localhost'
;
--
echo
# check changed definitions mysql_upgrade
SELECT
count
(
*
)
FROM
information_schema
.
VIEWS
WHERE
TABLE_CATALOG
=
'def'
and
TABLE_SCHEMA
=
'mysql'
and
TABLE_NAME
=
'user'
and
DEFINER
=
'superuser@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
VIEWS
WHERE
TABLE_CATALOG
=
'def'
and
TABLE_SCHEMA
=
'mysql'
and
TABLE_NAME
=
'user'
and
DEFINER
=
'mariadb.sys@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
ROUTINES
WHERE
ROUTINE_CATALOG
=
'def'
and
ROUTINE_SCHEMA
=
'mysql'
and
ROUTINE_NAME
=
'AddGeometryColumn'
;
SELECT
count
(
*
)
FROM
information_schema
.
ROUTINES
WHERE
ROUTINE_CATALOG
=
'def'
and
ROUTINE_SCHEMA
=
'mysql'
and
ROUTINE_NAME
=
'DropGeometryColumn'
;
SELECT
*
FROM
information_schema
.
USER_PRIVILEGES
WHERE
GRANTEE
=
"'mariadb.sys'@'localhost'"
;
SELECT
*
FROM
information_schema
.
TABLE_PRIVILEGES
WHERE
GRANTEE
=
"'mariadb.sys'@'localhost'"
;
let
$MYSQLD_DATADIR
=
`select @@datadir`
;
--
echo
# Run mysql_upgrade
--
exec
$MYSQL_UPGRADE
2
>&
1
--
file_exists
$MYSQLD_DATADIR
/
mysql_upgrade_info
--
remove_file
$MYSQLD_DATADIR
/
mysql_upgrade_info
--
echo
# check new definitions mysql_upgrade
SELECT
count
(
*
)
FROM
information_schema
.
VIEWS
WHERE
TABLE_CATALOG
=
'def'
and
TABLE_SCHEMA
=
'mysql'
and
TABLE_NAME
=
'user'
and
DEFINER
=
'superuser@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
VIEWS
WHERE
TABLE_CATALOG
=
'def'
and
TABLE_SCHEMA
=
'mysql'
and
TABLE_NAME
=
'user'
and
DEFINER
=
'mariadb.sys@localhost'
;
SELECT
count
(
*
)
FROM
information_schema
.
ROUTINES
WHERE
ROUTINE_CATALOG
=
'def'
and
ROUTINE_SCHEMA
=
'mysql'
and
ROUTINE_NAME
=
'AddGeometryColumn'
;
SELECT
count
(
*
)
FROM
information_schema
.
ROUTINES
WHERE
ROUTINE_CATALOG
=
'def'
and
ROUTINE_SCHEMA
=
'mysql'
and
ROUTINE_NAME
=
'DropGeometryColumn'
;
select
count
(
*
)
from
global_priv
where
user
=
'mariadb.sys'
and
host
=
'localhost'
;
--
echo
# above should be 0 (no mariadb.sys@localhost user)
--
echo
# restore environment
DROP
USER
'superuser'
@
'localhost'
;
DROP
VIEW
mysql
.
user
;
--
exec
$MYSQL_UPGRADE
2
>&
1
--
file_exists
$MYSQLD_DATADIR
/
mysql_upgrade_info
--
remove_file
$MYSQLD_DATADIR
/
mysql_upgrade_info
delete
from
global_priv
;
delete
from
tables_priv
;
delete
from
proxies_priv
;
delete
from
proc
;
insert
into
mysql
.
global_priv
select
*
from
mysqltest1
.
save_global_priv
;
insert
into
mysql
.
tables_priv
select
*
from
mysqltest1
.
save_tables_priv
;
insert
into
mysql
.
proxies_priv
select
*
from
mysqltest1
.
save_proxies_priv
;
rename
table
proc
to
bad_proc
;
rename
table
save_proc
to
proc
;
drop
table
bad_proc
;
flush
privileges
;
disconnect
default
;
connect
default
,
localhost
,
root
,,;
connection
default
;
drop
database
mysqltest1
;
--
echo
# End of 10.4 tests (but better do not add other tests here)
mysql-test/suite/innodb/r/instant_alter_debug.result
View file @
af27f17e
...
...
@@ -401,5 +401,10 @@ SET DEBUG_SYNC='now SIGNAL emptied';
connection con2;
disconnect con2;
connection default;
ALTER TABLE t1 DROP c;
INSERT INTO t1 VALUES (2),(3),(4);
CHECK TABLE t1;
Table Op Msg_type Msg_text
test.t1 check status OK
DROP TABLE t1;
SET DEBUG_SYNC=RESET;
mysql-test/suite/innodb/t/instant_alter_debug.test
View file @
af27f17e
...
...
@@ -455,5 +455,8 @@ connection con2;
reap
;
disconnect
con2
;
connection
default
;
ALTER
TABLE
t1
DROP
c
;
INSERT
INTO
t1
VALUES
(
2
),(
3
),(
4
);
CHECK
TABLE
t1
;
DROP
TABLE
t1
;
SET
DEBUG_SYNC
=
RESET
;
plugin/auth_pam/auth_pam.c
View file @
af27f17e
...
...
@@ -36,12 +36,20 @@ static char *opt_plugin_dir; /* To be dynamically linked. */
static
const
char
*
tool_name
=
"auth_pam_tool_dir/auth_pam_tool"
;
static
const
int
tool_name_len
=
31
;
/*
sleep_limit is now 5 meaning up to 1 second sleep.
each step means 10 times longer sleep, so 6 would mean 10 seconds.
*/
static
const
unsigned
int
sleep_limit
=
5
;
static
int
pam_auth
(
MYSQL_PLUGIN_VIO
*
vio
,
MYSQL_SERVER_AUTH_INFO
*
info
)
{
int
p_to_c
[
2
],
c_to_p
[
2
];
/* Parent-to-child and child-to-parent pipes. */
pid_t
proc_id
;
int
result
=
CR_ERROR
,
pkt_len
=
0
;
unsigned
char
field
,
*
pkt
;
unsigned
int
n_sleep
=
0
;
useconds_t
sleep_time
=
100
;
PAM_DEBUG
((
stderr
,
"PAM: opening pipes.
\n
"
));
if
(
pipe
(
p_to_c
)
<
0
||
pipe
(
c_to_p
)
<
0
)
...
...
@@ -190,7 +198,24 @@ static int pam_auth(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info)
error_ret:
close
(
p_to_c
[
1
]);
close
(
c_to_p
[
0
]);
waitpid
(
proc_id
,
NULL
,
WNOHANG
);
while
(
waitpid
(
proc_id
,
NULL
,
WNOHANG
)
!=
(
int
)
proc_id
)
{
if
(
n_sleep
++
==
sleep_limit
)
{
/*
The auth_pam_tool application doesn't terminate.
Means something wrong happened there like pam_xxx.so hanged.
*/
kill
(
proc_id
,
SIGKILL
);
sleep_time
=
1000000
;
/* 1 second wait should be enough. */
PAM_DEBUG
((
stderr
,
"PAM: auth_pam_tool doesn't terminate,"
" have to kill it.
\n
"
));
}
else
if
(
n_sleep
>
sleep_limit
)
break
;
usleep
(
sleep_time
);
sleep_time
*=
10
;
}
PAM_DEBUG
((
stderr
,
"PAM: auth result %d.
\n
"
,
result
));
return
result
;
...
...
scripts/mysql_system_tables.sql
View file @
af27f17e
...
...
@@ -37,9 +37,15 @@ CREATE TABLE IF NOT EXISTS global_priv (Host char(60) binary DEFAULT '', User ch
set
@
had_sys_user
=
0
<>
(
select
count
(
*
)
from
mysql
.
global_priv
where
Host
=
"localhost"
and
User
=
"mariadb.sys"
);
set
@
exists_user_view
=
EXISTS
(
SELECT
*
FROM
information_schema
.
VIEWS
WHERE
TABLE_CATALOG
=
'def'
and
TABLE_SCHEMA
=
'mysql'
and
TABLE_NAME
=
'user'
);
set
@
exists_user_view_by_root
=
EXISTS
(
SELECT
*
FROM
information_schema
.
VIEWS
WHERE
TABLE_CATALOG
=
'def'
and
TABLE_SCHEMA
=
'mysql'
and
TABLE_NAME
=
'user'
and
DEFINER
=
'mariadb.sys@localhost'
);
set
@
need_sys_user_creation
=
(
NOT
@
had_sys_user
)
AND
((
NOT
@
exists_user_view
)
OR
@
exists_user_view_by_root
);
CREATE
TEMPORARY
TABLE
tmp_user_sys
LIKE
global_priv
;
INSERT
INTO
tmp_user_sys
(
Host
,
User
,
Priv
)
VALUES
(
'localhost'
,
'mariadb.sys'
,
'{"access":0,"plugin":"mysql_native_password","authentication_string":"","account_locked":true,"password_last_changed":0}'
);
INSERT
INTO
global_priv
SELECT
*
FROM
tmp_user_sys
WHERE
NOT
@
had_sys_user
;
INSERT
INTO
global_priv
SELECT
*
FROM
tmp_user_sys
WHERE
0
<>
@
need_sys_user_creation
;
DROP
TABLE
tmp_user_sys
;
...
...
@@ -111,7 +117,7 @@ CREATE TABLE IF NOT EXISTS tables_priv ( Host char(60) binary DEFAULT '' NOT NUL
CREATE
TEMPORARY
TABLE
tmp_user_sys
LIKE
tables_priv
;
INSERT
INTO
tmp_user_sys
(
Host
,
Db
,
User
,
Table_name
,
Grantor
,
Timestamp
,
Table_priv
)
VALUES
(
'localhost'
,
'mysql'
,
'mariadb.sys'
,
'global_priv'
,
'root@localhost'
,
'0'
,
'Select,Update,Delete'
);
INSERT
INTO
tables_priv
SELECT
*
FROM
tmp_user_sys
WHERE
NOT
@
had_sys_user
;
INSERT
INTO
tables_priv
SELECT
*
FROM
tmp_user_sys
WHERE
0
<>
@
need_sys_user_creation
;
DROP
TABLE
tmp_user_sys
;
CREATE
TABLE
IF
NOT
EXISTS
columns_priv
(
Host
char
(
60
)
binary
DEFAULT
''
NOT
NULL
,
Db
char
(
64
)
binary
DEFAULT
''
NOT
NULL
,
User
char
(
80
)
binary
DEFAULT
''
NOT
NULL
,
Table_name
char
(
64
)
binary
DEFAULT
''
NOT
NULL
,
Column_name
char
(
64
)
binary
DEFAULT
''
NOT
NULL
,
Timestamp
timestamp
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
ON
UPDATE
CURRENT_TIMESTAMP
,
Column_priv
set
(
'Select'
,
'Insert'
,
'Update'
,
'References'
)
COLLATE
utf8_general_ci
DEFAULT
''
NOT
NULL
,
PRIMARY
KEY
(
Host
,
Db
,
User
,
Table_name
,
Column_name
)
)
engine
=
Aria
transactional
=
1
CHARACTER
SET
utf8
COLLATE
utf8_bin
comment
=
'Column privileges'
;
...
...
storage/innobase/btr/btr0cur.cc
View file @
af27f17e
...
...
@@ -5074,6 +5074,11 @@ btr_cur_pessimistic_update(
btr_page_reorganize
(
page_cursor
,
index
,
mtr
);
rec
=
page_cursor
->
rec
;
rec_offs_make_valid
(
rec
,
index
,
true
,
*
offsets
);
if
(
page_cursor
->
block
->
page
.
id
().
page_no
()
==
index
->
page
)
{
btr_set_instant
(
page_cursor
->
block
,
*
index
,
mtr
);
}
}
else
if
(
!
dict_table_is_locking_disabled
(
index
->
table
))
{
lock_rec_restore_from_page_infimum
(
btr_cur_get_block
(
cursor
),
rec
,
block
);
...
...
storage/myisam/mi_key.c
View file @
af27f17e
...
...
@@ -563,7 +563,15 @@ check_result_t mi_check_index_tuple(MI_INFO *info, uint keynr, uchar *record)
if
(
need_unpack
&&
mi_unpack_index_tuple
(
info
,
keynr
,
record
))
res
=
CHECK_ERROR
;
else
res
=
info
->
rowid_filter_func
(
info
->
rowid_filter_func_arg
);
{
if
((
res
=
info
->
rowid_filter_func
(
info
->
rowid_filter_func_arg
))
==
CHECK_OUT_OF_RANGE
)
{
/* We got beyond the end of scanned range */
info
->
lastpos
=
HA_OFFSET_ERROR
;
/* No active record */
my_errno
=
HA_ERR_END_OF_FILE
;
}
}
}
return
res
;
}
...
...
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