summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <igor@rurik.mysql.com>2005-06-09 09:19:57 -0700
committerunknown <igor@rurik.mysql.com>2005-06-09 09:19:57 -0700
commit9227cf4254dc9e9ece41d9eabc164b05a621638a (patch)
treefd9e7c535549fb687ad69893356f75e2603117ca
parentd0db70270c59c8def10980c76173b3072263ef25 (diff)
parent8ab8fca7d54c0f177ef57f8c09e203eb212b05e8 (diff)
downloadmariadb-git-9227cf4254dc9e9ece41d9eabc164b05a621638a.tar.gz
Merge rurik.mysql.com:/home/igor/mysql-5.0
into rurik.mysql.com:/home/igor/dev/mysql-5.0-0
-rw-r--r--mysql-test/r/select.result17
-rw-r--r--mysql-test/t/select.test16
-rw-r--r--sql/sql_yacc.yy6
3 files changed, 37 insertions, 2 deletions
diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result
index eaed7719673..1c0321ac658 100644
--- a/mysql-test/r/select.result
+++ b/mysql-test/r/select.result
@@ -2682,3 +2682,20 @@ AND FK_firma_id = 2;
COUNT(*)
0
drop table t1;
+CREATE TABLE t1 (a int);
+CREATE TABLE t2 (a int);
+INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
+INSERT INTO t2 VALUES (2), (4), (6);
+SELECT t1.a FROM t1 STRAIGHT_JOIN t2 ON t1.a=t2.a;
+a
+2
+4
+EXPLAIN SELECT t1.a FROM t1 STRAIGHT_JOIN t2 ON t1.a=t2.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 5
+1 SIMPLE t2 ALL NULL NULL NULL NULL 3 Using where
+EXPLAIN SELECT t1.a FROM t1 INNER JOIN t2 ON t1.a=t2.a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 ALL NULL NULL NULL NULL 3
+1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using where
+DROP TABLE t1,t2;
diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test
index b6132d23d02..372325c4cbd 100644
--- a/mysql-test/t/select.test
+++ b/mysql-test/t/select.test
@@ -2255,3 +2255,19 @@ AND FK_firma_id = 2;
drop table t1;
+#
+# Test for bug #10084: STRAIGHT_JOIN with ON expression
+#
+
+CREATE TABLE t1 (a int);
+CREATE TABLE t2 (a int);
+INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
+INSERT INTO t2 VALUES (2), (4), (6);
+
+SELECT t1.a FROM t1 STRAIGHT_JOIN t2 ON t1.a=t2.a;
+
+EXPLAIN SELECT t1.a FROM t1 STRAIGHT_JOIN t2 ON t1.a=t2.a;
+EXPLAIN SELECT t1.a FROM t1 INNER JOIN t2 ON t1.a=t2.a;
+
+DROP TABLE t1,t2;
+
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 8ece85b3dee..33d6c192d07 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -5108,10 +5108,12 @@ derived_table_list:
join_table:
table_ref normal_join table_ref { TEST_ASSERT($1 && ($$=$3)); }
- | table_ref STRAIGHT_JOIN table_factor
- { TEST_ASSERT($1 && ($$=$3)); $3->straight=1; }
+ | table_ref STRAIGHT_JOIN table_ref
+ { TEST_ASSERT($1 && ($$=$3)); $3->straight=1; }
| table_ref normal_join table_ref ON expr
{ TEST_ASSERT($1 && ($$=$3)); add_join_on($3,$5); }
+ | table_ref STRAIGHT_JOIN table_ref ON expr
+ { TEST_ASSERT($1 && ($$=$3)); $3->straight=1; add_join_on($3,$5); }
| table_ref normal_join table_ref
USING
{