diff options
author | Konstantin Triger <kostat@mono-cvs.ximian.com> | 2006-05-09 16:40:04 +0400 |
---|---|---|
committer | Konstantin Triger <kostat@mono-cvs.ximian.com> | 2006-05-09 16:40:04 +0400 |
commit | 598f80589cbb4f5322901fb776beb4a6cef1a773 (patch) | |
tree | 2d134db211fd57359ee331f1897d22b8021e41c4 /mcs/class | |
parent | 1f6fe9b2737ae9c86277da18e5823408fa8095a2 (diff) |
fix GetOleDbSchemaTable for OleDbSchemaGuid.Tables
svn path=/branches/mainsoft/gh1.7/mcs/; revision=60440
Diffstat (limited to 'mcs/class')
4 files changed, 71 insertions, 39 deletions
diff --git a/mcs/class/System.Data/System.Data.OleDb.jvm/ChangeLog b/mcs/class/System.Data/System.Data.OleDb.jvm/ChangeLog index d169daafe56..e831ed122c2 100644 --- a/mcs/class/System.Data/System.Data.OleDb.jvm/ChangeLog +++ b/mcs/class/System.Data/System.Data.OleDb.jvm/ChangeLog @@ -1,3 +1,7 @@ +2006-05-09 Konstantin Triger <kostat@mainsoft.com> + + * OleDbConnection.cs: fix GetOleDbSchemaTable for OleDbSchemaGuid.Tables. + 2006-05-07 Boris Kirzner <borisk@mainsoft.com> * OleDbConnection.cs: resolved ambigous reference. diff --git a/mcs/class/System.Data/System.Data.OleDb.jvm/OleDbConnection.cs b/mcs/class/System.Data/System.Data.OleDb.jvm/OleDbConnection.cs index 29f990549c2..48f764306fb 100644 --- a/mcs/class/System.Data/System.Data.OleDb.jvm/OleDbConnection.cs +++ b/mcs/class/System.Data/System.Data.OleDb.jvm/OleDbConnection.cs @@ -144,44 +144,64 @@ namespace System.Data.OleDb public DataTable GetOleDbSchemaTable (Guid schema, object[] restrictions)
{
- DataTable schemaTable = new DataTable("Tables");
- schemaTable.Columns.Add("TABLE_CATALOG");
- schemaTable.Columns.Add("TABLE_SCHEMA");
- schemaTable.Columns.Add("TABLE_NAME");
- schemaTable.Columns.Add("TABLE_TYPE");
- schemaTable.Columns.Add("TABLE_GUID");
- schemaTable.Columns.Add("DESCRIPTION");
- schemaTable.Columns.Add("TABLE_PROPID");
- schemaTable.Columns.Add("DATE_CREATED");
- schemaTable.Columns.Add("DATE_MODIFIED");
-
-
- java.sql.Connection con = JdbcConnection;
- String catalog = con.getCatalog();
-
- java.sql.DatabaseMetaData meta = con.getMetaData();
- java.sql.ResultSet schemaRes = meta.getSchemas();
- System.Collections.ArrayList schemas = new System.Collections.ArrayList();
- while(schemaRes.next()) {
- schemas.Add(schemaRes.getString(1));
- }
- schemaRes.close();
-
- for(int i = 0; i < schemas.Count; i++) {
- java.sql.ResultSet tableRes = meta.getTables(catalog, schemas[i].ToString(), null, null);
- while(tableRes.next()) {
- DataRow row = schemaTable.NewRow();
- row["TABLE_CATALOG"] = catalog;
- row["TABLE_SCHEMA"] = schemas[i];
- row["TABLE_NAME"] = tableRes.getString("TABLE_NAME");
- row["TABLE_TYPE"] = tableRes.getString("TABLE_TYPE");
- row["DESCRIPTION"] = tableRes.getString("REMARKS");
-
- schemaTable.Rows.Add(row);
+ if (State != ConnectionState.Open)
+ throw ExceptionHelper.ConnectionNotOpened("GetOleDbSchemaTable", State.ToString());
+
+ try {
+
+ string[] fixedRestrictions = new string[4];
+ if (restrictions != null) {
+ if (restrictions.Length > 4)
+ throw new OleDbException("The parameter is incorrect", null, this);
+
+ for (int i = 0, count = restrictions.Length; i < count; i ++) {
+ if (restrictions[i] != null) {
+ if (!(restrictions[i] is string))
+ throw new OleDbException("The parameter is incorrect", null, this);
+
+ fixedRestrictions[i] = (string)restrictions[i];
+ }
+ }
}
- tableRes.close();
+
+ DataTable schemaTable = new DataTable("Tables");
+ schemaTable.Columns.Add("TABLE_CATALOG");
+ schemaTable.Columns.Add("TABLE_SCHEMA");
+ schemaTable.Columns.Add("TABLE_NAME");
+ schemaTable.Columns.Add("TABLE_TYPE");
+ schemaTable.Columns.Add("TABLE_GUID");
+ schemaTable.Columns.Add("DESCRIPTION");
+ schemaTable.Columns.Add("TABLE_PROPID");
+ schemaTable.Columns.Add("DATE_CREATED");
+ schemaTable.Columns.Add("DATE_MODIFIED");
+
+ java.sql.ResultSet tableRes = JdbcConnection.getMetaData().getTables(
+ fixedRestrictions[0],
+ fixedRestrictions[1],
+ fixedRestrictions[2],
+ new string[]{fixedRestrictions[3]});
+
+ try {
+ while(tableRes.next()) {
+ DataRow row = schemaTable.NewRow();
+ row["TABLE_CATALOG"] = tableRes.getString("TABLE_CAT");
+ row["TABLE_SCHEMA"] = tableRes.getString("TABLE_SCHEM");
+ row["TABLE_NAME"] = tableRes.getString("TABLE_NAME");
+ row["TABLE_TYPE"] = tableRes.getString("TABLE_TYPE");
+ row["DESCRIPTION"] = tableRes.getString("REMARKS");
+
+ schemaTable.Rows.Add(row);
+ }
+ }
+ finally {
+ tableRes.close();
+ }
+
+ return schemaTable;
+ }
+ catch (SQLException e) {
+ throw CreateException(e);
}
- return schemaTable;
}
public static void ReleaseObjectPool()
diff --git a/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbConnection/ChangeLog b/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbConnection/ChangeLog new file mode 100644 index 00000000000..4a5d584ed12 --- /dev/null +++ b/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbConnection/ChangeLog @@ -0,0 +1,3 @@ +2006-05-09 Konstantin Triger <kostat@mainsoft.com> + + * OleDbConnection_GetOleDbSchemaTable.cs: in Oracle Database maps to Schema.
\ No newline at end of file diff --git a/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbConnection/OleDbConnection_GetOleDbSchemaTable.cs b/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbConnection/OleDbConnection_GetOleDbSchemaTable.cs index e11714cd7ae..2e605d1586d 100755 --- a/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbConnection/OleDbConnection_GetOleDbSchemaTable.cs +++ b/mcs/class/System.Data/Test/ProviderTests/System.Data.OleDb.jvm/OleDbConnection/OleDbConnection_GetOleDbSchemaTable.cs @@ -62,7 +62,13 @@ public class OleDbConnection_GetOleDbSchemaTable : ADONetTesterClass try { BeginCase("Check table is not null"); - dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null,null,null,"TABLE"}); + string catalog = null; + string schema = null; + if (ConnectedDataProvider.GetDbType(con) != DataBaseServer.Oracle) + catalog = "GHTDB"; + else + schema = "GHTDB"; + dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {catalog,schema,null,"TABLE"}); Compare(dt == null,false); } catch(Exception ex) {exp = ex;} @@ -90,8 +96,7 @@ public class OleDbConnection_GetOleDbSchemaTable : ADONetTesterClass try { BeginCase("Table Customers"); - int expected = (ConnectedDataProvider.GetDbType(con) != DataBaseServer.Oracle) ? 1 : 2; // in Oracle return a value of 2 instead of 1. ????? - Compare(dt.Select("TABLE_NAME='Customers'").Length ,expected ); + Compare(dt.Select("TABLE_NAME='Customers'").Length ,1 ); } catch(Exception ex) {exp = ex;} finally {EndCase(exp); exp = null;} |