public void AddBlock(IList <DateTime?> values) { var stats = new DateWriterStatistics(); Statistics.Add(stats); if (_isNullable) { _presentBuffer.AnnotatePosition(stats, rleValuesToConsume: 0, bitsToConsume: 0); } _dataBuffer.AnnotatePosition(stats, rleValuesToConsume: 0); var datesList = new List <long>(values.Count); if (_isNullable) { var presentList = new List <bool>(values.Count); foreach (var value in values) { if (!value.HasValue) { stats.AddValue(null); presentList.Add(false); } else { var daysSinceEpoch = (int)(value.Value - _unixEpoch).TotalDays; stats.AddValue(daysSinceEpoch); presentList.Add(true); datesList.Add(daysSinceEpoch); } } var presentEncoder = new BitWriter(_presentBuffer); presentEncoder.Write(presentList); if (stats.HasNull) { _presentBuffer.MustBeIncluded = true; } } else { foreach (var value in values) { var daysSinceEpoch = (int)(value.Value - _unixEpoch).TotalDays; stats.AddValue(daysSinceEpoch); datesList.Add(daysSinceEpoch); } } var datesEncoder = new IntegerRunLengthEncodingV2Writer(_dataBuffer); datesEncoder.Write(datesList, true, _shouldAlignEncodedValues); }
public void AddBlock(IList <double?> values) { var stats = new DoubleWriterStatistics(); Statistics.Add(stats); if (_isNullable) { _presentBuffer.AnnotatePosition(stats, rleValuesToConsume: 0, bitsToConsume: 0); } _dataBuffer.AnnotatePosition(stats); var valList = new List <double>(values.Count); if (_isNullable) { var presentList = new List <bool>(values.Count); foreach (var value in values) { stats.AddValue(value); if (value.HasValue) { valList.Add(value.Value); } presentList.Add(value.HasValue); } var presentEncoder = new BitWriter(_presentBuffer); presentEncoder.Write(presentList); if (stats.HasNull) { _presentBuffer.MustBeIncluded = true; } } else { foreach (var value in values) { stats.AddValue(value); valList.Add(value.Value); } } foreach (var value in valList) { _dataBuffer.WriteDouble(value); } }
public void AddBlock(IList <long?> values) { var stats = new LongWriterStatistics(); Statistics.Add(stats); if (_isNullable) { _presentBuffer.AnnotatePosition(stats, rleValuesToConsume: 0, bitsToConsume: 0); } _dataBuffer.AnnotatePosition(stats, rleValuesToConsume: 0); var valList = new List <long>(values.Count); if (_isNullable) { var presentList = new List <bool>(values.Count); foreach (var value in values) { stats.AddValue(value); if (value.HasValue) { valList.Add(value.Value); } presentList.Add(value.HasValue); } var presentEncoder = new BitWriter(_presentBuffer); presentEncoder.Write(presentList); if (stats.HasNull) { _presentBuffer.MustBeIncluded = true; //A null occurred. Make sure to write this stream } } else { foreach (var value in values) { stats.AddValue(value); valList.Add(value.Value); } } var valEncoder = new IntegerRunLengthEncodingV2Writer(_dataBuffer); valEncoder.Write(valList, true, _shouldAlignEncodedValues); }
public void AddBlock(IList <byte[]> values) { var stats = new BinaryWriterStatistics(); Statistics.Add(stats); _presentBuffer.AnnotatePosition(stats, rleValuesToConsume: 0, bitsToConsume: 0); _dataBuffer.AnnotatePosition(stats); _lengthBuffer.AnnotatePosition(stats, rleValuesToConsume: 0); var bytesList = new List <byte[]>(values.Count); var presentList = new List <bool>(values.Count); var lengthList = new List <long>(values.Count); foreach (var bytes in values) { stats.AddValue(bytes); if (values != null) { bytesList.Add(bytes); lengthList.Add(bytes.Length); } presentList.Add(bytes != null); } var presentEncoder = new BitWriter(_presentBuffer); presentEncoder.Write(presentList); if (stats.HasNull) { _presentBuffer.MustBeIncluded = true; } foreach (var bytes in bytesList) { _dataBuffer.Write(bytes, 0, bytes.Length); } var lengthEncoder = new IntegerRunLengthEncodingV2Writer(_lengthBuffer); lengthEncoder.Write(lengthList, false, _shouldAlignLengths); }
public void AddBlock(IList <DateTime?> values) { var stats = new TimestampWriterStatistics(); Statistics.Add(stats); if (_isNullable) { _presentBuffer.AnnotatePosition(stats, rleValuesToConsume: 0, bitsToConsume: 0); } _dataBuffer.AnnotatePosition(stats, rleValuesToConsume: 0); _secondaryBuffer.AnnotatePosition(stats, rleValuesToConsume: 0); var secondsList = new List <long>(values.Count); var fractionsList = new List <long>(values.Count); if (_isNullable) { var presentList = new List <bool>(values.Count); foreach (var value in values) { if (!value.HasValue) { stats.AddValue(null); presentList.Add(false); } else { long millisecondsSinceUnixEpoch; long fraction; var seconds = GetValues(value.Value, out millisecondsSinceUnixEpoch, out fraction); stats.AddValue(millisecondsSinceUnixEpoch); presentList.Add(true); secondsList.Add(seconds); fractionsList.Add(fraction); } } var presentEncoder = new BitWriter(_presentBuffer); presentEncoder.Write(presentList); if (stats.HasNull) { _presentBuffer.MustBeIncluded = true; } } else { foreach (var value in values) { long millisecondsSinceUnixEpoch; long fraction; var seconds = GetValues(value.Value, out millisecondsSinceUnixEpoch, out fraction); stats.AddValue(millisecondsSinceUnixEpoch); secondsList.Add(seconds); fractionsList.Add(fraction); } } var secondsEncoder = new IntegerRunLengthEncodingV2Writer(_dataBuffer); secondsEncoder.Write(secondsList, true, _shouldAlignEncodedValues); var fractionsEncoder = new IntegerRunLengthEncodingV2Writer(_secondaryBuffer); fractionsEncoder.Write(fractionsList, false, _shouldAlignEncodedValues); }
public void AddBlock(IList <decimal?> values) { var stats = new DecimalWriterStatistics(); Statistics.Add(stats); if (_isNullable) { _presentBuffer.AnnotatePosition(stats, rleValuesToConsume: 0, bitsToConsume: 0); } _dataBuffer.AnnotatePosition(stats); _secondaryBuffer.AnnotatePosition(stats, rleValuesToConsume: 0); var wholePartsList = new List <long>(values.Count); var scaleList = new List <long>(values.Count); if (_isNullable) { var presentList = new List <bool>(values.Count); foreach (var value in values) { stats.AddValue(value); if (value.HasValue) { var longAndScale = value.Value.ToLongAndScale(); var rescaled = longAndScale.Rescale(_scale, truncateIfNecessary: false); rescaled.Item1.CheckPrecision(_precision); wholePartsList.Add(rescaled.Item1); scaleList.Add(rescaled.Item2); } presentList.Add(value.HasValue); } var presentEncoder = new BitWriter(_presentBuffer); presentEncoder.Write(presentList); if (stats.HasNull) { _presentBuffer.MustBeIncluded = true; } } else { foreach (var value in values) { stats.AddValue(value); var longAndScale = value.Value.ToLongAndScale(); var rescaled = longAndScale.Rescale(_scale, truncateIfNecessary: false); rescaled.Item1.CheckPrecision(_precision); wholePartsList.Add(rescaled.Item1); scaleList.Add(rescaled.Item2); } } var varIntEncoder = new VarIntWriter(_dataBuffer); varIntEncoder.Write(wholePartsList); var scaleEncoder = new IntegerRunLengthEncodingV2Writer(_secondaryBuffer); scaleEncoder.Write(scaleList, true, _shouldAlignEncodedValues); }