Author: gert
Date: 2007-10-18 10:28:49 -0400 (Thu, 18 Oct 2007)
New Revision: 87752
Added:
trunk/gert/standalone/bug334842/
trunk/gert/standalone/bug334842/Assert.cs
trunk/gert/standalone/bug334842/default.build
trunk/gert/standalone/bug334842/test.cs
Modified:
trunk/gert/standalone/local-tests
Log:
Added test for bug #334842.
Added: trunk/gert/standalone/bug334842/Assert.cs
===================================================================
--- trunk/gert/standalone/bug334842/Assert.cs 2007-10-18 14:21:44 UTC (rev
87751)
+++ trunk/gert/standalone/bug334842/Assert.cs 2007-10-18 14:28:49 UTC (rev
87752)
@@ -0,0 +1,33 @@
+using System;
+using System.Data;
+using System.Globalization;
+
+class Assert
+{
+ public static void AreEqual (object x, object y, string msg)
+ {
+ if (x == null && y == null)
+ return;
+ if ((x == null || y == null) || !x.Equals (y))
+ throw new Exception (string.Format
(CultureInfo.InvariantCulture,
+ "Expected: {0}, but was: {1}. {2}",
+ x, y, msg));
+ }
+
+ public static void Fail (string msg)
+ {
+ throw new Exception (msg);
+ }
+
+ public static void IsNotNull (object value, string msg)
+ {
+ if (value == null)
+ throw new Exception (msg);
+ }
+
+ public static void IsNull (object value, string msg)
+ {
+ if (value != null)
+ throw new Exception (msg);
+ }
+}
Property changes on: trunk/gert/standalone/bug334842/Assert.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/gert/standalone/bug334842/default.build
===================================================================
--- trunk/gert/standalone/bug334842/default.build 2007-10-18 14:21:44 UTC
(rev 87751)
+++ trunk/gert/standalone/bug334842/default.build 2007-10-18 14:28:49 UTC
(rev 87752)
@@ -0,0 +1,54 @@
+<project name="bug334842" default="rebuild">
+ <target name="mono-2.0">
+ <property name="csc.defines"
value="NET_1_0,NET_1_1,NET_2_0,ONLY_2_0,MONO" />
+ </target>
+
+ <target name="net-2.0">
+ <property name="csc.defines"
value="NET_1_0,NET_1_1,NET_2_0,ONLY_2_0" />
+ </target>
+
+ <property name="frameworks" value="mono-2.0,net-2.0" />
+
+ <target name="clean">
+ <delete>
+ <fileset>
+ <include name="out" />
+ <include name="test.exe" />
+ </fileset>
+ </delete>
+ </target>
+
+ <target name="build">
+ <property name="original.targetframework"
value="${nant.settings.currentframework}" />
+
+ <foreach property="framework" item="String" in="${frameworks}"
delim=",">
+ <if test="${framework::exists(framework)}">
+ <property name="nant.settings.currentframework"
value="${framework}" />
+ <call
target="${nant.settings.currentframework}" />
+ <call target="run" />
+ <call target="clean" />
+ </if>
+ </foreach>
+
+ <property name="nant.settings.currentframework"
value="${original.targetframework}" />
+ </target>
+
+ <target name="compile">
+ <csc target="exe" define="${csc.defines}" output="test.exe"
warnaserror="true" warninglevel="4">
+ <sources>
+ <include name="Assert.cs" />
+ <include name="test.cs" />
+ </sources>
+ <references>
+ <include name="System.Data.dll" />
+ </references>
+ </csc>
+ </target>
+
+ <target name="run" depends="compile">
+ <exec program="test.exe" managed="true" output="out" />
+ <fail if="${file::exists('out')}" />
+ </target>
+
+ <target name="rebuild" depends="clean, build" />
+</project>
Property changes on: trunk/gert/standalone/bug334842/default.build
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/gert/standalone/bug334842/test.cs
===================================================================
--- trunk/gert/standalone/bug334842/test.cs 2007-10-18 14:21:44 UTC (rev
87751)
+++ trunk/gert/standalone/bug334842/test.cs 2007-10-18 14:28:49 UTC (rev
87752)
@@ -0,0 +1,493 @@
+using System;
+using System.Data;
+using System.Data.Common;
+using System.Data.SqlClient;
+using System.Globalization;
+using System.Text;
+using System.Threading;
+
+class Program
+{
+ [STAThread]
+ static int Main ()
+ {
+ Thread.CurrentThread.CurrentCulture =
CultureInfo.InvariantCulture;
+ Thread.CurrentThread.CurrentUICulture =
CultureInfo.InvariantCulture;
+
+ SqlCommand cmd;
+ SqlConnection conn;
+
+ conn = new SqlConnection (CreateConnectionString ("master"));
+ conn.Open ();
+
+ cmd = new SqlCommand (drop_database, conn);
+ cmd.ExecuteNonQuery ();
+
+ cmd = new SqlCommand (create_database, conn);
+ cmd.ExecuteNonQuery ();
+
+ conn.Dispose ();
+
+ conn = new SqlConnection (CreateConnectionString ("Mono"));
+ conn.Open ();
+
+ cmd = new SqlCommand (create_table, conn);
+ cmd.ExecuteNonQuery ();
+ cmd.Dispose ();
+
+ GetSchema_MetaDataCollections (conn);
+ GetSchema_DataSourceInformation (conn);
+ GetSchema_DataTypes (conn);
+ GetSchema_Restrictions (conn);
+ GetSchema_CollectionName_NotDefined (conn);
+
+ conn.Dispose ();
+
+ return 0;
+ }
+
+ static void GetSchema_MetaDataCollections (SqlConnection conn)
+ {
+ object [][] expectedColumns = {
+ new object [] { "CollectionName", typeof (string) },
+ new object [] { "NumberOfRestrictions", typeof (int) },
+ new object [] { "NumberOfIdentifierParts", typeof (int)
}
+ };
+
+ object [][] expectedRows = {
+ new object [] { "MetaDataCollections", 0, 0 },
+ new object [] { "DataSourceInformation", 0, 0 },
+ new object [] { "DataTypes", 0, 0 },
+ new object [] { "Restrictions", 0, 0 },
+ new object [] { "ReservedWords", 0, 0 },
+ new object [] { "Users", 1, 1 },
+ new object [] { "Databases", 1, 1 },
+ new object [] { "Tables", 4, 3 },
+ new object [] { "Columns", 4, 4 },
+ new object [] { "StructuredTypeMembers", 4, 4 },
+ new object [] { "Views", 3, 3 },
+ new object [] { "ViewColumns", 4, 4 },
+ new object [] { "ProcedureParameters", 4, 1 },
+ new object [] { "Procedures", 4, 3 },
+ new object [] { "ForeignKeys", 4, 3 },
+ new object [] { "IndexColumns", 5, 4 },
+ new object [] { "Indexes", 4, 3 },
+ new object [] { "UserDefinedTypes", 2, 1 }
+ };
+
+ using (DataTable dt = conn.GetSchema ()) {
+ Assert.IsNotNull (dt, "#A1");
+ Assert.AreEqual ("MetaDataCollections", dt.TableName,
"#A2");
+ Assert.AreEqual (expectedColumns.Length,
dt.Columns.Count, "#A3");
+ Assert.AreEqual (expectedRows.Length, dt.Rows.Count,
"#A4");
+
+ for (int i = 0; i < expectedColumns.Length; i++) {
+ DataColumn column = dt.Columns [i];
+ object [] expectedColumn = expectedColumns [i];
+ Assert.AreEqual (expectedColumn [0],
column.ColumnName, "#A5:" + i);
+ Assert.AreEqual (expectedColumn [1],
column.DataType, "#A6:" + i);
+ }
+
+ for (int i = 0; i < expectedRows.Length; i++) {
+ DataRow row = dt.Rows [i];
+ object [] expectedRow = expectedRows [i];
+ for (int j = 0; j < expectedColumns.Length;
j++)
+ Assert.AreEqual (expectedRow [j], row
[j], "#A7: " + i + "," + j);
+ }
+ }
+ }
+
+ static void GetSchema_DataSourceInformation (SqlConnection conn)
+ {
+ object [] [] expectedColumns = {
+ new object [] { "CompositeIdentifierSeparatorPattern",
typeof (string) },
+ new object [] { "DataSourceProductName", typeof(string)
},
+ new object [] { "DataSourceProductVersion",
typeof(string) },
+ new object [] { "DataSourceProductVersionNormalized",
typeof(string) },
+ new object [] { "GroupByBehavior",
typeof(GroupByBehavior) },
+ new object [] { "IdentifierPattern", typeof(string) },
+ new object [] { "IdentifierCase",
typeof(IdentifierCase) },
+ new object [] { "OrderByColumnsInSelect", typeof(bool)
},
+ new object [] { "ParameterMarkerFormat", typeof(string)
},
+ new object [] { "ParameterMarkerPattern",
typeof(string) },
+ new object [] { "ParameterNameMaxLength", typeof(int) },
+ new object [] { "ParameterNamePattern", typeof(string)
},
+ new object [] { "QuotedIdentifierPattern",
typeof(string) },
+ new object [] { "QuotedIdentifierCase",
typeof(IdentifierCase) },
+ new object [] { "StatementSeparatorPattern",
typeof(string) },
+ new object [] { "StringLiteralPattern", typeof(string)
},
+ new object [] { "SupportedJoinOperators",
typeof(SupportedJoinOperators) },
+ };
+
+ SqlCommand cmd = new SqlCommand ("SELECT
SERVERPROPERTY('productversion')", conn);
+ Version sql_version = new Version ((string) cmd.ExecuteScalar
());
+ string productVersion = string.Format
("{0:00}.{1:00}.{2:0000}",
+ sql_version.Major, sql_version.Minor,
sql_version.Build);
+
+ object [] [] expectedRows = {
+ new object [] {"\\.", "Microsoft SQL Server",
productVersion, productVersion, 2,
+ @"([EMAIL
PROTECTED]@$#_]*$)|(^\[[^\]\0]|\]\]+\]$)|(^\""[^\""\0]|\""\""+\""$)",
+ 1, false, "{0}", @"@[EMAIL
PROTECTED]@#\$]*(?=\s+|$)",
+ 128, @"[EMAIL PROTECTED]@#\$]*(?=\s+|$)",
+ @"(([^\[]|\]\])*)", 1, ";", "'(([^']|'')*)'",
15 }
+ };
+
+ using (DataTable dt = conn.GetSchema ("DataSourceInformation"))
{
+ Assert.IsNotNull (dt, "#A1");
+ Assert.AreEqual ("DataSourceInformation", dt.TableName,
"#A2");
+ Assert.AreEqual (expectedColumns.Length,
dt.Columns.Count, "#A3");
+ Assert.AreEqual (expectedRows.Length, dt.Rows.Count,
"#A4");
+
+ for (int i = 0; i < expectedColumns.Length; i++) {
+ DataColumn column = dt.Columns [i];
+ object [] expectedColumn = expectedColumns [i];
+ Assert.AreEqual (expectedColumn [0],
column.ColumnName, "#A5:" + i);
+ Assert.AreEqual (expectedColumn [1],
column.DataType, "#A6:" + i);
+ }
+
+ for (int i = 0; i < expectedRows.Length; i++) {
+ DataRow row = dt.Rows [i];
+ object [] expectedRow = expectedRows [i];
+ for (int j = 0; j < expectedColumns.Length; j++)
+ Assert.AreEqual (expectedRow [j], row
[j], "#A7: " + i + "," + j);
+ }
+ }
+ }
+
+ static void GetSchema_DataTypes (SqlConnection conn)
+ {
+ object [][] expectedColumns = {
+ new object [] { "TypeName", typeof(string) },
+ new object [] { "ProviderDbType", typeof(int) },
+ new object [] { "ColumnSize", typeof(long) },
+ new object [] { "CreateFormat", typeof(string) },
+ new object [] { "CreateParameters", typeof(string) },
+ new object [] { "DataType", typeof(string) },
+ new object [] { "IsAutoIncrementable", typeof(bool) },
+ new object [] { "IsBestMatch", typeof(bool) },
+ new object [] { "IsCaseSensitive", typeof(bool) },
+ new object [] { "IsFixedLength", typeof(bool) },
+ new object [] { "IsFixedPrecisionScale", typeof(bool) },
+ new object [] { "IsLong", typeof(bool) },
+ new object [] { "IsNullable", typeof(bool) },
+ new object [] { "IsSearchable", typeof(bool) },
+ new object [] { "IsSearchableWithLike", typeof(bool) },
+ new object [] { "IsUnsigned", typeof(bool) },
+ new object [] { "MaximumScale", typeof(short) },
+ new object [] { "MinimumScale", typeof(short) },
+ new object [] { "IsConcurrencyType", typeof(bool) },
+ new object [] { "IsLiteralSupported", typeof(bool) },
+ new object [] { "LiteralPrefix", typeof(string) },
+ new object [] { "LiteralSuffix", typeof(string) }
+ };
+
+ object [][] expectedRows = {
+ new object [] {"smallint", 16, 5L, "smallint",
DBNull.Value, "System.Int16", true, true,
+ false, true, true, false, true, true, false,
false, DBNull.Value,
+ DBNull.Value, false, DBNull.Value,
DBNull.Value, DBNull.Value},
+ new object [] {"int", 8, 10L, "int", DBNull.Value,
"System.Int32",
+ true, true, false, true, true, false, true,
true, false,
+ false, DBNull.Value, DBNull.Value, false,
DBNull.Value,
+ DBNull.Value, DBNull.Value},
+ new object [] {"real", 13, 7L, "real", DBNull.Value,
+ "System.Single", false, true, false, true,
false, false,
+ true, true, false, false, DBNull.Value,
DBNull.Value,
+ false, DBNull.Value, DBNull.Value,
DBNull.Value},
+ new object [] {"float", 6, 53L, "float({0})",
+ "number of bits used to store the mantissa",
"System.Double",
+ false, true, false, true, false, false, true,
true,
+ false, false, DBNull.Value, DBNull.Value, false,
+ DBNull.Value, DBNull.Value, DBNull.Value},
+ new object [] {"money", 9, 19L, "money", DBNull.Value,
+ "System.Decimal", false, false, false, true,
true,
+ false, true, true, false, false, DBNull.Value,
+ DBNull.Value, false, DBNull.Value, DBNull.Value,
+ DBNull.Value},
+ new object [] {"smallmoney", 17, 10L, "smallmoney",
DBNull.Value,
+ "System.Decimal", false, false, false, true,
true, false,
+ true, true, false, false, DBNull.Value,
DBNull.Value,
+ false, DBNull.Value, DBNull.Value,
DBNull.Value},
+ new object [] {"bit", 2, 1L, "bit", DBNull.Value,
"System.Boolean",
+ false, false, false, true, false, false, true,
true,
+ false, DBNull.Value, DBNull.Value, DBNull.Value,
+ false, DBNull.Value, DBNull.Value,
DBNull.Value},
+ new object [] {"tinyint", 20, 3L, "tinyint",
DBNull.Value,
+ "System.SByte", true, true, false, true, true,
false,
+ true, true, false, true, DBNull.Value,
DBNull.Value,
+ false, DBNull.Value, DBNull.Value,
DBNull.Value},
+ new object [] {"bigint", 0, 19L, "bigint", DBNull.Value,
+ "System.Int64", true, true, false, true, true,
false,
+ true, true, false, false, DBNull.Value,
DBNull.Value,
+ false, DBNull.Value, DBNull.Value,
DBNull.Value},
+ new object [] {"timestamp", 19, 8L, "timestamp",
DBNull.Value,
+ "System.Byte[]", false, false, false, true,
false, false,
+ false, true, false, DBNull.Value, DBNull.Value,
+ DBNull.Value, true, DBNull.Value, "0x",
DBNull.Value},
+ new object [] {"binary", 1, 8000L, "binary({0})",
"length",
+ "System.Byte[]", false, true, false, true,
false, false,
+ true, true, false, DBNull.Value, DBNull.Value,
+ DBNull.Value, false, DBNull.Value, "0x",
DBNull.Value},
+ new object [] {"image", 7, 2147483647L, "image",
DBNull.Value,
+ "System.Byte[]", false, true, false, false,
false, true,
+ true, false, false, DBNull.Value, DBNull.Value,
+ DBNull.Value, false, DBNull.Value, "0x",
DBNull.Value},
+ new object [] {"text", 18, 2147483647L, "text",
DBNull.Value,
+ "System.String", false, true, false, false,
false, true,
+ true, false, true, DBNull.Value, DBNull.Value,
+ DBNull.Value, false, DBNull.Value, "'", "'"},
+ new object [] {"ntext", 11, 1073741823L, "ntext",
DBNull.Value,
+ "System.String", false, true, false, false,
false, true,
+ true, false, true, DBNull.Value, DBNull.Value,
+ DBNull.Value, false, DBNull.Value, "N'", "'"},
+ new object [] {"decimal", 5, 38L, "decimal({0}, {1})",
+ "precision,scale", "System.Decimal", true,
true, false,
+ true, false, false, true, true, false, false,
(short) 38,
+ (short) 0, false, DBNull.Value, DBNull.Value,
DBNull.Value},
+ new object [] {"numeric", 5, 38L, "numeric({0}, {1})",
+ "precision,scale", "System.Decimal", true,
true, false,
+ true, false, false, true, true, false, false,
(short) 38,
+ (short) 0, false, DBNull.Value, DBNull.Value,
DBNull.Value},
+ new object [] {"datetime", 4, 23L, "datetime",
DBNull.Value,
+ "System.DateTime", false, true, false, true,
false, false,
+ true, true, true, DBNull.Value, DBNull.Value,
+ DBNull.Value, false, DBNull.Value, "{ts '",
"'}"},
+ new object [] {"smalldatetime", 15, 16L,
"smalldatetime", DBNull.Value,
+ "System.DateTime", false, true, false, true,
false, false,
+ true, true, true, DBNull.Value, DBNull.Value,
+ DBNull.Value, false, DBNull.Value, "{ts '",
"'}"},
+ new object [] {"sql_variant", 23, DBNull.Value,
"sql_variant",
+ DBNull.Value, "System.Object", false, true,
false, false, false,
+ false, true, true, false, DBNull.Value,
DBNull.Value,
+ DBNull.Value, false, false, DBNull.Value,
DBNull.Value},
+ new object [] {"xml", 25, 2147483647L, "xml",
DBNull.Value,
+ "System.String", false, false, false, false,
false, true,
+ true, false, false, DBNull.Value, DBNull.Value,
+ DBNull.Value, false, false, DBNull.Value,
DBNull.Value},
+ new object [] {"varchar", 22, 2147483647L,
"varchar({0})",
+ "max length", "System.String", false, true,
false, false,
+ false, false, true, true, true, DBNull.Value,
+ DBNull.Value, DBNull.Value, false,
DBNull.Value, "'", "'"},
+ new object [] {"char", 3, 2147483647L, "char({0})",
"length",
+ "System.String", false, true, false, true,
false, false,
+ true, true, true, DBNull.Value, DBNull.Value,
DBNull.Value,
+ false, DBNull.Value, "'", "'"},
+ new object [] {"nchar", 10, 1073741823L, "nchar({0})",
"length",
+ "System.String", false, true, false, true,
false, false,
+ true, true, true, DBNull.Value, DBNull.Value,
DBNull.Value,
+ false, DBNull.Value, "N'", "'"},
+ new object [] {"nvarchar", 12, 1073741823L,
"nvarchar({0})", "max length",
+ "System.String", false, true, false, false,
false, false, true, true,
+ true, DBNull.Value, DBNull.Value, DBNull.Value,
false,
+ DBNull.Value, "N'", "'"},
+ new object [] {"varbinary", 21, 1073741823L,
"varbinary({0})",
+ "max length", "System.Byte[]", false, true,
false, false,
+ false, false, true, true, false, DBNull.Value,
DBNull.Value,
+ DBNull.Value, false, DBNull.Value, "0x",
DBNull.Value},
+ new object [] {"uniqueidentifier", 14, 16L,
"uniqueidentifier", DBNull.Value,
+ "System.Guid", false, true, false, true, false,
false, true,
+ true, false, DBNull.Value, DBNull.Value,
DBNull.Value, false,
+ DBNull.Value, "'", "'"},
+ new object [] {"date", 31, 3L, "date", DBNull.Value,
+ "System.DateTime", false, false, false, true,
true, false,
+ true, true, true, DBNull.Value, DBNull.Value,
DBNull.Value,
+ false, DBNull.Value, "{ts '", "'}"},
+ new object [] {"time", 32, 5L, "time({0})", "scale",
+ "System.TimeSpan", false, false, false, false,
false, false,
+ true, true, true, DBNull.Value, (short) 7,
(short) 0,
+ false, DBNull.Value, "{ts '", "'}"},
+ new object [] {"datetime2", 33, 8L, "datetime2({0})",
"scale",
+ "System.DateTime", false, true, false, false,
false, false,
+ true, true, true, DBNull.Value, (short) 7,
(short) 0,
+ false, DBNull.Value, "{ts '", "'}"},
+ new object [] {"datetimeoffset", 34, 10L,
"datetimeoffset({0})",
+ "scale", "System.DateTimeOffset", false, true,
false, false,
+ false, false, true, true, true, DBNull.Value,
(short) 7, (short) 0,
+ false, DBNull.Value, "{ts '", "'}"},
+ };
+
+ using (DataTable dt = conn.GetSchema ("DataTypes")) {
+ Assert.IsNotNull (dt, "#A1");
+ Assert.AreEqual ("DataTypes", dt.TableName, "#A2");
+ Assert.AreEqual (expectedColumns.Length,
dt.Columns.Count, "#A3");
+ Assert.AreEqual (expectedRows.Length, dt.Rows.Count,
"#A4");
+
+ for (int i = 0; i < expectedColumns.Length; i++) {
+ DataColumn column = dt.Columns [i];
+ object [] expectedColumn = expectedColumns [i];
+ Assert.AreEqual (expectedColumn [0],
column.ColumnName, "#A5:" + i);
+ Assert.AreEqual (expectedColumn [1],
column.DataType, "#A6:" + i);
+ }
+
+ for (int i = 0; i < expectedRows.Length; i++) {
+ DataRow row = dt.Rows [i];
+ object [] expectedRow = expectedRows [i];
+ for (int j = 0; j < expectedColumns.Length; j++)
+ Assert.AreEqual (expectedRow [j], row
[j], "#A7: " + i + "," + j);
+ }
+ }
+ }
+
+ static void GetSchema_Restrictions (SqlConnection conn)
+ {
+ object [][] expectedColumns = {
+ new object [] { "CollectionName", typeof (string) },
+ new object [] { "RestrictionName", typeof(string) },
+ new object [] { "ParameterName", typeof(string) },
+ new object [] { "RestrictionDefault", typeof(string) },
+ new object [] { "RestrictionNumber", typeof(int) }
+ };
+
+ object [][] expectedRows = {
+ new object [] {"Users", "User_Name", "@Name", "name",
1},
+ new object [] {"Databases", "Name", "@Name", "Name", 1},
+
+ new object [] {"Tables", "Catalog", "@Catalog",
"TABLE_CATALOG", 1},
+ new object [] {"Tables", "Owner", "@Owner",
"TABLE_SCHEMA", 2},
+ new object [] {"Tables", "Table", "@Name",
"TABLE_NAME", 3},
+ new object [] {"Tables", "TableType", "@TableType",
"TABLE_TYPE", 4},
+
+ new object [] {"Columns", "Catalog", "@Catalog",
"TABLE_CATALOG", 1},
+ new object [] {"Columns", "Owner", "@Owner",
"TABLE_SCHEMA", 2},
+ new object [] {"Columns", "Table", "@Table",
"TABLE_NAME", 3},
+ new object [] {"Columns", "Column", "@Column",
"COLUMN_NAME", 4},
+
+ new object [] {"StructuredTypeMembers", "Catalog",
"@Catalog", "TYPE_CATALOG", 1},
+ new object [] {"StructuredTypeMembers", "Owner",
"@Owner", "TYPE_SCHEMA", 2},
+ new object [] {"StructuredTypeMembers", "Type",
"@Type", "TYPE_NAME", 3},
+ new object [] {"StructuredTypeMembers", "Member",
"@Member", "MEMBER_NAME", 4},
+
+ new object [] {"Views", "Catalog", "@Catalog",
"TABLE_CATALOG", 1},
+ new object [] {"Views", "Owner", "@Owner",
"TABLE_SCHEMA", 2},
+ new object [] {"Views", "Table", "@Table",
"TABLE_NAME", 3},
+
+ new object [] {"ViewColumns", "Catalog", "@Catalog",
"VIEW_CATALOG", 1},
+ new object [] {"ViewColumns", "Owner", "@Owner",
"VIEW_SCHEMA", 2},
+ new object [] {"ViewColumns", "Table", "@Table",
"VIEW_NAME", 3},
+ new object [] {"ViewColumns", "Column", "@Column",
"COLUMN_NAME", 4},
+
+ new object [] {"ProcedureParameters", "Catalog",
"@Catalog", "SPECIFIC_CATALOG", 1},
+ new object [] {"ProcedureParameters", "Owner",
"@Owner", "SPECIFIC_SCHEMA", 2},
+ new object [] {"ProcedureParameters", "Name", "@Name",
"SPECIFIC_NAME", 3},
+ new object [] {"ProcedureParameters", "Parameter",
"@Parameter", "PARAMETER_NAME", 4},
+
+ new object [] {"Procedures", "Catalog", "@Catalog",
"SPECIFIC_CATALOG", 1},
+ new object [] {"Procedures", "Owner", "@Owner",
"SPECIFIC_SCHEMA", 2},
+ new object [] {"Procedures", "Name", "@Name",
"SPECIFIC_NAME", 3},
+ new object [] {"Procedures", "Type", "@Type",
"ROUTINE_TYPE", 4},
+
+ new object [] {"IndexColumns", "Catalog", "@Catalog",
"db_name()", 1},
+ new object [] {"IndexColumns", "Owner", "@Owner",
"user_name()", 2},
+ new object [] {"IndexColumns", "Table", "@Table",
"o.name", 3},
+ new object [] {"IndexColumns", "ConstraintName",
"@ConstraintName", "x.name", 4},
+ new object [] {"IndexColumns", "Column", "@Column",
"c.name", 5},
+
+ new object [] {"Indexes", "Catalog", "@Catalog",
"db_name()", 1},
+ new object [] {"Indexes", "Owner", "@Owner",
"user_name()", 2},
+ new object [] {"Indexes", "Table", "@Table", "o.name",
3},
+ new object [] {"Indexes", "Name", "@Name", "x.name", 4},
+
+ new object [] {"UserDefinedTypes", "assembly_name",
"@AssemblyName", "assemblies.name", 1},
+ new object [] {"UserDefinedTypes", "udt_name",
"@UDTName", "types.assembly_class", 2},
+
+ new object [] {"ForeignKeys", "Catalog", "@Catalog",
"CONSTRAINT_CATALOG", 1},
+ new object [] {"ForeignKeys", "Owner", "@Owner",
"CONSTRAINT_SCHEMA", 2},
+ new object [] {"ForeignKeys", "Table", "@Table",
"TABLE_NAME", 3},
+ new object [] {"ForeignKeys", "Name", "@Name",
"CONSTRAINT_NAME", 4},
+ };
+
+ using (DataTable dt = conn.GetSchema ("Restrictions")) {
+ Assert.IsNotNull (dt, "#A1");
+ Assert.AreEqual ("Restrictions", dt.TableName, "#A2");
+ Assert.AreEqual (expectedColumns.Length,
dt.Columns.Count, "#A3");
+ Assert.AreEqual (expectedRows.Length, dt.Rows.Count,
"#A4");
+
+ for (int i = 0; i < expectedColumns.Length; i++) {
+ DataColumn column = dt.Columns [i];
+ object [] expectedColumn = expectedColumns [i];
+ Assert.AreEqual (expectedColumn [0],
column.ColumnName, "#A5:" + i);
+ Assert.AreEqual (expectedColumn [1],
column.DataType, "#A6:" + i);
+ }
+
+ for (int i = 0; i < expectedRows.Length; i++) {
+ DataRow row = dt.Rows [i];
+ object [] expectedRow = expectedRows [i];
+ for (int j = 0; j < expectedColumns.Length; j++)
+ Assert.AreEqual (expectedRow [j], row
[j], "#A7: " + i + "," + j);
+ }
+ }
+ }
+
+ static void GetSchema_CollectionName_NotDefined (SqlConnection conn)
+ {
+ try {
+ conn.GetSchema ((string) null);
+ Assert.Fail ("#A1");
+ } catch (ArgumentException ex) {
+ Assert.AreEqual (typeof (ArgumentException), ex.GetType
(), "#A2");
+ Assert.IsNull (ex.InnerException, "#A3");
+ Assert.IsNotNull (ex.Message, "#A4");
+ Assert.AreEqual ("The requested collection () is not
defined.", ex.Message, "#A5");
+ Assert.IsNull (ex.ParamName, "#A6");
+ }
+
+ try {
+ conn.GetSchema ((string) null, new string [0]);
+ Assert.Fail ("#B1");
+ } catch (ArgumentException ex) {
+ Assert.AreEqual (typeof (ArgumentException), ex.GetType
(), "#B2");
+ Assert.IsNull (ex.InnerException, "#B3");
+ Assert.IsNotNull (ex.Message, "#B4");
+ Assert.AreEqual ("The requested collection () is not
defined.", ex.Message, "#B5");
+ Assert.IsNull (ex.ParamName, "#B6");
+ }
+
+ try {
+ conn.GetSchema ("Mono");
+ Assert.Fail ("#C1");
+ } catch (ArgumentException ex) {
+ Assert.AreEqual (typeof (ArgumentException), ex.GetType
(), "#C2");
+ Assert.IsNull (ex.InnerException, "#C3");
+ Assert.IsNotNull (ex.Message, "#C4");
+ Assert.AreEqual ("The requested collection (Mono) is
not defined.", ex.Message, "#C5");
+ Assert.IsNull (ex.ParamName, "#C6");
+ }
+ }
+
+ static string CreateConnectionString (string dbName)
+ {
+ StringBuilder sb = new StringBuilder ();
+
+ string serverName = Environment.GetEnvironmentVariable
("MONO_TESTS_SQL_HOST");
+ if (serverName == null)
+ throw CreateEnvironmentVariableNotSetException
("MONO_TESTS_SQL_HOST");
+
+ sb.AppendFormat ("server={0};database={1};", serverName,
dbName);
+
+ string userName = Environment.GetEnvironmentVariable
("MONO_TESTS_SQL_USER");
+ if (userName != null)
+ sb.AppendFormat ("user id={0};", userName);
+
+ string pwd = Environment.GetEnvironmentVariable
("MONO_TESTS_SQL_PWD");
+ if (pwd != null)
+ sb.AppendFormat ("pwd={0};", pwd);
+ return sb.ToString ();
+ }
+
+ static ArgumentException CreateEnvironmentVariableNotSetException
(string name)
+ {
+ return new ArgumentException ("The " + name + " environment
variable is not set");
+ }
+
+ const string drop_database = @"
+ IF EXISTS (SELECT * FROM sys.databases WHERE name = N'Mono')
+ DROP DATABASE Mono";
+
+ const string create_database = "CREATE DATABASE Mono";
+
+ const string create_table = @"
+ CREATE TABLE bugnew
+ (
+ Name varchar(20),
+ FirstName varchar (10)
+ )";
+}
Property changes on: trunk/gert/standalone/bug334842/test.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: trunk/gert/standalone/local-tests
===================================================================
--- trunk/gert/standalone/local-tests 2007-10-18 14:21:44 UTC (rev 87751)
+++ trunk/gert/standalone/local-tests 2007-10-18 14:28:49 UTC (rev 87752)
@@ -2,4 +2,6 @@
bug318854/**
bug325397/**
bug326011/**
+bug333082/**
bug333901/**
+bug334842/**
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches