Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbDataReader/OleDbDataReader_NextResult.cs')
-rwxr-xr-xmcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbDataReader/OleDbDataReader_NextResult.cs661
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