1010use PhpMyAdmin \SqlParser \Components \Condition ;
1111use PhpMyAdmin \SqlParser \Components \Expression ;
1212use PhpMyAdmin \SqlParser \Components \ExpressionArray ;
13+ use PhpMyAdmin \SqlParser \Components \JoinKeyword ;
1314use PhpMyAdmin \SqlParser \Components \Limit ;
1415use PhpMyAdmin \SqlParser \Components \OptionsArray ;
1516use PhpMyAdmin \SqlParser \Components \OrderKeyword ;
@@ -85,6 +86,14 @@ class DeleteStatement extends Statement
8586 */
8687 public $ from ;
8788
89+ /**
90+ * Joins.
91+ *
92+ * @var JoinKeyword[]
93+ */
94+ public $ join ;
95+
96+
8897 /**
8998 * Tables used as sources for this statement.
9099 *
@@ -140,6 +149,9 @@ public function build()
140149 if ($ this ->from != null && count ($ this ->from ) > 0 ) {
141150 $ ret .= ' FROM ' . ExpressionArray::build ($ this ->from );
142151 }
152+ if ($ this ->join != null && count ($ this ->join ) > 0 ) {
153+ $ ret .= ' ' . JoinKeyword::build ($ this ->join );
154+ }
143155 if ($ this ->using != null && count ($ this ->using ) > 0 ) {
144156 $ ret .= ' USING ' . ExpressionArray::build ($ this ->using );
145157 }
@@ -220,6 +232,7 @@ public function parse(Parser $parser, TokensList $list)
220232 ) {
221233 ++$ list ->idx ; // Skip 'FROM'
222234 $ this ->from = ExpressionArray::parse ($ parser , $ list );
235+
223236 $ state = 2 ;
224237 } else {
225238 $ this ->columns = ExpressionArray::parse ($ parser , $ list );
@@ -236,13 +249,21 @@ public function parse(Parser $parser, TokensList $list)
236249 ) {
237250 ++$ list ->idx ; // Skip 'FROM'
238251 $ this ->from = ExpressionArray::parse ($ parser , $ list );
252+
239253 $ state = 2 ;
240254 } else {
241255 $ parser ->error ('Unexpected token. ' , $ token );
242256 break ;
243257 }
244258 } elseif ($ state === 2 ) {
245259 if ($ token ->type === Token::TYPE_KEYWORD
260+ && stripos ($ token ->keyword , 'JOIN ' ) !== false
261+ ) {
262+ ++$ list ->idx ;
263+ $ this ->join = JoinKeyword::parse ($ parser , $ list );
264+
265+ // remain in state = 2
266+ } elseif ($ token ->type === Token::TYPE_KEYWORD
246267 && $ token ->keyword === 'USING '
247268 ) {
248269 ++$ list ->idx ; // Skip 'USING'
0 commit comments