From: Reggie Burnett Date: October 29 2009 9:32pm Subject: bzr commit into connector-net-6.1 branch (reggie.burnett:784) Bug#48100 List-Archive: http://lists.mysql.com/commits/88649 X-Bug: 48100 Message-Id: <0KSA00GA5P7AQV10@fe-emea-09.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_E86DkCf9voSkmMnl40cyDg)" --Boundary_(ID_E86DkCf9voSkmMnl40cyDg) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///D:/bzr-connector-net/6.1/ based on revid:reggie.burnett@stripped 784 Reggie Burnett 2009-10-29 [merge] - now exposing the MySqlDecimal type along with GetMySqlDecimal methods on data reader (bug #48100) modified: CHANGES MySql.Data/Provider/Source/Types/MySqlDecimal.cs MySql.Data/Provider/Source/datareader.cs MySql.Data/Tests/Source/DataTypeTests.cs === modified file 'CHANGES' === modified file 'CHANGES' --- a/CHANGES 2009-10-28 16:02:29 +0000 +++ b/CHANGES 2009-10-29 21:32:36 +0000 @@ -8,7 +8,8 @@ - fixed indexes schema collection so that it still works with bad table names such as b``a`d (bug #48101) - fixed guid type so that multi-byte character sets will not effect how it works. A column would be considered a guid if it has a *character* length of 36, not a *byte* length of 36 (bug #47985) -- fixed unsigned types in views when used as entities (bug # 47872) +- fixed unsigned types in views when used as entities (bug # 47872) +- now exposing the MySqlDecimal type along with GetMySqlDecimal methods on data reader (bug #48100) Version 6.1.2 - fixed hanging after losing network connectivity to server (bug#43761) === modified file 'MySql.Data/Provider/Source/Types/MySqlDecimal.cs' --- a/MySql.Data/Provider/Source/Types/MySqlDecimal.cs 2009-04-21 18:02:13 +0000 +++ b/MySql.Data/Provider/Source/Types/MySqlDecimal.cs 2009-10-29 21:29:54 +0000 @@ -26,21 +26,21 @@ namespace MySql.Data.Types { - internal struct MySqlDecimal : IMySqlValue + public struct MySqlDecimal : IMySqlValue { private byte precision; private byte scale; - private Decimal mValue; + private string mValue; private bool isNull; - public MySqlDecimal(bool isNull) + internal MySqlDecimal(bool isNull) { this.isNull = isNull; - mValue = 0; + mValue = null; precision = scale = 0; } - public MySqlDecimal(decimal val) + internal MySqlDecimal(string val) { this.isNull = false; precision = scale = 0; @@ -84,9 +84,19 @@ public decimal Value { - get { return mValue; } + get { return Convert.ToDecimal(mValue); } } + public double ToDouble() + { + return Double.Parse(mValue); + } + + public override string ToString() + { + return mValue; + } + Type IMySqlValue.SystemType { get { return typeof(decimal); } @@ -112,18 +122,12 @@ if (nullVal) return new MySqlDecimal(true); + string s = String.Empty; if (length == -1) - { - string s = packet.ReadLenString(); - return new MySqlDecimal(Decimal.Parse(s, - CultureInfo.InvariantCulture)); - } - else - { - string s = packet.ReadString(length); - return new MySqlDecimal(Decimal.Parse(s, - CultureInfo.InvariantCulture)); - } + s = packet.ReadLenString(); + else + s = packet.ReadString(length); + return new MySqlDecimal(s); } void IMySqlValue.SkipValue(MySqlPacket packet) === modified file 'MySql.Data/Provider/Source/datareader.cs' --- a/MySql.Data/Provider/Source/datareader.cs 2009-08-10 18:04:41 +0000 +++ b/MySql.Data/Provider/Source/datareader.cs 2009-10-29 21:32:36 +0000 @@ -401,6 +401,16 @@ return dt.GetDateTime(); } + public MySqlDecimal GetMySqlDecimal(string column) + { + return GetMySqlDecimal(GetOrdinal(column)); + } + + public MySqlDecimal GetMySqlDecimal(int i) + { + return (MySqlDecimal)GetFieldValue(i, false); + } + /// public Decimal GetDecimal(string column) { === modified file 'MySql.Data/Tests/Source/DataTypeTests.cs' --- a/MySql.Data/Tests/Source/DataTypeTests.cs 2009-10-23 15:53:16 +0000 +++ b/MySql.Data/Tests/Source/DataTypeTests.cs 2009-10-29 21:32:36 +0000 @@ -1004,5 +1004,34 @@ } } } + + /// + /// Bug #48100 Impossible to retrieve decimal value if it doesn't fit into .Net System.Decimal + /// + [Test] + public void MySqlDecimal() + { + execSQL("DROP TABLE IF EXISTS Test"); + execSQL("CREATE TABLE Test (id INT, dec1 DECIMAL(36,2))"); + execSQL("INSERT INTO Test VALUES (1, 9999999999999999999999999999999999.99)"); + + MySqlCommand cmd = new MySqlCommand("SELECT * FROM Test", conn); + using (MySqlDataReader reader = cmd.ExecuteReader()) + { + reader.Read(); + MySqlDecimal dec = reader.GetMySqlDecimal(1); + string s = dec.ToString(); + Assert.AreEqual(9999999999999999999999999999999999.99, dec.ToDouble()); + Assert.AreEqual("9999999999999999999999999999999999.99", dec.ToString()); + try + { + decimal d = dec.Value; + Assert.Fail("this should have failed"); + } + catch (Exception ex) + { + } + } + } } } --Boundary_(ID_E86DkCf9voSkmMnl40cyDg) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/reggie.burnett@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/reggie.burnett@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: reggie.burnett@stripped # target_branch: file:///D:/bzr-connector-net/6.1/ # testament_sha1: 423a273420810873f84c9d66b52ed490ee267822 # timestamp: 2009-10-29 16:32:39 -0500 # source_branch: file:///D:/bzr-connector-net/6.0/ # base_revision_id: reggie.burnett@stripped\ # wvvsp4k8vxhf5vkf # # Begin bundle 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 E3Y= --Boundary_(ID_E86DkCf9voSkmMnl40cyDg)--