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
IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWVxcE3YACLX/gER2QAFb9///
f+f/Sr////pgDFwemfK33uO1gaAUBmqzFVASNGgKKBBoiYmU0amTCGgyPUMEBoMg9BMmgGTBMhw0
MmmhpkaGmRkGRkaGQGJoyaAMmRiGIqejaUNGmg9QBoAAAGhoyAAAAAJEjU0JMk0aGmYiGgDQDQAA
AGgDQEUkaSeqeFT80ymajTCoep6gNPUG2qYNJk/Umj0nqG1HpAIpCAAgCaCaE8RoVPGhqI0eKPUy
DaDUYZMBASpYzkNQzk4DWeY29ojTXdLDQ0mMPn9lt99/kihzcLLUaWR5BoCGmwOa0EY6goQMXEGr
ymamBdTTM2ESxtI3Wh3RrMFUvbVYcuMuWcs4kF5Fq4UvraI4yF/egva9V5If+buew1PBPFGeq9F1
wVZi2nWsJ0woP+0oOhmTSSLtRwCDHEAPtTvOTto7tXe1cfr29AnautYIIQiAgbaTeH2QGfCScBqS
ho0wbb26lqQYRF1qzas8u0s2HLweDqq2lxWB1c3ENtkuIiGXwdOsVYDCHOSSTeb007InTjxjeQJi
kibAcdmiSZAj74N3+oyhJJT6j8F4nDFw+ruJiCkBr0IoQII0B4GtkqeyElLMiX45ohXM6q5XzqMv
/tMptEuINKYsrnTsmVr+TOfs99S5MBkXal9BaMBPN1M6pyrso6/D0ePj8fd5ytnraVnYYCGIpaTJ
B8tQ2jsBmboFzZghWyTL59k30VtwAgI2t2BSCiogiGIBI+hJjoEK7z0IR6IiAhZDRxEwYv0WM+j4
rWgtoxiFWtrohsbBzEOaUDYYWlASI/P9PAKImQCueWm1IKIGKiENAopAm7MLklZSRcC8AmlUNipj
VKhLlTIoypELxtMl1plDAWwW/a9ZvVz6uumfHZKb6QmgmaCUOl8MSCJH1D+x2nqIpEsBPwAu+GAS
lJm79/ELEG6BPOAlA/KtOap5BSyhD1lDoTLVQgutLpkihiFGDBBNxfgOSCIJCh+jnmnu3FgyBqXp
IYzC8IHFLGUkzUqV0lgJ0CWBXgkjOysiiJGQx5K1mc+NegWvuUgzAg1UILBlc3GNA/694VZGw0EJ
1ZG97YggIIKRwgqniIcMM9l+/fG6UjU0EwMBMazZxQml9xKhuwDZYTmGpoTs2WZVykGlpx+JtJ21
tffLIvKWGAV0vrQuLDE6iZmXmh7OYh1KkFRQQy/M1DgwxlVYTqWX11TDmcFQg1sbbjEFg5GgbCMC
0G0tQPZbK6EtI1KG0gvMlTA5c6qhJ85uocyoFwFeAKGU0mUzmL2IkTMBMrLkkWGg5SoS7m6v+EtE
LMDYRuOki+WZEyqdOFfAzJWd1Od/EroXCSeeZyJ2FZuK83T++Zaeq0HG8yL7iwwMTiXFx2GoVBWV
lmEFlmWvK5UvEJ3lpahYXFu2gWVthWYG+izIM9JE41N0yfYqRxVNPuDerp5G4XehGB+gm4s1DaH6
BrSyuWcZ27TOwLzocDaW3lhzujUnnUYFKGBmIe9DqN10p7CxMrOeJgFb84hMn1FuBvL9hqVmZYTN
hWV9+RcFoVS0Kbs4uyrlSdCu8mpj7PpNSY1kiReZ3l9ZuwqyC3EjdMjCGgpMxIoM5unMmRoEgUsM
RgLTMXFypWXFmu82aZ2u4lUUEMjaVwZQqVwVFpgULQ2y360IVLSnMsU3GZYXluN2N7RUgMqFGiWF
VAI2F5YczIq3GZIsVMdCL7jIpXnJrLSmat5ibC0guLC1U0oTO0S35BmY3Y7WuEqxiNJswvVILTaZ
KhkqUBdaBUe0Q1L4iDfYIVUbiRiTJBi397J5T9OpxLgkcTYUVLSRrbkcId5GcF8GhIA2qVC0hDYD
VXOsA3956uiCGCb7IM7gZMIMzSW4NECLFdkQ+YOjaMB1KUHA6I3hkDKLsAxpmycxBqnZKCokFNRM
pJkzaWBariQTxHn9/uH0/Edh7cgaBtNg0NvgLtheYOKUb0FSmKSpIUKUSW80wT68sd+H3Ueo7j3w
HFhynhl/fyghOAGiBL4HvHoypat+xQ3rs4fzwrZ3zajo8GtoSX7yZmtzXUAxttzqNLLxh2eXd3F+
VVyHW8Jdu2p+vr0KOMBLp8nW9XzQT1Hujq5Gu++ZxlumH54DsHdSIg3DR9dPD/bOAsu7OQMLBBBB
nWAYeX2U8ZCrzlCFR9hJDebzpJnwG8oOs2GArPvKFTzF5kXxHCoPG5POQgQV2h5AdfXqC8hD1wRB
KE/KA/Hc1eYnA1IWF7abpjqKflQvhOt+cUgdmPd9fM6zoczw6jYdhzGswEG4vD1Kk1ThSWEFCpUZ
DIbS4NeuH0wNv1/E/5kHmgnh5CfaoHTAbuU0lKC++h1G0kQXmkkqWlypNxlCpG+k2HOrb2eAfk6D
PGIRzmQeDz5oJJ9oyVwsWnXaTu9UnGJ4V+lU669h0OZvLTuMCh5nMuO0zE7e24zUxKiwwPSqbkTM
3UN7yDIsQe02qnrL8DaVlw/fGSVoQJvPND0VHyD8RO35ouPa8LnzJLVn65+gJ9JKTKryD0Kk8EEh
eJgIXXZRxLTkHEgrN6pZZHjInGHlQvLDN7SpfWheHWHdAcCOhLaOS1g+oPk1hBAHTQ0HebTyfeFI
WIR2jPp1znneGRxuk2GQylKCavLdn+7FUu7aMlc1oDqrLYKpMXgY4DFIN3MHkSCAd/NyA/melCpz
UqJA9BC+SpMlu4sOwAsKelv9FwR18ij5m4O46jVUvIIPmKzQmeJ6DIuC0kd5afMhsQ/FfcuKGnKS
fAPge1KI8IHcJJ4gH38FE7VEzcJfbODKvdEGaqy/iemG/Os1fp1xIx7c3CB7lvMZaFfl+iJTzQ3q
J9V6Upj4IY1dXciRvEZhWV7Qdtt6QwunQsl3FZMrLoRO6eapGfNr8TGlq8e6gbHkifQESMQt5A8A
OcAdsKYQcqsONSigRs27efiWAhYgDTIa5hDONxWSQwUSnrEPZcdRgI8g4p+IcDBD/07SwtYLTI1I
ILDwQ/D7t+d0NowbZ8sDr6zJBLVLIEtLc0M0kDQtHw0HxG1RLSxSxgbqi8UotTKqpYIiBiFZyGnb
3mnv+ce5x8tt3Uon4EGJkwKfE72i1c70NBD3hsT4zGAxz+x1/4V1vQ6PAOwoJ3nedilEPvfiIQOY
EBp9LV3fET/fAwCD3emyoPpi8TbduQSNLvEvDxhTYMCVQSB1OVXhwONPRWPS9xe+iGIdBJYCSQSS
GoUs4x9DLqPkUWshZvrDbjz9aPTghvGshRKV1Afgh6q9YAtgLAGQTIPJKZHAqn4Pn+qwSjcP1QMm
Agql4hn7tsbelTCG5DWfsnY4VSpcKmLp8ISDY4JL8+MHHmjXoooqB5dX7oJa5m7pztnu/TjKlCAe
bBH1HUXBeglSFdq/AWpBmQBI6TrKjYLaYN8314PK2vIOlgdmBLYOQMxvkPuGcv2DvAOqYNAwhSxR
MT3SGhjBiExChoFQ+mvch7f2w1/dj5GZYQgloplKxXgN5eglXfw94nIobt3ZqOMQhVRU+IZk/API
P9QrLGoJYBH2CZCHIT6KMaYBNQubiCGDtQSCTvGIdvlEu09WEDwFAnUnJuLShKKD/xdyRThQkFxc
E3Y=
--Boundary_(ID_E86DkCf9voSkmMnl40cyDg)--