mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge 10.0 into 10.1
This commit is contained in:
186
man/mysqladmin.1
186
man/mysqladmin.1
@ -1,6 +1,6 @@
|
|||||||
'\" t
|
'\" t
|
||||||
.\"
|
.\"
|
||||||
.TH "\FBMYSQLADMIN\FR" "1" "14/12/2015" "MariaDB 10\&.1" "MariaDB Database System"
|
.TH "\FBMYSQLADMIN\FR" "1" "28 December 2017" "MariaDB 10\&.1" "MariaDB Database System"
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
.\" * set default formatting
|
.\" * set default formatting
|
||||||
.\" -----------------------------------------------------------------
|
.\" -----------------------------------------------------------------
|
||||||
@ -106,6 +106,97 @@ Display the server status variables and their values\&.
|
|||||||
.sp -1
|
.sp -1
|
||||||
.IP \(bu 2.3
|
.IP \(bu 2.3
|
||||||
.\}
|
.\}
|
||||||
|
flush\-all\-statistics
|
||||||
|
.sp
|
||||||
|
Flush all statistics tables\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
|
flush\-all\-status
|
||||||
|
.sp
|
||||||
|
Flush all status and statistics\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
|
flush\-binary\-log
|
||||||
|
.sp
|
||||||
|
Flush the binary log\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
|
flush\-client\-statistics
|
||||||
|
.sp
|
||||||
|
Flush client statistics\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
|
flush\-engine\-log
|
||||||
|
.sp
|
||||||
|
Flush engine log\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
|
flush\-error\-log
|
||||||
|
.sp
|
||||||
|
Flush error log\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
|
flush\-general\-log
|
||||||
|
.sp
|
||||||
|
Flush general query log\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
flush\-hosts
|
flush\-hosts
|
||||||
.sp
|
.sp
|
||||||
Flush all information in the host cache\&.
|
Flush all information in the host cache\&.
|
||||||
@ -119,6 +210,19 @@ Flush all information in the host cache\&.
|
|||||||
.sp -1
|
.sp -1
|
||||||
.IP \(bu 2.3
|
.IP \(bu 2.3
|
||||||
.\}
|
.\}
|
||||||
|
flush\-index\-statistics
|
||||||
|
.sp
|
||||||
|
Flush index statistics\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
flush\-logs
|
flush\-logs
|
||||||
.sp
|
.sp
|
||||||
Flush all logs\&.
|
Flush all logs\&.
|
||||||
@ -146,6 +250,32 @@ reload)\&.
|
|||||||
.sp -1
|
.sp -1
|
||||||
.IP \(bu 2.3
|
.IP \(bu 2.3
|
||||||
.\}
|
.\}
|
||||||
|
flush\-relay\-log
|
||||||
|
.sp
|
||||||
|
Flush relay log\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
|
flush\-slow\-log
|
||||||
|
.sp
|
||||||
|
Flush slow query log\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
flush\-status
|
flush\-status
|
||||||
.sp
|
.sp
|
||||||
Clear status variables\&.
|
Clear status variables\&.
|
||||||
@ -159,6 +289,19 @@ Clear status variables\&.
|
|||||||
.sp -1
|
.sp -1
|
||||||
.IP \(bu 2.3
|
.IP \(bu 2.3
|
||||||
.\}
|
.\}
|
||||||
|
flush\-table\-statistics
|
||||||
|
.sp
|
||||||
|
Flush table statistics\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
flush\-tables
|
flush\-tables
|
||||||
.sp
|
.sp
|
||||||
Flush all tables\&.
|
Flush all tables\&.
|
||||||
@ -185,6 +328,19 @@ Flush the thread cache\&.
|
|||||||
.sp -1
|
.sp -1
|
||||||
.IP \(bu 2.3
|
.IP \(bu 2.3
|
||||||
.\}
|
.\}
|
||||||
|
flush\-user\-resources
|
||||||
|
.sp
|
||||||
|
Flush user resources\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
kill \fIid\fR,\fIid\fR,\&.\&.\&.
|
kill \fIid\fR,\fIid\fR,\&.\&.\&.
|
||||||
.sp
|
.sp
|
||||||
Kill server threads\&. If multiple thread ID values are given, there must be no spaces in the list\&.
|
Kill server threads\&. If multiple thread ID values are given, there must be no spaces in the list\&.
|
||||||
@ -344,6 +500,19 @@ Stop the server\&.
|
|||||||
.sp -1
|
.sp -1
|
||||||
.IP \(bu 2.3
|
.IP \(bu 2.3
|
||||||
.\}
|
.\}
|
||||||
|
start\-all\-slaves
|
||||||
|
.sp
|
||||||
|
Start all slaves\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
start\-slave
|
start\-slave
|
||||||
.sp
|
.sp
|
||||||
Start replication on a slave server\&.
|
Start replication on a slave server\&.
|
||||||
@ -370,6 +539,19 @@ Display a short server status message\&.
|
|||||||
.sp -1
|
.sp -1
|
||||||
.IP \(bu 2.3
|
.IP \(bu 2.3
|
||||||
.\}
|
.\}
|
||||||
|
stop\-all\-slaves
|
||||||
|
.sp
|
||||||
|
Stop all slaves\&.
|
||||||
|
.RE
|
||||||
|
.sp
|
||||||
|
.RS 4
|
||||||
|
.ie n \{\
|
||||||
|
\h'-04'\(bu\h'+03'\c
|
||||||
|
.\}
|
||||||
|
.el \{\
|
||||||
|
.sp -1
|
||||||
|
.IP \(bu 2.3
|
||||||
|
.\}
|
||||||
stop\-slave
|
stop\-slave
|
||||||
.sp
|
.sp
|
||||||
Stop replication on a slave server\&.
|
Stop replication on a slave server\&.
|
||||||
@ -821,7 +1003,7 @@ Connect to the MariaDB server on the given host\&.
|
|||||||
\fB\-\-local\fR,
|
\fB\-\-local\fR,
|
||||||
\fB\-l\fR
|
\fB\-l\fR
|
||||||
.sp
|
.sp
|
||||||
Suppress the SQL command(s) from being written to the binary log by enabling sql_log_bin=0 for the session\&.
|
Suppress the SQL command(s) from being written to the binary log by using FLUSH LOCAL or enabling sql_log_bin=0 for the session\&.
|
||||||
.RE
|
.RE
|
||||||
.sp
|
.sp
|
||||||
.RS 4
|
.RS 4
|
||||||
|
@ -1,16 +1,11 @@
|
|||||||
# truncate a giving file, all contents of the file are be cleared
|
# truncate a giving file, all contents of the file are be cleared
|
||||||
|
|
||||||
if (!$file)
|
if (!$TRUNCATE_FILE)
|
||||||
{
|
{
|
||||||
--echo Please assign a file name to $file!!
|
die TRUNCATE_FILE is not set;
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let TRUNCATE_FILE= $file;
|
|
||||||
|
|
||||||
perl;
|
perl;
|
||||||
use Env;
|
open FILE, '>', $ENV{TRUNCATE_FILE} or die "open(>$ENV{TRUNCATE_FILE}): $!";
|
||||||
Env::import('TRUNCATE_FILE');
|
|
||||||
open FILE, '>', $TRUNCATE_FILE || die "Can not open file $file";
|
|
||||||
close FILE;
|
close FILE;
|
||||||
EOF
|
EOF
|
||||||
|
@ -4332,4 +4332,22 @@ set join_cache_level=@join_cache_level_save;
|
|||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop view v1,v2,v3;
|
drop view v1,v2,v3;
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
|
#
|
||||||
|
# MDEV-10657: incorrect result returned with binary protocol
|
||||||
|
# (prepared statements)
|
||||||
|
#
|
||||||
|
create table t1 (code varchar(10) primary key);
|
||||||
|
INSERT INTO t1(code) VALUES ('LINE1'), ('LINE2'), ('LINE3');
|
||||||
|
SELECT X.*
|
||||||
|
FROM
|
||||||
|
(SELECT CODE, RN
|
||||||
|
FROM
|
||||||
|
(SELECT A.CODE, @cnt := @cnt + 1 AS RN
|
||||||
|
FROM t1 A, (SELECT @cnt := 0) C) T
|
||||||
|
) X;
|
||||||
|
CODE RN
|
||||||
|
LINE1 1
|
||||||
|
LINE2 2
|
||||||
|
LINE3 3
|
||||||
|
drop table t1;
|
||||||
# End of 5.5 tests
|
# End of 5.5 tests
|
||||||
|
@ -25,7 +25,7 @@ sync_slave_with_master;
|
|||||||
connection master;
|
connection master;
|
||||||
# Delete './master-bin.000001' from index file.
|
# Delete './master-bin.000001' from index file.
|
||||||
let $MYSQLD_DATADIR= `SELECT @@DATADIR`;
|
let $MYSQLD_DATADIR= `SELECT @@DATADIR`;
|
||||||
let $file= $MYSQLD_DATADIR/master-bin.index;
|
let TRUNCATE_FILE= $MYSQLD_DATADIR/master-bin.index;
|
||||||
source include/truncate_file.inc;
|
source include/truncate_file.inc;
|
||||||
|
|
||||||
if (`SELECT CONVERT(@@VERSION_COMPILE_OS USING latin1) NOT IN ('Win32', 'Win64', 'Windows')`)
|
if (`SELECT CONVERT(@@VERSION_COMPILE_OS USING latin1) NOT IN ('Win32', 'Win64', 'Windows')`)
|
||||||
|
@ -3860,4 +3860,19 @@ deallocate prepare stmt;
|
|||||||
drop view v1,v2,v3;
|
drop view v1,v2,v3;
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-10657: incorrect result returned with binary protocol
|
||||||
|
--echo # (prepared statements)
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t1 (code varchar(10) primary key);
|
||||||
|
INSERT INTO t1(code) VALUES ('LINE1'), ('LINE2'), ('LINE3');
|
||||||
|
SELECT X.*
|
||||||
|
FROM
|
||||||
|
(SELECT CODE, RN
|
||||||
|
FROM
|
||||||
|
(SELECT A.CODE, @cnt := @cnt + 1 AS RN
|
||||||
|
FROM t1 A, (SELECT @cnt := 0) C) T
|
||||||
|
) X;
|
||||||
|
drop table t1;
|
||||||
--echo # End of 5.5 tests
|
--echo # End of 5.5 tests
|
||||||
|
@ -2657,6 +2657,8 @@ void THD::nocheck_register_item_tree_change(Item **place, Item *old_value,
|
|||||||
MEM_ROOT *runtime_memroot)
|
MEM_ROOT *runtime_memroot)
|
||||||
{
|
{
|
||||||
Item_change_record *change;
|
Item_change_record *change;
|
||||||
|
DBUG_ENTER("THD::nocheck_register_item_tree_change");
|
||||||
|
DBUG_PRINT("enter", ("Register %p <- %p", old_value, (*place)));
|
||||||
/*
|
/*
|
||||||
Now we use one node per change, which adds some memory overhead,
|
Now we use one node per change, which adds some memory overhead,
|
||||||
but still is rather fast as we use alloc_root for allocations.
|
but still is rather fast as we use alloc_root for allocations.
|
||||||
@ -2669,12 +2671,13 @@ void THD::nocheck_register_item_tree_change(Item **place, Item *old_value,
|
|||||||
OOM, thd->fatal_error() is called by the error handler of the
|
OOM, thd->fatal_error() is called by the error handler of the
|
||||||
memroot. Just return.
|
memroot. Just return.
|
||||||
*/
|
*/
|
||||||
return;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
change= new (change_mem) Item_change_record;
|
change= new (change_mem) Item_change_record;
|
||||||
change->place= place;
|
change->place= place;
|
||||||
change->old_value= old_value;
|
change->old_value= old_value;
|
||||||
change_list.append(change);
|
change_list.append(change);
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2715,7 +2718,11 @@ void THD::rollback_item_tree_changes()
|
|||||||
DBUG_ENTER("rollback_item_tree_changes");
|
DBUG_ENTER("rollback_item_tree_changes");
|
||||||
|
|
||||||
while ((change= it++))
|
while ((change= it++))
|
||||||
|
{
|
||||||
|
DBUG_PRINT("info", ("revert %p -> %p",
|
||||||
|
change->old_value, (*change->place)));
|
||||||
*change->place= change->old_value;
|
*change->place= change->old_value;
|
||||||
|
}
|
||||||
/* We can forget about changes memory: it's allocated in runtime memroot */
|
/* We can forget about changes memory: it's allocated in runtime memroot */
|
||||||
change_list.empty();
|
change_list.empty();
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
|
@ -362,6 +362,9 @@ bool mysql_derived_merge(THD *thd, LEX *lex, TABLE_LIST *derived)
|
|||||||
SELECT_LEX *parent_lex= derived->select_lex;
|
SELECT_LEX *parent_lex= derived->select_lex;
|
||||||
Query_arena *arena, backup;
|
Query_arena *arena, backup;
|
||||||
DBUG_ENTER("mysql_derived_merge");
|
DBUG_ENTER("mysql_derived_merge");
|
||||||
|
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||||
|
(derived->alias ? derived->alias : "<NULL>"),
|
||||||
|
derived->get_unit()));
|
||||||
|
|
||||||
if (derived->merged)
|
if (derived->merged)
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
@ -510,7 +513,9 @@ unconditional_materialization:
|
|||||||
bool mysql_derived_merge_for_insert(THD *thd, LEX *lex, TABLE_LIST *derived)
|
bool mysql_derived_merge_for_insert(THD *thd, LEX *lex, TABLE_LIST *derived)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("mysql_derived_merge_for_insert");
|
DBUG_ENTER("mysql_derived_merge_for_insert");
|
||||||
DBUG_PRINT("enter", ("derived: %p", derived));
|
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||||
|
(derived->alias ? derived->alias : "<NULL>"),
|
||||||
|
derived->get_unit()));
|
||||||
DBUG_PRINT("info", ("merged_for_insert: %d is_materialized_derived: %d "
|
DBUG_PRINT("info", ("merged_for_insert: %d is_materialized_derived: %d "
|
||||||
"is_multitable: %d single_table_updatable: %d "
|
"is_multitable: %d single_table_updatable: %d "
|
||||||
"merge_underlying_list: %d",
|
"merge_underlying_list: %d",
|
||||||
@ -566,7 +571,9 @@ bool mysql_derived_init(THD *thd, LEX *lex, TABLE_LIST *derived)
|
|||||||
{
|
{
|
||||||
SELECT_LEX_UNIT *unit= derived->get_unit();
|
SELECT_LEX_UNIT *unit= derived->get_unit();
|
||||||
DBUG_ENTER("mysql_derived_init");
|
DBUG_ENTER("mysql_derived_init");
|
||||||
DBUG_PRINT("enter", ("derived: %p", derived));
|
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||||
|
(derived->alias ? derived->alias : "<NULL>"),
|
||||||
|
derived->get_unit()));
|
||||||
|
|
||||||
// Skip already prepared views/DT
|
// Skip already prepared views/DT
|
||||||
if (!unit || unit->prepared)
|
if (!unit || unit->prepared)
|
||||||
@ -637,8 +644,9 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *derived)
|
|||||||
SELECT_LEX_UNIT *unit= derived->get_unit();
|
SELECT_LEX_UNIT *unit= derived->get_unit();
|
||||||
DBUG_ENTER("mysql_derived_prepare");
|
DBUG_ENTER("mysql_derived_prepare");
|
||||||
bool res= FALSE;
|
bool res= FALSE;
|
||||||
DBUG_PRINT("enter", ("unit: %p table_list: %p Alias '%s'",
|
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||||
unit, derived, derived->alias));
|
(derived->alias ? derived->alias : "<NULL>"),
|
||||||
|
unit));
|
||||||
|
|
||||||
// Skip already prepared views/DT
|
// Skip already prepared views/DT
|
||||||
if (!unit || unit->prepared ||
|
if (!unit || unit->prepared ||
|
||||||
@ -795,6 +803,9 @@ bool mysql_derived_optimize(THD *thd, LEX *lex, TABLE_LIST *derived)
|
|||||||
|
|
||||||
bool res= FALSE;
|
bool res= FALSE;
|
||||||
DBUG_ENTER("mysql_derived_optimize");
|
DBUG_ENTER("mysql_derived_optimize");
|
||||||
|
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||||
|
(derived->alias ? derived->alias : "<NULL>"),
|
||||||
|
derived->get_unit()));
|
||||||
|
|
||||||
if (unit->optimized)
|
if (unit->optimized)
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
@ -860,6 +871,9 @@ err:
|
|||||||
bool mysql_derived_create(THD *thd, LEX *lex, TABLE_LIST *derived)
|
bool mysql_derived_create(THD *thd, LEX *lex, TABLE_LIST *derived)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("mysql_derived_create");
|
DBUG_ENTER("mysql_derived_create");
|
||||||
|
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||||
|
(derived->alias ? derived->alias : "<NULL>"),
|
||||||
|
derived->get_unit()));
|
||||||
TABLE *table= derived->table;
|
TABLE *table= derived->table;
|
||||||
SELECT_LEX_UNIT *unit= derived->get_unit();
|
SELECT_LEX_UNIT *unit= derived->get_unit();
|
||||||
|
|
||||||
@ -909,9 +923,13 @@ bool mysql_derived_create(THD *thd, LEX *lex, TABLE_LIST *derived)
|
|||||||
|
|
||||||
bool mysql_derived_fill(THD *thd, LEX *lex, TABLE_LIST *derived)
|
bool mysql_derived_fill(THD *thd, LEX *lex, TABLE_LIST *derived)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("mysql_derived_fill");
|
Field_iterator_table field_iterator;
|
||||||
SELECT_LEX_UNIT *unit= derived->get_unit();
|
SELECT_LEX_UNIT *unit= derived->get_unit();
|
||||||
bool res= FALSE;
|
bool res= FALSE;
|
||||||
|
DBUG_ENTER("mysql_derived_fill");
|
||||||
|
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||||
|
(derived->alias ? derived->alias : "<NULL>"),
|
||||||
|
derived->get_unit()));
|
||||||
|
|
||||||
if (unit->executed && !unit->uncacheable && !unit->describe)
|
if (unit->executed && !unit->uncacheable && !unit->describe)
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
@ -951,7 +969,27 @@ bool mysql_derived_fill(THD *thd, LEX *lex, TABLE_LIST *derived)
|
|||||||
if (derived_result->flush())
|
if (derived_result->flush())
|
||||||
res= TRUE;
|
res= TRUE;
|
||||||
unit->executed= TRUE;
|
unit->executed= TRUE;
|
||||||
|
|
||||||
|
if (derived->field_translation)
|
||||||
|
{
|
||||||
|
/* reset translation table to materialized table */
|
||||||
|
field_iterator.set_table(derived->table);
|
||||||
|
for (uint i= 0;
|
||||||
|
!field_iterator.end_of_fields();
|
||||||
|
field_iterator.next(), i= i + 1)
|
||||||
|
{
|
||||||
|
Item *item;
|
||||||
|
|
||||||
|
if (!(item= field_iterator.create_item(thd)))
|
||||||
|
{
|
||||||
|
res= TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
thd->change_item_tree(&derived->field_translation[i].item, item);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res || !lex->describe)
|
if (res || !lex->describe)
|
||||||
unit->cleanup();
|
unit->cleanup();
|
||||||
lex->current_select= save_current_select;
|
lex->current_select= save_current_select;
|
||||||
@ -980,6 +1018,9 @@ bool mysql_derived_fill(THD *thd, LEX *lex, TABLE_LIST *derived)
|
|||||||
bool mysql_derived_reinit(THD *thd, LEX *lex, TABLE_LIST *derived)
|
bool mysql_derived_reinit(THD *thd, LEX *lex, TABLE_LIST *derived)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("mysql_derived_reinit");
|
DBUG_ENTER("mysql_derived_reinit");
|
||||||
|
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||||
|
(derived->alias ? derived->alias : "<NULL>"),
|
||||||
|
derived->get_unit()));
|
||||||
st_select_lex_unit *unit= derived->get_unit();
|
st_select_lex_unit *unit= derived->get_unit();
|
||||||
|
|
||||||
derived->merged_for_insert= FALSE;
|
derived->merged_for_insert= FALSE;
|
||||||
|
@ -4260,6 +4260,9 @@ bool TABLE_LIST::create_field_translation(THD *thd)
|
|||||||
Query_arena *arena, backup;
|
Query_arena *arena, backup;
|
||||||
bool res= FALSE;
|
bool res= FALSE;
|
||||||
DBUG_ENTER("TABLE_LIST::create_field_translation");
|
DBUG_ENTER("TABLE_LIST::create_field_translation");
|
||||||
|
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||||
|
(alias ? alias : "<NULL>"),
|
||||||
|
get_unit()));
|
||||||
|
|
||||||
if (thd->stmt_arena->is_conventional() ||
|
if (thd->stmt_arena->is_conventional() ||
|
||||||
thd->stmt_arena->is_stmt_prepare_or_first_sp_execute())
|
thd->stmt_arena->is_stmt_prepare_or_first_sp_execute())
|
||||||
|
@ -2287,6 +2287,9 @@ struct TABLE_LIST
|
|||||||
inline void set_merged_derived()
|
inline void set_merged_derived()
|
||||||
{
|
{
|
||||||
DBUG_ENTER("set_merged_derived");
|
DBUG_ENTER("set_merged_derived");
|
||||||
|
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||||
|
(alias ? alias : "<NULL>"),
|
||||||
|
get_unit()));
|
||||||
derived_type= ((derived_type & DTYPE_MASK) |
|
derived_type= ((derived_type & DTYPE_MASK) |
|
||||||
DTYPE_TABLE | DTYPE_MERGE);
|
DTYPE_TABLE | DTYPE_MERGE);
|
||||||
set_check_merged();
|
set_check_merged();
|
||||||
@ -2299,6 +2302,9 @@ struct TABLE_LIST
|
|||||||
void set_materialized_derived()
|
void set_materialized_derived()
|
||||||
{
|
{
|
||||||
DBUG_ENTER("set_materialized_derived");
|
DBUG_ENTER("set_materialized_derived");
|
||||||
|
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||||
|
(alias ? alias : "<NULL>"),
|
||||||
|
get_unit()));
|
||||||
derived_type= ((derived_type & (derived ? DTYPE_MASK : DTYPE_VIEW)) |
|
derived_type= ((derived_type & (derived ? DTYPE_MASK : DTYPE_VIEW)) |
|
||||||
DTYPE_TABLE | DTYPE_MATERIALIZE);
|
DTYPE_TABLE | DTYPE_MATERIALIZE);
|
||||||
set_check_materialized();
|
set_check_materialized();
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2017, MariaDB Corporation.
|
Copyright (c) 2017, 2018, 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
|
||||||
@ -196,6 +196,7 @@ trx_undo_rec_get_partial_row(
|
|||||||
used, as we do NOT copy the data in the
|
used, as we do NOT copy the data in the
|
||||||
record! */
|
record! */
|
||||||
dict_index_t* index, /*!< in: clustered index */
|
dict_index_t* index, /*!< in: clustered index */
|
||||||
|
const upd_t* update, /*!< in: updated columns */
|
||||||
dtuple_t** row, /*!< out, own: partial row */
|
dtuple_t** row, /*!< out, own: partial row */
|
||||||
ibool ignore_prefix, /*!< in: flag to indicate if we
|
ibool ignore_prefix, /*!< in: flag to indicate if we
|
||||||
expect blob prefixes in undo. Used
|
expect blob prefixes in undo. Used
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2017, MariaDB Corporation.
|
Copyright (c) 2017, 2018, 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
|
||||||
@ -823,7 +823,7 @@ err_exit:
|
|||||||
|
|
||||||
if (!(node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) {
|
if (!(node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) {
|
||||||
ptr = trx_undo_rec_get_partial_row(
|
ptr = trx_undo_rec_get_partial_row(
|
||||||
ptr, clust_index, &node->row,
|
ptr, clust_index, node->update, &node->row,
|
||||||
type == TRX_UNDO_UPD_DEL_REC,
|
type == TRX_UNDO_UPD_DEL_REC,
|
||||||
node->heap);
|
node->heap);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2017, MariaDB Corporation.
|
Copyright (c) 2017, 2018, 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
|
||||||
@ -1076,6 +1076,7 @@ trx_undo_rec_get_partial_row(
|
|||||||
used, as we do NOT copy the data in the
|
used, as we do NOT copy the data in the
|
||||||
record! */
|
record! */
|
||||||
dict_index_t* index, /*!< in: clustered index */
|
dict_index_t* index, /*!< in: clustered index */
|
||||||
|
const upd_t* update, /*!< in: updated columns */
|
||||||
dtuple_t** row, /*!< out, own: partial row */
|
dtuple_t** row, /*!< out, own: partial row */
|
||||||
ibool ignore_prefix, /*!< in: flag to indicate if we
|
ibool ignore_prefix, /*!< in: flag to indicate if we
|
||||||
expect blob prefixes in undo. Used
|
expect blob prefixes in undo. Used
|
||||||
@ -1103,6 +1104,13 @@ trx_undo_rec_get_partial_row(
|
|||||||
->mtype = DATA_MISSING;
|
->mtype = DATA_MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const upd_field_t* uf = update->fields, * const ue
|
||||||
|
= update->fields + update->n_fields;
|
||||||
|
uf != ue; uf++) {
|
||||||
|
ulint c = dict_index_get_nth_col(index, uf->field_no)->ind;
|
||||||
|
*dtuple_get_nth_field(*row, c) = uf->new_val;
|
||||||
|
}
|
||||||
|
|
||||||
end_ptr = ptr + mach_read_from_2(ptr);
|
end_ptr = ptr + mach_read_from_2(ptr);
|
||||||
ptr += 2;
|
ptr += 2;
|
||||||
|
|
||||||
@ -1123,6 +1131,10 @@ trx_undo_rec_get_partial_row(
|
|||||||
ptr = trx_undo_rec_get_col_val(ptr, &field, &len, &orig_len);
|
ptr = trx_undo_rec_get_col_val(ptr, &field, &len, &orig_len);
|
||||||
|
|
||||||
dfield = dtuple_get_nth_field(*row, col_no);
|
dfield = dtuple_get_nth_field(*row, col_no);
|
||||||
|
ut_ad(dfield->type.mtype == DATA_MISSING
|
||||||
|
|| dict_col_type_assert_equal(col, &dfield->type));
|
||||||
|
ut_ad(dfield->type.mtype == DATA_MISSING
|
||||||
|
|| dfield->len == len);
|
||||||
dict_col_copy_type(
|
dict_col_copy_type(
|
||||||
dict_table_get_nth_col(index->table, col_no),
|
dict_table_get_nth_col(index->table, col_no),
|
||||||
dfield_get_type(dfield));
|
dfield_get_type(dfield));
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2017, MariaDB Corporation.
|
Copyright (c) 2017, 2018, 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
|
||||||
@ -196,6 +196,7 @@ trx_undo_rec_get_partial_row(
|
|||||||
used, as we do NOT copy the data in the
|
used, as we do NOT copy the data in the
|
||||||
record! */
|
record! */
|
||||||
dict_index_t* index, /*!< in: clustered index */
|
dict_index_t* index, /*!< in: clustered index */
|
||||||
|
const upd_t* update, /*!< in: updated columns */
|
||||||
dtuple_t** row, /*!< out, own: partial row */
|
dtuple_t** row, /*!< out, own: partial row */
|
||||||
ibool ignore_prefix, /*!< in: flag to indicate if we
|
ibool ignore_prefix, /*!< in: flag to indicate if we
|
||||||
expect blob prefixes in undo. Used
|
expect blob prefixes in undo. Used
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2017, MariaDB Corporation.
|
Copyright (c) 2017, 2018, 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
|
||||||
@ -823,7 +823,7 @@ err_exit:
|
|||||||
|
|
||||||
if (!(node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) {
|
if (!(node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) {
|
||||||
ptr = trx_undo_rec_get_partial_row(
|
ptr = trx_undo_rec_get_partial_row(
|
||||||
ptr, clust_index, &node->row,
|
ptr, clust_index, node->update, &node->row,
|
||||||
type == TRX_UNDO_UPD_DEL_REC,
|
type == TRX_UNDO_UPD_DEL_REC,
|
||||||
node->heap);
|
node->heap);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2017, MariaDB Corporation.
|
Copyright (c) 2017, 2018, 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
|
||||||
@ -1076,6 +1076,7 @@ trx_undo_rec_get_partial_row(
|
|||||||
used, as we do NOT copy the data in the
|
used, as we do NOT copy the data in the
|
||||||
record! */
|
record! */
|
||||||
dict_index_t* index, /*!< in: clustered index */
|
dict_index_t* index, /*!< in: clustered index */
|
||||||
|
const upd_t* update, /*!< in: updated columns */
|
||||||
dtuple_t** row, /*!< out, own: partial row */
|
dtuple_t** row, /*!< out, own: partial row */
|
||||||
ibool ignore_prefix, /*!< in: flag to indicate if we
|
ibool ignore_prefix, /*!< in: flag to indicate if we
|
||||||
expect blob prefixes in undo. Used
|
expect blob prefixes in undo. Used
|
||||||
@ -1103,6 +1104,13 @@ trx_undo_rec_get_partial_row(
|
|||||||
->mtype = DATA_MISSING;
|
->mtype = DATA_MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const upd_field_t* uf = update->fields, * const ue
|
||||||
|
= update->fields + update->n_fields;
|
||||||
|
uf != ue; uf++) {
|
||||||
|
ulint c = dict_index_get_nth_col(index, uf->field_no)->ind;
|
||||||
|
*dtuple_get_nth_field(*row, c) = uf->new_val;
|
||||||
|
}
|
||||||
|
|
||||||
end_ptr = ptr + mach_read_from_2(ptr);
|
end_ptr = ptr + mach_read_from_2(ptr);
|
||||||
ptr += 2;
|
ptr += 2;
|
||||||
|
|
||||||
@ -1123,6 +1131,10 @@ trx_undo_rec_get_partial_row(
|
|||||||
ptr = trx_undo_rec_get_col_val(ptr, &field, &len, &orig_len);
|
ptr = trx_undo_rec_get_col_val(ptr, &field, &len, &orig_len);
|
||||||
|
|
||||||
dfield = dtuple_get_nth_field(*row, col_no);
|
dfield = dtuple_get_nth_field(*row, col_no);
|
||||||
|
ut_ad(dfield->type.mtype == DATA_MISSING
|
||||||
|
|| dict_col_type_assert_equal(col, &dfield->type));
|
||||||
|
ut_ad(dfield->type.mtype == DATA_MISSING
|
||||||
|
|| dfield->len == len);
|
||||||
dict_col_copy_type(
|
dict_col_copy_type(
|
||||||
dict_table_get_nth_col(index->table, col_no),
|
dict_table_get_nth_col(index->table, col_no),
|
||||||
dfield_get_type(dfield));
|
dfield_get_type(dfield));
|
||||||
|
Reference in New Issue
Block a user