For example Null can be represented as empty string

```sql
select arrayStringConcat(['x',Null], ';');

┌─arrayStringConcat(['x', Null], ';')─┐
│ x;                                  │
└─────────────────────────────────────┘
```

But mostly it for avoiding a cast in case of Nullable Strings
```
SELECT arrayStringConcat(col0, ';')
FROM
(
    SELECT [toNullable('x')] AS col0
) AS t
```

Also I think arrayStringConcat can support any types not only Strings, it allows to avoid explicit casts.

```
SELECT arrayStringConcat(col0, ';')
FROM
(
    SELECT [1, 2, 3] AS col0
) AS t
```
void set(Pos pos_, Pos end_)
    {
        pos = pos_;
        end = end_;
    }
    
    size_t getStringsArgumentPosition()
    {
        return 0;
    }
    
    bool get(Pos & token_begin, Pos & token_end)
    {
        
        while (pos < end && (isWhitespaceASCII(*pos) || isPunctuationASCII(*pos)))
            ++pos;
        if (pos == end)
            return false;
        token_begin = pos;
        while (pos < end && !(isWhitespaceASCII(*pos) || isPunctuationASCII(*pos)))
            ++pos;
        token_end = pos;
        return true;
    }
};
class SplitByWhitespaceImpl