diff options
author | Deven Bansod <devenbansod.bits@gmail.com> | 2016-09-13 15:25:04 +0530 |
---|---|---|
committer | Deven Bansod <devenbansod.bits@gmail.com> | 2016-09-13 15:25:04 +0530 |
commit | 0b6743bdee44f8e12d02c9122a2f7bb124cfa293 (patch) | |
tree | 766378a800bfc4246faee0bee1c0d020ec2f652f /src/Statement.php | |
parent | 98c2a72dd19542d80dcee63eb50c199e5f9a2935 (diff) | |
download | sql-parser-0b6743bdee44f8e12d02c9122a2f7bb124cfa293.zip sql-parser-0b6743bdee44f8e12d02c9122a2f7bb124cfa293.tar.gz sql-parser-0b6743bdee44f8e12d02c9122a2f7bb124cfa293.tar.bz2 |
Stop SelectStatement parsing and revert back in case of ON DUPLICATE KEY
Fix parsing of INSERT INTO ... SELECT .... ON DUPLICATE KEY
Fix #78
Signed-off-by: Deven Bansod <devenbansod.bits@gmail.com>
Diffstat (limited to 'src/Statement.php')
-rw-r--r-- | src/Statement.php | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/Statement.php b/src/Statement.php index 2b81a84..5dfcf3a 100644 --- a/src/Statement.php +++ b/src/Statement.php @@ -254,6 +254,31 @@ abstract class Statement break; } + $lastIdx = $list->idx; + + // ON DUPLICATE KEY UPDATE ... + // has to be parsed in parent statement (INSERT or REPLACE) + // so look for it and break + if (get_class($this) === 'SqlParser\Statements\SelectStatement' + && $token->value === 'ON' + ) { + ++$list->idx; // Skip ON + + // look for ON DUPLICATE KEY UPDATE + $first = $list->getNextOfType(Token::TYPE_KEYWORD); + $second = $list->getNextOfType(Token::TYPE_KEYWORD); + $third = $list->getNextOfType(Token::TYPE_KEYWORD); + + if ($first->value === 'DUPLICATE' + && $second->value === 'KEY' + && $third->value === 'UPDATE' + ) { + $list->idx = $lastIdx; + break; + } + } + $list->idx = $lastIdx; + /** * The name of the class that is used for parsing. * |