void TestRoundTripLongColumn <T>(IEnumerable <T> testElements, int columnId, IEnumerable <long?> expectedResults)
        {
            var memStream = new MemoryStream();

            using (var writer = new OrcWriter <T>(memStream, new WriterConfiguration()))            //Use the default configuration
            {
                writer.AddRows(testElements);
            }

            memStream.Seek(0, SeekOrigin.Begin);

            var dataFile = new DataFileHelper(memStream);
            var stream   = dataFile.GetStream();
            var fileTail = new FileTail(stream);

            var expectedEnumerator = expectedResults.GetEnumerator();

            foreach (var stripe in fileTail.Stripes)
            {
                var stripeStreamCollection = stripe.GetStripeStreamCollection();
                var longReader             = new LongReader(stripeStreamCollection, (uint)columnId);
                var resultEnumerator       = longReader.Read().GetEnumerator();

                ulong count = 0;
                while (resultEnumerator.MoveNext())
                {
                    Assert.True(expectedEnumerator.MoveNext());
                    Assert.Equal(expectedEnumerator.Current, resultEnumerator.Current);
                    count++;
                }
                Assert.Equal(stripe.NumRows, count);
            }
            Assert.False(expectedEnumerator.MoveNext());                        //We should have used all expected results
        }
        public void TooMuchPrecision_Throws()
        {
            var serializationConfiguration = new SerializationConfiguration()
                                             .ConfigureType <SingleValuePoco>()
                                             .ConfigureProperty(x => x.Value, x => { x.DecimalPrecision = 14; x.DecimalScale = 9; })
                                             .Build();

            var stream     = new MemoryStream();
            var goodWriter = new OrcWriter <SingleValuePoco>(stream, new WriterConfiguration(), serializationConfiguration);

            goodWriter.AddRow(new SingleValuePoco {
                Value = 12345.678901234m
            });
            goodWriter.Dispose();

            var badWriter = new OrcWriter <SingleValuePoco>(stream, new WriterConfiguration(), serializationConfiguration);

            badWriter.AddRow(new SingleValuePoco {
                Value = 123456.789012345m
            });
            Assert.Throws <OverflowException>(() =>
            {
                badWriter.Dispose();
            });
        }
Esempio n. 3
0
        void TestRoundTrip <T>(List <T> expected) where T : new()
        {
            var memStream = new MemoryStream();

            using (var writer = new OrcWriter <T>(memStream, new WriterConfiguration())) //Use the default configuration
            {
                writer.AddRows(expected);
            }

            memStream.Seek(0, SeekOrigin.Begin);

            var reader = new OrcReader <T>(memStream);
            var actual = reader.Read().ToList();

            Assert.Equal(expected.Count, actual.Count);
            for (int i = 0; i < expected.Count; i++)
            {
                Assert.Equal(expected[i], actual[i]);
            }
        }
Esempio n. 4
0
        public static void Main(string[] args)
        {
            var baseTime     = new DateTime(2017, 3, 16, 0, 0, 0, DateTimeKind.Utc);
            var rand         = new Random(123);
            var testElements = new List <TestClass>();

            for (int i = 0; i < 80000; i++)
            {
                var random        = rand.Next();
                var set           = i / 10000;
                var randomInRange = (random % 10000) + set * 10000 - 40000;
                var dec           = (DateTime.Now - DateTime.Today).Ticks / (decimal)TimeSpan.TicksPerSecond;
                var timestamp     = baseTime.AddTicks(random);
                var element       = new TestClass
                {
                    Random        = random,
                    RandomInRange = randomInRange,
                    Incrementing  = i,
                    SetNumber     = set,
                    Double        = (double)i / (set + 1),
                    Float         = (float)i / (set + 1),
                    Dec           = dec,
                    Timestamp     = timestamp,
                    Str           = $"Random={random}, RandomInRange={randomInRange}, Incrementing={i}, SetNumber={set}, Dec={dec}, Timestamp={timestamp:MM/dd/yyyy hh:mm:ss.fffffff}",
                    DictionaryStr = $"SetNumber={set}"
                };
                testElements.Add(element);
            }

            var serializationConfiguration = new SerializationConfiguration()
                                             .ConfigureType <TestClass>()
                                             .ConfigureProperty(x => x.Dec, x => { x.DecimalPrecision = 14; x.DecimalScale = 9; })
                                             .Build();

            using (var fileStream = new FileStream("test.orc", FileMode.Create, FileAccess.Write))
                using (var writer = new OrcWriter <TestClass>(fileStream, new WriterConfiguration(), serializationConfiguration))        //Use the default configuration
                {
                    writer.AddRows(testElements);
                }
        }
    }