summaryrefslogtreecommitdiffstats
path: root/src/Statement.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Statement.php')
-rw-r--r--src/Statement.php25
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.
*