public static function getClauseStartOffset($statement, $list, $clause)
    {
        /**
         * The count of brackets.
         * We keep track of them so we won't insert the clause in a subquery.
         *
         * @var int
         */
        $brackets = 0;

        /**
         * The clauses of this type of statement and their index.
         *
         * @var array
         */
        $clauses = array_flip(array_keys($statement->getClauses()));

        for ($i = $statement->first; $i <= $statement->last; ++$i) {
            $token = $list->tokens[$i];

            if ($token->type === Token::TYPE_COMMENT) {
                continue;
            }

            if ($token->type === Token::TYPE_OPERATOR) {
                if ($token->value === '(') {
                    ++$brackets;
                } elseif ($token->value === ')') {
                    --$brackets;
                }
            }

            if ($brackets === 0) {
                if (($token->type === Token::TYPE_KEYWORD)
                    && isset($clauses[$token->keyword])
                    && ($clause === $token->keyword)
                ) {
                    return $i;
                } elseif ($token->keyword === 'UNION') {
                    return -1;
                }
            }
        }

        return -1;
    }
public static function getClauseStartOffset($statement, $list, $clause)
    {
        /**
         * The count of brackets.
         * We keep track of them so we won't insert the clause in a subquery.
         *
         * @var int
         */
        $brackets = 0;

        /**
         * The clauses of this type of statement and their index.
         *
         * @var array
         */
        $clauses = array_flip(array_keys($statement->getClauses()));

        for ($i = $statement->first; $i <= $statement->last; ++$i) {
            $token = $list->tokens[$i];

            if ($token->type === Token::TYPE_COMMENT) {
                continue;
            }

            if ($token->type === Token::TYPE_OPERATOR) {
                if ($token->value === '(') {
                    ++$brackets;
                } elseif ($token->value === ')') {
                    --$brackets;
                }
            }

            if ($brackets === 0) {
                if (($token->type === Token::TYPE_KEYWORD)
                    && isset($clauses[$token->keyword])
                    && ($clause === $token->keyword)
                ) {
                    return $i;
                } elseif ($token->keyword === 'UNION') {
                    return -1;
                }
            }
        }

        return -1;
    }
public static function getClauseStartOffset ( $ statement , $ list , $ clause ) { /**
         * The count of brackets.
         * We keep track of them so we won't insert the clause in a subquery.
         *
         * @var int
         */ $ brackets = 0 ; /**
         * The clauses of this type of statement and their index.
         *
         * @var array
         */ $ clauses = array_flip ( array_keys ( $ statement -> getClauses ( ) ) ) ; for ( $ i = $ statement -> first ; $ i <= $ statement -> last ; ++ $ i ) { $ token = $ list -> tokens [ $ i ] ; if ( $ token -> type === Token :: TYPE_COMMENT ) { continue ; } if ( $ token -> type === Token :: TYPE_OPERATOR ) { if ( $ token -> value === '(' ) { ++ $ brackets ; } elseif ( $ token -> value === ')' ) { -- $ brackets ; } } if ( $ brackets === 0 ) { if ( ( $ token -> type === Token :: TYPE_KEYWORD ) && isset ( $ clauses [ $ token -> keyword ] ) && ( $ clause === $ token -> keyword ) ) { return $ i ; } elseif ( $ token -> keyword === 'UNION' ) { return - 1 ; } } } return - 1 ; }
Gets a starting offset of a specific clause.

@param Statement  $statement the parsed query that has to be modified
@param TokensList $list      the list of tokens
@param string     $clause    the clause to be returned

@return int
Gets a starting offset of a specific clause .