public function in($column)
    {
        $args = func_get_args();

        if (count($args) < 2) {
            throw new QueryException('Expected two or more parameters to in()');
        }

        if (is_array($args[1])) {
            $values = array_values($args[1]);
        } else {
            $values = array_slice($args, 1);
        }

        // Special handling of sub selects to avoid double braces
        if (count($values) === 1 && $values[0] instanceof SubselectDoctrineQuery) {
            return "{$column} IN " . $values[0]->getQuery();
        }

        if (count($values) == 0) {
            throw new QueryException('At least one element is required as value.');
        }

        foreach ($values as $key => $value) {
            switch (true) {
                case $value instanceof SubselectDoctrineQuery:
                    $values[$key] = $value->getQuery();
                    break;
                case is_int($value):
                case is_float($value):
                    $values[$key] = (string)$value;
                    break;
                default:
                    $values[$key] = $this->connection->quote($value);
            }
        }

        return "{$column} IN ( " . implode(', ', $values) . ' )';
    }