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
b50685af
Commit
b50685af
authored
Jun 04, 2018
by
Marko Mäkelä
Browse files
Options
Browse Files
Download
Plain Diff
Merge 10.2 into 10.3
parents
cac41001
8dc70c86
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
139 additions
and
73 deletions
+139
-73
README.md
README.md
+5
-0
mysql-test/main/cte_nonrecursive.result
mysql-test/main/cte_nonrecursive.result
+16
-0
mysql-test/main/cte_nonrecursive.test
mysql-test/main/cte_nonrecursive.test
+18
-0
mysql-test/suite/gcol/r/innodb_virtual_debug.result
mysql-test/suite/gcol/r/innodb_virtual_debug.result
+11
-3
mysql-test/suite/gcol/t/innodb_virtual_debug.test
mysql-test/suite/gcol/t/innodb_virtual_debug.test
+12
-3
sql/sql_union.cc
sql/sql_union.cc
+1
-1
storage/innobase/dict/dict0dict.cc
storage/innobase/dict/dict0dict.cc
+1
-31
storage/innobase/handler/handler0alter.cc
storage/innobase/handler/handler0alter.cc
+13
-5
storage/innobase/include/dict0dict.h
storage/innobase/include/dict0dict.h
+3
-7
storage/innobase/include/dict0dict.ic
storage/innobase/include/dict0dict.ic
+0
-14
storage/innobase/include/dict0mem.h
storage/innobase/include/dict0mem.h
+39
-0
storage/innobase/log/log0crypt.cc
storage/innobase/log/log0crypt.cc
+8
-3
storage/innobase/log/log0recv.cc
storage/innobase/log/log0recv.cc
+11
-5
storage/innobase/row/row0upd.cc
storage/innobase/row/row0upd.cc
+1
-1
No files found.
README.md
View file @
b50685af
...
...
@@ -17,10 +17,15 @@ see the Credits appendix. You can also run 'SHOW authors' to get a
list of active contributors.
A description of the MariaDB project and a manual can be found at:
https://mariadb.org/
https://mariadb.com/kb/en/
https://mariadb.com/kb/en/mariadb-vs-mysql-features/
https://mariadb.com/kb/en/mariadb-versus-mysql-features/
https://mariadb.com/kb/en/mariadb-versus-mysql-compatibility/
As MariaDB is a full replacement of MySQL, the MySQL manual at
...
...
mysql-test/main/cte_nonrecursive.result
View file @
b50685af
...
...
@@ -1462,3 +1462,19 @@ a b
4 5
4 3
DROP TABLE t1;
#
# MDEV-16353: unreferenced CTE specified by query with UNION
#
with cte as
(select 1 union select 2 union select 3)
select 1 as f;
f
1
create table t1 (a int);
insert into t1 values (2), (1), (7), (1), (4);
with cte as
(select * from t1 where a < 2 union select * from t1 where a > 5)
select 2 as f;
f
2
drop table t1;
mysql-test/main/cte_nonrecursive.test
View file @
b50685af
...
...
@@ -1012,3 +1012,21 @@ SELECT a FROM cte;
WITH
cte
(
a
,
b
)
AS
(
SELECT
4
,
5
UNION
SELECT
4
,
3
)
SELECT
a
,
b
FROM
cte
;
DROP
TABLE
t1
;
--
echo
#
--
echo
# MDEV-16353: unreferenced CTE specified by query with UNION
--
echo
#
with
cte
as
(
select
1
union
select
2
union
select
3
)
select
1
as
f
;
create
table
t1
(
a
int
);
insert
into
t1
values
(
2
),
(
1
),
(
7
),
(
1
),
(
4
);
with
cte
as
(
select
*
from
t1
where
a
<
2
union
select
*
from
t1
where
a
>
5
)
select
2
as
f
;
drop
table
t1
;
\ No newline at end of file
mysql-test/suite/gcol/r/innodb_virtual_debug.result
View file @
b50685af
...
...
@@ -64,11 +64,19 @@ INSERT INTO t VALUES (18, 1, DEFAULT, 'mm');
INSERT INTO t VALUES (28, 1, DEFAULT, 'mm');
INSERT INTO t VALUES (null, null, DEFAULT, 'mm');
CREATE INDEX idx_1 on t(c);
SET SESSION debug_dbug="+d,create_index_fail";
ALTER TABLE t ADD COLUMN x INT GENERATED ALWAYS AS(a+b), ADD INDEX idx (x);
SET @saved_dbug = @@SESSION.debug_dbug;
SET debug_dbug = '+d,create_index_fail';
ALTER TABLE t ADD COLUMN x INT GENERATED ALWAYS AS(a+b), ADD INDEX idx (x),
ADD INDEX idcx (c,x);
ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
SET SESSION debug_dbug="";
UPDATE t SET a=a+1;
affected rows: 3
info: Rows matched: 4 Changed: 3 Warnings: 0
ALTER TABLE t ADD INDEX idc(c);
ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
SET debug_dbug = @saved_dbug;
affected rows: 0
UPDATE t SET b=b-1;
SHOW CREATE TABLE t;
Table Create Table
t CREATE TABLE `t` (
...
...
mysql-test/suite/gcol/t/innodb_virtual_debug.test
View file @
b50685af
...
...
@@ -119,14 +119,23 @@ INSERT INTO t VALUES (null, null, DEFAULT, 'mm');
CREATE
INDEX
idx_1
on
t
(
c
);
SET
SESSION
debug_dbug
=
"+d,create_index_fail"
;
SET
@
saved_dbug
=
@@
SESSION
.
debug_dbug
;
SET
debug_dbug
=
'+d,create_index_fail'
;
--
enable_info
--
error
ER_DUP_ENTRY
ALTER
TABLE
t
ADD
COLUMN
x
INT
GENERATED
ALWAYS
AS
(
a
+
b
),
ADD
INDEX
idx
(
x
);
SET
SESSION
debug_dbug
=
""
;
ALTER
TABLE
t
ADD
COLUMN
x
INT
GENERATED
ALWAYS
AS
(
a
+
b
),
ADD
INDEX
idx
(
x
),
ADD
INDEX
idcx
(
c
,
x
);
UPDATE
t
SET
a
=
a
+
1
;
--
error
ER_DUP_ENTRY
ALTER
TABLE
t
ADD
INDEX
idc
(
c
);
SET
debug_dbug
=
@
saved_dbug
;
--
disable_info
UPDATE
t
SET
b
=
b
-
1
;
SHOW
CREATE
TABLE
t
;
SELECT
c
FROM
t
;
...
...
sql/sql_union.cc
View file @
b50685af
...
...
@@ -1008,7 +1008,7 @@ bool st_select_lex_unit::prepare(TABLE_LIST *derived_arg,
{
if
(
with_element
)
{
if
(
derived_arg
->
with
->
rename_columns_of_derived_unit
(
thd
,
this
))
if
(
with_element
->
rename_columns_of_derived_unit
(
thd
,
this
))
goto
err
;
if
(
check_duplicate_names
(
thd
,
sl
->
item_list
,
0
))
goto
err
;
...
...
storage/innobase/dict/dict0dict.cc
View file @
b50685af
...
...
@@ -2612,37 +2612,7 @@ dict_index_remove_from_cache_low(
UT_LIST_REMOVE
(
table
->
indexes
,
index
);
/* Remove the index from affected virtual column index list */
if
(
dict_index_has_virtual
(
index
))
{
const
dict_col_t
*
col
;
const
dict_v_col_t
*
vcol
;
for
(
ulint
i
=
0
;
i
<
dict_index_get_n_fields
(
index
);
i
++
)
{
col
=
dict_index_get_nth_col
(
index
,
i
);
if
(
col
->
is_virtual
())
{
vcol
=
reinterpret_cast
<
const
dict_v_col_t
*>
(
col
);
/* This could be NULL, when we do add virtual
column, add index together. We do not need to
track this virtual column's index */
if
(
vcol
->
v_indexes
==
NULL
)
{
continue
;
}
dict_v_idx_list
::
iterator
it
;
for
(
it
=
vcol
->
v_indexes
->
begin
();
it
!=
vcol
->
v_indexes
->
end
();
++
it
)
{
dict_v_idx_t
v_index
=
*
it
;
if
(
v_index
.
index
==
index
)
{
vcol
->
v_indexes
->
erase
(
it
);
break
;
}
}
}
}
}
index
->
detach_columns
();
dict_mem_index_free
(
index
);
}
...
...
storage/innobase/handler/handler0alter.cc
View file @
b50685af
...
...
@@ -58,10 +58,6 @@ Smart ALTER TABLE
#include "ha_innodb.h"
#include "ut0new.h"
#include "ut0stage.h"
#ifdef WITH_WSREP
//#include "wsrep_api.h"
#include <sql_acl.h> // PROCESS_ACL
#endif
static
const
char
*
MSG_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN
=
"INPLACE ADD or DROP of virtual columns cannot be "
...
...
@@ -289,6 +285,16 @@ struct ha_innobase_inplace_ctx : public inplace_alter_handler_ctx
@return whether the table will be rebuilt */
bool
need_rebuild
()
const
{
return
(
old_table
!=
new_table
);
}
/** Clear uncommmitted added indexes after a failed operation. */
void
clear_added_indexes
()
{
for
(
ulint
i
=
0
;
i
<
num_to_add_index
;
i
++
)
{
if
(
!
add_index
[
i
]
->
is_committed
())
{
add_index
[
i
]
->
detach_columns
();
}
}
}
/** Convert table-rebuilding ALTER to instant ALTER. */
void
prepare_instant
()
{
...
...
@@ -6726,7 +6732,8 @@ ha_innobase::prepare_inplace_alter_table(
for
(
dict_index_t
*
index
=
dict_table_get_first_index
(
indexed_table
);
index
!=
NULL
;
index
=
dict_table_get_next_index
(
index
))
{
if
(
!
index
->
to_be_dropped
&&
index
->
is_corrupted
())
{
if
(
!
index
->
to_be_dropped
&&
index
->
is_committed
()
&&
index
->
is_corrupted
())
{
my_error
(
ER_INDEX_CORRUPT
,
MYF
(
0
),
index
->
name
());
goto
err_exit
;
}
...
...
@@ -7293,6 +7300,7 @@ ha_innobase::inplace_alter_table(
that we hold at most a shared lock on the table. */
m_prebuilt
->
trx
->
error_info
=
NULL
;
ctx
->
trx
->
error_state
=
DB_SUCCESS
;
ctx
->
clear_added_indexes
();
DBUG_RETURN
(
true
);
}
...
...
storage/innobase/include/dict0dict.h
View file @
b50685af
...
...
@@ -731,13 +731,9 @@ dict_index_is_spatial(
/*==================*/
const
dict_index_t
*
index
)
/*!< in: index */
MY_ATTRIBUTE
((
warn_unused_result
));
/** Check whether the index contains a virtual column.
@param[in] index index
@return nonzero for index on virtual column, zero for other indexes */
UNIV_INLINE
ulint
dict_index_has_virtual
(
const
dict_index_t
*
index
);
#define dict_index_has_virtual(index) (index)->has_virtual()
/********************************************************************//**
Check whether the index is the insert buffer tree.
@return nonzero for insert buffer, zero for other indexes */
...
...
storage/innobase/include/dict0dict.ic
View file @
b50685af
...
...
@@ -314,20 +314,6 @@ dict_index_is_spatial(
return ulint(UNIV_EXPECT(index->type & DICT_SPATIAL, 0));
}
/** Check whether the index contains a virtual column
@param[in] index index
@return nonzero for the index has virtual column, zero for other indexes */
UNIV_INLINE
ulint
dict_index_has_virtual(
const dict_index_t* index)
{
ut_ad(index);
ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
return(index->type & DICT_VIRTUAL);
}
/********************************************************************//**
Check whether the index is the insert buffer tree.
@return nonzero for insert buffer, zero for other indexes */
...
...
storage/innobase/include/dict0mem.h
View file @
b50685af
...
...
@@ -588,6 +588,10 @@ struct dict_col_t{
3072 (REC_VERSION_56_MAX_INDEX_COL_LEN)
bytes. */
/** Detach the column from an index.
@param[in] index index to be detached from */
inline
void
detach
(
const
dict_index_t
&
index
);
/** Data for instantly added columns */
struct
{
/** original default value of instantly added column */
...
...
@@ -1045,9 +1049,24 @@ struct dict_index_t{
return
DICT_CLUSTERED
==
(
type
&
(
DICT_CLUSTERED
|
DICT_IBUF
));
}
/** @return whether the index includes virtual columns */
bool
has_virtual
()
const
{
return
type
&
DICT_VIRTUAL
;
}
/** @return whether the index is corrupted */
inline
bool
is_corrupted
()
const
;
/** Detach the columns from the index that is to be freed. */
void
detach_columns
()
{
if
(
has_virtual
())
{
for
(
unsigned
i
=
0
;
i
<
n_fields
;
i
++
)
{
fields
[
i
].
col
->
detach
(
*
this
);
}
n_fields
=
0
;
}
}
/** Determine how many fields of a given prefix can be set NULL.
@param[in] n_prefix number of fields in the prefix
@return number of fields 0..n_prefix-1 that can be set NULL */
...
...
@@ -1112,6 +1131,26 @@ struct dict_index_t{
vers_history_row
(
const
rec_t
*
rec
,
bool
&
history_row
);
};
/** Detach a column from an index.
@param[in] index index to be detached from */
inline
void
dict_col_t
::
detach
(
const
dict_index_t
&
index
)
{
if
(
!
is_virtual
())
{
return
;
}
if
(
dict_v_idx_list
*
v_indexes
=
reinterpret_cast
<
const
dict_v_col_t
*>
(
this
)
->
v_indexes
)
{
for
(
dict_v_idx_list
::
iterator
i
=
v_indexes
->
begin
();
i
!=
v_indexes
->
end
();
i
++
)
{
if
(
i
->
index
==
&
index
)
{
v_indexes
->
erase
(
i
);
return
;
}
}
}
}
/** The status of online index creation */
enum
online_index_status
{
/** the index is complete and ready for access */
...
...
storage/innobase/log/log0crypt.cc
View file @
b50685af
/*****************************************************************************
Copyright (C) 2013, 2015, Google Inc. All Rights Reserved.
Copyright (C) 2014, 201
7, MariaDB Corporation. All Rights Reserved
.
Copyright (C) 2014, 201
8, MariaDB Corporation
.
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
...
...
@@ -160,7 +160,7 @@ static bool init_crypt_key(crypt_info_t* info, bool upgrade = false)
<<
"Obtaining redo log encryption key version "
<<
info
->
key_version
<<
" failed ("
<<
rc
<<
"). Maybe the key or the required encryption "
<<
"
key management plugin was not found."
;
"
key management plugin was not found."
;
return
false
;
}
...
...
@@ -280,7 +280,12 @@ log_crypt_101_read_block(byte* buf)
}
}
return
false
;
if
(
infos_used
==
0
)
{
return
false
;
}
/* MariaDB Server 10.1 would use the first key if it fails to
find a key for the current checkpoint. */
info
=
infos
;
found:
byte
dst
[
OS_FILE_LOG_BLOCK_SIZE
];
uint
dst_len
;
...
...
storage/innobase/log/log0recv.cc
View file @
b50685af
...
...
@@ -858,12 +858,11 @@ recv_find_max_checkpoint_0(ulint* max_field)
/** Determine if a pre-MySQL 5.7.9/MariaDB 10.2.2 redo log is clean.
@param[in] lsn checkpoint LSN
@param[in] crypt whether the log might be encrypted
@return error code
@retval DB_SUCCESS if the redo log is clean
@retval DB_ERROR if the redo log is corrupted or dirty */
static
dberr_t
recv_log_format_0_recover
(
lsn_t
lsn
)
static
dberr_t
recv_log_format_0_recover
(
lsn_t
lsn
,
bool
crypt
)
{
log_mutex_enter
();
const
lsn_t
source_offset
=
log_sys
.
log
.
calc_lsn_offset
(
lsn
);
...
...
@@ -891,7 +890,13 @@ recv_log_format_0_recover(lsn_t lsn)
}
if
(
log_block_get_data_len
(
buf
)
!=
(
source_offset
&
(
OS_FILE_LOG_BLOCK_SIZE
-
1
)))
{
==
(
source_offset
&
(
OS_FILE_LOG_BLOCK_SIZE
-
1
)))
{
}
else
if
(
crypt
)
{
ib
::
error
()
<<
"Cannot decrypt log for upgrading."
" The encrypted log was created"
" before MariaDB 10.2.2."
;
return
DB_ERROR
;
}
else
{
ib
::
error
()
<<
NO_UPGRADE_RECOVERY_MSG
<<
"."
;
return
(
DB_ERROR
);
}
...
...
@@ -3153,7 +3158,8 @@ recv_recovery_from_checkpoint_start(lsn_t flush_lsn)
switch
(
log_sys
.
log
.
format
)
{
case
0
:
log_mutex_exit
();
return
(
recv_log_format_0_recover
(
checkpoint_lsn
));
return
recv_log_format_0_recover
(
checkpoint_lsn
,
buf
[
20
+
32
*
9
]
==
2
);
default:
if
(
end_lsn
==
0
)
{
break
;
...
...
storage/innobase/row/row0upd.cc
View file @
b50685af
...
...
@@ -581,7 +581,7 @@ row_upd_changes_field_size_or_external(
/* We should ignore virtual field if the index is not
a virtual index */
if
(
upd_fld_is_virtual_col
(
upd_field
)
&&
dict_index_has_virtual
(
index
)
!=
DICT_VIRTUAL
)
{
&&
!
index
->
has_virtual
()
)
{
continue
;
}
...
...
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