Merge with 5.2
This commit is contained in:
commit
daf29d2a7a
@ -5415,4 +5415,17 @@ foo
|
||||
|
||||
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 ( b TEXT NOT NULL ) ENGINE=MYISAM;
|
||||
INSERT INTO t1 VALUES ('x'),('y');
|
||||
CREATE TABLE t2 ( a VARCHAR(1) NOT NULL ) ENGINE=CSV;
|
||||
INSERT INTO t2 VALUES ('r'),('t');
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a
|
||||
r
|
||||
t
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON ( b = a );
|
||||
b a
|
||||
x NULL
|
||||
y NULL
|
||||
drop table t1,t2;
|
||||
End of 5.1 tests
|
||||
|
@ -48,13 +48,13 @@ insert INTO t1 VALUES (110);
|
||||
ERROR HY000: Table has no partition for value 110
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > 90;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= 90;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = 90;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = 89;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p90 ALL NULL NULL NULL NULL 3 Using where
|
||||
@ -63,16 +63,16 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 p90 ALL NULL NULL NULL NULL 3 Using where
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > 89;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = 100;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= 100;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > 100;
|
||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 0 Using where
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#50104: Partitioned table with just 1 partion works with fk
|
||||
|
@ -1820,5 +1820,20 @@ INSERT INTO t1 VALUES(-1);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#970528
|
||||
# Server crashes in my_strnncollsp_simple on LEFT JOIN with CSV table,
|
||||
# TEXT field
|
||||
#
|
||||
|
||||
CREATE TABLE t1 ( b TEXT NOT NULL ) ENGINE=MYISAM;
|
||||
INSERT INTO t1 VALUES ('x'),('y');
|
||||
|
||||
CREATE TABLE t2 ( a VARCHAR(1) NOT NULL ) ENGINE=CSV;
|
||||
INSERT INTO t2 VALUES ('r'),('t');
|
||||
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON ( b = a );
|
||||
drop table t1,t2;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@ -3091,6 +3091,13 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
|
||||
table_vector[i]=s->table=table=tables->table;
|
||||
table->pos_in_table_list= tables;
|
||||
error= tables->fetch_number_of_rows();
|
||||
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
const bool no_partitions_used= table->no_partitions_used;
|
||||
#else
|
||||
const bool no_partitions_used= FALSE;
|
||||
#endif
|
||||
|
||||
DBUG_EXECUTE_IF("bug11747970_raise_error",
|
||||
{
|
||||
if (!error)
|
||||
@ -3122,13 +3129,10 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
|
||||
if (*s->on_expr_ref)
|
||||
{
|
||||
/* s is the only inner table of an outer join */
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
if (!table->is_filled_at_execution() &&
|
||||
(!table->file->stats.records || table->no_partitions_used) && !embedding)
|
||||
#else
|
||||
if (!table->is_filled_at_execution() &&
|
||||
!table->file->stats.records && !embedding)
|
||||
#endif
|
||||
((!table->file->stats.records &&
|
||||
(table->file->ha_table_flags() & HA_STATS_RECORDS_IS_EXACT)) ||
|
||||
no_partitions_used) && !embedding)
|
||||
{ // Empty table
|
||||
s->dependent= 0; // Ignore LEFT JOIN depend.
|
||||
no_rows_const_tables |= table->map;
|
||||
@ -3168,16 +3172,12 @@ make_join_statistics(JOIN *join, List<TABLE_LIST> &tables_list,
|
||||
if (inside_an_outer_join)
|
||||
continue;
|
||||
}
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
const bool no_partitions_used= table->no_partitions_used;
|
||||
#else
|
||||
const bool no_partitions_used= FALSE;
|
||||
#endif
|
||||
if (!table->is_filled_at_execution() &&
|
||||
(table->s->system || table->file->stats.records <= 1 ||
|
||||
if (!table->is_filled_at_execution() &&
|
||||
(table->s->system ||
|
||||
(table->file->stats.records <= 1 &&
|
||||
(table->file->ha_table_flags() & HA_STATS_RECORDS_IS_EXACT)) ||
|
||||
no_partitions_used) &&
|
||||
!s->dependent &&
|
||||
(table->file->ha_table_flags() & HA_STATS_RECORDS_IS_EXACT) &&
|
||||
!table->fulltext_searched && !join->no_const_tables)
|
||||
{
|
||||
set_position(join,const_count++,s,(KEYUSE*) 0);
|
||||
|
@ -854,6 +854,7 @@ int ha_tina::open(const char *name, int mode, uint open_options)
|
||||
*/
|
||||
thr_lock_data_init(&share->lock, &lock, (void*) this);
|
||||
ref_length= sizeof(my_off_t);
|
||||
init_alloc_root(&blobroot, BLOB_MEMROOT_ALLOC_SIZE, 0);
|
||||
|
||||
share->lock.get_status= tina_get_status;
|
||||
share->lock.update_status= tina_update_status;
|
||||
@ -871,6 +872,7 @@ int ha_tina::close(void)
|
||||
{
|
||||
int rc= 0;
|
||||
DBUG_ENTER("ha_tina::close");
|
||||
free_root(&blobroot, MYF(0));
|
||||
rc= my_close(data_file, MYF(0));
|
||||
DBUG_RETURN(free_share(share) || rc);
|
||||
}
|
||||
@ -1086,11 +1088,9 @@ int ha_tina::rnd_init(bool scan)
|
||||
|
||||
current_position= next_position= 0;
|
||||
stats.records= 0;
|
||||
records_is_known= 0;
|
||||
records_is_known= found_end_of_file= 0;
|
||||
chain_ptr= chain;
|
||||
|
||||
init_alloc_root(&blobroot, BLOB_MEMROOT_ALLOC_SIZE, 0);
|
||||
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
@ -1122,10 +1122,16 @@ int ha_tina::rnd_next(uchar *buf)
|
||||
|
||||
/* don't scan an empty file */
|
||||
if (!local_saved_data_file_length)
|
||||
{
|
||||
found_end_of_file= 1;
|
||||
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
||||
|
||||
}
|
||||
if ((rc= find_current_row(buf)))
|
||||
{
|
||||
DBUG_PRINT("warning", ("got error %d while reading file", rc));
|
||||
found_end_of_file= (rc == HA_ERR_END_OF_FILE);
|
||||
DBUG_RETURN(rc);
|
||||
}
|
||||
|
||||
stats.records++;
|
||||
DBUG_RETURN(0);
|
||||
@ -1220,8 +1226,7 @@ int ha_tina::rnd_end()
|
||||
my_off_t file_buffer_start= 0;
|
||||
DBUG_ENTER("ha_tina::rnd_end");
|
||||
|
||||
free_root(&blobroot, MYF(0));
|
||||
records_is_known= 1;
|
||||
records_is_known= found_end_of_file;
|
||||
|
||||
if ((chain_ptr - chain) > 0)
|
||||
{
|
||||
@ -1394,8 +1399,6 @@ int ha_tina::repair(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
/* set current position to the beginning of the file */
|
||||
current_position= next_position= 0;
|
||||
|
||||
init_alloc_root(&blobroot, BLOB_MEMROOT_ALLOC_SIZE, 0);
|
||||
|
||||
/* Read the file row-by-row. If everything is ok, repair is not needed. */
|
||||
while (!(rc= find_current_row(buf)))
|
||||
{
|
||||
@ -1603,8 +1606,6 @@ int ha_tina::check(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
/* set current position to the beginning of the file */
|
||||
current_position= next_position= 0;
|
||||
|
||||
init_alloc_root(&blobroot, BLOB_MEMROOT_ALLOC_SIZE, 0);
|
||||
|
||||
/* Read the file row-by-row. If everything is ok, repair is not needed. */
|
||||
while (!(rc= find_current_row(buf)))
|
||||
{
|
||||
@ -1628,6 +1629,13 @@ int ha_tina::check(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
}
|
||||
|
||||
|
||||
int ha_tina::reset(void)
|
||||
{
|
||||
free_root(&blobroot, MYF(0));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool ha_tina::check_if_incompatible_data(HA_CREATE_INFO *info,
|
||||
uint table_changes)
|
||||
{
|
||||
|
@ -84,7 +84,7 @@ class ha_tina: public handler
|
||||
uchar chain_alloced;
|
||||
uint32 chain_size;
|
||||
uint local_data_file_version; /* Saved version of the data file used */
|
||||
bool records_is_known;
|
||||
bool records_is_known, found_end_of_file;
|
||||
MEM_ROOT blobroot;
|
||||
|
||||
private:
|
||||
@ -156,6 +156,7 @@ public:
|
||||
bool auto_repair() const { return 1; }
|
||||
void position(const uchar *record);
|
||||
int info(uint);
|
||||
int reset();
|
||||
int extra(enum ha_extra_function operation);
|
||||
int delete_all_rows(void);
|
||||
int create(const char *name, TABLE *form, HA_CREATE_INFO *create_info);
|
||||
|
Loading…
x
Reference in New Issue
Block a user