public function raw_join($table, $constraint, $table_alias, $parameters = [])
        {
            // Add table alias if present
            if (!is_null($table_alias)) {
                $table_alias = $this->_quoteIdentifier($table_alias);
                $table .= " {$table_alias}";
            }

            $this->_values = array_merge($this->_values, $parameters);

            // Build the constraint
            if (Arrays::is($constraint)) {
                list($first_column, $operator, $second_column) = $constraint;

                $first_column = $this->_quoteIdentifier($first_column);
                $second_column = $this->_quoteIdentifier($second_column);
                $constraint = "{$first_column} {$operator} {$second_column}";
            }

            $this->_join_sources[] = "{$table} ON {$constraint}";

            return $this;
        }