summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorunknown <antony@ltantony.rdg.cyberkinetica.homeunix.net>2004-11-17 15:49:10 +0000
committerunknown <antony@ltantony.rdg.cyberkinetica.homeunix.net>2004-11-17 15:49:10 +0000
commit191fa2993286da65e1896801e6e4a9bdf153c200 (patch)
tree64d4ad2d56e8db843d4d3030e373422b4c15938b /mysql-test
parent1dad655030e240bbf9a48e3290ffe48b68d82466 (diff)
downloadmariadb-git-191fa2993286da65e1896801e6e4a9bdf153c200.tar.gz
WL#638 - Fix precedence for parsing NOT ... LIKE expression s
Rework parser expression rules Rework handling for "||" concat/or Eliminate some shift/reduce conflicts Add support for "xxx IS [ NOT ] truth_value" mysql-test/r/ansi.result: Fix test for new BROKEN_NOT mode bit mysql-test/r/bool.result: WL#638 New test for BROKEN_NOT mode New test for "expr IS [NOT] truth_value" syntax mysql-test/r/sql_mode.result: Fix test for new BROKEN_NOT mode bit mysql-test/t/bool.test: WL#638 New test for BROKEN_NOT mode New test for "expr IS [NOT] truth_value" syntax sql/lex.h: WL#638 "&&" and "AND" return different tokens, NOT token changed to NOT_SYM OR_OR_CONCAT token changed to OR_OR_SYM New token "UNKNOWN" sql/mysql_priv.h: WL#638 New mode: BROKEN_NOT sql/mysqld.cc: WL#638 New mode: BROKEN_NOT sql/set_var.cc: WL#638 New mode: BROKEN_NOT BROKEN_NOT is set in MYSQL323 and MYSQL40 modes sql/sql_lex.cc: Bug#638 Alter tokens returned by lexer depending upon sql_mode: Return NOT2_SYM token instead of NOT_SYM when in BROKEN_NOT mode Return OR2_SYM token instead of OR_OR_SYM when not in PIPES_AS_CONCAT mode sql/sql_yacc.yy: WL#638 Change grammar to respect proper SQL syntax for NOT Clean up grammar, eliminate >100 shift/reduce conflicts New support for "expr IS [NOT] truth_value" SQL syntax Remove or_or_concat() support func. New support func is_truth_value()
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/r/ansi.result2
-rw-r--r--mysql-test/r/bool.result18
-rw-r--r--mysql-test/r/sql_mode.result2
-rw-r--r--mysql-test/t/bool.test10
4 files changed, 30 insertions, 2 deletions
diff --git a/mysql-test/r/ansi.result b/mysql-test/r/ansi.result
index 0b86634f67b..56676abba33 100644
--- a/mysql-test/r/ansi.result
+++ b/mysql-test/r/ansi.result
@@ -2,7 +2,7 @@ drop table if exists t1;
set sql_mode="MySQL40";
select @@sql_mode;
@@sql_mode
-NO_FIELD_OPTIONS,MYSQL40
+NO_FIELD_OPTIONS,MYSQL40,BROKEN_NOT
set @@sql_mode="ANSI";
select @@sql_mode;
@@sql_mode
diff --git a/mysql-test/r/bool.result b/mysql-test/r/bool.result
index a054eceec0c..1ef4b55fc36 100644
--- a/mysql-test/r/bool.result
+++ b/mysql-test/r/bool.result
@@ -33,6 +33,24 @@ a
SELECT * FROM t1 where (1 AND a) IS NULL;
a
NULL
+set sql_mode='broken_not';
+select * from t1 where not a between 2 and 3;
+a
+set sql_mode=default;
+select * from t1 where not a between 2 and 3;
+a
+0
+1
+select a, a is false, a is true, a is unknown from t1;
+a a is false a is true a is unknown
+0 1 0 0
+1 0 1 0
+NULL 0 0 1
+select a, a is not false, a is not true, a is not unknown from t1;
+a a is not false a is not true a is not unknown
+0 0 1 1
+1 1 0 1
+NULL 1 1 0
SET @a=0, @b=0;
SELECT * FROM t1 WHERE NULL AND (@a:=@a+1);
a
diff --git a/mysql-test/r/sql_mode.result b/mysql-test/r/sql_mode.result
index 67446829eca..c25ae99b530 100644
--- a/mysql-test/r/sql_mode.result
+++ b/mysql-test/r/sql_mode.result
@@ -61,7 +61,7 @@ t1 CREATE TABLE `t1` (
set @@sql_mode="no_field_options,mysql323,mysql40";
show variables like 'sql_mode';
Variable_name Value
-sql_mode NO_FIELD_OPTIONS,MYSQL323,MYSQL40
+sql_mode NO_FIELD_OPTIONS,MYSQL323,MYSQL40,BROKEN_NOT
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
diff --git a/mysql-test/t/bool.test b/mysql-test/t/bool.test
index b263ecfded2..644fdbfbf60 100644
--- a/mysql-test/t/bool.test
+++ b/mysql-test/t/bool.test
@@ -20,6 +20,16 @@ SELECT * FROM t1 where (1 AND a)=0;
SELECT * FROM t1 where (1 AND a)=1;
SELECT * FROM t1 where (1 AND a) IS NULL;
+# WL#638 - Behaviour of NOT does not follow SQL specification
+set sql_mode='broken_not';
+select * from t1 where not a between 2 and 3;
+set sql_mode=default;
+select * from t1 where not a between 2 and 3;
+
+# SQL boolean tests
+select a, a is false, a is true, a is unknown from t1;
+select a, a is not false, a is not true, a is not unknown from t1;
+
# Verify that NULL optimisation works in AND clause:
SET @a=0, @b=0;
SELECT * FROM t1 WHERE NULL AND (@a:=@a+1);