Skip to content

Commit

Permalink
merged upstream changes
Browse files Browse the repository at this point in the history
  • Loading branch information
pruiz committed Oct 4, 2010
1 parent f38857b commit 4b5bc91
Show file tree
Hide file tree
Showing 56 changed files with 1,218 additions and 142 deletions.
5 changes: 5 additions & 0 deletions mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/ChangeLog
@@ -1,3 +1,8 @@
2010-09-29 Veerapuram Varadhan <vvaradhan@novell.com>

** Fixes failed test for smallmoney
* Tds70.cs (WriteParameterInfo): Round money values to 4 decimals, for smallmoney too.

2010-07-13 Veerapuram Varadhan <vvaradhan@novell.com>

** Fixes #613845
Expand Down
3 changes: 2 additions & 1 deletion mcs/class/Mono.Data.Tds/Mono.Data.Tds.Protocol/Tds70.cs
Expand Up @@ -645,7 +645,8 @@ private void WriteParameterInfo (TdsMetaParameter param)
break;
}
case "smallmoney": {
Decimal val = (decimal) param.Value;
// 4 == SqlMoney::MoneyFormat.NumberDecimalDigits
Decimal val = Decimal.Round ((decimal) param.Value, 4);
if (val < SMALLMONEY_MIN || val > SMALLMONEY_MAX)
throw new OverflowException (string.Format (
CultureInfo.InvariantCulture,
Expand Down
Expand Up @@ -39,9 +39,19 @@ public sealed class CommaDelimitedStringCollection : StringCollection {

bool modified;
bool readOnly;
int originalStringHash = 0;

public bool IsModified {
get { return modified; }
get {
if (modified)
return true;

string str = ToString ();
if (str == null)
return false;

return str.GetHashCode () != originalStringHash;
}
}

public new bool IsReadOnly {
Expand Down Expand Up @@ -89,6 +99,7 @@ public CommaDelimitedStringCollection Clone ()
CopyTo (contents, 0);

col.AddRange (contents);
col.originalStringHash = originalStringHash;

return col;
}
Expand Down Expand Up @@ -125,6 +136,15 @@ public override string ToString ()

return String.Join (",", contents);
}

internal void UpdateStringHash ()
{
string str = ToString ();
if (str == null)
originalStringHash = 0;
else
originalStringHash = str.GetHashCode ();
}
}

}
Expand Down
Expand Up @@ -48,6 +48,7 @@ public override object ConvertFrom (ITypeDescriptorContext ctx, CultureInfo ci,
foreach (string datum in datums)
col.Add (datum.Trim());

col.UpdateStringHash ();
return col;
}

Expand Down
6 changes: 6 additions & 0 deletions mcs/class/System.Data/System.Data.SqlClient/ChangeLog
@@ -1,3 +1,9 @@
2010-10-01 Veerapuram Varadhan <vvaradhan@novell.com>

** Fixes #561667
* SqlCommand.cs (Dispose): While Disposing, set connection's datareader
to null so as the connection can be reused with another datareader.

2010-07-28 Veerapuram Varadhan <vvaradhan@novell.com>

** Fixes #584833
Expand Down
2 changes: 2 additions & 0 deletions mcs/class/System.Data/System.Data.SqlClient/SqlCommand.cs
Expand Up @@ -706,6 +706,8 @@ protected override void Dispose (bool disposing)
if (disposed) return;
if (disposing) {
parameters.Clear();
if (Connection != null)
Connection.DataReader = null;
}
base.Dispose (disposing);
disposed = true;
Expand Down
8 changes: 8 additions & 0 deletions mcs/class/System.Data/System.Data/ChangeLog
@@ -1,3 +1,11 @@
2010-10-01 Veerapuram Varadhan <v.varadhan@gmail.com>

** Fixes #582732 - Patch by Jeffrey Alvarez <kuritsu@gmail.com>
* DataColumn.cs (Clone): Deep copy the ExtendedProperties collection.
* XmlSchemaDataImporter.cs: Support import of extended properties.
* XmlSchemaWriter.cs: Fix exception by writing the extended properties
before simpletype element.

2010-07-23 Veerapuram Varadhan <v.varadhan@gmail.com>

** Fixes #623451
Expand Down
8 changes: 7 additions & 1 deletion mcs/class/System.Data/System.Data/DataColumn.cs
Expand Up @@ -704,6 +704,13 @@ internal DataColumn Clone ()
// Use the property to set the expression as it updates compiledExpression, if any.
copy.Expression = _expression;
//Copy.ExtendedProperties
if (_extendedProperties.Count > 0) {
Array extPropArray = Array.CreateInstance (typeof (object), _extendedProperties.Count);
_extendedProperties.CopyTo (extPropArray, 0);
for (var i = 0; i < _extendedProperties.Count; i++)
copy.ExtendedProperties.Add (extPropArray.GetValue(i),
ExtendedProperties[extPropArray.GetValue(i)]);
}
copy._maxLength = _maxLength;
copy._nameSpace = _nameSpace;
copy._prefix = _prefix;
Expand All @@ -715,7 +722,6 @@ internal DataColumn Clone ()
if (DataType == typeof (DateTime))
copy.DateTimeMode = _datetimeMode;
#endif
copy._extendedProperties = _extendedProperties;

return copy;
}
Expand Down
21 changes: 21 additions & 0 deletions mcs/class/System.Data/System.Data/XmlSchemaDataImporter.cs
Expand Up @@ -535,6 +535,14 @@ private void ProcessDataSetElement (XmlSchemaElement el)
attr.NamespaceURI == XmlConstants.MsdataNamespace)
useCurrent = true;
#endif

