summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xBUILD/SETUP.sh1
-rwxr-xr-xBUILD/compile-pentium-gprof2
-rwxr-xr-xBUILD/compile-pentium64-gcov2
-rwxr-xr-xBUILD/compile-pentium64-gprof2
-rw-r--r--mysql-test/r/cte_nonrecursive.result74
-rw-r--r--mysql-test/suite/maria/max_length.result105
-rw-r--r--mysql-test/suite/maria/max_length.test72
-rw-r--r--mysql-test/t/cte_nonrecursive.test47
-rw-r--r--sql/item_subselect.cc3
-rw-r--r--sql/sp_rcontext.cc8
-rw-r--r--sql/sql_parse.cc6
-rw-r--r--storage/innobase/handler/ha_innodb.cc16
-rw-r--r--storage/innobase/handler/handler0alter.cc7
-rw-r--r--storage/innobase/row/row0import.cc30
-rw-r--r--storage/innobase/row/row0merge.cc4
-rw-r--r--storage/innobase/row/row0quiesce.cc28
-rw-r--r--storage/innobase/trx/trx0trx.cc25
-rw-r--r--storage/maria/ma_create.c15
18 files changed, 381 insertions, 66 deletions
diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh
index 2d6548dda0e..3a1a861f2f8 100755
--- a/BUILD/SETUP.sh
+++ b/BUILD/SETUP.sh
@@ -307,3 +307,4 @@ gprof_compile_flags="-O2 -pg -g"
gprof_link_flags="--disable-shared $static_link"
+disable_gprof_plugins="--with-zlib-dir=bundled --without-plugin-oqgraph --without-plugin-mroonga"
diff --git a/BUILD/compile-pentium-gprof b/BUILD/compile-pentium-gprof
index de014e3ae8b..498c964df74 100755
--- a/BUILD/compile-pentium-gprof
+++ b/BUILD/compile-pentium-gprof
@@ -19,6 +19,6 @@ path=`dirname $0`
. "$path/SETUP.sh"
extra_flags="$pentium_cflags $gprof_compile_flags"
-extra_configs="$pentium_configs $debug_configs $gprof_link_flags $disable_64_bit_plugins"
+extra_configs="$pentium_configs $debug_configs $gprof_link_flags $disable_64_bit_plugins $disable_gprof_plugins"
. "$path/FINISH.sh"
diff --git a/BUILD/compile-pentium64-gcov b/BUILD/compile-pentium64-gcov
index 9587c51b4e0..6e3366c79bd 100755
--- a/BUILD/compile-pentium64-gcov
+++ b/BUILD/compile-pentium64-gcov
@@ -28,6 +28,6 @@ export LDFLAGS="$gcov_link_flags"
extra_flags="$pentium64_cflags $max_cflags $gcov_compile_flags"
c_warnings="$c_warnings $debug_extra_warnings"
cxx_warnings="$cxx_warnings $debug_extra_warnings"
-extra_configs="$pentium_configs $debug_configs $gcov_configs $max_configs"
+extra_configs="$pentium_configs $debug_configs $gcov_configs $max_configs --without-oqgraph"
. "$path/FINISH.sh"
diff --git a/BUILD/compile-pentium64-gprof b/BUILD/compile-pentium64-gprof
index b7821e06b6e..346777a4611 100755
--- a/BUILD/compile-pentium64-gprof
+++ b/BUILD/compile-pentium64-gprof
@@ -20,6 +20,6 @@ path=`dirname $0`
. "$path/SETUP.sh"
extra_flags="$pentium64_cflags $gprof_compile_flags"
-extra_configs="$pentium_configs $max_configs $gprof_link_flags --with-zlib-dir=bundled"
+extra_configs="$pentium_configs $max_configs $gprof_link_flags $disable_gprof_plugins"
. "$path/FINISH.sh"
diff --git a/mysql-test/r/cte_nonrecursive.result b/mysql-test/r/cte_nonrecursive.result
index d944843f2d0..b1fd287f1d7 100644
--- a/mysql-test/r/cte_nonrecursive.result
+++ b/mysql-test/r/cte_nonrecursive.result
@@ -1295,3 +1295,77 @@ TERM03 TERM03
TERM01 NULL
NULL TERM04
drop table t1,t2;
+#
+# MDEV-14969: view using subquery with attached CTE
+#
+create table region (
+r_regionkey int,
+r_name char(25),
+primary key (r_regionkey)
+);
+insert into region values
+(0,'AFRICA'), (1,'AMERICA'), (2,'ASIA'), (3,'EUROPE'), (4,'MIDDLE EAST');
+create table nation (
+n_nationkey int,
+n_name char(25),
+n_regionkey int,
+primary key (n_nationkey),
+key i_n_regionkey (n_regionkey)
+);
+insert into nation values
+(0,'ALGERIA',0), (1,'ARGENTINA',1), (2,'BRAZIL',1), (3,'CANADA',1),
+(4,'EGYPT',4), (5,'ETHIOPIA',0), (6,'FRANCE',3), (7,'GERMANY',3),
+(8,'INDIA',2), (9,'INDONESIA',2), (10,'IRAN',4), (11,'IRAQ',4),
+(12,'JAPAN',2), (13,'JORDAN',4), (14,'KENYA',0), (15,'MOROCCO',0),
+(16,'MOZAMBIQUE',0), (17,'PERU',1), (18,'CHINA',2), (19,'ROMANIA',3),
+(20,'SAUDI ARABIA',4), (21,'VIETNAM',2), (22,'RUSSIA',3),
+(23,'UNITED KINGDOM',3), (24,'UNITED STATES',1);
+select * from nation n ,region r
+where n.n_regionkey = r.r_regionkey and
+r.r_regionkey in
+(with t as (select * from region where r_regionkey <= 3 )
+select r_regionkey from t where r_name <> "ASIA");
+n_nationkey n_name n_regionkey r_regionkey r_name
+0 ALGERIA 0 0 AFRICA
+5 ETHIOPIA 0 0 AFRICA
+14 KENYA 0 0 AFRICA
+15 MOROCCO 0 0 AFRICA
+16 MOZAMBIQUE 0 0 AFRICA
+1 ARGENTINA 1 1 AMERICA
+2 BRAZIL 1 1 AMERICA
+3 CANADA 1 1 AMERICA
+17 PERU 1 1 AMERICA
+24 UNITED STATES 1 1 AMERICA
+6 FRANCE 3 3 EUROPE
+7 GERMANY 3 3 EUROPE
+19 ROMANIA 3 3 EUROPE
+22 RUSSIA 3 3 EUROPE
+23 UNITED KINGDOM 3 3 EUROPE
+create view v as
+select * from nation n ,region r
+where n.n_regionkey = r.r_regionkey and
+r.r_regionkey in
+(with t as (select * from region where r_regionkey <= 3)
+select r_regionkey from t where r_name <> "ASIA");
+show create view v;
+View Create View character_set_client collation_connection
+v CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v` AS select `n`.`n_nationkey` AS `n_nationkey`,`n`.`n_name` AS `n_name`,`n`.`n_regionkey` AS `n_regionkey`,`r`.`r_regionkey` AS `r_regionkey`,`r`.`r_name` AS `r_name` from (`nation` `n` join `region` `r`) where `n`.`n_regionkey` = `r`.`r_regionkey` and `r`.`r_regionkey` in (with t as (select `region`.`r_regionkey` AS `r_regionkey`,`region`.`r_name` AS `r_name` from `region` where `region`.`r_regionkey` <= 3)select `t`.`r_regionkey` from `t` where `t`.`r_name` <> 'ASIA') latin1 latin1_swedish_ci
+select * from v;
+n_nationkey n_name n_regionkey r_regionkey r_name
+0 ALGERIA 0 0 AFRICA
+5 ETHIOPIA 0 0 AFRICA
+14 KENYA 0 0 AFRICA
+15 MOROCCO 0 0 AFRICA
+16 MOZAMBIQUE 0 0 AFRICA
+1 ARGENTINA 1 1 AMERICA
+2 BRAZIL 1 1 AMERICA
+3 CANADA 1 1 AMERICA
+17 PERU 1 1 AMERICA
+24 UNITED STATES 1 1 AMERICA
+6 FRANCE 3 3 EUROPE
+7 GERMANY 3 3 EUROPE
+19 ROMANIA 3 3 EUROPE
+22 RUSSIA 3 3 EUROPE
+23 UNITED KINGDOM 3 3 EUROPE
+drop view v;
+drop table region, nation;
diff --git a/mysql-test/suite/maria/max_length.result b/mysql-test/suite/maria/max_length.result
index 049b92eafe5..177810f32a3 100644
--- a/mysql-test/suite/maria/max_length.result
+++ b/mysql-test/suite/maria/max_length.result
@@ -54,3 +54,108 @@ Table Op Msg_type Msg_text
test.t1 check warning Datafile is almost full, 268230656 of 268320768 used
test.t1 check status OK
drop table t1,t2;
+create table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=FIXED min_rows=1000000;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(10) unsigned DEFAULT NULL,
+ `c2` char(80) DEFAULT NULL
+) ENGINE=Aria DEFAULT CHARSET=latin1 MIN_ROWS=1000000 PAGE_CHECKSUM=1 ROW_FORMAT=FIXED
+insert into t1 select seq,seq from seq_1_to_100000;
+create or replace table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=FIXED;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(10) unsigned DEFAULT NULL,
+ `c2` char(80) DEFAULT NULL
+) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 ROW_FORMAT=FIXED
+insert into t1 select seq,seq from seq_1_to_100000;
+create or replace table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=PAGE TRANSACTIONAL=0;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(10) unsigned DEFAULT NULL,
+ `c2` char(80) DEFAULT NULL
+) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1 ROW_FORMAT=PAGE TRANSACTIONAL=0
+insert into t1 select seq,seq from seq_1_to_100000;
+create or replace table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=FIXED MAX_ROWS=10;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(10) unsigned DEFAULT NULL,
+ `c2` char(80) DEFAULT NULL
+) ENGINE=Aria DEFAULT CHARSET=latin1 MAX_ROWS=10 PAGE_CHECKSUM=1 ROW_FORMAT=FIXED
+insert into t1 select seq,seq from seq_1_to_100000;
+ERROR HY000: The table 't1' is full
+select count(*) from t1;
+count(*)
+65535
+create or replace table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=DYNAMIC MAX_ROWS=10;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(10) unsigned DEFAULT NULL,
+ `c2` char(80) DEFAULT NULL
+) ENGINE=Aria DEFAULT CHARSET=latin1 MAX_ROWS=10 PAGE_CHECKSUM=1 ROW_FORMAT=DYNAMIC
+insert into t1 select seq,seq from seq_1_to_100000;
+ERROR HY000: The table 't1' is full
+select count(*) from t1;
+count(*)
+3276
+check table t1;
+Table Op Msg_type Msg_text
+test.t1 check warning Datafile is almost full, 65520 of 65535 used
+test.t1 check status OK
+create or replace table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=PAGE MAX_ROWS=10;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(10) unsigned DEFAULT NULL,
+ `c2` char(80) DEFAULT NULL
+) ENGINE=Aria DEFAULT CHARSET=latin1 MAX_ROWS=10 PAGE_CHECKSUM=1 ROW_FORMAT=PAGE
+insert into t1 select seq,seq from seq_1_to_100000;
+select count(*) from t1;
+count(*)
+100000
+check table t1;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+drop table t1;
+create or replace table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=PAGE MAX_ROWS=10;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `c1` int(10) unsigned DEFAULT NULL,
+ `c2` char(80) DEFAULT NULL
+) ENGINE=Aria DEFAULT CHARSET=latin1 MAX_ROWS=10 PAGE_CHECKSUM=1 ROW_FORMAT=PAGE
+insert into t1 select seq,seq from seq_1_to_10000000;
+ERROR HY000: The table 't1' is full
+select count(*) from t1;
+count(*)
+6189940
+check table t1;
+Table Op Msg_type Msg_text
+test.t1 check warning Datafile is almost full, 268320768 of 268320768 used
+test.t1 check status OK
+drop table t1;
diff --git a/mysql-test/suite/maria/max_length.test b/mysql-test/suite/maria/max_length.test
index 68ad1e22aa9..2be3da8e1b0 100644
--- a/mysql-test/suite/maria/max_length.test
+++ b/mysql-test/suite/maria/max_length.test
@@ -2,6 +2,7 @@
# This test will use around 1.3G of disk space!
--source include/have_maria.inc
+--source include/have_sequence.inc
--source include/big_test.inc
drop table if exists t1,t2;
@@ -50,3 +51,74 @@ insert into t1 (v,b) select v,b from t2;
check table t1;
drop table t1,t2;
+
+#
+# Check that we don't get table-is-full
+#
+
+create table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=FIXED min_rows=1000000;
+show create table t1;
+insert into t1 select seq,seq from seq_1_to_100000;
+
+create or replace table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=FIXED;
+show create table t1;
+insert into t1 select seq,seq from seq_1_to_100000;
+
+create or replace table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=PAGE TRANSACTIONAL=0;
+show create table t1;
+insert into t1 select seq,seq from seq_1_to_100000;
+
+#
+# For these we should get table is full error
+#
+
+create or replace table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=FIXED MAX_ROWS=10;
+show create table t1;
+--error ER_RECORD_FILE_FULL
+insert into t1 select seq,seq from seq_1_to_100000;
+select count(*) from t1;
+
+create or replace table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=DYNAMIC MAX_ROWS=10;
+show create table t1;
+--error ER_RECORD_FILE_FULL
+insert into t1 select seq,seq from seq_1_to_100000;
+select count(*) from t1;
+check table t1;
+
+# PAGE uses 3 byte pointers as minimum, which can handle up to 200M files
+
+create or replace table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=PAGE MAX_ROWS=10;
+show create table t1;
+insert into t1 select seq,seq from seq_1_to_100000;
+select count(*) from t1;
+check table t1;
+drop table t1;
+
+create or replace table t1 (
+c1 int unsigned,
+c2 char(80)
+) Engine=ARIA ROW_FORMAT=PAGE MAX_ROWS=10;
+show create table t1;
+--error ER_RECORD_FILE_FULL
+insert into t1 select seq,seq from seq_1_to_10000000;
+select count(*) from t1;
+check table t1;
+drop table t1;
diff --git a/mysql-test/t/cte_nonrecursive.test b/mysql-test/t/cte_nonrecursive.test
index 9436665bfee..a092a161277 100644
--- a/mysql-test/t/cte_nonrecursive.test
+++ b/mysql-test/t/cte_nonrecursive.test
@@ -882,3 +882,50 @@ union all
where c1.term is null);
drop table t1,t2;
+
+--echo #
+--echo # MDEV-14969: view using subquery with attached CTE
+--echo #
+
+create table region (
+ r_regionkey int,
+ r_name char(25),
+ primary key (r_regionkey)
+);
+insert into region values
+(0,'AFRICA'), (1,'AMERICA'), (2,'ASIA'), (3,'EUROPE'), (4,'MIDDLE EAST');
+
+create table nation (
+ n_nationkey int,
+ n_name char(25),
+ n_regionkey int,
+ primary key (n_nationkey),
+ key i_n_regionkey (n_regionkey)
+);
+insert into nation values
+(0,'ALGERIA',0), (1,'ARGENTINA',1), (2,'BRAZIL',1), (3,'CANADA',1),
+(4,'EGYPT',4), (5,'ETHIOPIA',0), (6,'FRANCE',3), (7,'GERMANY',3),
+(8,'INDIA',2), (9,'INDONESIA',2), (10,'IRAN',4), (11,'IRAQ',4),
+(12,'JAPAN',2), (13,'JORDAN',4), (14,'KENYA',0), (15,'MOROCCO',0),
+(16,'MOZAMBIQUE',0), (17,'PERU',1), (18,'CHINA',2), (19,'ROMANIA',3),
+(20,'SAUDI ARABIA',4), (21,'VIETNAM',2), (22,'RUSSIA',3),
+(23,'UNITED KINGDOM',3), (24,'UNITED STATES',1);
+
+select * from nation n ,region r
+ where n.n_regionkey = r.r_regionkey and
+ r.r_regionkey in
+ (with t as (select * from region where r_regionkey <= 3 )
+ select r_regionkey from t where r_name <> "ASIA");
+
+create view v as
+select * from nation n ,region r
+ where n.n_regionkey = r.r_regionkey and
+ r.r_regionkey in
+ (with t as (select * from region where r_regionkey <= 3)
+ select r_regionkey from t where r_name <> "ASIA");
+
+show create view v;
+select * from v;
+
+drop view v;
+drop table region, nation;
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index 8e4c5dcbbf1..6d00dcf650e 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -4357,6 +4357,9 @@ table_map subselect_union_engine::upper_select_const_tables()
void subselect_single_select_engine::print(String *str,
enum_query_type query_type)
{
+ With_clause* with_clause= select_lex->get_with_clause();
+ if (with_clause)
+ with_clause->print(str, query_type);
select_lex->print(get_thd(), str, query_type);
}
diff --git a/sql/sp_rcontext.cc b/sql/sp_rcontext.cc
index d82fffc69b0..62b5439d84d 100644
--- a/sql/sp_rcontext.cc
+++ b/sql/sp_rcontext.cc
@@ -68,6 +68,7 @@ sp_rcontext *sp_rcontext::create(THD *thd,
Field *return_value_fld,
Row_definition_list &field_def_lst)
{
+ SELECT_LEX *save_current_select;
sp_rcontext *ctx= new (thd->mem_root) sp_rcontext(owner,
root_parsing_ctx,
return_value_fld,
@@ -75,14 +76,19 @@ sp_rcontext *sp_rcontext::create(THD *thd,
if (!ctx)
return NULL;
+ /* Reset current_select as it's checked in Item_ident::Item_ident */
+ save_current_select= thd->lex->current_select;
+ thd->lex->current_select= 0;
+
if (ctx->alloc_arrays(thd) ||
ctx->init_var_table(thd, field_def_lst) ||
ctx->init_var_items(thd, field_def_lst))
{
delete ctx;
- return NULL;
+ ctx= 0;
}
+ thd->lex->current_select= save_current_select;
return ctx;
}
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index bbccaaa78fe..f54b768bf0c 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2899,6 +2899,12 @@ static bool do_execute_sp(THD *thd, sp_head *sp)
thd->variables.select_limit= HA_POS_ERROR;
/*
+ Reset current_select as it may point to random data as a
+ result of previous parsing.
+ */
+ thd->lex->current_select= NULL;
+
+ /*
We never write CALL statements into binlog:
- If the mode is non-prelocked, each statement will be logged
separately.
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 64f7a1d89aa..d7b0c1230eb 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -2162,7 +2162,7 @@ convert_error_code_to_mysql(
case DB_TOO_BIG_INDEX_COL:
my_error(ER_INDEX_COLUMN_TOO_LONG, MYF(0),
- DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags));
+ (ulong) DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags));
return(HA_ERR_INDEX_COL_TOO_LONG);
case DB_NO_SAVEPOINT:
@@ -5285,7 +5285,6 @@ innobase_close_connection(
"MariaDB is closing a connection that has an active "
"InnoDB transaction. " TRX_ID_FMT " row modifications "
"will roll back.",
- " row modifications will roll back.",
trx->undo_no);
ut_d(ib::warn()
<< "trx: " << trx << " started on: "
@@ -12131,7 +12130,7 @@ create_table_info_t::create_options_are_invalid()
ER_ILLEGAL_HA_CREATE_OPTION,
"InnoDB: invalid KEY_BLOCK_SIZE = %u."
" Valid values are [1, 2, 4, 8, 16]",
- m_create_info->key_block_size);
+ (uint) m_create_info->key_block_size);
ret = "KEY_BLOCK_SIZE";
break;
}
@@ -12622,7 +12621,7 @@ index_bad:
m_thd, Sql_condition::WARN_LEVEL_WARN,
ER_ILLEGAL_HA_CREATE_OPTION,
"InnoDB: ignoring KEY_BLOCK_SIZE=%u.",
- m_create_info->key_block_size);
+ (uint) m_create_info->key_block_size);
}
}
@@ -12645,7 +12644,7 @@ index_bad:
ER_ILLEGAL_HA_CREATE_OPTION,
"InnoDB: ignoring KEY_BLOCK_SIZE=%u"
" unless ROW_FORMAT=COMPRESSED.",
- m_create_info->key_block_size);
+ (uint) m_create_info->key_block_size);
zip_allowed = false;
}
} else {
@@ -14201,7 +14200,8 @@ ha_innobase::records_in_range(
push_warning_printf(
ha_thd(), Sql_condition::WARN_LEVEL_WARN,
ER_NO_DEFAULT,
- "btr_estimate_n_rows_in_range(): %f", n_rows);
+ "btr_estimate_n_rows_in_range(): %lld",
+ (longlong) n_rows);
);
func_exit:
@@ -22970,7 +22970,7 @@ ib_push_frm_error(
"installations? See "
REFMAN
"innodb-troubleshooting.html\n",
- ib_table->name);
+ ib_table->name.m_name);
if (push_warning) {
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
@@ -23014,7 +23014,7 @@ ib_push_frm_error(
"installations? See "
REFMAN
"innodb-troubleshooting.html\n",
- ib_table->name, n_keys,
+ ib_table->name.m_name, n_keys,
table->s->keys);
if (push_warning) {
diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc
index bdb7295825d..d8cec8593b9 100644
--- a/storage/innobase/handler/handler0alter.cc
+++ b/storage/innobase/handler/handler0alter.cc
@@ -300,7 +300,7 @@ my_error_innodb(
break;
case DB_TOO_BIG_INDEX_COL:
my_error(ER_INDEX_COLUMN_TOO_LONG, MYF(0),
- DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags));
+ (ulong) DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags));
break;
case DB_TOO_MANY_CONCURRENT_TRXS:
my_error(ER_TOO_MANY_CONCURRENT_TRXS, MYF(0));
@@ -1636,7 +1636,7 @@ innobase_get_foreign_key_info(
/* Not possible to add a foreign key without a
referenced column */
mutex_exit(&dict_sys->mutex);
- my_error(ER_CANNOT_ADD_FOREIGN, MYF(0), tbl_namep);
+ my_error(ER_CANNOT_ADD_FOREIGN, MYF(0));
goto err_exit;
}
@@ -2050,7 +2050,8 @@ innobase_check_index_keys(
}
#endif /* MYSQL_RENAME_INDEX */
- my_error(ER_WRONG_NAME_FOR_INDEX, MYF(0), key.name);
+ my_error(ER_WRONG_NAME_FOR_INDEX, MYF(0),
+ key.name);
return(ER_WRONG_NAME_FOR_INDEX);
}
diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc
index a02f60c6800..473e0c25f86 100644
--- a/storage/innobase/row/row0import.cc
+++ b/storage/innobase/row/row0import.cc
@@ -2463,7 +2463,7 @@ row_import_cfg_read_index_fields(
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while reading index fields.");
return(DB_IO_ERROR);
@@ -2499,7 +2499,7 @@ row_import_cfg_read_index_fields(
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while parsing table name.");
return(err);
@@ -2569,7 +2569,7 @@ row_import_read_index_data(
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno), msg);
+ (ulong) errno, strerror(errno), msg);
ib::error() << "IO Error: " << msg;
@@ -2644,7 +2644,7 @@ row_import_read_index_data(
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while parsing index name.");
return(err);
@@ -2683,7 +2683,7 @@ row_import_read_indexes(
if (fread(row, 1, sizeof(row), file) != sizeof(row)) {
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while reading number of indexes.");
return(DB_IO_ERROR);
@@ -2769,7 +2769,7 @@ row_import_read_columns(
if (fread(row, 1, sizeof(row), file) != sizeof(row)) {
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while reading table column meta-data.");
return(DB_IO_ERROR);
@@ -2833,7 +2833,7 @@ row_import_read_columns(
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while parsing table column name.");
return(err);
@@ -2864,7 +2864,7 @@ row_import_read_v1(
if (fread(value, 1, sizeof(value), file) != sizeof(value)) {
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while reading meta-data export hostname length.");
return(DB_IO_ERROR);
@@ -2892,7 +2892,7 @@ row_import_read_v1(
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while parsing export hostname.");
return(err);
@@ -2906,7 +2906,7 @@ row_import_read_v1(
if (fread(value, 1, sizeof(value), file) != sizeof(value)) {
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while reading meta-data table name length.");
return(DB_IO_ERROR);
@@ -2933,7 +2933,7 @@ row_import_read_v1(
if (err != DB_SUCCESS) {
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while parsing table name.");
return(err);
@@ -2952,7 +2952,7 @@ row_import_read_v1(
if (fread(row, 1, sizeof(ib_uint64_t), file) != sizeof(ib_uint64_t)) {
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while reading autoinc value.");
return(DB_IO_ERROR);
@@ -2968,7 +2968,7 @@ row_import_read_v1(
if (fread(row, 1, sizeof(row), file) != sizeof(row)) {
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while reading meta-data header.");
return(DB_IO_ERROR);
@@ -3039,7 +3039,7 @@ row_import_read_meta_data(
if (fread(&row, 1, sizeof(row), file) != sizeof(row)) {
ib_senderrf(
thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while reading meta-data version.");
return(DB_IO_ERROR);
@@ -3090,7 +3090,7 @@ row_import_read_cfg(
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_READ_ERROR,
- errno, strerror(errno), msg);
+ (ulong) errno, strerror(errno), msg);
cfg.m_missing = true;
diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc
index 017821fdf38..4776bcc3c25 100644
--- a/storage/innobase/row/row0merge.cc
+++ b/storage/innobase/row/row0merge.cc
@@ -4702,8 +4702,8 @@ row_merge_build_indexes(
"Table %s is encrypted but encryption service or"
" used key_id is not available. "
" Can't continue reading table.",
- !old_table->is_readable() ? old_table->name :
- new_table->name);
+ !old_table->is_readable() ? old_table->name.m_name :
+ new_table->name.m_name);
goto func_exit;
}
diff --git a/storage/innobase/row/row0quiesce.cc b/storage/innobase/row/row0quiesce.cc
index 21cc67620f6..77cb35b8f21 100644
--- a/storage/innobase/row/row0quiesce.cc
+++ b/storage/innobase/row/row0quiesce.cc
@@ -67,7 +67,7 @@ row_quiesce_write_index_fields(
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while writing index fields.");
return(DB_IO_ERROR);
@@ -87,7 +87,7 @@ row_quiesce_write_index_fields(
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while writing index column.");
return(DB_IO_ERROR);
@@ -121,7 +121,7 @@ row_quiesce_write_indexes(
if (fwrite(row, 1, sizeof(row), file) != sizeof(row)) {
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while writing index count.");
return(DB_IO_ERROR);
@@ -175,7 +175,7 @@ row_quiesce_write_indexes(
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while writing index meta-data.");
return(DB_IO_ERROR);
@@ -196,7 +196,7 @@ row_quiesce_write_indexes(
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while writing index name.");
return(DB_IO_ERROR);
@@ -256,7 +256,7 @@ row_quiesce_write_table(
if (fwrite(row, 1, sizeof(row), file) != sizeof(row)) {
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while writing table column data.");
return(DB_IO_ERROR);
@@ -283,7 +283,7 @@ row_quiesce_write_table(
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while writing column name.");
return(DB_IO_ERROR);
@@ -315,7 +315,7 @@ row_quiesce_write_header(
if (fwrite(&value, 1, sizeof(value), file) != sizeof(value)) {
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while writing meta-data version number.");
return(DB_IO_ERROR);
@@ -345,7 +345,7 @@ row_quiesce_write_header(
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while writing hostname.");
return(DB_IO_ERROR);
@@ -365,7 +365,7 @@ row_quiesce_write_header(
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while writing table name.");
return(DB_IO_ERROR);
@@ -381,7 +381,7 @@ row_quiesce_write_header(
if (fwrite(row, 1, sizeof(ib_uint64_t), file) != sizeof(ib_uint64_t)) {
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while writing table autoinc value.");
return(DB_IO_ERROR);
@@ -405,7 +405,7 @@ row_quiesce_write_header(
if (fwrite(row, 1, sizeof(row), file) != sizeof(row)) {
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno),
+ (ulong) errno, strerror(errno),
"while writing table meta-data.");
return(DB_IO_ERROR);
@@ -458,7 +458,7 @@ row_quiesce_write_cfg(
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno), msg);
+ (ulong) errno, strerror(errno), msg);
}
if (fclose(file) != 0) {
@@ -468,7 +468,7 @@ row_quiesce_write_cfg(
ib_senderrf(
thd, IB_LOG_LEVEL_WARN, ER_IO_WRITE_ERROR,
- errno, strerror(errno), msg);
+ (ulong) errno, strerror(errno), msg);
}
}
diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc
index ed334207b4c..0e488d6379a 100644
--- a/storage/innobase/trx/trx0trx.cc
+++ b/storage/innobase/trx/trx0trx.cc
@@ -824,10 +824,6 @@ trx_resurrect_insert(
ut_d(trx->start_line = __LINE__);
trx->rsegs.m_redo.rseg = rseg;
- /* For transactions with active data will not have rseg size = 1
- or will not qualify for purge limit criteria. So it is safe to increment
- this trx_ref_count w/o mutex protection. */
- ++trx->rsegs.m_redo.rseg->trx_ref_count;
*trx->xid = undo->xid;
trx->id = undo->trx_id;
trx->rsegs.m_redo.insert_undo = undo;
@@ -934,10 +930,6 @@ trx_resurrect_update(
trx_rseg_t* rseg) /*!< in/out: rollback segment */
{
trx->rsegs.m_redo.rseg = rseg;
- /* For transactions with active data will not have rseg size = 1
- or will not qualify for purge limit criteria. So it is safe to increment
- this trx_ref_count w/o mutex protection. */
- ++trx->rsegs.m_redo.rseg->trx_ref_count;
*trx->xid = undo->xid;
trx->id = undo->trx_id;
trx->rsegs.m_redo.update_undo = undo;
@@ -991,10 +983,12 @@ trx_lists_init_at_db_start()
purge_sys = UT_NEW_NOKEY(purge_sys_t());
- if (srv_force_recovery < SRV_FORCE_NO_UNDO_LOG_SCAN) {
- trx_rseg_array_init();
+ if (srv_force_recovery >= SRV_FORCE_NO_UNDO_LOG_SCAN) {
+ return;
}
+ trx_rseg_array_init();
+
/* Look from the rollback segments if there exist undo logs for
transactions. */
@@ -1002,8 +996,9 @@ trx_lists_init_at_db_start()
trx_undo_t* undo;
trx_rseg_t* rseg = trx_sys->rseg_array[i];
- /* At this stage non-redo rseg slots are all NULL as they are
- re-created on server start and existing slots are not read. */
+ /* Some rollback segment may be unavailable,
+ especially if the server was previously run with a
+ non-default value of innodb_undo_logs. */
if (rseg == NULL) {
continue;
}
@@ -1013,6 +1008,11 @@ trx_lists_init_at_db_start()
undo != NULL;
undo = UT_LIST_GET_NEXT(undo_list, undo)) {
+ /* trx_purge() will not run before we return,
+ so we can safely increment this without
+ holding rseg->mutex. */
+ ++rseg->trx_ref_count;
+
trx_t* trx;
trx = trx_resurrect_insert(undo, rseg);
@@ -1037,6 +1037,7 @@ trx_lists_init_at_db_start()
if (trx == NULL) {
trx = trx_allocate_for_background();
+ ++rseg->trx_ref_count;
ut_d(trx->start_file = __FILE__);
ut_d(trx->start_line = __LINE__);
diff --git a/storage/maria/ma_create.c b/storage/maria/ma_create.c
index bf762a0ec0f..8e696020594 100644
--- a/storage/maria/ma_create.c
+++ b/storage/maria/ma_create.c
@@ -70,7 +70,7 @@ int maria_create(const char *name, enum data_file_type datafile_type,
myf create_flag;
uint length,max_key_length,packed,pack_bytes,pointer,real_length_diff,
key_length,info_length,key_segs,options,min_key_length,
- base_pos,long_varchar_count,varchar_length,
+ base_pos,long_varchar_count,
unique_key_parts,fulltext_keys,offset, not_block_record_extra_length;
uint max_field_lengths, extra_header_size, column_nr;
uint internal_table= flags & HA_CREATE_INTERNAL_TABLE;
@@ -144,9 +144,6 @@ int maria_create(const char *name, enum data_file_type datafile_type,
datafile_type= BLOCK_RECORD;
}
- if (ci->reloc_rows > ci->max_rows)
- ci->reloc_rows=ci->max_rows; /* Check if wrong parameter */
-
if (!(rec_per_key_part=
(double*) my_malloc((keys + uniques)*HA_MAX_KEY_SEG*sizeof(double) +
(keys + uniques)*HA_MAX_KEY_SEG*sizeof(ulong) +
@@ -160,7 +157,7 @@ int maria_create(const char *name, enum data_file_type datafile_type,
/* Start by checking fields and field-types used */
- varchar_length=long_varchar_count=packed= not_block_record_extra_length=
+ long_varchar_count=packed= not_block_record_extra_length=
pack_reclength= max_field_lengths= 0;
reclength= min_pack_length= ci->null_bytes;
forced_packed= 0;
@@ -232,7 +229,6 @@ int maria_create(const char *name, enum data_file_type datafile_type,
}
else if (type == FIELD_VARCHAR)
{
- varchar_length+= column->length-1; /* Used for min_pack_length */
pack_reclength++;
not_block_record_extra_length++;
max_field_lengths++;
@@ -368,6 +364,7 @@ int maria_create(const char *name, enum data_file_type datafile_type,
pack_bytes);
if (!ci->data_file_length && ci->max_rows)
{
+ set_if_bigger(ci->max_rows, ci->reloc_rows);
if (pack_reclength == INT_MAX32 ||
(~(ulonglong) 0)/ci->max_rows < (ulonglong) pack_reclength)
ci->data_file_length= ~(ulonglong) 0;
@@ -401,13 +398,14 @@ int maria_create(const char *name, enum data_file_type datafile_type,
else
ci->max_rows= data_file_length / (min_pack_length +
extra_header_size +
- DIR_ENTRY_SIZE)+1;
+ DIR_ENTRY_SIZE);
}
else
ci->max_rows=(ha_rows) (ci->data_file_length/(min_pack_length +
((options &
HA_OPTION_PACK_RECORD) ?
- 3 : 0)))+1;
+ 3 : 0)));
+ set_if_smaller(ci->reloc_rows, ci->max_rows);
}
max_rows= (ulonglong) ci->max_rows;
if (datafile_type == BLOCK_RECORD)
@@ -800,6 +798,7 @@ int maria_create(const char *name, enum data_file_type datafile_type,
share.state.state.data_file_length= maria_block_size;
/* Add length of packed fields + length */
share.base.pack_reclength+= share.base.max_field_lengths+3;
+ share.base.max_pack_length= share.base.pack_reclength;
/* Adjust max_pack_length, to be used if we have short rows */
if (share.base.max_pack_length < maria_block_size)