Commit dfb37cb3 authored by sergefp@mysql.com's avatar sergefp@mysql.com

Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.1-new

into mysql.com:/home/psergey/mysql-5.1-bug18025-r2
parents da810728 b05f270c
...@@ -546,6 +546,10 @@ sub command_line_setup () { ...@@ -546,6 +546,10 @@ sub command_line_setup () {
# 5.1 test run, even if different MTR_BUILD_THREAD is used. This means # 5.1 test run, even if different MTR_BUILD_THREAD is used. This means
# all port numbers might not be used in this version of the script. # all port numbers might not be used in this version of the script.
# #
# Also note the limiteation of ports we are allowed to hand out. This
# differs between operating systems and configuration, see
# http://www.ncftp.com/ncftpd/doc/misc/ephemeral_ports.html
# But a fairly safe range seems to be 5001 - 32767
if ( $ENV{'MTR_BUILD_THREAD'} ) if ( $ENV{'MTR_BUILD_THREAD'} )
{ {
# Up to two masters, up to three slaves # Up to two masters, up to three slaves
...@@ -558,6 +562,13 @@ sub command_line_setup () { ...@@ -558,6 +562,13 @@ sub command_line_setup () {
$im_mysqld2_port= $opt_master_myport + 9; $im_mysqld2_port= $opt_master_myport + 9;
} }
if ( $opt_master_myport < 5001 or $opt_master_myport + 10 >= 32767 )
{
mtr_error("MTR_BUILD_THREAD number results in a port",
"outside 5001 - 32767",
"($opt_master_myport - $opt_master_myport + 10)");
}
# Read the command line # Read the command line
# Note: Keep list, and the order, in sync with usage at end of this file # Note: Keep list, and the order, in sync with usage at end of this file
......
...@@ -344,6 +344,9 @@ SELECT f1 AS double_val, CAST(f1 AS SIGNED INT) AS cast_val FROM t1; ...@@ -344,6 +344,9 @@ SELECT f1 AS double_val, CAST(f1 AS SIGNED INT) AS cast_val FROM t1;
double_val cast_val double_val cast_val
-1e+30 -9223372036854775808 -1e+30 -9223372036854775808
1e+30 9223372036854775807 1e+30 9223372036854775807
Warnings:
Warning 1292 Truncated incorrect INTEGER value: '-1e+30'
Warning 1292 Truncated incorrect INTEGER value: '1e+30'
DROP TABLE t1; DROP TABLE t1;
select cast('1.2' as decimal(3,2)); select cast('1.2' as decimal(3,2));
cast('1.2' as decimal(3,2)) cast('1.2' as decimal(3,2))
......
...@@ -642,7 +642,7 @@ drop table t1; ...@@ -642,7 +642,7 @@ drop table t1;
create table t1 (a int) engine=innodb partition by hash(a) ; create table t1 (a int) engine=innodb partition by hash(a) ;
show table status like 't1'; show table status like 't1';
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 PARTITION 10 Compact 2 8192 16384 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL t1 InnoDB 10 Compact 2 8192 16384 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
drop table t1; drop table t1;
create table t2 (s1 int not null auto_increment, primary key (s1)) partition by list (s1) (partition p1 values in (1),partition p2 values in (2),partition p3 values in (3),partition p4 values in (4)); create table t2 (s1 int not null auto_increment, primary key (s1)) partition by list (s1) (partition p1 values in (1),partition p2 values in (2),partition p3 values in (3),partition p4 values in (4));
insert into t2 values (null),(null),(null); insert into t2 values (null),(null),(null);
...@@ -819,4 +819,14 @@ explain partitions select * from t1 where a is null or a < 0 or a > 1; ...@@ -819,4 +819,14 @@ explain partitions select * from t1 where a is null or a < 0 or a > 1;
id select_type table partitions type possible_keys key key_len ref rows Extra id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE t1 pn,p2 ALL NULL NULL NULL NULL 2 Using where 1 SIMPLE t1 pn,p2 ALL NULL NULL NULL NULL 2 Using where
drop table t1; drop table t1;
CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, name VARCHAR(20))
ENGINE=MyISAM DEFAULT CHARSET=latin1
PARTITION BY RANGE(id)
(PARTITION p0 VALUES LESS THAN (10) ENGINE = MyISAM,
PARTITION p1 VALUES LESS THAN (20) ENGINE = MyISAM,
PARTITION p2 VALUES LESS THAN (30) ENGINE = MyISAM);
SHOW TABLE STATUS;
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
t1 MyISAM 10 Dynamic 0 0 0 0 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL partitioned
DROP TABLE t1;
End of 5.1 tests End of 5.1 tests
...@@ -924,4 +924,17 @@ select * from t1 where a is null or a < 0 or a > 1; ...@@ -924,4 +924,17 @@ select * from t1 where a is null or a < 0 or a > 1;
explain partitions select * from t1 where a is null or a < 0 or a > 1; explain partitions select * from t1 where a is null or a < 0 or a > 1;
drop table t1; drop table t1;
#
#Bug# 17631 SHOW TABLE STATUS reports wrong engine
#
CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, name VARCHAR(20))
ENGINE=MyISAM DEFAULT CHARSET=latin1
PARTITION BY RANGE(id)
(PARTITION p0 VALUES LESS THAN (10) ENGINE = MyISAM,
PARTITION p1 VALUES LESS THAN (20) ENGINE = MyISAM,
PARTITION p2 VALUES LESS THAN (30) ENGINE = MyISAM);
--replace_column 6 0 7 0 8 0 9 0 12 NULL 13 NULL 14 NULL
SHOW TABLE STATUS;
DROP TABLE t1;
--echo End of 5.1 tests --echo End of 5.1 tests
...@@ -4237,6 +4237,7 @@ double Field_double::val_real(void) ...@@ -4237,6 +4237,7 @@ double Field_double::val_real(void)
longlong Field_double::val_int(void) longlong Field_double::val_int(void)
{ {
double j; double j;
longlong res;
#ifdef WORDS_BIGENDIAN #ifdef WORDS_BIGENDIAN
if (table->s->db_low_byte_first) if (table->s->db_low_byte_first)
{ {
...@@ -4247,10 +4248,28 @@ longlong Field_double::val_int(void) ...@@ -4247,10 +4248,28 @@ longlong Field_double::val_int(void)
doubleget(j,ptr); doubleget(j,ptr);
/* Check whether we fit into longlong range */ /* Check whether we fit into longlong range */
if (j <= (double) LONGLONG_MIN) if (j <= (double) LONGLONG_MIN)
return (longlong) LONGLONG_MIN; {
res= (longlong) LONGLONG_MIN;
goto warn;
}
if (j >= (double) (ulonglong) LONGLONG_MAX) if (j >= (double) (ulonglong) LONGLONG_MAX)
return (longlong) LONGLONG_MAX; {
res= (longlong) LONGLONG_MAX;
goto warn;
}
return (longlong) rint(j); return (longlong) rint(j);
warn:
{
char buf[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE];
String tmp(buf, sizeof(buf), &my_charset_latin1), *str;
str= val_str(&tmp, 0);
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_TRUNCATED_WRONG_VALUE,
ER(ER_TRUNCATED_WRONG_VALUE), "INTEGER",
str->c_ptr());
}
return res;
} }
......
...@@ -258,6 +258,13 @@ void ha_partition::init_handler_variables() ...@@ -258,6 +258,13 @@ void ha_partition::init_handler_variables()
} }
const char *ha_partition::table_type() const
{
// we can do this since we only support a single engine type
return m_file[0]->table_type();
}
/* /*
Destructor method Destructor method
......
...@@ -524,8 +524,7 @@ class ha_partition :public handler ...@@ -524,8 +524,7 @@ class ha_partition :public handler
virtual const char *index_type(uint inx); virtual const char *index_type(uint inx);
/* The name of the table type that will be used for display purposes */ /* The name of the table type that will be used for display purposes */
virtual const char *table_type() const virtual const char *table_type() const;
{ return "PARTITION"; }
/* The name of the row type used for the underlying tables. */ /* The name of the row type used for the underlying tables. */
virtual enum row_type get_row_type() const; virtual enum row_type get_row_type() const;
......
This diff is collapsed.
...@@ -245,7 +245,13 @@ class partition_info : public Sql_alloc ...@@ -245,7 +245,13 @@ class partition_info : public Sql_alloc
bool set_up_defaults_for_partitioning(handler *file, ulonglong max_rows, bool set_up_defaults_for_partitioning(handler *file, ulonglong max_rows,
uint start_no); uint start_no);
char *has_unique_names(); char *has_unique_names();
static bool check_engine_mix(handlerton **engine_array, uint no_parts);
bool check_range_constants();
bool check_list_constants();
bool check_partition_info(handlerton **eng_type,
handler *file, ulonglong max_rows);
private: private:
static int list_part_cmp(const void* a, const void* b);
bool set_up_default_partitions(handler *file, ulonglong max_rows, bool set_up_default_partitions(handler *file, ulonglong max_rows,
uint start_no); uint start_no);
bool set_up_default_subpartitions(handler *file, ulonglong max_rows); bool set_up_default_subpartitions(handler *file, ulonglong max_rows);
......
This diff is collapsed.
...@@ -2721,6 +2721,12 @@ static int get_schema_tables_record(THD *thd, struct st_table_list *tables, ...@@ -2721,6 +2721,12 @@ static int get_schema_tables_record(THD *thd, struct st_table_list *tables,
ptr=strxmov(ptr, " row_format=", ptr=strxmov(ptr, " row_format=",
ha_row_type[(uint) share->row_type], ha_row_type[(uint) share->row_type],
NullS); NullS);
#ifdef WITH_PARTITION_STORAGE_ENGINE
if (share->db_type == &partition_hton &&
share->partition_info != NULL &&
((partition_info*)share->partition_info)->no_parts > 0)
ptr= strmov(ptr, " partitioned");
#endif
table->field[19]->store(option_buff+1, table->field[19]->store(option_buff+1,
(ptr == option_buff ? 0 : (ptr == option_buff ? 0 :
(uint) (ptr-option_buff)-1), cs); (uint) (ptr-option_buff)-1), cs);
......
...@@ -2141,7 +2141,7 @@ bool mysql_create_table_internal(THD *thd, ...@@ -2141,7 +2141,7 @@ bool mysql_create_table_internal(THD *thd,
} }
DBUG_PRINT("info", ("db_type = %d", DBUG_PRINT("info", ("db_type = %d",
ha_legacy_type(part_info->default_engine_type))); ha_legacy_type(part_info->default_engine_type)));
if (check_partition_info(part_info, &engine_type, file, if (part_info->check_partition_info( &engine_type, file,
create_info->max_rows)) create_info->max_rows))
goto err; goto err;
part_info->default_engine_type= engine_type; part_info->default_engine_type= engine_type;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment