mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Merge 10.0 into 10.1
This commit is contained in:
commit
016caa3d20
15 changed files with 318 additions and 25 deletions
186
man/mysqladmin.1
186
man/mysqladmin.1
|
@ -1,6 +1,6 @@
|
|||
'\" 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
|
||||
.\" -----------------------------------------------------------------
|
||||
|
@ -106,6 +106,97 @@ Display the server status variables and their values\&.
|
|||
.sp -1
|
||||
.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
|
||||
.sp
|
||||
Flush all information in the host cache\&.
|
||||
|
@ -119,6 +210,19 @@ Flush all information in the host cache\&.
|
|||
.sp -1
|
||||
.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
|
||||
.sp
|
||||
Flush all logs\&.
|
||||
|
@ -146,6 +250,32 @@ reload)\&.
|
|||
.sp -1
|
||||
.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
|
||||
.sp
|
||||
Clear status variables\&.
|
||||
|
@ -159,6 +289,19 @@ Clear status variables\&.
|
|||
.sp -1
|
||||
.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
|
||||
.sp
|
||||
Flush all tables\&.
|
||||
|
@ -185,6 +328,19 @@ Flush the thread cache\&.
|
|||
.sp -1
|
||||
.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,\&.\&.\&.
|
||||
.sp
|
||||
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
|
||||
.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
|
||||
.sp
|
||||
Start replication on a slave server\&.
|
||||
|
@ -370,6 +539,19 @@ Display a short server status message\&.
|
|||
.sp -1
|
||||
.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
|
||||
.sp
|
||||
Stop replication on a slave server\&.
|
||||
|
@ -821,7 +1003,7 @@ Connect to the MariaDB server on the given host\&.
|
|||
\fB\-\-local\fR,
|
||||
\fB\-l\fR
|
||||
.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
|
||||
.sp
|
||||
.RS 4
|
||||
|
|
|
@ -1,16 +1,11 @@
|
|||
# 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!!
|
||||
exit;
|
||||
die TRUNCATE_FILE is not set;
|
||||
}
|
||||
|
||||
let TRUNCATE_FILE= $file;
|
||||
|
||||
perl;
|
||||
use Env;
|
||||
Env::import('TRUNCATE_FILE');
|
||||
open FILE, '>', $TRUNCATE_FILE || die "Can not open file $file";
|
||||
open FILE, '>', $ENV{TRUNCATE_FILE} or die "open(>$ENV{TRUNCATE_FILE}): $!";
|
||||
close FILE;
|
||||
EOF
|
||||
|
|
|
@ -4332,4 +4332,22 @@ set join_cache_level=@join_cache_level_save;
|
|||
deallocate prepare stmt;
|
||||
drop view v1,v2,v3;
|
||||
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
|
||||
|
|
|
@ -25,7 +25,7 @@ sync_slave_with_master;
|
|||
connection master;
|
||||
# Delete './master-bin.000001' from index file.
|
||||
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;
|
||||
|
||||
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 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
|
||||
|
|
|
@ -2657,6 +2657,8 @@ void THD::nocheck_register_item_tree_change(Item **place, Item *old_value,
|
|||
MEM_ROOT *runtime_memroot)
|
||||
{
|
||||
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,
|
||||
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
|
||||
memroot. Just return.
|
||||
*/
|
||||
return;
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
change= new (change_mem) Item_change_record;
|
||||
change->place= place;
|
||||
change->old_value= old_value;
|
||||
change_list.append(change);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2715,7 +2718,11 @@ void THD::rollback_item_tree_changes()
|
|||
DBUG_ENTER("rollback_item_tree_changes");
|
||||
|
||||
while ((change= it++))
|
||||
{
|
||||
DBUG_PRINT("info", ("revert %p -> %p",
|
||||
change->old_value, (*change->place)));
|
||||
*change->place= change->old_value;
|
||||
}
|
||||
/* We can forget about changes memory: it's allocated in runtime memroot */
|
||||
change_list.empty();
|
||||
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;
|
||||
Query_arena *arena, backup;
|
||||
DBUG_ENTER("mysql_derived_merge");
|
||||
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||
(derived->alias ? derived->alias : "<NULL>"),
|
||||
derived->get_unit()));
|
||||
|
||||
if (derived->merged)
|
||||
DBUG_RETURN(FALSE);
|
||||
|
@ -510,7 +513,9 @@ unconditional_materialization:
|
|||
bool mysql_derived_merge_for_insert(THD *thd, LEX *lex, TABLE_LIST *derived)
|
||||
{
|
||||
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 "
|
||||
"is_multitable: %d single_table_updatable: %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();
|
||||
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
|
||||
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();
|
||||
DBUG_ENTER("mysql_derived_prepare");
|
||||
bool res= FALSE;
|
||||
DBUG_PRINT("enter", ("unit: %p table_list: %p Alias '%s'",
|
||||
unit, derived, derived->alias));
|
||||
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||
(derived->alias ? derived->alias : "<NULL>"),
|
||||
unit));
|
||||
|
||||
// Skip already prepared views/DT
|
||||
if (!unit || unit->prepared ||
|
||||
|
@ -795,6 +803,9 @@ bool mysql_derived_optimize(THD *thd, LEX *lex, TABLE_LIST *derived)
|
|||
|
||||
bool res= FALSE;
|
||||
DBUG_ENTER("mysql_derived_optimize");
|
||||
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||
(derived->alias ? derived->alias : "<NULL>"),
|
||||
derived->get_unit()));
|
||||
|
||||
if (unit->optimized)
|
||||
DBUG_RETURN(FALSE);
|
||||
|
@ -860,6 +871,9 @@ err:
|
|||
bool mysql_derived_create(THD *thd, LEX *lex, TABLE_LIST *derived)
|
||||
{
|
||||
DBUG_ENTER("mysql_derived_create");
|
||||
DBUG_PRINT("enter", ("Alias: '%s' Unit: %p",
|
||||
(derived->alias ? derived->alias : "<NULL>"),
|
||||
derived->get_unit()));
|
||||
TABLE *table= derived->table;
|
||||
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)
|
||||
{
|
||||
DBUG_ENTER("mysql_derived_fill");
|
||||
Field_iterator_table field_iterator;
|
||||
SELECT_LEX_UNIT *unit= derived->get_unit();
|
||||
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)
|
||||
DBUG_RETURN(FALSE);
|
||||
|
@ -951,7 +969,27 @@ bool mysql_derived_fill(THD *thd, LEX *lex, TABLE_LIST *derived)
|
|||
if (derived_result->flush())
|
||||
res= 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)
|
||||
unit->cleanup();
|
||||
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)
|
||||
{
|
||||
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();
|
||||
|
||||
derived->merged_for_insert= FALSE;
|
||||
|
|
|
@ -4260,6 +4260,9 @@ bool TABLE_LIST::create_field_translation(THD *thd)
|
|||
Query_arena *arena, backup;
|
||||
bool res= FALSE;
|
||||
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() ||
|
||||
thd->stmt_arena->is_stmt_prepare_or_first_sp_execute())
|
||||
|
|
|
@ -2287,6 +2287,9 @@ struct TABLE_LIST
|
|||
inline void 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) |
|
||||
DTYPE_TABLE | DTYPE_MERGE);
|
||||
set_check_merged();
|
||||
|
@ -2299,6 +2302,9 @@ struct TABLE_LIST
|
|||
void 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)) |
|
||||
DTYPE_TABLE | DTYPE_MATERIALIZE);
|
||||
set_check_materialized();
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
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
|
||||
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
|
||||
record! */
|
||||
dict_index_t* index, /*!< in: clustered index */
|
||||
const upd_t* update, /*!< in: updated columns */
|
||||
dtuple_t** row, /*!< out, own: partial row */
|
||||
ibool ignore_prefix, /*!< in: flag to indicate if we
|
||||
expect blob prefixes in undo. Used
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
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
|
||||
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)) {
|
||||
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,
|
||||
node->heap);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
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
|
||||
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
|
||||
record! */
|
||||
dict_index_t* index, /*!< in: clustered index */
|
||||
const upd_t* update, /*!< in: updated columns */
|
||||
dtuple_t** row, /*!< out, own: partial row */
|
||||
ibool ignore_prefix, /*!< in: flag to indicate if we
|
||||
expect blob prefixes in undo. Used
|
||||
|
@ -1103,6 +1104,13 @@ trx_undo_rec_get_partial_row(
|
|||
->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);
|
||||
ptr += 2;
|
||||
|
||||
|
@ -1123,6 +1131,10 @@ trx_undo_rec_get_partial_row(
|
|||
ptr = trx_undo_rec_get_col_val(ptr, &field, &len, &orig_len);
|
||||
|
||||
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_table_get_nth_col(index->table, col_no),
|
||||
dfield_get_type(dfield));
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
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
|
||||
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
|
||||
record! */
|
||||
dict_index_t* index, /*!< in: clustered index */
|
||||
const upd_t* update, /*!< in: updated columns */
|
||||
dtuple_t** row, /*!< out, own: partial row */
|
||||
ibool ignore_prefix, /*!< in: flag to indicate if we
|
||||
expect blob prefixes in undo. Used
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
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
|
||||
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)) {
|
||||
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,
|
||||
node->heap);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
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
|
||||
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
|
||||
record! */
|
||||
dict_index_t* index, /*!< in: clustered index */
|
||||
const upd_t* update, /*!< in: updated columns */
|
||||
dtuple_t** row, /*!< out, own: partial row */
|
||||
ibool ignore_prefix, /*!< in: flag to indicate if we
|
||||
expect blob prefixes in undo. Used
|
||||
|
@ -1103,6 +1104,13 @@ trx_undo_rec_get_partial_row(
|
|||
->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);
|
||||
ptr += 2;
|
||||
|
||||
|
@ -1123,6 +1131,10 @@ trx_undo_rec_get_partial_row(
|
|||
ptr = trx_undo_rec_get_col_val(ptr, &field, &len, &orig_len);
|
||||
|
||||
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_table_get_nth_col(index->table, col_no),
|
||||
dfield_get_type(dfield));
|
||||
|
|
Loading…
Reference in a new issue