/// <summary> /// Finalize the SqlScript table. /// </summary> /// <param name="tables">The collection of all tables.</param> /// <remarks> /// The SqlScript and SqlString tables contain a foreign key into the SqlDatabase /// and Component tables. Depending upon the parent of the SqlDatabase /// element, the SqlScript and SqlString elements are nested under either the /// SqlDatabase or the Component element. /// </remarks> private void FinalizeSqlScriptAndSqlStringTables(TableCollection tables) { Table sqlDatabaseTable = tables["SqlDatabase"]; Table sqlScriptTable = tables["SqlScript"]; Table sqlStringTable = tables["SqlString"]; Hashtable sqlDatabaseRows = new Hashtable(); // index each SqlDatabase row by its primary key if (null != sqlDatabaseTable) { foreach (Row row in sqlDatabaseTable.Rows) { sqlDatabaseRows.Add(row[0], row); } } if (null != sqlScriptTable) { foreach (Row row in sqlScriptTable.Rows) { Sql.SqlScript sqlScript = (Sql.SqlScript) this.Core.GetIndexedElement(row); Row sqlDatabaseRow = (Row)sqlDatabaseRows[row[1]]; string databaseComponent = (string)sqlDatabaseRow[4]; // determine if the SqlScript element should be nested under the database or another component if (null != databaseComponent && databaseComponent == (string)row[2]) { Sql.SqlDatabase sqlDatabase = (Sql.SqlDatabase) this.Core.GetIndexedElement(sqlDatabaseRow); sqlDatabase.AddChild(sqlScript); } else // nest under the component of the SqlDatabase row { Wix.Component component = (Wix.Component) this.Core.GetIndexedElement("Component", (string)row[2]); // set the Database value sqlScript.SqlDb = (string)row[1]; if (null != component) { component.AddChild(sqlScript); } else { this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, sqlScriptTable.Name, row.GetPrimaryKey(DecompilerCore.PrimaryKeyDelimiter), "Component_", (string)row[2], "Component")); } } } } if (null != sqlStringTable) { foreach (Row row in sqlStringTable.Rows) { Sql.SqlString sqlString = (Sql.SqlString) this.Core.GetIndexedElement(row); Row sqlDatabaseRow = (Row)sqlDatabaseRows[row[1]]; string databaseComponent = (string)sqlDatabaseRow[4]; // determine if the SqlScript element should be nested under the database or another component if (null != databaseComponent && databaseComponent == (string)row[2]) { Sql.SqlDatabase sqlDatabase = (Sql.SqlDatabase) this.Core.GetIndexedElement(sqlDatabaseRow); sqlDatabase.AddChild(sqlString); } else // nest under the component of the SqlDatabase row { Wix.Component component = (Wix.Component) this.Core.GetIndexedElement("Component", (string)row[2]); // set the Database value sqlString.SqlDb = (string)row[1]; if (null != component) { component.AddChild(sqlString); } else { this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, sqlStringTable.Name, row.GetPrimaryKey(DecompilerCore.PrimaryKeyDelimiter), "Component_", (string)row[2], "Component")); } } } } }
/// <summary> /// Finalize the SqlFileSpec table. /// </summary> /// <param name="tables">The collection of all tables.</param> /// <remarks> /// Since rows of the SqlFileSpec table are represented by either /// the SqlFileSpec or SqlLogFileSpec depending upon the context in /// which they are used in the SqlDatabase table, decompilation of this /// table must occur after the SqlDatbase parents are decompiled. /// </remarks> private void FinalizeSqlFileSpecTable(TableCollection tables) { Table sqlDatabaseTable = tables["SqlDatabase"]; Table sqlFileSpecTable = tables["SqlFileSpec"]; if (null != sqlDatabaseTable && null != sqlFileSpecTable) { Hashtable sqlFileSpecRows = new Hashtable(); // index each SqlFileSpec row by its primary key foreach (Row row in sqlFileSpecTable.Rows) { sqlFileSpecRows.Add(row[0], row); } // create the necessary SqlFileSpec and SqlLogFileSpec elements for each row foreach (Row row in sqlDatabaseTable.Rows) { Sql.SqlDatabase sqlDatabase = (Sql.SqlDatabase) this.Core.GetIndexedElement(row); if (null != row[6]) { Row sqlFileSpecRow = (Row)sqlFileSpecRows[row[6]]; if (null != sqlFileSpecRow) { Sql.SqlFileSpec sqlFileSpec = new Sql.SqlFileSpec(); sqlFileSpec.Id = (string)sqlFileSpecRow[0]; if (null != sqlFileSpecRow[1]) { sqlFileSpec.Name = (string)sqlFileSpecRow[1]; } sqlFileSpec.Filename = (string)sqlFileSpecRow[2]; if (null != sqlFileSpecRow[3]) { sqlFileSpec.Size = (string)sqlFileSpecRow[3]; } if (null != sqlFileSpecRow[4]) { sqlFileSpec.MaxSize = (string)sqlFileSpecRow[4]; } if (null != sqlFileSpecRow[5]) { sqlFileSpec.GrowthSize = (string)sqlFileSpecRow[5]; } sqlDatabase.AddChild(sqlFileSpec); } else { this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, sqlDatabaseTable.Name, row.GetPrimaryKey(DecompilerCore.PrimaryKeyDelimiter), "FileSpec_", (string)row[6], "SqlFileSpec")); } } if (null != row[7]) { Row sqlFileSpecRow = (Row)sqlFileSpecRows[row[7]]; if (null != sqlFileSpecRow) { Sql.SqlLogFileSpec sqlLogFileSpec = new Sql.SqlLogFileSpec(); sqlLogFileSpec.Id = (string)sqlFileSpecRow[0]; if (null != sqlFileSpecRow[1]) { sqlLogFileSpec.Name = (string)sqlFileSpecRow[1]; } sqlLogFileSpec.Filename = (string)sqlFileSpecRow[2]; if (null != sqlFileSpecRow[3]) { sqlLogFileSpec.Size = (string)sqlFileSpecRow[3]; } if (null != sqlFileSpecRow[4]) { sqlLogFileSpec.MaxSize = (string)sqlFileSpecRow[4]; } if (null != sqlFileSpecRow[5]) { sqlLogFileSpec.GrowthSize = (string)sqlFileSpecRow[5]; } sqlDatabase.AddChild(sqlLogFileSpec); } else { this.Core.OnMessage(WixWarnings.ExpectedForeignRow(row.SourceLineNumbers, sqlDatabaseTable.Name, row.GetPrimaryKey(DecompilerCore.PrimaryKeyDelimiter), "FileSpec_Log", (string)row[7], "SqlFileSpec")); } } } } }