[Test]
public void FillSchemaTest ()
{
string query = "";
// Test if connection is closed if excepton occurs during fill schema
query = "select * from invalid_table";
adapter = new SqlDataAdapter (query, connectionString);
data = new DataSet ("test");
try {
adapter.FillSchema (data , SchemaType.Source);
}catch (Exception e){
if ( adapter.SelectCommand.Connection.State != ConnectionState.Closed)
{
Assert.Fail ("#0 Conn shud be closed if exception occurs");
adapter.SelectCommand.Connection.Close();
}
}
// Test Primary Key is set (since primary key column returned)
query = "select id, type_int from numeric_family where id=1";
adapter = new SqlDataAdapter (query, connectionString);
data = new DataSet ("test1");
adapter.FillSchema (data , SchemaType.Source);
Assert.AreEqual (1, data.Tables[0].PrimaryKey.Length,
"#1 Primary Key property must be set");
// Test Primary Key is not set (since primary key column is returned)
query = "select type_bit, type_int from numeric_family where id=1";
adapter = new SqlDataAdapter (query, connectionString);
data = new DataSet ("test2");
adapter.FillSchema (data, SchemaType.Source);
Assert.AreEqual (0, data.Tables[0].PrimaryKey.Length,
"#2 Primary Key property should not be set");
// Test multiple tables are created for a batch query
query = "Select id ,type_bit from numeric_family;" ;
query += "Select id,type_bit,type_int from numeric_family;";
data = new DataSet ("test3");
adapter = new SqlDataAdapter (query, connectionString);
adapter.FillSchema (data , SchemaType.Source);
Assert.AreEqual (2 , data.Tables.Count , "#3 A table shud be created for each Result Set");
Assert.AreEqual (2 , data.Tables[0].Columns.Count , "#4 should have 2 columns");
Assert.AreEqual (3 , data.Tables[1].Columns.Count , "#5 Should have 3 columns");
// Test if table names and column names are filled correctly
query = "select 10,20 from numeric_family;" ;
query += "select 10,20 from numeric_family;";
adapter = new SqlDataAdapter (query, connectionString);
data = new DataSet ("test4");
try {
adapter.FillSchema (data , SchemaType.Source);
}catch (Exception e){
Assert.Fail ("#3 Unexpected Exception : " + e);
}
Assert.AreEqual ( "Table", data.Tables[0].TableName);
Assert.AreEqual ( "Table1", data.Tables[1].TableName);
Assert.AreEqual ( "Column1", data.Tables[0].Columns[0].ColumnName,
"#6 Unnamed col shud be named as 'ColumnN'");
Assert.AreEqual ( "Column2", data.Tables[0].Columns[1].ColumnName,
"#7 Unnamed col shud be named as 'ColumnN'");
Assert.AreEqual ( "Column1", data.Tables[1].Columns[0].ColumnName,
"#8 Unnamed col shud be named as 'ColumnN'");
Assert.AreEqual ( "Column2", data.Tables[1].Columns[1].ColumnName,
"#9 Unnamed col shud be named as 'ColumnN'");
Assert.AreEqual (ConnectionState.Closed, adapter.SelectCommand.Connection.State,
"#10 Connection shud be closed");
// Test if mapping works correctly
// doesent work in both mono and msdotnet
// gotto check if something is wrong
/*
query = "select id,type_bit from numeric_family";
adapter = new SqlDataAdapter (query, connectionString);
data = new DataSet ("test");
DataTable table = data.Tables.Add ("numeric_family_1");
table.Columns.Add ("id");
table.Columns.Add ("type_bit");
DataTableMapping map = adapter.TableMappings.Add("numeric_family_1",
"numeric_family");
map.ColumnMappings.Add ("id", "id_1");
map.ColumnMappings.Add ("type_bit", "type_bit_1");
adapter.FillSchema (data, SchemaType.Source, "numeric_family");
foreach (DataTable tab in data.Tables){
Console.WriteLine ("Table == {0}",tab.TableName);
foreach (DataColumn col in tab.Columns)
Console.WriteLine (" Col = {0} " , col.ColumnName);
}
*/
}