[Adapdev-commits] Adapdev/src/Adapdev.Data/Schema MySqlSchemaBuilder.cs,1.5,1.6 OleDbSchemaBuilder.c
Status: Beta
Brought to you by:
intesar66
From: Sean M. <int...@us...> - 2006-03-18 09:59:28
|
Update of /cvsroot/adapdev/Adapdev/src/Adapdev.Data/Schema In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13506/src/Adapdev.Data/Schema Modified Files: MySqlSchemaBuilder.cs OleDbSchemaBuilder.cs SchemaBuilder.cs TableSchema.cs Log Message: Index: MySqlSchemaBuilder.cs =================================================================== RCS file: /cvsroot/adapdev/Adapdev/src/Adapdev.Data/Schema/MySqlSchemaBuilder.cs,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** MySqlSchemaBuilder.cs 16 Nov 2005 07:01:48 -0000 1.5 --- MySqlSchemaBuilder.cs 18 Mar 2006 09:59:24 -0000 1.6 *************** *** 33,36 **** --- 33,38 ---- DatabaseSchema di = new DatabaseSchema(); + di.DatabaseType = DbType.MYSQL; + di.DatabaseProviderType = DbProviderType.MYSQL; MySqlConnection c = new MySqlConnection(connectionString); di.Name = c.Database; Index: OleDbSchemaBuilder.cs =================================================================== RCS file: /cvsroot/adapdev/Adapdev/src/Adapdev.Data/Schema/OleDbSchemaBuilder.cs,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** OleDbSchemaBuilder.cs 15 Mar 2006 04:34:20 -0000 1.10 --- OleDbSchemaBuilder.cs 18 Mar 2006 09:59:24 -0000 1.11 *************** *** 2,5 **** --- 2,6 ---- using System.Data; using System.Data.OleDb; + using System.Diagnostics; using System.Text; using Adapdev.Data.Sql; *************** *** 15,146 **** private Adapdev.Data.DbProviderType dbProviderType = DbProviderType.OLEDB; private int recordCount = 0; ! public OleDbSchemaBuilder(Adapdev.IProgressCallback callback, ref int recordCount) { this._callback = callback; this.recordCount = recordCount; } public override DatabaseSchema BuildDatabaseSchema(string connectionString, Adapdev.Data.DbType databaseType, Adapdev.Data.DbProviderType providerType, string schemaFilter) { ! DataTable schemaTables = this.GetOleDbSchema(_callback, connectionString, OleDbSchemaGuid.Tables, "",schemaFilter,"",""); DatabaseSchema di = new DatabaseSchema(); - di.DatabaseProviderType = providerType; - di.DatabaseType = databaseType; - this.dbProviderType = providerType; ! if (schemaTables != null) ! { ! if (schemaTables.Rows.Count > 0) ! { ! //TODO: Note sure if this is valid. It does not work for Oracle DB's ! di.Name = schemaTables.Rows[0]["TABLE_CATALOG"].ToString(); ! if (di.Name == String.Empty) di.Name = "Unknown"; ! ! // Build the base schema information ! if (!StartProgress(_callback, "Building Table Details",schemaTables.Rows.Count,ref recordCount)) return null; ! foreach (DataRow dr in schemaTables.Rows) { ! TableType tableType = TableTypeConverter.Convert(dr["TABLE_TYPE"].ToString()); ! if (tableType == TableType.TABLE || tableType == TableType.VIEW) { ! if (!IncrProgress(_callback, dr["TABLE_NAME"].ToString(), ref recordCount)) return null; ! TableSchema ti = CreateTableSchema(dr); ! CreateColumnSchemas(ti, connectionString, databaseType); ! if(ti.Columns.Count > 0) di.AddTable(ti); } - } ! // Get the primary key information ! DataTable pkeys = this.GetOleDbSchema(_callback, connectionString, OleDbSchemaGuid.Primary_Keys, "",schemaFilter,"",""); ! if (pkeys != null) ! { ! if (!StartProgress(_callback, "Building Primary Key Details",pkeys.Rows.Count,ref recordCount)) return null; ! foreach (DataRow dr in pkeys.Rows) { ! string pkTable = dr["TABLE_NAME"].ToString(); ! if (!IncrProgress(_callback, dr["TABLE_NAME"].ToString(), ref recordCount)) return null; ! ! TableSchema tip = di[pkTable]; ! if (tip != null) { ! ColumnSchema ci = tip[dr["COLUMN_NAME"].ToString()]; ! if (ci != null) { ! ci.IsPrimaryKey = true; ! tip.AddColumn(ci); } } } - } ! // Get the foreign key information ! DataTable fkeys = this.GetOleDbSchema(_callback, connectionString, OleDbSchemaGuid.Foreign_Keys, "",schemaFilter,"",""); ! if (fkeys != null) ! { ! if (!StartProgress(_callback, "Building Foreign Key Details",fkeys.Rows.Count,ref recordCount)) return null; ! foreach (DataRow dr in fkeys.Rows) { ! string fkTable = dr["FK_TABLE_NAME"].ToString(); ! if (!IncrProgress(_callback, dr["FK_TABLE_NAME"].ToString(), ref recordCount)) return null; ! ! TableSchema tif = di[fkTable]; ! if (tif != null) { ! ColumnSchema ci = tif[dr["FK_COLUMN_NAME"].ToString()]; ! if (ci != null) { ! ci.IsForeignKey = true; ! tif.AddColumn(ci); } } } - } ! // Setup the Progress Display if one is defined. ! if (fkeys != null) ! { ! if (!StartProgress(_callback, "Building Foreign Key Relationships",fkeys.Rows.Count,ref recordCount)) return null; ! foreach (DataRow dr in fkeys.Rows) { ! if (!IncrProgress(_callback, dr["PK_TABLE_NAME"].ToString(), ref recordCount)) return null; ! // Get the name of the primary key table ! string pkTable = dr["PK_TABLE_NAME"].ToString(); ! // Get the name of the foreign key table ! string fkTable = dr["FK_TABLE_NAME"].ToString(); ! // Get the name of the foreign key column ! string fkColumn = dr["FK_COLUMN_NAME"].ToString(); ! // Get the table containing the primary key ! TableSchema tif = di[pkTable]; ! // Get the table containing the foreign key ! TableSchema fk = di[fkTable]; ! if (tif != null) ! { ! // Get the primary key ! ColumnSchema ci = tif[dr["PK_COLUMN_NAME"].ToString()]; ! // Get the foreign key ! ColumnSchema cf = fk[fkColumn]; ! if (ci != null) { ! // Add the association to the table and column containing the foreign key ! ci.ForeignKeyTables.Add(new ForeignKeyAssociation(tif, ci, fk ,cf)); } } } ! } ! if (!EndProgress(_callback, "Finished Loading Tables",true)) return null; } else { if (!EndProgress(_callback, "No database schema information found.",false)) return null; ! } ! } ! else { ! if (!EndProgress(_callback, "No database schema information found.",false)) return null; } return di; --- 16,192 ---- private Adapdev.Data.DbProviderType dbProviderType = DbProviderType.OLEDB; private int recordCount = 0; + private readonly string oledbConnectionString; ! public OleDbSchemaBuilder(Adapdev.IProgressCallback callback, ref int recordCount, string oledbConnectionString) { this._callback = callback; this.recordCount = recordCount; + this.oledbConnectionString = oledbConnectionString; } public override DatabaseSchema BuildDatabaseSchema(string connectionString, Adapdev.Data.DbType databaseType, Adapdev.Data.DbProviderType providerType, string schemaFilter) { ! bool open = false; ! OleDbConnection connection = (OleDbConnection)DbProviderFactory.CreateConnection(DbProviderType.OLEDB); ! connection.ConnectionString = connectionString; DatabaseSchema di = new DatabaseSchema(); ! try ! { ! connection.Open(); ! open = true; ! ! DataTable schemaTables = this.GetOleDbSchema(_callback, connection, OleDbSchemaGuid.Tables, "",schemaFilter,"",""); ! di.DatabaseProviderType = providerType; ! di.DatabaseType = databaseType; ! this.dbProviderType = providerType; ! ! if (schemaTables != null) ! { ! if (schemaTables.Rows.Count > 0) { ! //TODO: Note sure if this is valid. It does not work for Oracle DB's ! di.Name = schemaTables.Rows[0]["TABLE_CATALOG"].ToString(); ! if (di.Name == String.Empty) di.Name = "Unknown"; ! ! // Build the base schema information ! if (!StartProgress(_callback, "Building Table Details",schemaTables.Rows.Count,ref recordCount)) return null; ! foreach (DataRow dr in schemaTables.Rows) { ! // Only process Tables, Views and Synonyms ! TableType tableType = TableTypeConverter.Convert(dr["TABLE_TYPE"].ToString()); ! if ((tableType == TableType.TABLE || tableType == TableType.VIEW || tableType == TableType.SYNONYM)) ! { ! // Oracle will return tons of system tables ! // so for Oracle, we need to filter out tables ! // with no schema name ! bool go = true; ! switch(di.DatabaseType) ! { ! case DbType.ORACLE: ! if(dr["TABLE_SCHEMA"].ToString().Length > 0) go = true; ! else go = false; ! break; ! default: ! break; ! } ! if (!IncrProgress(_callback, dr["TABLE_NAME"].ToString(), ref recordCount)) return null; ! if(go) ! { ! TableSchema ti = CreateTableSchema(dr); ! //Debug.WriteLine(ti.Name + " -- " + ti.SchemaName); ! CreateColumnSchemas(ti, connection, databaseType); ! if(ti.Columns.Count > 0) di.AddTable(ti); ! } ! } } ! // Get the primary key information ! DataTable pkeys = this.GetOleDbSchema(_callback, connection, OleDbSchemaGuid.Primary_Keys, "",schemaFilter,"",""); ! if (pkeys != null) { ! if (!StartProgress(_callback, "Building Primary Key Details",pkeys.Rows.Count,ref recordCount)) return null; ! foreach (DataRow dr in pkeys.Rows) { ! string pkTable = dr["TABLE_NAME"].ToString(); ! if (!IncrProgress(_callback, dr["TABLE_NAME"].ToString(), ref recordCount)) return null; ! ! TableSchema tip = di[pkTable]; ! if (tip != null) { ! ColumnSchema ci = tip[dr["COLUMN_NAME"].ToString()]; ! if (ci != null) ! { ! ci.IsPrimaryKey = true; ! tip.AddColumn(ci); ! } } } } ! // Get the foreign key information ! DataTable fkeys = this.GetOleDbSchema(_callback, connection, OleDbSchemaGuid.Foreign_Keys, "",schemaFilter,"",""); ! if (fkeys != null) { ! if (!StartProgress(_callback, "Building Foreign Key Details",fkeys.Rows.Count,ref recordCount)) return null; ! foreach (DataRow dr in fkeys.Rows) { ! string fkTable = dr["FK_TABLE_NAME"].ToString(); ! if (!IncrProgress(_callback, dr["FK_TABLE_NAME"].ToString(), ref recordCount)) return null; ! ! TableSchema tif = di[fkTable]; ! if (tif != null) { ! ColumnSchema ci = tif[dr["FK_COLUMN_NAME"].ToString()]; ! if (ci != null) ! { ! ci.IsForeignKey = true; ! tif.AddColumn(ci); ! } } } } ! // Setup the Progress Display if one is defined. ! if (fkeys != null) { ! if (!StartProgress(_callback, "Building Foreign Key Relationships",fkeys.Rows.Count,ref recordCount)) return null; ! foreach (DataRow dr in fkeys.Rows) ! { ! if (!IncrProgress(_callback, dr["PK_TABLE_NAME"].ToString(), ref recordCount)) return null; ! // Get the name of the primary key table ! string pkTable = dr["PK_TABLE_NAME"].ToString(); ! // Get the name of the foreign key table ! string fkTable = dr["FK_TABLE_NAME"].ToString(); ! // Get the name of the foreign key column ! string fkColumn = dr["FK_COLUMN_NAME"].ToString(); ! // Get the table containing the primary key ! TableSchema tif = di[pkTable]; ! // Get the table containing the foreign key ! TableSchema fk = di[fkTable]; ! if (tif != null) { ! try ! { ! // Get the primary key ! ColumnSchema ci = tif[dr["PK_COLUMN_NAME"].ToString()]; ! // Get the foreign key ! ColumnSchema cf = fk[fkColumn]; ! if (ci != null) ! { ! // Add the association to the table and column containing the foreign key ! ci.ForeignKeyTables.Add(new ForeignKeyAssociation(tif, ci, fk ,cf)); ! } ! } ! catch (Exception ex) ! { ! Debug.WriteLine(ex.Message); ! } } } } ! if (!EndProgress(_callback, "Finished Loading Tables",true)) return null; ! } ! else ! { ! if (!EndProgress(_callback, "No database schema information found.",false)) return null; ! } } else { if (!EndProgress(_callback, "No database schema information found.",false)) return null; ! } ! } ! catch(Exception ex) { ! Debug.WriteLine(ex.Message); ! } ! finally ! { ! if(open) connection.Close(); } return di; *************** *** 162,169 **** /// </summary> /// <param name="ts">The TableSchema to add the ColumnSchema to</param> ! /// <param name="oledbConnectionString">The OleDb connectionstring to use</param> ! public void CreateColumnSchemas(TableSchema ts, string oledbConnectionString, Adapdev.Data.DbType databaseType) { ! DataTable dt = this.GetReaderSchema(oledbConnectionString, ts.Name, databaseType); if (!(dt == null)) { --- 208,215 ---- /// </summary> /// <param name="ts">The TableSchema to add the ColumnSchema to</param> ! /// <param name="connection">The OleDb connectionstring to use</param> ! private void CreateColumnSchemas(TableSchema ts, OleDbConnection connection, Adapdev.Data.DbType databaseType) { ! DataTable dt = this.GetReaderSchema(connection, ts.Name, databaseType); if (!(dt == null)) { *************** *** 196,200 **** /// Gets the OLE db schema. /// </summary> ! /// <param name="oledbConnectionString">Oledb connection string.</param> /// <param name="guid">GUID.</param> /// <param name="filterCatalog">Filter catalog.</param> --- 242,246 ---- /// Gets the OLE db schema. /// </summary> ! /// <param name="connection">An open OLEDB connection.</param> /// <param name="guid">GUID.</param> /// <param name="filterCatalog">Filter catalog.</param> *************** *** 203,221 **** /// <param name="filterType">Filter type.</param> /// <returns></returns> ! public DataTable GetOleDbSchema(Adapdev.IProgressCallback _callback, string oledbConnectionString, Guid guid, string filterCatalog, string filterSchema, string filterName, string filterType) { DataTable schemaTable = null; - OleDbConnection conn = new OleDbConnection(oledbConnectionString); - conn.Open(); try { ! schemaTable = conn.GetOleDbSchemaTable(guid, GetFilters(guid, filterCatalog, filterSchema, filterName, filterType)); } catch (Exception ex) { if (_callback != null) _callback.AddMessage(ProgressMessageTypes.Critical, "Error obtaining Schema Information: " + ex.Message); } - conn.Close(); return schemaTable; } --- 249,265 ---- /// <param name="filterType">Filter type.</param> /// <returns></returns> ! private DataTable GetOleDbSchema(Adapdev.IProgressCallback _callback, OleDbConnection connection, Guid guid, string filterCatalog, string filterSchema, string filterName, string filterType) { DataTable schemaTable = null; try { ! schemaTable = connection.GetOleDbSchemaTable(guid, GetFilters(guid, filterCatalog, filterSchema, filterName, filterType)); } catch (Exception ex) { if (_callback != null) _callback.AddMessage(ProgressMessageTypes.Critical, "Error obtaining Schema Information: " + ex.Message); + Debug.WriteLine(ex.Message); } return schemaTable; } *************** *** 241,286 **** } ! public StringBuilder PrintOleDbSchema(string oledbConnection, Guid guid, string filter) { StringBuilder sb = new StringBuilder(); ! DataTable schemaTable; ! schemaTable = GetOleDbSchema(null, oledbConnection, guid, "","","",filter); ! foreach (DataRow row in schemaTable.Rows) { ! foreach (DataColumn column in schemaTable.Columns) { ! sb.Append("\t\t" + column + " : " + row[column] + "\r\n"); } - sb.Append("\r\n"); - } ! sb.Append("\r\n\r\n"); return sb; } ! public DataTable GetReaderSchema(string oledbConnectionString, string tableName, Adapdev.Data.DbType databaseType) { ! return GetReaderSchema(new OleDbConnection(), new OleDbCommand(), oledbConnectionString, databaseType, tableName); } ! private DataTable GetReaderSchema(IDbConnection cn, IDbCommand cmd, string connectionString, Adapdev.Data.DbType databaseType, string tableName) { DataTable schemaTable = null; try { - cn.ConnectionString = connectionString; - cn.Open(); - // Please Note: Use the GetPre and GetPostDelimiters here as in the case of // Oracle using [ ] around a Column Name is not valid. cmd.Connection = cn; cmd.CommandText = "SELECT * FROM " + QueryHelper.GetPreDelimeter(databaseType) + tableName + QueryHelper.GetPostDelimeter(databaseType); ! IDataReader myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly); schemaTable = myReader.GetSchemaTable(); myReader.Close(); - cn.Close(); } catch (Exception ex) --- 285,343 ---- } ! public StringBuilder PrintOleDbSchema(string oledbConnectionString, Guid guid, string filter) { + OleDbConnection connection = new OleDbConnection(oledbConnectionString); StringBuilder sb = new StringBuilder(); ! bool open = false; ! try { ! connection.Open(); ! open = true; ! ! DataTable schemaTable; ! schemaTable = GetOleDbSchema(null, connection, guid, "","","",filter); ! ! foreach (DataRow row in schemaTable.Rows) { ! foreach (DataColumn column in schemaTable.Columns) ! { ! sb.Append("\t\t" + column + " : " + row[column] + "\r\n"); ! } ! sb.Append("\r\n"); } ! sb.Append("\r\n\r\n"); ! } ! catch(Exception ex) ! { ! Debug.WriteLine(ex.Message); ! } ! finally ! { ! if(open)connection.Close(); ! } return sb; } ! private DataTable GetReaderSchema(OleDbConnection connection, string tableName, Adapdev.Data.DbType databaseType) { ! return GetReaderSchema(connection, new OleDbCommand(), oledbConnectionString, databaseType, tableName); } ! private DataTable GetReaderSchema(OleDbConnection cn, IDbCommand cmd, string connectionString, Adapdev.Data.DbType databaseType, string tableName) { DataTable schemaTable = null; try { // Please Note: Use the GetPre and GetPostDelimiters here as in the case of // Oracle using [ ] around a Column Name is not valid. cmd.Connection = cn; cmd.CommandText = "SELECT * FROM " + QueryHelper.GetPreDelimeter(databaseType) + tableName + QueryHelper.GetPostDelimeter(databaseType); ! IDataReader myReader = cmd.ExecuteReader(CommandBehavior.SchemaOnly); schemaTable = myReader.GetSchemaTable(); myReader.Close(); } catch (Exception ex) *************** *** 288,298 **** schemaTable = null; if (_callback != null) _callback.AddMessage(ProgressMessageTypes.Warning, "Could not load Column information for " + tableName + ". " + ex.Message); } return schemaTable; } ! public StringBuilder PrintOleDbSchema(string oledbConnectionString, Guid guid) { ! return PrintOleDbSchema(oledbConnectionString, guid, ""); } } --- 345,356 ---- schemaTable = null; if (_callback != null) _callback.AddMessage(ProgressMessageTypes.Warning, "Could not load Column information for " + tableName + ". " + ex.Message); + Debug.WriteLine(ex.Message); } return schemaTable; } ! public StringBuilder PrintOleDbSchema(string oleDbConnectionString, Guid guid) { ! return PrintOleDbSchema(oleDbConnectionString, guid, ""); } } Index: TableSchema.cs =================================================================== RCS file: /cvsroot/adapdev/Adapdev/src/Adapdev.Data/Schema/TableSchema.cs,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** TableSchema.cs 8 Feb 2006 03:00:00 -0000 1.14 --- TableSchema.cs 18 Mar 2006 09:59:24 -0000 1.15 *************** *** 47,51 **** public void AddColumn(ColumnSchema c) { ! this.columns[c.Name] = c; } --- 47,52 ---- public void AddColumn(ColumnSchema c) { ! if(!c.Name.Equals("ROWID")) // hack for Oracle ! this.columns[c.Name] = c; } *************** *** 75,79 **** { get { return (columns[key]); } ! set { columns[key] = value; } } --- 76,84 ---- { get { return (columns[key]); } ! set ! { ! if(!key.Equals("ROWID")) // hack for Oracle ! columns[key] = value; ! } } Index: SchemaBuilder.cs =================================================================== RCS file: /cvsroot/adapdev/Adapdev/src/Adapdev.Data/Schema/SchemaBuilder.cs,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** SchemaBuilder.cs 16 Nov 2005 07:01:48 -0000 1.14 --- SchemaBuilder.cs 18 Mar 2006 09:59:24 -0000 1.15 *************** *** 59,63 **** case DbProviderType.SQLSERVER: case DbProviderType.ORACLE: ! ds = new OleDbSchemaBuilder(_callback, ref recordCount).BuildDatabaseSchema(connectionString, databaseType, providerType, schemaFilter); break; case DbProviderType.MYSQL: --- 59,63 ---- case DbProviderType.SQLSERVER: case DbProviderType.ORACLE: ! ds = new OleDbSchemaBuilder(_callback, ref recordCount, connectionString).BuildDatabaseSchema(connectionString, databaseType, providerType, schemaFilter); break; case DbProviderType.MYSQL: |