a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
193 lines
7.2 KiB
C#
193 lines
7.2 KiB
C#
// Authors:
|
|
// Rafael Mizrahi <rafim@mainsoft.com>
|
|
// Erez Lotan <erezl@mainsoft.com>
|
|
// Oren Gurfinkel <oreng@mainsoft.com>
|
|
// Ofer Borstein
|
|
//
|
|
// Copyright (c) 2004 Mainsoft Co.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining
|
|
// a copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
|
// permit persons to whom the Software is furnished to do so, subject to
|
|
// the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be
|
|
// included in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
//
|
|
|
|
using System;
|
|
using System.Data;
|
|
using System.IO;
|
|
using System.Collections;
|
|
|
|
// Provide All Data required by the diffderent tests e.g.DataTable, DataRow ...
|
|
namespace MonoTests.System.Data.Utils
|
|
{
|
|
public class DataProvider
|
|
{
|
|
#region Constatntas
|
|
|
|
#region Private
|
|
//A string containing all printable charachters.
|
|
private const string SAMPLE_STRING = "abcdefghijklmnopqrstuvwxyz1234567890~!@#$%^&*()_+-=[]\\|;:,./<>? ";
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
public static DataTable CreateChildDataTable()
|
|
{
|
|
DataTable dtChild = new DataTable("Child");
|
|
dtChild.Columns.Add("ParentId",typeof(int));
|
|
dtChild.Columns.Add("ChildId",typeof(int));
|
|
dtChild.Columns.Add("String1",typeof(string));
|
|
dtChild.Columns.Add("String2",typeof(string));
|
|
dtChild.Columns.Add("ChildDateTime",typeof(DateTime));
|
|
dtChild.Columns.Add("ChildDouble",typeof(double));
|
|
|
|
dtChild.Rows.Add(new object[] {1,1,"1-String1","1-String2",new DateTime(2000,1,1,0,0,0,0),1.534});
|
|
dtChild.Rows.Add(new object[] {1,2,"2-String1","2-String2",DateTime.MaxValue ,-1.534});
|
|
dtChild.Rows.Add(new object[] {1,3,"3-String1","3-String2",DateTime.MinValue,double.MaxValue/10000});
|
|
dtChild.Rows.Add(new object[] {2,1,"1-String1","1-String2",new DateTime(1973,6,20,0,0,0,0),double.MinValue*10000});
|
|
dtChild.Rows.Add(new object[] {2,2,"2-String1","2-String2",new DateTime(2008,12,1,13,59,59,59),0.45});
|
|
dtChild.Rows.Add(new object[] {2,3,"3-String1","3-String2",new DateTime(2003,1,1,1,1,1,1),0.55});
|
|
dtChild.Rows.Add(new object[] {5,1,"1-String1","1-String2",new DateTime(2002,1,1,1,1,1,1),0});
|
|
dtChild.Rows.Add(new object[] {5,2,"2-String1","2-String2",new DateTime(2001,1,1,1,1,1,1),10});
|
|
dtChild.Rows.Add(new object[] {5,3,"3-String1","3-String2",new DateTime(2000,1,1,1,1,1,1),20});
|
|
dtChild.Rows.Add(new object[] {6,1,"1-String1","1-String2",new DateTime(2000,1,1,1,1,1,0),25});
|
|
dtChild.Rows.Add(new object[] {6,2,"2-String1","2-String2",new DateTime(2000,1,1,1,1,0,0),30});
|
|
dtChild.Rows.Add(new object[] {6,3,"3-String1","3-String2",new DateTime(2000,1,1,0,0,0,0),35});
|
|
dtChild.AcceptChanges();
|
|
return dtChild;
|
|
}
|
|
|
|
public static DataTable CreateParentDataTable()
|
|
{
|
|
DataTable dtParent = new DataTable("Parent");
|
|
|
|
dtParent.Columns.Add("ParentId",typeof(int));
|
|
dtParent.Columns.Add("String1",typeof(string));
|
|
dtParent.Columns.Add("String2",typeof(string));
|
|
|
|
dtParent.Columns.Add("ParentDateTime",typeof(DateTime));
|
|
dtParent.Columns.Add("ParentDouble",typeof(double));
|
|
dtParent.Columns.Add("ParentBool",typeof(bool));
|
|
|
|
dtParent.Rows.Add(new object[] {1,"1-String1","1-String2",new DateTime(2005,1,1,0,0,0,0),1.534,true});
|
|
dtParent.Rows.Add(new object[] {2,"2-String1","2-String2",new DateTime(2004,1,1,0,0,0,1),-1.534,true});
|
|
dtParent.Rows.Add(new object[] {3,"3-String1","3-String2",new DateTime(2003,1,1,0,0,1,0),double.MinValue*10000,false});
|
|
dtParent.Rows.Add(new object[] {4,"4-String1","4-String2",new DateTime(2002,1,1,0,1,0,0),double.MaxValue/10000,true});
|
|
dtParent.Rows.Add(new object[] {5,"5-String1","5-String2",new DateTime(2001,1,1,1,0,0,0),0.755,true});
|
|
dtParent.Rows.Add(new object[] {6,"6-String1","6-String2",new DateTime(2000,1,1,0,0,0,0),0.001,false});
|
|
dtParent.AcceptChanges();
|
|
return dtParent;
|
|
}
|
|
|
|
//This method replace the DataSet GetXmlSchema method
|
|
//used to compare DataSets
|
|
//Created by Ofer (13-Nov-03) becuase DataSet GetXmlSchema method is not yet implemented in java
|
|
public static string GetDSSchema(DataSet ds)
|
|
{
|
|
string strSchema = "DataSet Name=" + ds.DataSetName + "\n";
|
|
//Get relations
|
|
foreach (DataRelation dl in ds.Relations)
|
|
{
|
|
strSchema += "\t" + "DataRelation Name=" + dl.RelationName ;
|
|
foreach (DataColumn dc in dl.ParentColumns)
|
|
strSchema += "\t" + "ParentColummn=" + dc.ColumnName ;
|
|
foreach (DataColumn dc in dl.ChildColumns )
|
|
strSchema += "\t" + "ChildColumn=" + dc.ColumnName ;
|
|
strSchema += "\n";
|
|
}
|
|
//Get teables
|
|
foreach (DataTable dt in ds.Tables)
|
|
{
|
|
strSchema += "Table=" + dt.TableName + "\t";
|
|
//Get Constraints
|
|
strSchema += "Constraints =";
|
|
foreach (Constraint cs in dt.Constraints )
|
|
strSchema += cs.GetType().Name + ", ";
|
|
strSchema += "\n";
|
|
//Get PrimaryKey Columns
|
|
strSchema += "PrimaryKey Columns index:=";
|
|
foreach (DataColumn dc in dt.PrimaryKey)
|
|
strSchema += dc.Ordinal + ", ";
|
|
strSchema += "\n";
|
|
//Get Columns
|
|
foreach (DataColumn dc in dt.Columns)
|
|
{
|
|
strSchema += "ColumnName=" + dc.ColumnName + "\t" +
|
|
"ColumnType=" + dc.DataType.Name + "\t" +
|
|
"AllowDBNull=" + dc.AllowDBNull.ToString() + "\t" +
|
|
"DefaultValue=" + dc.DefaultValue.ToString() + "\t" +
|
|
"Unique=" + dc.Unique.ToString() + "\t" +
|
|
"ReadOnly=" + dc.ReadOnly.ToString() + "\n" ;
|
|
}
|
|
strSchema += "\n";
|
|
}
|
|
return strSchema;
|
|
}
|
|
|
|
public static DataTable CreateUniqueConstraint()
|
|
{
|
|
DataTable dt = DataProvider.CreateParentDataTable();
|
|
return CreateUniqueConstraint(dt);
|
|
}
|
|
|
|
public static DataTable CreateUniqueConstraint(DataTable dt)
|
|
{
|
|
Constraint con = new UniqueConstraint(dt.Columns["ParentId"]);
|
|
dt.Constraints.Add(con);
|
|
return dt;
|
|
}
|
|
|
|
public static void TryToBreakUniqueConstraint()
|
|
{
|
|
//Create the constraint
|
|
DataTable dt = CreateUniqueConstraint();
|
|
//Try to violate the constraint
|
|
|
|
DataRow dr1 = dt.NewRow();
|
|
dr1[0] = 1;
|
|
dt.Rows.Add(dr1);
|
|
}
|
|
|
|
public static DataSet CreateForigenConstraint()
|
|
{
|
|
DataTable parent = DataProvider.CreateParentDataTable();
|
|
DataTable child = DataProvider.CreateChildDataTable();
|
|
DataSet ds = new DataSet();
|
|
ds.Tables.Add(parent);
|
|
ds.Tables.Add(child);
|
|
|
|
Constraint con1 = new ForeignKeyConstraint(parent.Columns[0],child.Columns[0]);
|
|
child.Constraints.Add(con1);
|
|
|
|
return ds;
|
|
}
|
|
|
|
public static void TryToBreakForigenConstraint()
|
|
{
|
|
DataSet ds = CreateForigenConstraint();
|
|
//Code to break:
|
|
|
|
DataRow dr = ds.Tables[1].NewRow();
|
|
dr[0]=7;
|
|
ds.Tables[1].Rows.Add(dr);
|
|
|
|
ds.AcceptChanges();
|
|
ds.EnforceConstraints=true;
|
|
}
|
|
}
|
|
}
|