public LowCardinalityTableColumn(ReadOnlyMemory <byte> keys, int keySize, IClickHouseTableColumn values)
 {
     _keys    = keys;
     _keySize = keySize;
     _values  = values;
     RowCount = _keys.Length / _keySize;
 }
Esempio n. 2
0
 public LowCardinalityArrayTableColumn(IClickHouseTableColumn reinterpretationRoot, ReadOnlyMemory <byte> keys, int keySize, IClickHouseArrayTableColumn <TElement> values, bool isNullable)
 {
     _reinterpretationRoot = reinterpretationRoot;
     _keys       = keys;
     _keySize    = keySize;
     _values     = values;
     _isNullable = isNullable;
     RowCount    = _keys.Length / _keySize;
 }
        public static Type?TryGetValueType(IClickHouseTableColumn column)
        {
            if (column.TryDipatch(ClickHouseTableColumnValueTypeDispatcher.Instance, out var type))
            {
                return(type);
            }

            return(null);
        }
        public static IClickHouseTableColumn MakeNullableColumn(BitArray?nullFlags, IClickHouseTableColumn baseColumn)
        {
            if (!baseColumn.TryDipatch(new NullableTableColumnDispatcher(nullFlags), out var result) || result == null)
            {
                result = new NullableTableColumn(nullFlags, baseColumn);
            }

            return(result);
        }
        public static IClickHouseArrayTableColumn <T>?TryMakeNullableArrayColumn <T>(IClickHouseTableColumn reinterpretationRoot, BitArray?nullFlags, IClickHouseTableColumn notNullableColumn)
        {
            var notNullableArrayColumn = notNullableColumn as IClickHouseArrayTableColumn <T> ?? notNullableColumn.TryReinterpretAsArray <T>();

            if (notNullableArrayColumn == null)
            {
                return(null);
            }

            return(new NullableArrayTableColumn <T>(reinterpretationRoot, nullFlags, notNullableArrayColumn));
        }
            public IClickHouseTableColumn?Dispatch(BitArray?nullFlags, IClickHouseTableColumn notNullableColumn, bool reinterpretAsNotNullable)
            {
                Debug.Assert(!reinterpretAsNotNullable);

                var reinterpretedColumn = notNullableColumn as IClickHouseTableColumn <TObj> ?? notNullableColumn.TryReinterpret <TObj>();

                if (reinterpretedColumn == null)
                {
                    return(null);
                }

                if (nullFlags == null)
                {
                    return(reinterpretedColumn);
                }

                return(new NullableObjTableColumn <TObj>(nullFlags, reinterpretedColumn));
            }
            public IClickHouseTableColumn?Dispatch(BitArray?nullFlags, IClickHouseTableColumn notNullableColumn, bool reinterpretAsNotNullable)
            {
                var reinterpretedColumn = notNullableColumn as IClickHouseTableColumn <TStruct> ?? notNullableColumn.TryReinterpret <TStruct>();

                if (reinterpretedColumn == null)
                {
                    return(null);
                }

                var result = new NullableStructTableColumn <TStruct>(nullFlags, reinterpretedColumn);

                if (!reinterpretAsNotNullable)
                {
                    return(result);
                }

                return(result.AsNotNullable());
            }
Esempio n. 8
0
        public static IClickHouseTableColumn MakeNullableColumn(BitArray?nullFlags, IClickHouseTableColumn baseColumn)
        {
            var  columnType            = baseColumn.GetType();
            Type?recognizedElementType = null;

            foreach (var itf in columnType.GetInterfaces().Where(i => i.IsGenericType))
            {
                var typeDef = itf.GetGenericTypeDefinition();
                if (typeDef != typeof(IClickHouseTableColumn <>))
                {
                    continue;
                }

                if (recognizedElementType == null)
                {
                    recognizedElementType = itf.GenericTypeArguments[0];
                }
                else
                {
                    recognizedElementType = null;
                    break;
                }
            }

            IClickHouseTableColumn?result = null;

            if (recognizedElementType != null)
            {
                if (recognizedElementType.IsValueType && !(recognizedElementType.IsGenericType && recognizedElementType.GetGenericTypeDefinition() == typeof(Nullable <>)))
                {
                    recognizedElementType = typeof(Nullable <>).MakeGenericType(recognizedElementType);
                }

                result = TryMakeNullableColumn(recognizedElementType, nullFlags, baseColumn);
            }

            return(result ?? new NullableTableColumn(nullFlags, baseColumn));
        }
            public IClickHouseTableColumn?Dispatch <T>(IClickHouseTableColumn <T> column)
            {
                Type type = typeof(T);
                Type dispatcherType;

                if (type.IsValueType)
                {
                    var columnType = Nullable.GetUnderlyingType(type) ?? type;
                    dispatcherType = typeof(NullableStructTableColumnDispatcher <>).MakeGenericType(columnType);
                }
                else if (type.IsClass)
                {
                    dispatcherType = typeof(NullableObjTableColumnDispatcher <>).MakeGenericType(type);
                }
                else
                {
                    return(null);
                }

                var dispatcher = (INullableColumnDispatcher)Activator.CreateInstance(dispatcherType) !;

                return(dispatcher.Dispatch(_nullFlags, column, false));
            }
 public static IClickHouseTableColumn <T>?TryMakeNullableColumn <T>(BitArray?nullFlags, IClickHouseTableColumn notNullableColumn)
 {
     return((IClickHouseTableColumn <T>?)TryMakeNullableColumn(typeof(T), nullFlags, notNullableColumn));
 }
 public Type Dispatch <T>(IClickHouseTableColumn <T> column)
 {
     return(typeof(T));
 }
 public NullableArrayTableColumn(IClickHouseTableColumn reinterpretationRoot, BitArray?nullFlags, IClickHouseArrayTableColumn <TElement> arrayColumn)
 {
     _reinterpretationRoot = reinterpretationRoot;
     _nullFlags            = nullFlags;
     _arrayColumn          = arrayColumn;
 }
 public NullableObjTableColumn(BitArray nullFlags, IClickHouseTableColumn <TObj> baseColumn)
 {
     _nullFlags  = nullFlags;
     _baseColumn = baseColumn;
 }
 private NullableTableColumn(BitArray?nullFlags, IClickHouseTableColumn baseColumn)
 {
     _nullFlags  = nullFlags;
     _baseColumn = baseColumn;
 }
 public ReinterpretedArrayTableColumn(IClickHouseTableColumn reinterpretationRoot, IClickHouseArrayTableColumn <TElement> arrayColumn)
 {
     _reinterpretationRoot = reinterpretationRoot;
     _arrayColumn          = arrayColumn;
 }
