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();
}
}
+
+ /// <summary>
+ /// Bug #17375 CommandBuilder ignores Unsigned flag at Parameter creation
+ /// </summary>
+ [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 @@
}
}
- /// <summary></summary>
- public bool IsUnsigned
- {
- get { return isUnsigned; }
- set
- {
- if (isUnsigned != value)
- valueObject = null;
- isUnsigned = value;
- SetMySqlDbType( mySqlDbType );
- }
- }
-
/// <summary>
/// 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;
| Thread |
|---|
| • Connector/NET commit: r204 - in branches/1.0: . TestSuite mysqlclient mysqlclient/Types | rburnett | 28 Feb |