1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

MDEV-20021 sql_mode="oracle" does not support MINUS set operator

MINUS is mapped to EXCEPT
One consequence of the patch is that MINUS becomes a reserved word in
Oracle mode.

Author: woqutech
This commit is contained in:
Monty
2021-01-05 20:46:23 +02:00
committed by Sergei Golubchik
parent b8c3159594
commit cf93209c70
6 changed files with 103 additions and 2 deletions

View File

@@ -0,0 +1,48 @@
CREATE TABLE tx1 (c1 int, c2 varchar(30));
CREATE TABLE tx2 (c1 int, c2 varchar(30));
CREATE TABLE tx3 (c1 int, c2 varchar(30));
INSERT INTO tx1 VALUES (1, 'jim');
INSERT INTO tx1 VALUES (2, 'menny');
INSERT INTO tx1 VALUES (3, 'linda');
INSERT INTO tx2 VALUES (1, 'jim');
INSERT INTO tx2 VALUES (2, 'kris');
INSERT INTO tx2 VALUES (3, 'shory');
INSERT INTO tx3 VALUES (1, 'jim');
INSERT INTO tx3 VALUES (2, 'kris');
INSERT INTO tx3 VALUES (3, 'linda');
#
# test when sql_mode is not oracle
#
SELECT c2 FROM tx1 EXCEPT SELECT c2 from tx2;
c2
menny
linda
SELECT c2 FROM tx1 MINUS SELECT c2 from tx2;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT c2 from tx2' at line 1
create table MINUS (a int);
drop table MINUS;
#
# test when sql_mode is oracle
#
SET sql_mode=ORACLE;
SELECT c2 FROM tx1 MINUS SELECT c2 from tx2;
c2
menny
linda
SELECT c2 FROM tx1 MINUS SELECT c2 from tx2 MINUS SELECT c2 from tx3;
c2
menny
SELECT c2 FROM tx1 MINUS SELECT c2 from tx2 EXCEPT SELECT c2 from tx3;
c2
menny
SELECT c2 FROM tx1 MINUS SELECT c2 from tx2 UNION SELECT c2 from tx3;
c2
jim
menny
linda
kris
create table MINUS (a int);
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'MINUS (a int)' at line 1
DROP TABLE tx1;
DROP TABLE tx2;
DROP TABLE tx3;

View File

@@ -0,0 +1,44 @@
CREATE TABLE tx1 (c1 int, c2 varchar(30));
CREATE TABLE tx2 (c1 int, c2 varchar(30));
CREATE TABLE tx3 (c1 int, c2 varchar(30));
INSERT INTO tx1 VALUES (1, 'jim');
INSERT INTO tx1 VALUES (2, 'menny');
INSERT INTO tx1 VALUES (3, 'linda');
INSERT INTO tx2 VALUES (1, 'jim');
INSERT INTO tx2 VALUES (2, 'kris');
INSERT INTO tx2 VALUES (3, 'shory');
INSERT INTO tx3 VALUES (1, 'jim');
INSERT INTO tx3 VALUES (2, 'kris');
INSERT INTO tx3 VALUES (3, 'linda');
--echo #
--echo # test when sql_mode is not oracle
--echo #
SELECT c2 FROM tx1 EXCEPT SELECT c2 from tx2;
--error 1064
SELECT c2 FROM tx1 MINUS SELECT c2 from tx2;
# MINUS should not be a reserved word
create table MINUS (a int);
drop table MINUS;
--echo #
--echo # test when sql_mode is oracle
--echo #
SET sql_mode=ORACLE;
SELECT c2 FROM tx1 MINUS SELECT c2 from tx2;
SELECT c2 FROM tx1 MINUS SELECT c2 from tx2 MINUS SELECT c2 from tx3;
SELECT c2 FROM tx1 MINUS SELECT c2 from tx2 EXCEPT SELECT c2 from tx3;
SELECT c2 FROM tx1 MINUS SELECT c2 from tx2 UNION SELECT c2 from tx3;
# MINUS should be a reserved word
--error ER_PARSE_ERROR
create table MINUS (a int);
DROP TABLE tx1;
DROP TABLE tx2;
DROP TABLE tx3;