public ClickHouseArraySequence newArrayValue(ClickHouseDataConfig config) {
        int level = arrayLevel;
        ClickHouseArraySequence value;
        if (level < 1 || arrayBaseColumn == null || arrayBaseColumn.nullable || config.isUseObjectsInArray()) {
            value = arrayBaseColumn == null ? ClickHouseArrayValue.ofEmpty()
                    : ClickHouseArrayValue.ofEmpty(arrayBaseColumn.getObjectClass(config));
        } else if (level > 255) {
            throw new IllegalArgumentException(
                    "Nested level of array should be less than or equal to 255 but we got: " + level);
        } else if (level > 1) {
            value = ClickHouseArrayValue
                    .of((Object[]) Array.newInstance(arrayBaseColumn.getPrimitiveClass(config), new int[level]));
        } else { // primitive arrays
            switch (arrayBaseColumn.dataType) {
                case Bool:
                    value = ClickHouseBoolArrayValue.ofEmpty();
                    break;
                case Int8:
                    value = ClickHouseByteArrayValue.ofEmpty();
                    break;
                case UInt8:
                    value = config.isWidenUnsignedTypes() ? ClickHouseShortArrayValue.ofEmpty()
                            : ClickHouseByteArrayValue.ofUnsignedEmpty();
                    break;
                case Int16:
                    value = ClickHouseShortArrayValue.ofEmpty();
                    break;
                case UInt16:
                    value = config.isWidenUnsignedTypes() ? ClickHouseIntArrayValue.ofEmpty()
                            : ClickHouseShortArrayValue.ofUnsignedEmpty();
                    break;
                case Int32:
                    value = ClickHouseIntArrayValue.ofEmpty();
                    break;
                case UInt32:
                    value = config.isWidenUnsignedTypes() ? ClickHouseLongArrayValue.ofEmpty()
                            : ClickHouseIntArrayValue.ofUnsignedEmpty();
                    break;
                case Int64:
                    value = ClickHouseLongArrayValue.ofEmpty();
                    break;
                case UInt64:
                    value = ClickHouseLongArrayValue.ofUnsignedEmpty();
                    break;
                case Float32:
                    value = ClickHouseFloatArrayValue.ofEmpty();
                    break;
                case Float64:
                    value = ClickHouseDoubleArrayValue.ofEmpty();
                    break;
                default:
                    value = ClickHouseArrayValue.ofEmpty(arrayBaseColumn.getObjectClass(config));
                    break;
            }
        }
        return value;
    }
Gets aggregate function when column type is
{@link ClickHouseDataType#AggregateFunction}. So it will return
{@link ClickHouseAggregateFunction#quantile} when the column type is
{@code AggregateFunction(quantiles(0.5, 0.9), UInt64)}.

@return function name, null when column type is not AggregateFunction
clickhouse-data/src/main/java/com/clickhouse/data/ClickHouseColumn.java