///-------------------------------------------------------------------------------- /// <summary>This loads information from a MySQL table.</summary> /// /// <param name="sqlConnection">The input sql connection</param> /// <param name="variables">Database level variables</param> /// <param name="table">The table row data</param> /// <param name="columns">The columns table data</param> /// <param name="indexes">The indexes table data</param> /// <param name="indexColumns">The index columns table data</param> /// <param name="keys">The keys table data</param> /// <param name="keyColumns">The key columns table data</param> ///-------------------------------------------------------------------------------- public void LoadMySQLTable(MySqlConnection sqlConnection, NameObjectCollection variables, DataRow table, DataTable columns, DataTable indexes, DataTable indexColumns, DataTable keys, DataTable keyColumns) { try { // load table information foreach (DataColumn column in table.Table.Columns) { // load important properties into table, the rest as additional sql properties switch (column.ColumnName) { case "TABLE_NAME": SqlTableName = table[column.ColumnName].GetString(); break; case "CREATE_TIME": CreateDate = table[column.ColumnName].GetDateTime(); break; case "UPDATE_TIME": DateLastModified = table[column.ColumnName].GetDateTime(); break; default: SqlProperty property = new SqlProperty(); property.SqlPropertyID = Guid.NewGuid(); property.SqlTable = this; property.LoadMySQLProperty(column.ColumnName, null, table[column.ColumnName].GetString()); SqlPropertyList.Add(property); break; } } // load information for each column if (columns != null) { foreach (DataRow row in columns.Rows) { if (DebugHelper.DebugAction == DebugAction.Stop) { return; } if (row["TABLE_NAME"].GetString() == SqlTableName) { SqlColumn column = new SqlColumn(); column.SqlColumnID = Guid.NewGuid(); column.SqlTable = this; column.LoadMySQLColumn(sqlConnection, variables, row); SqlColumnList.Add(column); } } } // load information for each index if (indexes != null) { foreach (DataRow row in indexes.Rows) { if (DebugHelper.DebugAction == DebugAction.Stop) { return; } if (row["TABLE_NAME"].GetString() == SqlTableName) { SqlIndex index = new SqlIndex(); index.SqlIndexID = Guid.NewGuid(); index.SqlTable = this; index.LoadMySQLIndex(sqlConnection, variables, row, indexColumns); SqlIndexList.Add(index); } } } // load information for each foreign key if (keys != null) { foreach (DataRow row in keys.Rows) { if (DebugHelper.DebugAction == DebugAction.Stop) { return; } if (row["table_name"].GetString() == SqlTableName) { SqlForeignKey key = new SqlForeignKey(); key.SqlForeignKeyID = Guid.NewGuid(); key.SqlTable = this; key.LoadMySQLForeignKey(sqlConnection, variables, row, keyColumns); SqlForeignKeyList.Add(key); } } } } catch (ApplicationAbortException) { throw; } catch (Exception) { throw; } }
///-------------------------------------------------------------------------------- /// <summary>This loads information from a SQL table.</summary> /// /// <param name="sqlTable">The input sql table.</param> ///-------------------------------------------------------------------------------- public void LoadTable(Table sqlTable) { try { // load the basic table information SqlTableName = sqlTable.Name; DbID = sqlTable.ID; Owner = sqlTable.Owner; Schema = sqlTable.Schema; try { FileGroup = sqlTable.FileGroup; } catch { // TODO: have specific Azure db load or identify Azure case } CreateDate = sqlTable.CreateDate; DateLastModified = sqlTable.DateLastModified; Urn = sqlTable.Urn; State = sqlTable.State.ToString(); // load information for each property foreach (Microsoft.SqlServer.Management.Smo.Property loopProperty in sqlTable.Properties) { if (DebugHelper.DebugAction == DebugAction.Stop) { return; } if (loopProperty.Expensive == false && loopProperty.IsNull == false && !String.IsNullOrEmpty(loopProperty.Value.ToString())) { if (loopProperty.Name == "ID" || loopProperty.Name == "RowCount" || loopProperty.Name == "HasClusteredIndex" || loopProperty.Name == "HasIndex") { SqlProperty property = new SqlProperty(); property.SqlPropertyID = Guid.NewGuid(); property.SqlTable = this; property.LoadProperty(loopProperty); SqlPropertyList.Add(property); } } } try { // load information for each extended property foreach (ExtendedProperty loopProperty in sqlTable.ExtendedProperties) { if (DebugHelper.DebugAction == DebugAction.Stop) { return; } SqlExtendedProperty property = new SqlExtendedProperty(); property.SqlExtendedPropertyID = Guid.NewGuid(); property.SqlTable = this; property.LoadExtendedProperty(loopProperty); SqlExtendedPropertyList.Add(property); } } catch { // TODO: have specific Azure db load or identify Azure case } // load information for each column foreach (Column loopColumn in sqlTable.Columns) { if (DebugHelper.DebugAction == DebugAction.Stop) { return; } SqlColumn column = new SqlColumn(); column.SqlColumnID = Guid.NewGuid(); column.SqlTable = this; column.LoadColumn(loopColumn); SqlColumnList.Add(column); } // load information for each index foreach (Index loopIndex in sqlTable.Indexes) { if (DebugHelper.DebugAction == DebugAction.Stop) { return; } SqlIndex index = new SqlIndex(); index.SqlIndexID = Guid.NewGuid(); index.SqlTable = this; index.LoadIndex(loopIndex); SqlIndexList.Add(index); } // load information for each foreign key foreach (ForeignKey loopKey in sqlTable.ForeignKeys) { if (DebugHelper.DebugAction == DebugAction.Stop) { return; } SqlForeignKey key = new SqlForeignKey(); key.SqlForeignKeyID = Guid.NewGuid(); key.SqlTable = this; key.LoadForeignKey(loopKey); SqlForeignKeyList.Add(key); } } catch (ApplicationAbortException) { throw; } catch (Exception) { throw; } }