protected function parseJoinOperator(SQLTokenIterator $tokens) { $joinData = array('isInner' => false, 'isRight' => false); if ($tokens->seekTokenText(',')) { return $joinData; } if (!$tokens->isTokenNum(SqlToken::T_JOIN(), TokenIterator::NEXT, [SqlToken::T_LEFT(), SqlToken::T_RIGHT(), SqlToken::T_INNER(), SqlToken::T_OUTER(), SqlToken::T_CROSS()])) { return null; } while (true) { switch (true) { case $tokens->seekTokenNum(SqlToken::T_RIGHT()): $joinData['isRight'] = true; break; case $tokens->seekTokenNum(SqlToken::T_LEFT()): $joinData['isRight'] = false; break; case $tokens->seekTokenNum(SqlToken::T_INNER()): $joinData['isInner'] = true; break; case $tokens->seekTokenNum(SqlToken::T_CROSS()): case $tokens->seekTokenNum(SqlToken::T_OUTER()): $joinData['isInner'] = false; break; case $tokens->seekTokenNum(SqlToken::T_JOIN()): return $joinData; default: throw new MalformedSqlException("Invalid JOIN definition!"); } } }