mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge 5.3 -> 5.5
This commit is contained in:
@ -2783,6 +2783,16 @@ a b
|
|||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
#
|
#
|
||||||
|
# MDEV-4335: Unexpected results when selecting on information_schema
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (db VARCHAR(64) DEFAULT NULL);
|
||||||
|
INSERT INTO t1 VALUES ('mysql'),('information_schema');
|
||||||
|
SELECT * FROM t1 WHERE db IN (SELECT `SCHEMA_NAME` FROM information_schema.SCHEMATA);
|
||||||
|
db
|
||||||
|
mysql
|
||||||
|
information_schema
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
# MySQL Bug#13340270: assertion table->sort.record_pointers == __null
|
# MySQL Bug#13340270: assertion table->sort.record_pointers == __null
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
|
@ -2797,6 +2797,16 @@ a b
|
|||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
#
|
#
|
||||||
|
# MDEV-4335: Unexpected results when selecting on information_schema
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (db VARCHAR(64) DEFAULT NULL);
|
||||||
|
INSERT INTO t1 VALUES ('mysql'),('information_schema');
|
||||||
|
SELECT * FROM t1 WHERE db IN (SELECT `SCHEMA_NAME` FROM information_schema.SCHEMATA);
|
||||||
|
db
|
||||||
|
information_schema
|
||||||
|
mysql
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
# MySQL Bug#13340270: assertion table->sort.record_pointers == __null
|
# MySQL Bug#13340270: assertion table->sort.record_pointers == __null
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
|
@ -2481,6 +2481,15 @@ execute stmt;
|
|||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-4335: Unexpected results when selecting on information_schema
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1 (db VARCHAR(64) DEFAULT NULL);
|
||||||
|
INSERT INTO t1 VALUES ('mysql'),('information_schema');
|
||||||
|
SELECT * FROM t1 WHERE db IN (SELECT `SCHEMA_NAME` FROM information_schema.SCHEMATA);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MySQL Bug#13340270: assertion table->sort.record_pointers == __null
|
--echo # MySQL Bug#13340270: assertion table->sort.record_pointers == __null
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -1996,7 +1996,7 @@ int QUICK_ROR_INTERSECT_SELECT::init()
|
|||||||
1 error
|
1 error
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler)
|
int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler, MEM_ROOT *alloc)
|
||||||
{
|
{
|
||||||
handler *save_file= file, *org_file;
|
handler *save_file= file, *org_file;
|
||||||
my_bool org_key_read;
|
my_bool org_key_read;
|
||||||
@ -2024,7 +2024,7 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler)
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(file= head->file->clone(head->s->normalized_path.str, thd->mem_root)))
|
if (!(file= head->file->clone(head->s->normalized_path.str, alloc)))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Manually set the error flag. Note: there seems to be quite a few
|
Manually set the error flag. Note: there seems to be quite a few
|
||||||
@ -2125,7 +2125,8 @@ failure:
|
|||||||
0 OK
|
0 OK
|
||||||
other error code
|
other error code
|
||||||
*/
|
*/
|
||||||
int QUICK_ROR_INTERSECT_SELECT::init_ror_merged_scan(bool reuse_handler)
|
int QUICK_ROR_INTERSECT_SELECT::init_ror_merged_scan(bool reuse_handler,
|
||||||
|
MEM_ROOT *alloc)
|
||||||
{
|
{
|
||||||
List_iterator_fast<QUICK_SELECT_WITH_RECORD> quick_it(quick_selects);
|
List_iterator_fast<QUICK_SELECT_WITH_RECORD> quick_it(quick_selects);
|
||||||
QUICK_SELECT_WITH_RECORD *cur;
|
QUICK_SELECT_WITH_RECORD *cur;
|
||||||
@ -2142,7 +2143,7 @@ int QUICK_ROR_INTERSECT_SELECT::init_ror_merged_scan(bool reuse_handler)
|
|||||||
There is no use of this->file. Use it for the first of merged range
|
There is no use of this->file. Use it for the first of merged range
|
||||||
selects.
|
selects.
|
||||||
*/
|
*/
|
||||||
int error= quick->init_ror_merged_scan(TRUE);
|
int error= quick->init_ror_merged_scan(TRUE, alloc);
|
||||||
if (error)
|
if (error)
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
quick->file->extra(HA_EXTRA_KEYREAD_PRESERVE_FIELDS);
|
quick->file->extra(HA_EXTRA_KEYREAD_PRESERVE_FIELDS);
|
||||||
@ -2154,7 +2155,7 @@ int QUICK_ROR_INTERSECT_SELECT::init_ror_merged_scan(bool reuse_handler)
|
|||||||
const MY_BITMAP * const save_read_set= quick->head->read_set;
|
const MY_BITMAP * const save_read_set= quick->head->read_set;
|
||||||
const MY_BITMAP * const save_write_set= quick->head->write_set;
|
const MY_BITMAP * const save_write_set= quick->head->write_set;
|
||||||
#endif
|
#endif
|
||||||
if (quick->init_ror_merged_scan(FALSE))
|
if (quick->init_ror_merged_scan(FALSE, alloc))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
quick->file->extra(HA_EXTRA_KEYREAD_PRESERVE_FIELDS);
|
quick->file->extra(HA_EXTRA_KEYREAD_PRESERVE_FIELDS);
|
||||||
|
|
||||||
@ -2188,7 +2189,7 @@ int QUICK_ROR_INTERSECT_SELECT::init_ror_merged_scan(bool reuse_handler)
|
|||||||
int QUICK_ROR_INTERSECT_SELECT::reset()
|
int QUICK_ROR_INTERSECT_SELECT::reset()
|
||||||
{
|
{
|
||||||
DBUG_ENTER("QUICK_ROR_INTERSECT_SELECT::reset");
|
DBUG_ENTER("QUICK_ROR_INTERSECT_SELECT::reset");
|
||||||
if (!scans_inited && init_ror_merged_scan(TRUE))
|
if (!scans_inited && init_ror_merged_scan(TRUE, &alloc))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
scans_inited= TRUE;
|
scans_inited= TRUE;
|
||||||
List_iterator_fast<QUICK_SELECT_WITH_RECORD> it(quick_selects);
|
List_iterator_fast<QUICK_SELECT_WITH_RECORD> it(quick_selects);
|
||||||
@ -2324,7 +2325,7 @@ int QUICK_ROR_UNION_SELECT::reset()
|
|||||||
List_iterator_fast<QUICK_SELECT_I> it(quick_selects);
|
List_iterator_fast<QUICK_SELECT_I> it(quick_selects);
|
||||||
while ((quick= it++))
|
while ((quick= it++))
|
||||||
{
|
{
|
||||||
if (quick->init_ror_merged_scan(FALSE))
|
if (quick->init_ror_merged_scan(FALSE, &alloc))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
scans_inited= TRUE;
|
scans_inited= TRUE;
|
||||||
|
@ -323,7 +323,7 @@ public:
|
|||||||
0 Ok
|
0 Ok
|
||||||
other Error
|
other Error
|
||||||
*/
|
*/
|
||||||
virtual int init_ror_merged_scan(bool reuse_handler)
|
virtual int init_ror_merged_scan(bool reuse_handler, MEM_ROOT *alloc)
|
||||||
{ DBUG_ASSERT(0); return 1; }
|
{ DBUG_ASSERT(0); return 1; }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -473,7 +473,7 @@ public:
|
|||||||
uchar *cur_prefix);
|
uchar *cur_prefix);
|
||||||
bool reverse_sorted() { return 0; }
|
bool reverse_sorted() { return 0; }
|
||||||
bool unique_key_range();
|
bool unique_key_range();
|
||||||
int init_ror_merged_scan(bool reuse_handler);
|
int init_ror_merged_scan(bool reuse_handler, MEM_ROOT *alloc);
|
||||||
void save_last_pos()
|
void save_last_pos()
|
||||||
{ file->position(record); }
|
{ file->position(record); }
|
||||||
int get_type() { return QS_TYPE_RANGE; }
|
int get_type() { return QS_TYPE_RANGE; }
|
||||||
@ -722,7 +722,7 @@ public:
|
|||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
void dbug_dump(int indent, bool verbose);
|
void dbug_dump(int indent, bool verbose);
|
||||||
#endif
|
#endif
|
||||||
int init_ror_merged_scan(bool reuse_handler);
|
int init_ror_merged_scan(bool reuse_handler, MEM_ROOT *alloc);
|
||||||
bool push_quick_back(MEM_ROOT *alloc, QUICK_RANGE_SELECT *quick_sel_range);
|
bool push_quick_back(MEM_ROOT *alloc, QUICK_RANGE_SELECT *quick_sel_range);
|
||||||
|
|
||||||
class QUICK_SELECT_WITH_RECORD : public Sql_alloc
|
class QUICK_SELECT_WITH_RECORD : public Sql_alloc
|
||||||
|
@ -1509,6 +1509,9 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
|
|||||||
*/
|
*/
|
||||||
parent_lex->leaf_tables.concat(&subq_lex->leaf_tables);
|
parent_lex->leaf_tables.concat(&subq_lex->leaf_tables);
|
||||||
|
|
||||||
|
if (subq_lex->options & OPTION_SCHEMA_TABLE)
|
||||||
|
parent_lex->options |= OPTION_SCHEMA_TABLE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Same as above for next_local chain
|
Same as above for next_local chain
|
||||||
(a theory: a next_local chain always starts with ::leaf_tables
|
(a theory: a next_local chain always starts with ::leaf_tables
|
||||||
@ -1725,6 +1728,9 @@ static bool convert_subq_to_jtbm(JOIN *parent_join,
|
|||||||
*/
|
*/
|
||||||
parent_lex->leaf_tables.push_back(jtbm);
|
parent_lex->leaf_tables.push_back(jtbm);
|
||||||
|
|
||||||
|
if (subq_pred->unit->first_select()->options & OPTION_SCHEMA_TABLE)
|
||||||
|
parent_lex->options |= OPTION_SCHEMA_TABLE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Same as above for TABLE_LIST::next_local chain
|
Same as above for TABLE_LIST::next_local chain
|
||||||
(a theory: a next_local chain always starts with ::leaf_tables
|
(a theory: a next_local chain always starts with ::leaf_tables
|
||||||
|
Reference in New Issue
Block a user