mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/usr/home/ram/work/mysql-4.1
This commit is contained in:
commit
91a766838f
7 changed files with 36 additions and 64 deletions
|
@ -2237,14 +2237,14 @@ do not allow the discard. We also reserve the data dictionary latch. */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
funct_exit:
|
funct_exit:
|
||||||
|
trx_commit_for_mysql(trx);
|
||||||
|
|
||||||
row_mysql_unlock_data_dictionary(trx);
|
row_mysql_unlock_data_dictionary(trx);
|
||||||
|
|
||||||
if (graph) {
|
if (graph) {
|
||||||
que_graph_free(graph);
|
que_graph_free(graph);
|
||||||
}
|
}
|
||||||
|
|
||||||
trx_commit_for_mysql(trx);
|
|
||||||
|
|
||||||
trx->op_info = "";
|
trx->op_info = "";
|
||||||
|
|
||||||
return((int) err);
|
return((int) err);
|
||||||
|
@ -2374,10 +2374,10 @@ row_import_tablespace_for_mysql(
|
||||||
}
|
}
|
||||||
|
|
||||||
funct_exit:
|
funct_exit:
|
||||||
row_mysql_unlock_data_dictionary(trx);
|
|
||||||
|
|
||||||
trx_commit_for_mysql(trx);
|
trx_commit_for_mysql(trx);
|
||||||
|
|
||||||
|
row_mysql_unlock_data_dictionary(trx);
|
||||||
|
|
||||||
trx->op_info = "";
|
trx->op_info = "";
|
||||||
|
|
||||||
return((int) err);
|
return((int) err);
|
||||||
|
@ -2769,6 +2769,8 @@ fputs(" InnoDB: You are trying to drop table ", stderr);
|
||||||
}
|
}
|
||||||
funct_exit:
|
funct_exit:
|
||||||
|
|
||||||
|
trx_commit_for_mysql(trx);
|
||||||
|
|
||||||
if (locked_dictionary) {
|
if (locked_dictionary) {
|
||||||
row_mysql_unlock_data_dictionary(trx);
|
row_mysql_unlock_data_dictionary(trx);
|
||||||
}
|
}
|
||||||
|
@ -2779,8 +2781,6 @@ funct_exit:
|
||||||
|
|
||||||
que_graph_free(graph);
|
que_graph_free(graph);
|
||||||
|
|
||||||
trx_commit_for_mysql(trx);
|
|
||||||
|
|
||||||
trx->op_info = "";
|
trx->op_info = "";
|
||||||
|
|
||||||
srv_wake_master_thread();
|
srv_wake_master_thread();
|
||||||
|
@ -2857,10 +2857,10 @@ loop:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
row_mysql_unlock_data_dictionary(trx);
|
|
||||||
|
|
||||||
trx_commit_for_mysql(trx);
|
trx_commit_for_mysql(trx);
|
||||||
|
|
||||||
|
row_mysql_unlock_data_dictionary(trx);
|
||||||
|
|
||||||
trx->op_info = "";
|
trx->op_info = "";
|
||||||
|
|
||||||
return(err);
|
return(err);
|
||||||
|
@ -3272,6 +3272,8 @@ row_rename_table_for_mysql(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
funct_exit:
|
funct_exit:
|
||||||
|
trx_commit_for_mysql(trx);
|
||||||
|
|
||||||
if (!recovering_temp_table) {
|
if (!recovering_temp_table) {
|
||||||
row_mysql_unlock_data_dictionary(trx);
|
row_mysql_unlock_data_dictionary(trx);
|
||||||
}
|
}
|
||||||
|
@ -3284,8 +3286,6 @@ funct_exit:
|
||||||
mem_heap_free(heap);
|
mem_heap_free(heap);
|
||||||
}
|
}
|
||||||
|
|
||||||
trx_commit_for_mysql(trx);
|
|
||||||
|
|
||||||
trx->op_info = "";
|
trx->op_info = "";
|
||||||
|
|
||||||
return((int) err);
|
return((int) err);
|
||||||
|
|
|
@ -202,24 +202,3 @@ select count(*) from t1 where id not in (1,2);
|
||||||
count(*)
|
count(*)
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (f1 char(1), f2 int);
|
|
||||||
insert into t1 values (1,0),('a',1),('z',2);
|
|
||||||
select f1 from t1 where f1 in (1,'z');
|
|
||||||
f1
|
|
||||||
1
|
|
||||||
z
|
|
||||||
select f2 from t1 where f2 in (1,'z');
|
|
||||||
f2
|
|
||||||
0
|
|
||||||
1
|
|
||||||
select f1 from t1 where 'z' in (1,f1);
|
|
||||||
f1
|
|
||||||
z
|
|
||||||
select * from t1 where 'z' in (f2,f1);
|
|
||||||
f1 f2
|
|
||||||
z 2
|
|
||||||
select * from t1 where 1 in (f2,f1);
|
|
||||||
f1 f2
|
|
||||||
1 0
|
|
||||||
a 1
|
|
||||||
drop table t1;
|
|
||||||
|
|
|
@ -748,3 +748,11 @@ select count(id1) from t1 where id2 = 10;
|
||||||
count(id1)
|
count(id1)
|
||||||
5
|
5
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1(a CHAR(9), b VARCHAR(7)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1(a) VALUES('xxxxxxxxx'),('xxxxxxxxx');
|
||||||
|
UPDATE t1 AS ta1,t1 AS ta2 SET ta1.b='aaaaaa',ta2.b='bbbbbb';
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a b
|
||||||
|
xxxxxxxxx bbbbbb
|
||||||
|
xxxxxxxxx bbbbbb
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
|
@ -109,16 +109,4 @@ select count(*) from t1 where id not in (1);
|
||||||
select count(*) from t1 where id not in (1,2);
|
select count(*) from t1 where id not in (1,2);
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
#
|
|
||||||
# Bug#18360 Incorrect type coercion in IN() results in false comparison
|
|
||||||
#
|
|
||||||
create table t1 (f1 char(1), f2 int);
|
|
||||||
insert into t1 values (1,0),('a',1),('z',2);
|
|
||||||
select f1 from t1 where f1 in (1,'z');
|
|
||||||
select f2 from t1 where f2 in (1,'z');
|
|
||||||
select f1 from t1 where 'z' in (1,f1);
|
|
||||||
select * from t1 where 'z' in (f2,f1);
|
|
||||||
select * from t1 where 1 in (f2,f1);
|
|
||||||
drop table t1;
|
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
|
@ -705,4 +705,13 @@ select count(*) from t1 where id2 = 10;
|
||||||
select count(id1) from t1 where id2 = 10;
|
select count(id1) from t1 where id2 = 10;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#18036 - update of table joined to self reports table as crashed
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a CHAR(9), b VARCHAR(7)) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1(a) VALUES('xxxxxxxxx'),('xxxxxxxxx');
|
||||||
|
UPDATE t1 AS ta1,t1 AS ta2 SET ta1.b='aaaaaa',ta2.b='bbbbbb';
|
||||||
|
SELECT * FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
|
@ -78,9 +78,6 @@ static void agg_result_type(Item_result *type, Item **items, uint nitems)
|
||||||
|
|
||||||
NOTES
|
NOTES
|
||||||
Aggregation rules:
|
Aggregation rules:
|
||||||
If all items are constants the type will be aggregated from all items.
|
|
||||||
If there are some non-constant items then only types of non-constant
|
|
||||||
items will be used for aggregation.
|
|
||||||
If there are DATE/TIME fields/functions in the list and no string
|
If there are DATE/TIME fields/functions in the list and no string
|
||||||
fields/functions in the list then:
|
fields/functions in the list then:
|
||||||
The INT_RESULT type will be used for aggregation instead of original
|
The INT_RESULT type will be used for aggregation instead of original
|
||||||
|
@ -167,34 +164,25 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Reset to 0 on first occurence of non-const item. 1 otherwise */
|
|
||||||
bool is_const= items[0]->const_item();
|
|
||||||
/*
|
/*
|
||||||
If the first item is a date/time function then its result should be
|
If the first item is a date/time function then its result should be
|
||||||
compared as int
|
compared as int
|
||||||
*/
|
*/
|
||||||
if (field)
|
if (field)
|
||||||
{
|
/* Suppose we are comparing dates */
|
||||||
/* Suppose we are comparing dates and some non-constant items are present. */
|
|
||||||
type[0]= INT_RESULT;
|
type[0]= INT_RESULT;
|
||||||
is_const= 0;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
type[0]= items[0]->result_type();
|
type[0]= items[0]->result_type();
|
||||||
|
|
||||||
for (i= 0; i < nitems ; i++)
|
for (i= 0; i < nitems ; i++)
|
||||||
{
|
{
|
||||||
if (!items[i]->const_item())
|
Item_result result= items[i]->result_type();
|
||||||
{
|
if (field &&
|
||||||
Item_result result= field && items[i]->result_as_longlong() ?
|
((!items[i]->const_item() && items[i]->result_as_longlong()) ||
|
||||||
INT_RESULT : items[i]->result_type();
|
(items[i]->const_item() && convert_constant_item(thd, field,
|
||||||
type[0]= is_const ? result : item_cmp_type(type[0], result);
|
&items[i]))))
|
||||||
is_const= 0;
|
result= INT_RESULT;
|
||||||
}
|
type[0]= item_cmp_type(type[0], result);
|
||||||
else if (is_const)
|
|
||||||
type[0]= item_cmp_type(type[0], items[i]->result_type());
|
|
||||||
else if (field)
|
|
||||||
convert_constant_item(thd, field, &items[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res == Item::FUNC_ITEM && field)
|
if (res == Item::FUNC_ITEM && field)
|
||||||
|
|
|
@ -862,7 +862,7 @@ int multi_update::prepare(List<Item> ¬_used_values,
|
||||||
for (table_ref= all_tables; table_ref; table_ref=table_ref->next)
|
for (table_ref= all_tables; table_ref; table_ref=table_ref->next)
|
||||||
{
|
{
|
||||||
TABLE *table=table_ref->table;
|
TABLE *table=table_ref->table;
|
||||||
if (!(tables_to_update & table->map) &&
|
if ((tables_to_update & table->map) &&
|
||||||
mysql_lock_have_duplicate(thd, table, update_tables))
|
mysql_lock_have_duplicate(thd, table, update_tables))
|
||||||
table->no_cache= 1; // Disable row cache
|
table->no_cache= 1; // Disable row cache
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue