mirror of
https://github.com/MariaDB/server.git
synced 2025-11-13 21:42:58 +03:00
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()
20 lines
487 B
Plaintext
20 lines
487 B
Plaintext
drop table if exists t1;
|
|
set sql_mode="MySQL40";
|
|
select @@sql_mode;
|
|
@@sql_mode
|
|
NO_FIELD_OPTIONS,MYSQL40,BROKEN_NOT
|
|
set @@sql_mode="ANSI";
|
|
select @@sql_mode;
|
|
@@sql_mode
|
|
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI
|
|
SELECT 'A' || 'B';
|
|
'A' || 'B'
|
|
AB
|
|
CREATE TABLE t1 (id INT, id2 int);
|
|
SELECT id,NULL,1,1.1,'a' FROM t1 GROUP BY id;
|
|
id NULL 1 1.1 a
|
|
SELECT id FROM t1 GROUP BY id2;
|
|
ERROR 42000: 'test.t1.id' isn't in GROUP BY
|
|
drop table t1;
|
|
SET @@SQL_MODE="";
|