public IClickHouseColumnWriter Dispatch(string columnName, object rows, ClickHouseColumnSettings?columnSettings, IClickHouseColumnTypeInfo underlyingTypeInfo) { var genericList = (IReadOnlyList <TValue?>)rows; var listWrapper = new MappedReadOnlyList <TValue?, TValue>(genericList, item => item ?? default); return(underlyingTypeInfo.CreateColumnWriter(columnName, listWrapper, columnSettings)); }
public IClickHouseColumnWriter Dispatch <T>() { var linearizedList = new ArrayLinearizedList <T>((IReadOnlyList <IReadOnlyList <T>?>)_rows); var elementColumnWriter = _elementTypeInfo.CreateColumnWriter(_columnName, linearizedList, _columnSettings); return(new ArrayColumnWriter <T>(_columnType, linearizedList, elementColumnWriter)); }
public IClickHouseColumnWriter Dispatch <T>() { var mappedRows = new MappedReadOnlyList <Array, IReadOnlyList <T> >(_rows, arr => (IReadOnlyList <T>)_dispatchArray(arr)); var linearizedList = new ArrayLinearizedList <T>(mappedRows); var elementColumnWriter = _elementTypeInfo.CreateColumnWriter(_columnName, linearizedList, _columnSettings); return(new ArrayColumnWriter <T>(_columnType, linearizedList, elementColumnWriter)); }
public NullableColumnWriter(string columnName, string columnType, IReadOnlyList <T> rows, ClickHouseColumnSettings?columnSettings, IClickHouseColumnTypeInfo underlyingTypeInfo) { if (underlyingTypeInfo == null) { throw new ArgumentNullException(nameof(underlyingTypeInfo)); } _rows = rows ?? throw new ArgumentNullException(nameof(rows)); ColumnName = columnName ?? throw new ArgumentNullException(nameof(columnName)); ColumnType = columnType ?? throw new ArgumentNullException(nameof(columnType)); if (typeof(T).IsValueType && typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(Nullable <>)) { var valueType = typeof(T).GetGenericArguments()[0]; var dispatcherType = typeof(ValueOrDefaultListDispatcher <>).MakeGenericType(valueType); var columnDispatcher = (IValueOrDefaultListDispatcherBase)Activator.CreateInstance(dispatcherType) !; _internalColumnWriter = columnDispatcher.Dispatch(columnName, rows, columnSettings, underlyingTypeInfo); } else { _internalColumnWriter = underlyingTypeInfo.CreateColumnWriter(columnName, rows, columnSettings); } }