diff options
Diffstat (limited to 'mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbDataReader/OleDbDataReader_NextResult.cs')
-rwxr-xr-x | mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbDataReader/OleDbDataReader_NextResult.cs | 661 |
1 files changed, 661 insertions, 0 deletions
diff --git a/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbDataReader/OleDbDataReader_NextResult.cs b/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbDataReader/OleDbDataReader_NextResult.cs new file mode 100755 index 00000000000..380de7923ee --- /dev/null +++ b/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbDataReader/OleDbDataReader_NextResult.cs @@ -0,0 +1,661 @@ +// +// Copyright (c) 2006 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.Text; +using System.Data; +using System.Data.OleDb ; + +using MonoTests.System.Data.Utils; + + +using NUnit.Framework; + +namespace MonoTests.System.Data.OleDb +{ + [TestFixture] + public class OleDbDataReader_NextResult : ADONetTesterClass + { + OleDbConnection con = new OleDbConnection(MonoTests.System.Data.Utils.ConnectedDataProvider.ConnectionString); + Exception exp = null; + + [SetUp] + public void SetUp() { + base.PrepareDataForTesting(MonoTests.System.Data.Utils.ConnectedDataProvider.ConnectionString); + con.Open(); + } + + [TearDown] + public void TearDown() { + if (con.State == ConnectionState.Open) con.Close(); + } + + public static void Main() + { + OleDbDataReader_NextResult tc = new OleDbDataReader_NextResult(); + Exception exp = null; + try + { + tc.BeginTest("OleDbDataReader_NextResult"); + tc.run(); + } + catch(Exception ex){exp = ex;} + finally {tc.EndTest(exp);} + } + + public void run() + { + + + base.PrepareDataForTesting(MonoTests.System.Data.Utils.ConnectedDataProvider.ConnectionString); + con.Open(); + + TestMultipleResultSetsWithSP(); + TestMultipleResultSetsWithSQLText(); + + if (con.State == ConnectionState.Open) con.Close(); + + } + + [Test] + public void TestMultipleResultSetsWithSQLText() + { + + if (ConnectedDataProvider.GetDbType() == DataBaseServer.Oracle) + { + this.Log("Multiple result sets by sql text is not tested in oracle."); + return; + } + + if (ConnectedDataProvider.GetDbType() == DataBaseServer.DB2) + { + this.Log("Multiple result sets using compound statement not supported at DB2."); + return; + } + + bool NextResultExists = false; + OleDbDataReader rdr = null; + OleDbCommand cmd; + int TblResult0=-1; + int TblResult1=-1; + int TblResult2=-1; + try + { + BeginCase("Setup: Get expected results."); + + //get excpected results + GetExcpectedResults(ref TblResult0, ref TblResult1, ref TblResult2); + this.Pass("Setup: Get expected results ended."); + } + catch (Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + + + string cmdTxt = BuildCommandText(); + cmd = new OleDbCommand(cmdTxt, con); + cmd.CommandType = CommandType.Text; + rdr = cmd.ExecuteReader(); + // -------------- ResultSet 1 ------------ + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check if ResultSet 1 exists"); + Compare(rdr != null, true); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check if ResultSet 1 contains data"); + NextResultExists = rdr.Read(); + Compare(NextResultExists, true); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + int i = 1; + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check ResultSet 1 Data"); + while (rdr.Read()) + { + i++; + } + Compare(i, TblResult0); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check ResultSet 1 Schema"); + Compare(rdr.GetSchemaTable().Rows[0].ItemArray.GetValue(0).ToString().ToUpper(), "CUSTOMERID"); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + // -------------- ResultSet 2 ------------ + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check if ResultSet 2 exists"); + NextResultExists = rdr.NextResult(); + Compare(NextResultExists, true); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check if ResultSet 2 contains data"); + NextResultExists = rdr.Read(); + Compare(NextResultExists, true); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check ResultSet 2 Data"); + i = 1; + while (rdr.Read()) + { + i++; + } + Compare(i, TblResult1); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check ResultSet 2 Schema"); + Compare(rdr.GetSchemaTable().Rows[0].ItemArray.GetValue(0).ToString().ToUpper(), "CATEGORYID"); + } + catch(Exception ex) + { + exp = ex; + } + // -------------- ResultSet 3 ------------ + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check if ResultSet 3 exists"); + NextResultExists = rdr.NextResult(); + Compare(NextResultExists, true); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check if ResultSet 3 contains data"); + NextResultExists = rdr.Read(); + Compare(NextResultExists, true); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check ResultSet 3 Data"); + i = 1; + while (rdr.Read()) + { + i++; + } + Compare(i, TblResult2); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check ResultSet 3 Schema"); + Compare(rdr.GetSchemaTable().Rows[0].ItemArray.GetValue(0).ToString().ToUpper(), "REGIONID"); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check that resultset 4 does not exist."); + NextResultExists = rdr.NextResult(); + Compare(NextResultExists, false); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets sql text) - Check that resultset 4 does not contain data."); + NextResultExists = rdr.Read(); + Compare(NextResultExists, false); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + if (!rdr.IsClosed) + rdr.Close(); + } + + [Test] + public void TestMultipleResultSetsWithSP() + { +#if !JAVA + if (ConnectedDataProvider.GetDbType() == DataBaseServer.Oracle) + { + this.Log("Not testing Stored procedures with multiple ref-cursors on Oracle with .NET due to bug in .NET (only the first ref-cursor is retrived)."); + return; + } + + if (ConnectedDataProvider.GetDbType(con) == DataBaseServer.PostgreSQL) + { + // fail to work on .NET OLEDB + this.Log("Not testing PostgreSQL CommandType.StoredProcedure which return SETOF"); + return; + } +#endif + + bool NextResultExists = false; + // transaction use was add for PostgreSQL + OleDbTransaction tr = con.BeginTransaction(); + OleDbCommand cmd = new OleDbCommand("GH_MULTIRECORDSETS", con, tr); + cmd.CommandType = CommandType.StoredProcedure; + OleDbDataReader rdr = cmd.ExecuteReader(); + + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check if ResultSet 1 exists"); + Compare(rdr != null, true); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check if ResultSet 1 contains data"); + NextResultExists = rdr.Read(); + Compare(NextResultExists, true); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check ResultSet 1 Data"); + Compare(rdr.GetValue(1).ToString(), "Yavine"); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check ResultSet 1 Schema"); + Compare(rdr.GetSchemaTable().Rows[0].ItemArray.GetValue(0).ToString().ToUpper(), "EMPLOYEEID"); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + + + // -------------- ResultSet 2 ------------ + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check if ResultSet 2 exists"); + NextResultExists = rdr.NextResult(); + Compare(NextResultExists, true); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check if ResultSet 2 contains data"); + NextResultExists = rdr.Read(); + Compare(NextResultExists, true); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check ResultSet 2 Data"); + Compare(rdr.GetValue(1).ToString(), "Morgenstern Gesundkost"); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check ResultSet 2 Schema"); + Compare(rdr.GetSchemaTable().Rows[0].ItemArray.GetValue(0).ToString().ToUpper(), "CUSTOMERID"); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + + // -------------- ResultSet 3 ------------ + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check if ResultSet 3 exists"); + NextResultExists = rdr.NextResult(); + Compare(NextResultExists, true); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check if ResultSet 3 contains data"); + NextResultExists = rdr.Read(); + Compare(NextResultExists, false); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check ResultSet 3 Schema"); + Compare(rdr.GetSchemaTable().Rows[0].ItemArray.GetValue(0).ToString().ToUpper(), "ORDERID"); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check that resultset 4 does not exist."); + NextResultExists = rdr.NextResult(); + Compare(NextResultExists, false); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + try + { + exp = null; + BeginCase("(Multiple Resultsets stored proc.) - Check that resultset 4 does not contain data."); + NextResultExists = rdr.Read(); + Compare(NextResultExists, false); + } + catch(Exception ex) + { + exp = ex; + } + finally + { + EndCase(exp); + } + + //Cleanup: + if (!rdr.IsClosed) + { + rdr.Close(); + } + + // transaction use was add for PostgreSQL + tr.Commit(); + + } + + + #region "Private Utilities" + private string BuildCommandText() + { + string beginStatement; + string endStatement; + string commandDelimiter; + string[] commands = new string[] {"select * from Customers", "select * from Categories", "select * from Region"}; + + GetDBSpecificSyntax(ConnectedDataProvider.GetDbType(), out beginStatement, out endStatement, out commandDelimiter); + + StringBuilder cmdBuilder = new StringBuilder(); + cmdBuilder.Append(beginStatement); + cmdBuilder.Append(" "); + foreach (string statement in commands) + { + cmdBuilder.Append(statement); + cmdBuilder.Append(commandDelimiter); + cmdBuilder.Append(" "); + } + cmdBuilder.Append(endStatement); + + return cmdBuilder.ToString(); + } + private void GetDBSpecificSyntax(DataBaseServer dbServer, out string beginStatement, out string endStatement, out string commandDelimiter) + { + switch (dbServer) + { + case DataBaseServer.SQLServer: + beginStatement = "BEGIN"; + endStatement = "END"; + commandDelimiter = ";"; + break; + case DataBaseServer.Sybase: + beginStatement = "BEGIN"; + endStatement = "END"; + commandDelimiter = "\r\n"; + break; + case DataBaseServer.Oracle: + beginStatement = "BEGIN"; + endStatement = "END;"; + commandDelimiter = ";"; + break; + + case DataBaseServer.DB2: + { + beginStatement = ""; + endStatement = ""; + } + commandDelimiter = ";"; + break; + + case DataBaseServer.PostgreSQL: + beginStatement = ""; + endStatement = ""; + commandDelimiter = ";"; + break; + + default: + this.Fail("Unknown DataBaseServer type"); + throw new ApplicationException("Unknown DataBaseServer type"); + } + } + private void GetExcpectedResults(ref int TblResult0, ref int TblResult1, ref int TblResult2) + { + // get excpected results + + // transaction use was add for PostgreSQL + OleDbTransaction tr = con.BeginTransaction(); + OleDbCommand cmd = new OleDbCommand("", con,tr); + cmd.CommandText = "Select count(*) from Customers"; + TblResult0 = Int32.Parse(cmd.ExecuteScalar().ToString()); + cmd.CommandText = "Select count(*) from Categories"; + TblResult1 = Int32.Parse(cmd.ExecuteScalar().ToString()); + cmd.CommandText = "Select count(*) from Region"; + TblResult2 = Int32.Parse(cmd.ExecuteScalar().ToString()); + tr.Commit(); + } + + #endregion + } +}
\ No newline at end of file |