public void Bug221MillisecondsFieldNotCopied() { // Test for https://github.com/npgsql/Npgsql/issues/221 // The milliseconds field is not properly copied in NpgsqlCopySerializer.cs in method AddDateTime var cmd = new NpgsqlCommand("COPY data (field_timestamp) FROM STDIN", Conn); var npgsqlCopySerializer = new NpgsqlCopySerializer(Conn); var npgsqlCopyIn = new NpgsqlCopyIn(cmd, Conn, npgsqlCopySerializer.ToStream); var testDate = DateTime.Parse("2002-02-02 09:00:23.005"); npgsqlCopyIn.Start(); npgsqlCopySerializer.AddDateTime(testDate); npgsqlCopySerializer.EndRow(); npgsqlCopySerializer.Flush(); npgsqlCopyIn.End(); NpgsqlDataReader dr = new NpgsqlCommand("select field_timestamp from data", Conn).ExecuteReader(); dr.Read(); Assert.AreEqual(testDate, dr[0]); }
private void AddValueToSerializer(NpgsqlCopySerializer serializer, object value) { if (value.GetType() == typeof(Int32)) { serializer.AddInt32((int)value); } if (value.GetType() == typeof(Int64)) { serializer.AddInt64((Int64)value); } if (value.GetType() == typeof(string)) { serializer.AddString(value.ToString()); } if (value.GetType() == typeof(float)) { serializer.AddNumber((float)value); } if (value.GetType() == typeof(double)) { serializer.AddNumber((double)value); } if (value.GetType() == typeof(bool)) { serializer.AddBool((bool)value); } if (value.GetType() == typeof(DateTime)) { serializer.AddDateTime((DateTime)value); } if (value == null || value == DBNull.Value) { serializer.AddNull(); } if (value.GetType() == typeof(Guid)) { serializer.AddString(value.ToString()); } }
// Serializer success test static public void CopyInWithSerializer() { NpgsqlCopySerializer sink = new NpgsqlCopySerializer(conn); String q = "COPY copy2(field_int4, field_int8, field_text, field_timestamp, field_bool) FROM STDIN"; cin = new NpgsqlCopyIn(q, conn); cin.Start(); if (!cin.IsActive) { throw new Exception("Copy started inactive"); } sink.AddInt32(-13); sink.AddNull(); sink.AddString("First row"); sink.AddDateTime(new DateTime(2020, 12, 22, 23, 33, 45, 765)); sink.AddBool(true); sink.EndRow(); sink.AddNull(); sink.AddNull(); sink.AddString("Second row"); sink.Close(); Console.Out.WriteLine("Copy through serializer ok"); }