From: Date: February 28 2006 11:30pm Subject: Connector/NET commit: r204 - in branches/1.0: . TestSuite mysqlclient mysqlclient/Types List-Archive: http://lists.mysql.com/commits/3281 X-Bug: 17375 Message-Id: <200602282230.k1SMUnaU007640@bk-internal.mysql.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modified: branches/1.0/CHANGES branches/1.0/TestSuite/DataTypeTests.cs branches/1.0/mysqlclient/Field.cs branches/1.0/mysqlclient/Types/MySqlValue.cs branches/1.0/mysqlclient/datareader.cs branches/1.0/mysqlclient/parameter.cs Log: Fix Bug #17375 CommandBuilder ignores Unsigned flag at Parameter creation DataReader: changed to using field.ProviderType() Field.cs: implemented ProviderType() to convert to unsigned types if needed Parameter.cs: removed unsigned property and started using new MySqlDbTypes MySqlValue.cs: Started using the new unsigned types in GetMySqlValue DataTypeTests.cs: Implemented test case Modified: branches/1.0/CHANGES =================================================================== --- branches/1.0/CHANGES 2006-02-23 20:11:23 UTC (rev 203) +++ branches/1.0/CHANGES 2006-02-28 22:30:48 UTC (rev 204) @@ -1,3 +1,6 @@ + Bug #16659 Can't use double quotation marks(") as password access server by Connector/NET [fixed] + Bug #17375 CommandBuilder ignores Unsigned flag at Parameter creation [fixed] + x-xx-05 - Version 1.0.7 Bugs fixed or addressed Modified: branches/1.0/TestSuite/DataTypeTests.cs =================================================================== --- branches/1.0/TestSuite/DataTypeTests.cs 2006-02-23 20:11:23 UTC (rev 203) +++ branches/1.0/TestSuite/DataTypeTests.cs 2006-02-28 22:30:48 UTC (rev 204) @@ -564,5 +564,34 @@ if (reader != null) reader.Close(); } } + + /// + /// Bug #17375 CommandBuilder ignores Unsigned flag at Parameter creation + /// + [Test] + public void UnsignedTypes() + { + execSQL("DROP TABLE IF EXISTS Test"); + execSQL("CREATE TABLE Test (b TINYINT UNSIGNED PRIMARY KEY)"); + + MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM Test", conn); + MySqlCommandBuilder cb = new MySqlCommandBuilder(da); + + DataTable dt = new DataTable(); + da.Fill(dt); + + DataView dv = new DataView(dt); + DataRowView row; + + row = dv.AddNew(); + row["b"] = 120; + row.EndEdit(); + da.Update(dv.Table); + + row = dv.AddNew(); + row["b"] = 135; + row.EndEdit(); + da.Update(dv.Table); + } } } Modified: branches/1.0/mysqlclient/Field.cs =================================================================== --- branches/1.0/mysqlclient/Field.cs 2006-02-23 20:11:23 UTC (rev 203) +++ branches/1.0/mysqlclient/Field.cs 2006-02-28 22:30:48 UTC (rev 204) @@ -151,9 +151,25 @@ #endregion + public MySqlDbType ProviderType() + { + if (IsUnsigned) + { + switch (Type) + { + case MySqlDbType.Byte: return MySqlDbType.UByte; + case MySqlDbType.Int16: return MySqlDbType.UInt16; + case MySqlDbType.Int24: return MySqlDbType.UInt24; + case MySqlDbType.Int32: return MySqlDbType.UInt32; + case MySqlDbType.Int64: return MySqlDbType.UInt64; + } + } + return Type; + } + public MySqlValue GetValueObject() { - MySqlValue valueObject = MySqlValue.GetMySqlValue( mySqlDbType, IsUnsigned, IsBinary ); + MySqlValue valueObject = MySqlValue.GetMySqlValue(ProviderType(), IsBinary); return valueObject; } Modified: branches/1.0/mysqlclient/Types/MySqlValue.cs =================================================================== --- branches/1.0/mysqlclient/Types/MySqlValue.cs 2006-02-23 20:11:23 UTC (rev 203) +++ branches/1.0/mysqlclient/Types/MySqlValue.cs 2006-02-28 22:30:48 UTC (rev 204) @@ -109,30 +109,36 @@ return ValueAsObject.ToString(); } - internal static MySqlValue GetMySqlValue( MySqlDbType type, bool unsigned, bool binary ) + internal static MySqlValue GetMySqlValue( MySqlDbType type, bool binary ) { switch (type) { + case MySqlDbType.UByte: + return new MySqlUByte(); case MySqlDbType.Byte: - if (unsigned) return new MySqlUByte(); return new MySqlByte(); + case MySqlDbType.UInt16: + return new MySqlUInt16(); case MySqlDbType.Int16: - if (unsigned) return new MySqlUInt16(); return new MySqlInt16(); + case MySqlDbType.UInt24: + case MySqlDbType.UInt32: + return new MySqlUInt32(type); + case MySqlDbType.Int24: case MySqlDbType.Int32: case MySqlDbType.Year: - if (unsigned) return new MySqlUInt32(type); return new MySqlInt32(type); case MySqlDbType.Bit: return new MySqlBit(); + case MySqlDbType.UInt64: + return new MySqlUInt64(); + case MySqlDbType.Int64: - if (unsigned) - return new MySqlUInt64(); return new MySqlInt64(); case MySqlDbType.Time: Modified: branches/1.0/mysqlclient/datareader.cs =================================================================== --- branches/1.0/mysqlclient/datareader.cs 2006-02-23 20:11:23 UTC (rev 203) +++ branches/1.0/mysqlclient/datareader.cs 2006-02-28 22:30:48 UTC (rev 204) @@ -504,7 +504,7 @@ if (pscale != -1) r["NumericScale"] = (short)pscale; r["DataType"] = GetFieldType(i); - r["ProviderType"] = (int)f.Type; + r["ProviderType"] = (int)f.ProviderType(); r["IsLong"] = f.IsBlob && f.ColumnLength > 255; r["AllowDBNull"] = f.AllowsNull; r["IsReadOnly"] = false; Modified: branches/1.0/mysqlclient/parameter.cs =================================================================== --- branches/1.0/mysqlclient/parameter.cs 2006-02-23 20:11:23 UTC (rev 203) +++ branches/1.0/mysqlclient/parameter.cs 2006-02-28 22:30:48 UTC (rev 204) @@ -160,19 +160,6 @@ } } - /// - public bool IsUnsigned - { - get { return isUnsigned; } - set - { - if (isUnsigned != value) - valueObject = null; - isUnsigned = value; - SetMySqlDbType( mySqlDbType ); - } - } - /// /// Gets or sets a value indicating whether the parameter is input-only, output-only, bidirectional, or a stored procedure return value parameter. /// As of MySql version 4.1 and earlier, input-only is the only valid choice. @@ -303,7 +290,7 @@ { if (valueObject == null) { - valueObject = MySqlValue.GetMySqlValue( mySqlDbType, IsUnsigned, true ); + valueObject = MySqlValue.GetMySqlValue( mySqlDbType, true ); MySqlDecimal dec = (valueObject as MySqlDecimal); if (dec != null) @@ -341,11 +328,16 @@ switch (mySqlDbType) { case MySqlDbType.Decimal: dbType = DbType.Decimal; break; - case MySqlDbType.Byte: dbType = isUnsigned ? DbType.Byte : DbType.SByte; break; - case MySqlDbType.Int16: dbType = isUnsigned ? DbType.UInt16 : DbType.Int16; break; - case MySqlDbType.Int24: dbType = isUnsigned ? DbType.UInt32 : DbType.Int32; break; - case MySqlDbType.Int32: dbType = isUnsigned ? DbType.UInt32 : DbType.Int32; break; - case MySqlDbType.Int64: dbType = isUnsigned ? DbType.UInt64 : DbType.Int64; break; + case MySqlDbType.UByte: dbType = DbType.Byte; break; + case MySqlDbType.Byte: dbType = DbType.SByte; break; + case MySqlDbType.UInt16: dbType = DbType.UInt16; break; + case MySqlDbType.Int16: dbType = DbType.Int16; break; + case MySqlDbType.UInt24: + case MySqlDbType.UInt32: dbType = DbType.UInt32; break; + case MySqlDbType.Int24: + case MySqlDbType.Int32: dbType = DbType.Int32; break; + case MySqlDbType.UInt64: dbType = DbType.UInt64; break; + case MySqlDbType.Int64: dbType = DbType.Int64; break; case MySqlDbType.Bit : dbType = DbType.UInt64; break; case MySqlDbType.Float: dbType = DbType.Single; break; case MySqlDbType.Double: dbType = DbType.Double; break; @@ -399,24 +391,12 @@ case DbType.Single: mySqlDbType = MySqlDbType.Float; break; case DbType.Double: mySqlDbType = MySqlDbType.Double; break; - case DbType.Int16: - case DbType.UInt16: - mySqlDbType = MySqlDbType.Int16; - isUnsigned = dbType == DbType.UInt16; - break; - - case DbType.Int32: - case DbType.UInt32: - mySqlDbType = MySqlDbType.Int32; - isUnsigned = dbType == DbType.UInt32; - break; - - case DbType.Int64: - case DbType.UInt64: - mySqlDbType = MySqlDbType.Int64; - isUnsigned = dbType == DbType.UInt64; - break; - + case DbType.UInt16: mySqlDbType = MySqlDbType.UInt16; break; + case DbType.Int16: mySqlDbType = MySqlDbType.Int16; break; + case DbType.Int32: mySqlDbType = MySqlDbType.Int32; break; + case DbType.UInt32: mySqlDbType = MySqlDbType.UInt32; break; + case DbType.UInt64: mySqlDbType = MySqlDbType.UInt64; break; + case DbType.Int64: mySqlDbType = MySqlDbType.Int64; break; case DbType.Decimal: case DbType.Currency: mySqlDbType = MySqlDbType.Decimal; break;