Commit 4b8926ac authored by unknown's avatar unknown

lot's of fixes with test cases


mysql-test/r/create.result:
  A test case for foreign key bug that is resolved
mysql-test/r/select_found.result:
  test case for new select ... limit 0 behaviour
mysql-test/t/create.test:
  test case for foreign key bug that is fixed
mysql-test/t/select_found.test:
  test case for new behaviour of SELECT ... LIMIT 0
sql/sql_select.cc:
  SELECT ... LIMIT 0
sql/sql_union.cc:
  replacing my dirty hack with Sanja's "proper" fix
parent fb40381b
...@@ -158,3 +158,6 @@ select * from t1; ...@@ -158,3 +158,6 @@ select * from t1;
if('2002'='2002','Y','N') if('2002'='2002','Y','N')
Y Y
drop table if exists t1; drop table if exists t1;
create table t1 (a int, key(a));
create table t2 (b int, foreign key(b) references t1(a), key(b));
drop table if exists t1,t2;
...@@ -173,9 +173,9 @@ SELECT SQL_CALC_FOUND_ROWS 1 FROM (SELECT 1) LIMIT 0; ...@@ -173,9 +173,9 @@ SELECT SQL_CALC_FOUND_ROWS 1 FROM (SELECT 1) LIMIT 0;
SELECT FOUND_ROWS(); SELECT FOUND_ROWS();
FOUND_ROWS() FOUND_ROWS()
1 1
SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 0; SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE numeropost > 1 LIMIT 0;
titre numeropost maxnumrep titre numeropost maxnumrep
SELECT FOUND_ROWS(); SELECT FOUND_ROWS();
FOUND_ROWS() FOUND_ROWS()
3 2
drop table t1; drop table t1;
...@@ -110,3 +110,6 @@ drop table t1; ...@@ -110,3 +110,6 @@ drop table t1;
create table t1 select if('2002'='2002','Y','N'); create table t1 select if('2002'='2002','Y','N');
select * from t1; select * from t1;
drop table if exists t1; drop table if exists t1;
create table t1 (a int, key(a));
create table t2 (b int, foreign key(b) references t1(a), key(b));
drop table if exists t1,t2;
...@@ -86,6 +86,6 @@ SELECT SQL_CALC_FOUND_ROWS titre,numeropost,maxnumrep FROM t1 WHERE numeropost I ...@@ -86,6 +86,6 @@ SELECT SQL_CALC_FOUND_ROWS titre,numeropost,maxnumrep FROM t1 WHERE numeropost I
SELECT FOUND_ROWS(); SELECT FOUND_ROWS();
SELECT SQL_CALC_FOUND_ROWS 1 FROM (SELECT 1) LIMIT 0; SELECT SQL_CALC_FOUND_ROWS 1 FROM (SELECT 1) LIMIT 0;
SELECT FOUND_ROWS(); SELECT FOUND_ROWS();
SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT 0; SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE numeropost > 1 LIMIT 0;
SELECT FOUND_ROWS(); SELECT FOUND_ROWS();
drop table t1; drop table t1;
...@@ -324,6 +324,7 @@ JOIN::prepare(TABLE_LIST *tables_init, ...@@ -324,6 +324,7 @@ JOIN::prepare(TABLE_LIST *tables_init,
this->group= group_list != 0; this->group= group_list != 0;
row_limit= ((select_distinct || order || group_list) ? HA_POS_ERROR : row_limit= ((select_distinct || order || group_list) ? HA_POS_ERROR :
unit->select_limit_cnt); unit->select_limit_cnt);
do_send_rows = (row_limit) ? 1 : 0;
this->unit= unit; this->unit= unit;
#ifdef RESTRICTED_GROUP #ifdef RESTRICTED_GROUP
...@@ -664,7 +665,7 @@ JOIN::exec() ...@@ -664,7 +665,7 @@ JOIN::exec()
result->send_fields(fields_list,1); result->send_fields(fields_list,1);
if (!having || having->val_int()) if (!having || having->val_int())
{ {
if (do_send_rows && unit->select_limit_cnt && result->send_data(fields_list)) if (do_send_rows && result->send_data(fields_list))
error= 1; error= 1;
else else
{ {
...@@ -2611,8 +2612,8 @@ make_simple_join(JOIN *join,TABLE *tmp_table) ...@@ -2611,8 +2612,8 @@ make_simple_join(JOIN *join,TABLE *tmp_table)
join->sum_funcs=0; join->sum_funcs=0;
join->send_records=(ha_rows) 0; join->send_records=(ha_rows) 0;
join->group=0; join->group=0;
join->do_send_rows = 1;
join->row_limit=join->unit->select_limit_cnt; join->row_limit=join->unit->select_limit_cnt;
join->do_send_rows = (join->row_limit) ? 1 : 0;
join_tab->cache.buff=0; /* No cacheing */ join_tab->cache.buff=0; /* No cacheing */
join_tab->table=tmp_table; join_tab->table=tmp_table;
...@@ -5184,7 +5185,7 @@ end_send(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)), ...@@ -5184,7 +5185,7 @@ end_send(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
error=0; error=0;
if (join->procedure) if (join->procedure)
error=join->procedure->send_row(*join->fields); error=join->procedure->send_row(*join->fields);
else if (join->do_send_rows && join->unit->select_limit_cnt) else if (join->do_send_rows)
error=join->result->send_data(*join->fields); error=join->result->send_data(*join->fields);
if (error) if (error)
DBUG_RETURN(-1); /* purecov: inspected */ DBUG_RETURN(-1); /* purecov: inspected */
......
...@@ -86,7 +86,6 @@ bool select_union::send_data(List<Item> &values) ...@@ -86,7 +86,6 @@ bool select_union::send_data(List<Item> &values)
} }
else else
return 1; return 1;
thd->net.report_error=0; // donno why does it work, but it does ...
} }
return 0; return 0;
} }
......
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