if (attr.NamespaceURI == XmlConstants.MspropNamespace &&
!dataset.ExtendedProperties.ContainsKey(attr.Name))
{
dataset.ExtendedProperties.Add (attr.Name, attr.Value);
continue;
}

if (attr.LocalName == "Locale" &&
attr.NamespaceURI == XmlConstants.MsdataNamespace) {
CultureInfo ci = new CultureInfo (attr.Value);
Expand Down Expand Up @@ -593,6 +601,13 @@ private void ProcessDataTableElement (XmlSchemaElement el)
// Find Locale
if (el.UnhandledAttributes != null) {
foreach (XmlAttribute attr in el.UnhandledAttributes) {

if (attr.NamespaceURI == XmlConstants.MspropNamespace)
{
table.ExtendedProperties.Add (attr.Name, attr.Value);
continue;
}

if (attr.LocalName == "Locale" &&
attr.NamespaceURI == XmlConstants.MsdataNamespace)
table.Locale = new CultureInfo (attr.Value);
Expand Down Expand Up @@ -783,6 +798,12 @@ private void ImportColumnMetaInfo (XmlSchemaAnnotated obj, XmlQualifiedName name
{
if (obj.UnhandledAttributes != null) {
foreach (XmlAttribute attr in obj.UnhandledAttributes) {
if (attr.NamespaceURI == XmlConstants.MspropNamespace)
{
col.ExtendedProperties.Add (attr.Name, attr.Value);
continue;
}

if (attr.NamespaceURI != XmlConstants.MsdataNamespace)
continue;
switch (attr.LocalName) {
Expand Down
4 changes: 2 additions & 2 deletions mcs/class/System.Data/System.Data/XmlSchemaWriter.cs
Expand Up @@ -734,12 +734,12 @@ private void WriteTableTypeParticles (DataColumn col)
// XmlConstants.MsdataNamespace,
// col.Ordinal.ToString ());

AddExtendedPropertyAttributes (col.ExtendedProperties);

// Write SimpleType if column have MaxLength
if (col.MaxLength > -1)
WriteSimpleType (col);

AddExtendedPropertyAttributes (col.ExtendedProperties);

w.WriteEndElement (); // sequence
}

Expand Down
@@ -1,3 +1,19 @@
2010-10-01 Veerapuram Varadhan <vvaradhan@novell.com>

* SqlCommandTest.cs: Add test for bug#561667

2010-09-20 Veerapuram Varadhan <vvaradhan@novell.com>

* SqlDataReaderTest.cs: Add test for bug#613087

2010-09-16 Veerapuram Varadhan <vvaradhan@novell.com>

* SqlCommandTest.cs: Add test for bug#569543

2010-09-16 Veerapuram Varadhan <vvaradhan@novell.com>

* SqlCommandTest.cs: Add test for bug#584833

2010-04-21 Veerapuram Varadhan <vvaradhan@novell.com>

* SqlParameterTest.cs: Add test for bug#595918.
Expand Down
Expand Up @@ -1014,6 +1014,17 @@ public void Prepare ()
Assert.IsNotNull (ex.Message, "#B4");
}

// Test Exception is not thrown if DbType is set - #569543
try {
cmd.CommandText = "select type_guid from string_family where type_guid=@p1";
cmd.Parameters.Clear ();
cmd.Parameters.Add ("@p1", SqlDbType.UniqueIdentifier);
cmd.Parameters ["@p1"].Value = new Guid ("1C47DD1D-891B-47E8-AAC8-F36608B31BC5");
cmd.Prepare ();
} catch (Exception ex) {
Assert.Fail ("#B5 "+ex.Message);
}

// Test Exception is not thrown for Stored Procs
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "ABFSDSFSF";
Expand Down Expand Up @@ -2878,6 +2889,167 @@ public void bug326182_OutputParamMixupTest_RValFirst ()
Assert.AreEqual (100, param0Val);
}

[Test]
public void DeriveParameterTest_FullSchema ()
{
string create_tbl = "CREATE TABLE decimalCheck (deccheck DECIMAL (19, 5) null)";
string create_sp = "CREATE PROCEDURE sp_bug584833(@deccheck decimal(19,5) OUT)"
+ "AS " + Environment.NewLine
+ "BEGIN" + Environment.NewLine
+ "INSERT INTO decimalCheck values (@deccheck)" + Environment.NewLine
+ "SELECT @deccheck=deccheck from decimalCheck" + Environment.NewLine
+ "END";

try {
conn = (SqlConnection) ConnectionManager.Singleton.Connection;
ConnectionManager.Singleton.OpenConnection ();

cmd = conn.CreateCommand ();
cmd.CommandText = create_tbl;
cmd.ExecuteNonQuery ();

cmd.CommandText = create_sp;
cmd.ExecuteNonQuery ();

cmd.CommandText = "monotest.dbo.sp_bug584833";
cmd.CommandType = CommandType.StoredProcedure;

SqlCommandBuilder.DeriveParameters (cmd);
Assert.AreEqual (2, cmd.Parameters.Count, "#DPT - FullSchema - Parameter count mismatch");
Assert.AreEqual ("@deccheck", cmd.Parameters[1].ParameterName, "#DPT - FullSchema - Parameter name mismatch");
Assert.AreEqual (SqlDbType.Decimal, cmd.Parameters[1].SqlDbType, "#DPT - FullSchema - Parameter type mismatch");
} finally {
cmd.Parameters.Clear ();
cmd.CommandText = "drop procedure sp_bug584833";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery ();
cmd.CommandText = "drop table decimalCheck";
cmd.ExecuteNonQuery ();
cmd.Dispose ();
cmd = null;
ConnectionManager.Singleton.CloseConnection ();
conn = null;
}

}

[Test]
public void DeriveParameterTest_SPName ()
{
string create_tbl = "CREATE TABLE decimalCheck (deccheck DECIMAL (19, 5) null)";
string create_sp = "CREATE PROCEDURE sp_bug584833(@deccheck decimal(19,5) OUT)"
+ "AS " + Environment.NewLine
+ "BEGIN" + Environment.NewLine
+ "INSERT INTO decimalCheck values (@deccheck)" + Environment.NewLine
+ "SELECT @deccheck=deccheck from decimalCheck" + Environment.NewLine
+ "END";

try {
conn = (SqlConnection) ConnectionManager.Singleton.Connection;
ConnectionManager.Singleton.OpenConnection ();

cmd = conn.CreateCommand ();
cmd.CommandText = create_tbl;
cmd.ExecuteNonQuery ();

cmd.CommandText = create_sp;
cmd.ExecuteNonQuery ();

cmd.CommandText = "sp_bug584833";
cmd.CommandType = CommandType.StoredProcedure;

SqlCommandBuilder.DeriveParameters (cmd);
Assert.AreEqual (2, cmd.Parameters.Count, "#DPT - SPName - Parameter count mismatch");
Assert.AreEqual ("@deccheck", cmd.Parameters[1].ParameterName, "#DPT - SPName - Parameter name mismatch");
Assert.AreEqual (SqlDbType.Decimal, cmd.Parameters[1].SqlDbType, "#DPT - SPName - Parameter type mismatch");
} finally {
cmd.Parameters.Clear ();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "drop procedure sp_bug584833";
cmd.ExecuteNonQuery ();
cmd.CommandText = "drop table decimalCheck";
cmd.ExecuteNonQuery ();
cmd.Dispose ();
cmd = null;
ConnectionManager.Singleton.CloseConnection ();
conn = null;
}
}

[Test]
public void DeriveParameterTest_UserSchema ()
{
string create_tbl = "CREATE TABLE decimalCheck (deccheck DECIMAL (19, 5) null)";
string create_sp = "CREATE PROCEDURE sp_bug584833(@deccheck decimal(19,5) OUT)"
+ "AS " + Environment.NewLine
+ "BEGIN" + Environment.NewLine
+ "INSERT INTO decimalCheck values (@deccheck)" + Environment.NewLine
+ "SELECT @deccheck=deccheck from decimalCheck" + Environment.NewLine
+ "END";

try {
conn = (SqlConnection) ConnectionManager.Singleton.Connection;
ConnectionManager.Singleton.OpenConnection ();

cmd = conn.CreateCommand ();
cmd.CommandText = create_tbl;
cmd.ExecuteNonQuery ();

cmd.CommandText = create_sp;
cmd.ExecuteNonQuery ();

cmd.CommandText = "dbo.sp_bug584833";
cmd.CommandType = CommandType.StoredProcedure;

SqlCommandBuilder.DeriveParameters (cmd);
Assert.AreEqual (2, cmd.Parameters.Count, "#DPT - user schema - Parameter count mismatch");
Assert.AreEqual ("@deccheck", cmd.Parameters[1].ParameterName, "#DPT - user schema - Parameter name mismatch");
Assert.AreEqual (SqlDbType.Decimal, cmd.Parameters[1].SqlDbType, "#DPT - user schema - Parameter type mismatch");
} finally {
cmd.Parameters.Clear ();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "drop procedure dbo.sp_bug584833";
cmd.ExecuteNonQuery ();
cmd.CommandText = "drop table decimalCheck";
cmd.ExecuteNonQuery ();
cmd.Dispose ();
cmd = null;
ConnectionManager.Singleton.CloseConnection ();
conn = null;
}
}

[Test] // bug#561667
public void CmdDispose_DataReaderReset ()
{
try {
conn = (SqlConnection) ConnectionManager.Singleton.Connection;
ConnectionManager.Singleton.OpenConnection ();
string query1 = "SELECT fname FROM employee where lname='kumar'";
string query2 = "SELECT type_int FROM numeric_family where type_bit = 1";
DataTable t = null;

t = GetColumns(conn, query1);
Assert.AreEqual ("suresh", t.Rows[0][0], "CmdDD#1: Query1 result mismatch");
t = GetColumns(conn, query2);
Assert.AreEqual (int.MaxValue, t.Rows[0][0], "CmdDD#2: Query2 result mismatch");
} finally {
ConnectionManager.Singleton.CloseConnection ();
conn = null;
}
}

private DataTable GetColumns(DbConnection connection, string query)
{
DataTable t = new DataTable("Columns");
using (DbCommand c = connection.CreateCommand())
{
c.CommandText = query;
t.Load(c.ExecuteReader());
}
return t;
}

// used as workaround for bugs in NUnit 2.2.0
static void AreEqual (object x, object y, string msg)
{
Expand Down

0 comments on commit 4b5bc91

Please sign in to comment.