Esempio n. 16
0
 protected override EnumTableColumnDispatcherBase CreateColumnDispatcher(IClickHouseTableColumn <short> column, IReadOnlyDictionary <short, string> reversedEnumMap)
 {
     return(new EnumTableColumnDispatcher(column, reversedEnumMap));
 }
Esempio n. 17
0
 public ObjectColumnAdapter(IClickHouseTableColumn tableColumn)
 {
     _tableColumn = tableColumn;
 }
        private static IClickHouseTableColumn?TryMakeNullableColumn(Type underlyingType, BitArray?nullFlags, IClickHouseTableColumn notNullableColumn)
        {
            Type dispatcherType;
            bool reinterpretAsNotNullable = false;

            if (underlyingType.IsValueType)
            {
                var columnType = Nullable.GetUnderlyingType(underlyingType);
                if (columnType == null)
                {
                    reinterpretAsNotNullable = true;
                    columnType = underlyingType;
                }

                dispatcherType = typeof(NullableStructTableColumnDispatcher <>).MakeGenericType(columnType);
            }
            else if (underlyingType.IsClass)
            {
                dispatcherType = typeof(NullableObjTableColumnDispatcher <>).MakeGenericType(underlyingType);
            }
            else
            {
                return(null);
            }

            var dispatcher = (INullableColumnDispatcher)Activator.CreateInstance(dispatcherType) !;

            return(dispatcher.Dispatch(nullFlags, notNullableColumn, reinterpretAsNotNullable));
        }
Esempio n. 19
0
 public ReinterpretedTableColumn(IClickHouseTableColumn reinterpretationRoot, IClickHouseTableColumn <TFrom> sourceColumn, Func <TFrom, TTo> reinterpret)
 {
     _reinterpretationRoot = reinterpretationRoot ?? throw new ArgumentNullException(nameof(reinterpretationRoot));
     _sourceColumn         = sourceColumn ?? throw new ArgumentNullException(nameof(sourceColumn));
     _reinterpret          = reinterpret ?? throw new ArgumentNullException(nameof(reinterpret));
 }
 protected abstract EnumTableColumnDispatcherBase CreateColumnDispatcher(IClickHouseTableColumn <TValue> column, IReadOnlyDictionary <TValue, string> reversedEnumMap);
 public NullableStructTableColumn(BitArray?nullFlags, IClickHouseTableColumn <TStruct> baseColumn)
 {
     _nullFlags  = nullFlags;
     _baseColumn = baseColumn;
 }
Esempio n. 22
0
 public EnumTableColumnDispatcher(IClickHouseTableColumn <short> column, IReadOnlyDictionary <short, string> reversedEnumMap)
     : base(column, reversedEnumMap)
 {
 }
 public NullableStructTableColumnNotNullableAdapter(BitArray nullFlags, IClickHouseTableColumn <TStruct> baseColumn)
 {
     _nullFlags  = nullFlags;
     _baseColumn = baseColumn;
 }
Esempio n. 24
0
 public EnumTableColumn(IClickHouseTableColumn <TKey> internalColumn, IReadOnlyDictionary <TKey, string> valueMap)
 {
     _internalColumn = internalColumn;
     _valueMap       = valueMap;
 }
Esempio n. 25
0
 public KeyValuePairTableColumn(int rowCount, IClickHouseTableColumn <TKey> keyColumn, IClickHouseTableColumn <TValue> valueColumn)
     : base(rowCount)
 {
     _keyColumn   = keyColumn;
     _valueColumn = valueColumn;
 }