public void PqsqlCopyToTest7() { const int len = 5; var timeMinValue = DateTime.UnixEpoch; var timeMaxValue = DateTime.UnixEpoch.AddDays(1); var timeTzMinValue = new DateTimeOffset(1970, 1, 1, 0, 0, 0, new TimeSpan(14, 0, 0)); var timeTzMaxValue = new DateTimeOffset(1970, 1, 2, 0, 0, 0, new TimeSpan(-14, 0, 0)); PqsqlTransaction tran = mConnection.BeginTransaction(); mCmd.Transaction = tran; mCmd.CommandText = "create temporary table foo (a time, b timetz); " + "insert into foo values (null, null); " + "insert into foo values ('00:00:00', '00:00:00+14'); " + "insert into foo values ('24:00:00', '24:00:00-14'); " + "insert into foo values (null, '00:00:00+14:01'); " + "insert into foo values (null, '24:00:00-14:01'); "; mCmd.CommandType = CommandType.Text; int affected = mCmd.ExecuteNonQuery(); Assert.AreEqual(len, affected); var copy = new PqsqlCopyTo(mConnection) { Table = "foo", ColumnList = "a,b", CopyTimeout = 10, }; copy.Start(); var res = copy.FetchRow(); Assert.IsTrue(res); var a0 = copy.ReadTime(); Assert.AreEqual(DateTime.MinValue, a0); var b0 = copy.ReadTimeTZ(); Assert.AreEqual(DateTimeOffset.MinValue, b0); res = copy.FetchRow(); Assert.IsTrue(res); var a1 = copy.ReadTime(); Assert.AreEqual(timeMinValue, a1); var b1 = copy.ReadTimeTZ(); Assert.AreEqual(timeTzMinValue, b1); res = copy.FetchRow(); Assert.IsTrue(res); var a2 = copy.ReadTime(); Assert.AreEqual(timeMaxValue, a2); var b2 = copy.ReadTimeTZ(); Assert.AreEqual(timeTzMaxValue, b2); res = copy.FetchRow(); Assert.IsTrue(res); // a3 copy.ReadTime(); try { // b3 '00:00:00+14:01' copy.ReadTimeTZ(); Assert.Fail(); } catch (ArgumentOutOfRangeException) {} res = copy.FetchRow(); Assert.IsTrue(res); // a4 copy.ReadTime(); try { // b4 '24:00:00-14:01' copy.ReadTimeTZ(); Assert.Fail(); } catch (ArgumentOutOfRangeException) {} res = copy.FetchRow(); Assert.IsFalse(res); copy.Close(); tran.Rollback(); }
public void PqsqlCopyToTest3() { const int len = 1; PqsqlTransaction tran = mConnection.BeginTransaction(); mCmd.Transaction = tran; mCmd.CommandText = "create temporary table foo (a int2, b int4, c int8, d boolean, e boolean, f float4, " + "g float8, h text, i timestamp, j time, k timetz, l timetz, m date, n interval); " + "insert into foo values (5, 1000001, 42949672950, true, false, 3.14, 3.14, 'hallo 1', " + "TIMESTAMP '1999-01-08 04:05:06', '04:05:06.789', '04:05:06-08:00', '04:05:06+08:00', " + "'1999-01-08', '3 4:05:06');"; mCmd.CommandType = CommandType.Text; int affected = mCmd.ExecuteNonQuery(); Assert.AreEqual(len, affected); var copy = new PqsqlCopyTo(mConnection) { Table = "foo", ColumnList = "a,b,c,d,e,f,g,h,i,j,k,l,m,n", CopyTimeout = 10, }; copy.Start(); while (copy.FetchRow()) { var a = copy.ReadInt2(); Assert.AreEqual(5, a); var b = copy.ReadInt4(); Assert.AreEqual(1000001, b); var c = copy.ReadInt8(); Assert.AreEqual(42949672950, c); var d = copy.ReadBoolean(); Assert.IsTrue(d); var e = copy.ReadBoolean(); Assert.IsFalse(e); var f = copy.ReadFloat4(); Assert.AreEqual(3.14, f, 0.00001); var g = copy.ReadFloat8(); Assert.AreEqual(3.14, g, 0.00001); var h = copy.ReadString(); Assert.AreEqual("hallo 1", h); var i = copy.ReadTimestamp(); Assert.AreEqual(new DateTime(1999, 1, 8, 4, 5, 6), i); var j = copy.ReadTime(); Assert.AreEqual(new DateTime(1970, 1, 1, 4, 5, 6, 789), j); var k = copy.ReadTimeTZ(); Assert.AreEqual(new DateTimeOffset(1970, 1, 1, 4, 5, 6, 0, new TimeSpan(-8, 0, 0)), k); var l = copy.ReadTimeTZ(); Assert.AreEqual(new DateTimeOffset(1970, 1, 1, 4, 5, 6, 0, new TimeSpan(8, 0, 0)), l); var m = copy.ReadDate(); Assert.AreEqual(new DateTime(1999, 1, 8), m); var n = copy.ReadInterval(); Assert.AreEqual(new TimeSpan(3, 4, 5, 6), n); } copy.Close(); tran.Rollback(); }