Below is the list of changes that have just been committed into a local
5.1 repository of jimw. When jimw does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.2171 06/03/13 06:15:21 jimw@stripped +3 -0
Merge mysql.com:/home/jimw/my/mysql-5.1-14526
into mysql.com:/home/jimw/my/mysql-5.1-clean
sql/ha_partition.cc
1.38 06/03/13 06:15:13 jimw@stripped +0 -1
Resolve conflict
mysql-test/t/partition.test
1.22 06/03/13 06:14:35 jimw@stripped +12 -12
Resolve conflict
mysql-test/r/partition.result
1.19 06/03/13 06:14:13 jimw@stripped +18 -18
Resolve conflict
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: jimw
# Host: rama.(none)
# Root: /home/jimw/my/mysql-5.1-clean/RESYNC
--- 1.18/mysql-test/r/partition.result 2006-03-13 06:12:06 -08:00
+++ 1.19/mysql-test/r/partition.result 2006-03-13 06:14:13 -08:00
@@ -433,4 +433,22 @@
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
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));
+insert into t2 values (null),(null),(null);
+select * from t2;
+s1
+1
+2
+3
+select * from t2 where s1 < 2;
+s1
+1
+update t2 set s1 = s1 + 1 order by s1 desc;
+select * from t2 where s1 < 3;
+s1
+2
+select * from t2 where s1 = 2;
+s1
+2
+drop table t2;
End of 5.1 tests
--- 1.21/mysql-test/t/partition.test 2006-03-13 06:12:37 -08:00
+++ 1.22/mysql-test/t/partition.test 2006-03-13 06:14:35 -08:00
@@ -559,4 +559,16 @@
show table status like 't1';
drop table t1;
+#
+# Bug #14526: Partitions: indexed searches fail
+#
+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);
+select * from t2;
+select * from t2 where s1 < 2;
+update t2 set s1 = s1 + 1 order by s1 desc;
+select * from t2 where s1 < 3;
+select * from t2 where s1 = 2;
+drop table t2;
+
--echo End of 5.1 tests
--- 1.37/sql/ha_partition.cc 2006-03-08 11:05:56 -08:00
+++ 1.38/sql/ha_partition.cc 2006-03-13 06:15:13 -08:00
@@ -2603,22 +2603,13 @@
ha_berkeley.cc has a variant of how to store it intact by "packing" it
for ha_berkeley's own native storage type.
- See the note for update_row() on auto_increments and timestamps. This
- case also applied to write_row().
-
Called from item_sum.cc, item_sum.cc, sql_acl.cc, sql_insert.cc,
sql_insert.cc, sql_select.cc, sql_table.cc, sql_udf.cc, and sql_update.cc.
ADDITIONAL INFO:
- Most handlers set timestamp when calling write row if any such fields
- exists. Since we are calling an underlying handler we assume the´
- underlying handler will assume this responsibility.
-
- Underlying handlers will also call update_auto_increment to calculate
- the new auto increment value. We will catch the call to
- get_auto_increment and ensure this increment value is maintained by
- only one of the underlying handlers.
+ We have to set timestamp fields and auto_increment fields, because those
+ may be used in determining which partition the row should be written to.
*/
int ha_partition::write_row(byte * buf)
@@ -2631,6 +2622,17 @@
#endif
DBUG_ENTER("ha_partition::write_row");
DBUG_ASSERT(buf == m_rec0);
+
+ /* If we have a timestamp column, update it to the current time */
+ if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_INSERT)
+ table->timestamp_field->set_time();
+
+ /*
+ If we have an auto_increment column and we are writing a changed row
+ or a new row, then update the auto_increment value in the record.
+ */
+ if (table->next_number_field && buf == table->record[0])
+ update_auto_increment();
#ifdef NOT_NEEDED
if (likely(buf == rec0))
| Thread |
|---|
| • bk commit into 5.1 tree (jimw:1.2171) | Jim Winstead | 13 Mar |