From b24fd86a91519c879c8c31fad9f918d3847ca797 Mon Sep 17 00:00:00 2001 From: "hf@deer.(none)" <> Date: Sat, 21 Jun 2003 20:17:50 +0500 Subject: [PATCH 1/3] Fix for bug #628 --- sql/item_strfunc.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 208be1ecd7f..1edd0e68687 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1482,7 +1482,7 @@ String *Item_func_format::val_str(String *str) str= copy_if_not_alloced(&tmp_str,str,length); str->length(length); tmp= (char*) str->ptr()+length - dec-1; - for (pos= (char*) str->ptr()+length ; pos != tmp; pos--) + for (pos= (char*) str->ptr()+length-1; pos != tmp; pos--) pos[0]= pos[-(int) diff]; while (diff) { From 0cdf7f39af33767fa5cd1b6bbedb14400ea3ad6c Mon Sep 17 00:00:00 2001 From: "hf@deer.(none)" <> Date: Thu, 3 Jul 2003 10:42:13 +0500 Subject: [PATCH 2/3] Proposed bugfix for #717 Current table is placed into read_tables set of the current join_tab->select so get_mm_parts function thinks that current table's record is read and tries to calculate WHERE condition with the fields of the record. Result of these calculations is unpredictable. Looks funny - outcome of the SELECT depends on the queries executed before. Anyway i think we should have testcase on this part of the code. --- mysql-test/r/sel000001.result | 14 ++++++++++++++ mysql-test/t/sel000001.test | 13 +++++++++++++ sql/sql_select.cc | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/sel000001.result b/mysql-test/r/sel000001.result index 28f6d3d1d5a..6b6b9b7dffc 100644 --- a/mysql-test/r/sel000001.result +++ b/mysql-test/r/sel000001.result @@ -5,3 +5,17 @@ SELECT s, id FROM t1 WHERE s = 'mouse'; s id mouse 3 drop table t1; +CREATE TABLE t1 ( +node int(11) NOT NULL default '0', +maxchild int(11) NOT NULL default '0', +PRIMARY KEY (`node`) +); +INSERT INTO t1 (node, maxchild) VALUES (4,4),(5,5),(1,244); +SELECT * FROM t1 g1, t1 g2 +WHERE g1.node <= g2.node and g2.node <= g1.maxchild and g2.node = g2.maxchild; +node maxchild node maxchild +4 4 4 4 +5 5 5 5 +1 244 4 4 +1 244 5 5 +DROP TABLE t1; diff --git a/mysql-test/t/sel000001.test b/mysql-test/t/sel000001.test index 77355f8d535..ad4af1f92fb 100644 --- a/mysql-test/t/sel000001.test +++ b/mysql-test/t/sel000001.test @@ -16,3 +16,16 @@ CREATE TABLE t1 (s CHAR(20) PRIMARY KEY, id INT); INSERT INTO t1 VALUES ('cat', 1), ('mouse', 3), ('dog', 2), ('snake', 77); SELECT s, id FROM t1 WHERE s = 'mouse'; drop table t1; + +# +#test for bug #717 +# +CREATE TABLE t1 ( + node int(11) NOT NULL default '0', + maxchild int(11) NOT NULL default '0', + PRIMARY KEY (`node`) +); +INSERT INTO t1 (node, maxchild) VALUES (4,4),(5,5),(1,244); +SELECT * FROM t1 g1, t1 g2 + WHERE g1.node <= g2.node and g2.node <= g1.maxchild and g2.node = g2.maxchild; +DROP TABLE t1; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 5b5972be384..bde5392d299 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -2683,7 +2683,7 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond) (select->quick && (select->quick->records >= 100L)))) ? 2 : 1; - sel->read_tables= used_tables; + sel->read_tables= used_tables & ~current_map; } if (i != join->const_tables && tab->use_quick != 2) { /* Read with cache */ From 95d6b7a5ea235c9ac29264598d6672a7031cc4ee Mon Sep 17 00:00:00 2001 From: "hf@deer.(none)" <> Date: Thu, 3 Jul 2003 16:48:47 +0500 Subject: [PATCH 3/3] Testcase for #628 --- mysql-test/r/func_misc.result | 3 +++ mysql-test/t/func_misc.test | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/mysql-test/r/func_misc.result b/mysql-test/r/func_misc.result index 8d05adcc1ba..d51bea020ed 100644 --- a/mysql-test/r/func_misc.result +++ b/mysql-test/r/func_misc.result @@ -13,3 +13,6 @@ NULL 255.255.1.255 0.0.1.255 select length(format('nan', 2)) > 0; length(format('nan', 2)) > 0 1 +select concat("$",format(2500,2)); +concat("$",format(2500,2)) +$2,500.00 diff --git a/mysql-test/t/func_misc.test b/mysql-test/t/func_misc.test index be64c170fa1..d15c26279ec 100644 --- a/mysql-test/t/func_misc.test +++ b/mysql-test/t/func_misc.test @@ -12,3 +12,8 @@ select inet_ntoa(1099511627775),inet_ntoa(4294902271),inet_ntoa(511); # Test for core dump with nan # select length(format('nan', 2)) > 0; + +# +# Test for bug #628 +# +select concat("$",format(2500,2));