summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Čihař <michal@cihar.com>2016-04-07 10:38:49 +0200
committerMichal Čihař <michal@cihar.com>2016-04-07 10:38:49 +0200
commit5e69cdaadb855bd692e02032c78d10e8906f19b0 (patch)
treef4cdccff608fe1b6dd81693b247b73d78b5c30c2
parent917b86a7296cf21742c83949e3f8d7b655898979 (diff)
downloadsql-parser-5e69cdaadb855bd692e02032c78d10e8906f19b0.zip
sql-parser-5e69cdaadb855bd692e02032c78d10e8906f19b0.tar.gz
sql-parser-5e69cdaadb855bd692e02032c78d10e8906f19b0.tar.bz2
Recognize UNION DISTINCT
Fixes #41 Signed-off-by: Michal Čihař <michal@cihar.com>
-rw-r--r--src/Contexts/ContextMySql50000.php2
-rw-r--r--src/Contexts/ContextMySql50100.php2
-rw-r--r--src/Contexts/ContextMySql50500.php2
-rw-r--r--src/Contexts/ContextMySql50600.php2
-rw-r--r--src/Contexts/ContextMySql50700.php2
-rw-r--r--src/Parser.php6
-rw-r--r--src/Statement.php2
-rw-r--r--tools/contexts/_common.txt1
8 files changed, 12 insertions, 7 deletions
diff --git a/src/Contexts/ContextMySql50000.php b/src/Contexts/ContextMySql50000.php
index 0a6cd73..62b776d 100644
--- a/src/Contexts/ContextMySql50000.php
+++ b/src/Contexts/ContextMySql50000.php
@@ -153,7 +153,7 @@ class ContextMySql50000 extends Context
'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'PARTITION BY' => 7,
'SET PASSWORD' => 7, 'SQL SECURITY' => 7,
'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
- 'DATA DIRECTORY' => 7,
+ 'DATA DIRECTORY' => 7, 'UNION DISTINCT' => 7,
'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
'LEFT OUTER JOIN' => 7, 'SUBPARTITION BY' => 7,
'GENERATED ALWAYS' => 7, 'RIGHT OUTER JOIN' => 7,
diff --git a/src/Contexts/ContextMySql50100.php b/src/Contexts/ContextMySql50100.php
index 0242254..7cb8541 100644
--- a/src/Contexts/ContextMySql50100.php
+++ b/src/Contexts/ContextMySql50100.php
@@ -166,7 +166,7 @@ class ContextMySql50100 extends Context
'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'PARTITION BY' => 7,
'SET PASSWORD' => 7, 'SQL SECURITY' => 7,
'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
- 'DATA DIRECTORY' => 7,
+ 'DATA DIRECTORY' => 7, 'UNION DISTINCT' => 7,
'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
'LEFT OUTER JOIN' => 7, 'SUBPARTITION BY' => 7,
'GENERATED ALWAYS' => 7, 'RIGHT OUTER JOIN' => 7,
diff --git a/src/Contexts/ContextMySql50500.php b/src/Contexts/ContextMySql50500.php
index dd8c165..04d723d 100644
--- a/src/Contexts/ContextMySql50500.php
+++ b/src/Contexts/ContextMySql50500.php
@@ -170,7 +170,7 @@ class ContextMySql50500 extends Context
'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'PARTITION BY' => 7,
'SET PASSWORD' => 7, 'SQL SECURITY' => 7,
'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
- 'DATA DIRECTORY' => 7,
+ 'DATA DIRECTORY' => 7, 'UNION DISTINCT' => 7,
'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
'LEFT OUTER JOIN' => 7, 'SUBPARTITION BY' => 7,
'GENERATED ALWAYS' => 7, 'RIGHT OUTER JOIN' => 7,
diff --git a/src/Contexts/ContextMySql50600.php b/src/Contexts/ContextMySql50600.php
index 189363f..0e4fef2 100644
--- a/src/Contexts/ContextMySql50600.php
+++ b/src/Contexts/ContextMySql50600.php
@@ -176,7 +176,7 @@ class ContextMySql50600 extends Context
'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'PARTITION BY' => 7,
'SET PASSWORD' => 7, 'SQL SECURITY' => 7,
'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
- 'DATA DIRECTORY' => 7,
+ 'DATA DIRECTORY' => 7, 'UNION DISTINCT' => 7,
'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
'LEFT OUTER JOIN' => 7, 'SUBPARTITION BY' => 7,
'GENERATED ALWAYS' => 7, 'RIGHT OUTER JOIN' => 7,
diff --git a/src/Contexts/ContextMySql50700.php b/src/Contexts/ContextMySql50700.php
index 8ed4f11..bdcb45e 100644
--- a/src/Contexts/ContextMySql50700.php
+++ b/src/Contexts/ContextMySql50700.php
@@ -182,7 +182,7 @@ class ContextMySql50700 extends Context
'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'PARTITION BY' => 7,
'SET PASSWORD' => 7, 'SQL SECURITY' => 7,
'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7,
- 'DATA DIRECTORY' => 7,
+ 'DATA DIRECTORY' => 7, 'UNION DISTINCT' => 7,
'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'INDEX DIRECTORY' => 7,
'LEFT OUTER JOIN' => 7, 'SUBPARTITION BY' => 7,
'GENERATED ALWAYS' => 7, 'RIGHT OUTER JOIN' => 7,
diff --git a/src/Parser.php b/src/Parser.php
index 3c72a85..74274f0 100644
--- a/src/Parser.php
+++ b/src/Parser.php
@@ -120,6 +120,10 @@ class Parser
'class' => 'SqlParser\\Components\\UnionKeyword',
'field' => 'union',
),
+ 'UNION DISTINCT' => array(
+ 'class' => 'SqlParser\\Components\\UnionKeyword',
+ 'field' => 'union',
+ ),
// Actual clause parsers.
'ALTER' => array(
@@ -427,7 +431,7 @@ class Parser
continue;
}
- if (($token->value === 'UNION') || ($token->value === 'UNION ALL')) {
+ if (($token->value === 'UNION') || ($token->value === 'UNION ALL') || ($token->value === 'UNION DISTINCT')) {
$unionType = $token->value;
continue;
}
diff --git a/src/Statement.php b/src/Statement.php
index eb9f3cb..2b81a84 100644
--- a/src/Statement.php
+++ b/src/Statement.php
@@ -250,7 +250,7 @@ abstract class Statement
// Unions are parsed by the parser because they represent more than
// one statement.
- if (($token->value === 'UNION') || ($token->value === 'UNION ALL')) {
+ if (($token->value === 'UNION') || ($token->value === 'UNION ALL') || ($token->value === 'UNION DISTINCT')) {
break;
}
diff --git a/tools/contexts/_common.txt b/tools/contexts/_common.txt
index f251166..0922a32 100644
--- a/tools/contexts/_common.txt
+++ b/tools/contexts/_common.txt
@@ -88,6 +88,7 @@ TINYBLOB (D)
TINYINT (D)
TINYTEXT (D)
UNION ALL
+UNION DISTINCT
UNIQUE (K)
UNIQUE INDEX (K)
UNIQUE KEY (K)