diff options
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. * |