diff options
Diffstat (limited to 'mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/MonoTests.System.Data.Utils/ConnectedDataProvider.cs')
-rwxr-xr-x | mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/MonoTests.System.Data.Utils/ConnectedDataProvider.cs | 365 |
1 files changed, 365 insertions, 0 deletions
diff --git a/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/MonoTests.System.Data.Utils/ConnectedDataProvider.cs b/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/MonoTests.System.Data.Utils/ConnectedDataProvider.cs new file mode 100755 index 00000000000..a91f79d2b9b --- /dev/null +++ b/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/MonoTests.System.Data.Utils/ConnectedDataProvider.cs @@ -0,0 +1,365 @@ +// 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.Data.OleDb ; +using System.IO; +using System.Collections; +using Sys = System; +using MonoTests.System.Data.Utils.Data; + +// Provide All Data required by the diffderent tests e.g.DataTable, DataRow ... +namespace MonoTests.System.Data.Utils { + /// <summary> + /// Types of Database Servers that tests can be run on. + /// </summary> + public enum DataBaseServer { + SQLServer, + Oracle, + DB2, + Sybase, + PostgreSQL, + Unknown + } + + public class ConnectedDataProvider { + + #region Private + //A string containing all printable charachters. + private const string SAMPLE_STRING = "abcdefghijklmnopqrstuvwxyz1234567890~!@#$%^&*()_+-=[]\\|;:,./<>? "; + #endregion + + #region Public + /// <summary> + /// Name of the table in the database, that contain columns of simple types. + /// </summary> + public const string SIMPLE_TYPES_TABLE_NAME = "TYPES_SIMPLE"; + /// <summary> + /// Name of the table in the database, that contain columns of extended types. + /// </summary> + public const string EXTENDED_TYPES_TABLE_NAME = "TYPES_EXTENDED"; + /// <summary> + /// Name of the table in the database, that contain columns of DB specific types. + /// </summary> + public const string SPECIFIC_TYPES_TABLE_NAME = "TYPES_SPECIFIC"; + #endregion + + public static string ConnectionString { + get { + return Sys.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]; + } + } + + // SQLClient does not allow to use the Provider token + // since Provider is always the first parameter(in GHT framework), + // we trim it. + public static string ConnectionStringSQLClient { + get { + return ConnectionString.Substring(ConnectionString.IndexOf(";")); + } + } + + + /// <summary> + /// Resolves the type of DB server specified by the "ADOConString.txt" file. + /// </summary> + /// <returns>The type of DB server specified by the "ADOConString.txt" file.</returns> + public static DataBaseServer GetDbType() { + return ConnectedDataProvider.GetDbType(ConnectedDataProvider.ConnectionString); + } + + /// <summary> + /// Resolves the type of DB server that the specified connection refers. + /// </summary> + /// <param name="OleCon">A valid connection object to a DataBase.</param> + /// <returns>The type of DB server that the specified connection refers to.</returns> + public static DataBaseServer GetDbType(Sys.Data.OleDb.OleDbConnection OleCon) { + return ConnectedDataProvider.GetDbType(OleCon.ConnectionString); + } + + /// <summary> + /// Resolves the type of DB server that the specified connection string refers. + /// </summary> + /// <param name="ConnectionString">A valid connection string to a DataBase server.</param> + /// <returns>The type of DB server that the specified connection string refers to.</returns> + public static DataBaseServer GetDbType(string ConnectionString) { + if (ConnectionString.ToUpper().IndexOf("PROVIDER=SQLOLEDB") >= 0) return DataBaseServer.SQLServer ; + if (ConnectionString.ToUpper().IndexOf("SYBASE") >= 0) return DataBaseServer.Sybase ; + if (ConnectionString.ToUpper().IndexOf("PROVIDER=MSDAORA") >= 0) return DataBaseServer.Oracle; + if (ConnectionString.ToUpper().IndexOf("PROVIDER=IBMDADB2") >= 0) return DataBaseServer.DB2; + if (ConnectionString.ToUpper().IndexOf("POSTGRESQL") >= 0) return DataBaseServer.PostgreSQL; + return DataBaseServer.Unknown ; + } + + /// <summary> + /// Creates a DbTypeParametersCollection with default types and data for the TYPES_SIMPLE table. + /// </summary> + /// <returns>The initialized DbTypeParametersCollection</returns> + public static DbTypeParametersCollection GetSimpleDbTypesParameters() { + DbTypeParametersCollection row = new DbTypeParametersCollection(SIMPLE_TYPES_TABLE_NAME); + switch (ConnectedDataProvider.GetDbType(ConnectedDataProvider.ConnectionString)) { + #region SQLServer + case MonoTests.System.Data.Utils.DataBaseServer.SQLServer: + row.Add("bit", true, 1); + row.Add("tinyint", (byte)25, 1); + row.Add("smallint", (Int16)77, 2); + row.Add("int", (Int32)2525, 4); + row.Add("bigint", (Int64)25251414, 8); + row.Add("decimal", 10M, 9); //(Decimal)10 + row.Add("numeric", 123123M, 9); //(Decimal)123123 + row.Add("float", 17.1414257, 8); + row.Add("real", (float)0.71425, 4); + row.Add("char", "abcdefghij", 10); + row.Add("nchar", "klmnopqrst", 10); + row.Add("varchar", "qwertasdfg", 50); + row.Add("nvarchar", "qwertasdfg", 50); + break; + #endregion + + #region Sybase + case MonoTests.System.Data.Utils.DataBaseServer.Sybase: + //row.Add("BIT", true, 1); + row.Add("TINYINT", (byte)25, 1); + row.Add("SMALLINT", (Int16)77, 2); + row.Add("INT", (Int32)2525, 4); + //row.Add("BIGINT", (Int64)25251414, 8); + row.Add("DECIMAL", 10M, 9); //(Decimal)10 + row.Add("NUMERIC", 123123M, 9); //(Decimal)123123 + row.Add("FLOAT", 17.1414257, 8); + row.Add("REAL", (float)0.71425, 4); + row.Add("CHAR", "abcdefghij", 10); + row.Add("NCHAR", "klmnopqrst", 10); + row.Add("VARCHAR", "qwertasdfg", 50); + row.Add("NVARCHAR", "qwertasdfg", 50); + break; + #endregion + + #region ORACLE + case MonoTests.System.Data.Utils.DataBaseServer.Oracle: + row.Add("NUMBER", 21M, 22); //(Decimal)21 + row.Add("LONG", SAMPLE_STRING, 2147483647); //Default data type in .NET is system.String. + row.Add("FLOAT", 1.234, 22); + row.Add("VARCHAR", "qwertasdfg", 10); + row.Add("NVARCHAR", "qwertasdfg", 20); + row.Add("CHAR", "abcdefghij", 10); + row.Add("NCHAR", "abcdefghij", 10); + break; + #endregion + + #region DB2 + case MonoTests.System.Data.Utils.DataBaseServer.DB2: + row.Add("SMALLINT", (Int16)2, 2); + row.Add("INTEGER", 7777, 4); + row.Add("BIGINT", (Int64)21767267, 8); + row.Add("DECIMAL", 123M, 9); //(decimal)123 + row.Add("REAL", (float)0.7, 4); + row.Add("DOUBLE", 1.7, 8); + row.Add("CHARACTER", "abcdefghij", 10); + row.Add("VARCHAR", "qwertasdfg", 10); + row.Add("LONGVARCHAR", SAMPLE_STRING, 32000); + break; + #endregion + + #region PostgreSQL + case MonoTests.System.Data.Utils.DataBaseServer.PostgreSQL: + + // PostgreSQL ODBC Type BOOL returns String with value "1" + // so we don't run it on .NET + // if (!GHTEnvironment.IsJavaRunTime()) + // { + // row.Add("BOOL", "1", 1); + // } + // else + // { + row.Add("BOOL", (bool)true, 1); + // } + + row.Add("INT2", (Int16)21, 2); + row.Add("INT4", (Int32)30000, 4); + row.Add("INT8", (Int64)30001, 8); + row.Add("NUMERIC", (decimal)100000M, 10); //(decimal)100000 + row.Add("FLOAT4", (Single)7.23157, 4); + row.Add("FLOAT8", (Double)7.123456, 8); + row.Add("VARCHAR", "qwertasdfg", 10); + row.Add("CHAR", "abcdefghij", 10); + row.Add("NCHAR", "klmnopqrst", 10); + break; + #endregion + } + return row; + } + /// <summary> + /// Creates a DbTypeParametersCollection with default types and data for the TYPES_EXTENDED table. + /// </summary> + /// <returns>The initialized DbTypeParametersCollection</returns> + public static DbTypeParametersCollection GetExtendedDbTypesParameters() { + DbTypeParametersCollection row = new DbTypeParametersCollection(EXTENDED_TYPES_TABLE_NAME); + switch (ConnectedDataProvider.GetDbType(ConnectedDataProvider.ConnectionString)) { + #region SQLServer + case MonoTests.System.Data.Utils.DataBaseServer.SQLServer: + row.Add("text", SAMPLE_STRING, 16); + row.Add("ntext", SAMPLE_STRING, 16); + row.Add("binary", new byte[] {0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0}, 50); + row.Add("varbinary", new byte[] {0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0}, 50); + row.Add("datetime", new DateTime(2004, 8, 9, 20, 30, 15, 500), 8); + row.Add("smalldatetime", new DateTime(2004, 8, 9, 20, 30, 00), 4); + break; + #endregion + + #region Sybase + case MonoTests.System.Data.Utils.DataBaseServer.Sybase: + row.Add("TEXT", SAMPLE_STRING, 16); + //There is probably a bug in the jdbc driver , we've tried to insert this string using + //sybase command tool and it gave the same result (3850) + row.Add("NTEXT", SAMPLE_STRING.Trim() , 16); + row.Add("BINARY", new byte[] {0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0}, 50); + row.Add("VARBINARY", new byte[] {0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0}, 50); + row.Add("DATETIME", new DateTime(2004, 8, 9, 20, 30, 15, 500), 8); + row.Add("SMALLDATETIME", new DateTime(2004, 8, 9, 20, 30, 00), 4); + break; + #endregion + + #region ORACLE + case MonoTests.System.Data.Utils.DataBaseServer.Oracle: + row.Add("RAW", new byte[] {0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0}, 10); + row.Add("LONGRAW", new byte[] {0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + }, 100); + row.Add("DATE", new DateTime(2004, 8, 9, 20, 30, 15), 7); + + // The .NET Framework provides support for Oracle LOBs in the OracleClient namespace, but not in the OleDb namespace. + // Since Visual MainWin does not support the OracleClient namespace, a partial support for this important feature is provided in the OleDb namespace. + // See ms-help://MS.VSCC.2003/VMW.GH.1033/ghdoc/vmwdoc_ADONET_data_access_limitations_51.htm +#if TARGET_JVM + + row.Add("BLOB", new byte[] {0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + }, 4000); + row.Add("CLOB", SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + , 4000); + row.Add("NCLOB", SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + , 4000); +#endif + break; + #endregion + + #region DB2 + case MonoTests.System.Data.Utils.DataBaseServer.DB2: + row.Add("DATE", new DateTime(2004, 8, 9, 20, 30, 15, 500).Date); + row.Add("TIME", new TimeSpan(20, 30, 15)); + row.Add("TIMESTAMP", new DateTime(2004, 8, 9, 20, 30, 15, 500)); + row.Add("BLOB", new byte[] {0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + ,0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0 + }); + row.Add("CLOB", SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + ); + row.Add("DBCLOB", SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + + SAMPLE_STRING + ); + break; + #endregion + + #region PostgreSQL + case MonoTests.System.Data.Utils.DataBaseServer.PostgreSQL: + row.Add("BYTEA", new byte[] {0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0, + 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0xF0}, 50); + row.Add("DATE", new DateTime(2004, 8, 9)); + row.Add("TEXT", "abcdefg", 16); + row.Add("TIME", new Sys.TimeSpan(02,02,02)); + row.Add("TIMESTAMP", new DateTime(2004, 8, 9, 20, 30, 15, 500), 8); + break; + #endregion + + } + return row; + } + } +}
\ No newline at end of file |