diff options
author | Michal Čihař <michal@cihar.com> | 2016-04-07 10:38:49 +0200 |
---|---|---|
committer | Michal Čihař <michal@cihar.com> | 2016-04-07 10:38:49 +0200 |
commit | 5e69cdaadb855bd692e02032c78d10e8906f19b0 (patch) | |
tree | f4cdccff608fe1b6dd81693b247b73d78b5c30c2 | |
parent | 917b86a7296cf21742c83949e3f8d7b655898979 (diff) | |
download | sql-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.php | 2 | ||||
-rw-r--r-- | src/Contexts/ContextMySql50100.php | 2 | ||||
-rw-r--r-- | src/Contexts/ContextMySql50500.php | 2 | ||||
-rw-r--r-- | src/Contexts/ContextMySql50600.php | 2 | ||||
-rw-r--r-- | src/Contexts/ContextMySql50700.php | 2 | ||||
-rw-r--r-- | src/Parser.php | 6 | ||||
-rw-r--r-- | src/Statement.php | 2 | ||||
-rw-r--r-- | tools/contexts/_common.txt | 1 |
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) |