/// <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> /// Decompile the SqlScript table. /// </summary> /// <param name="table">The table to decompile.</param> private void DecompileSqlScriptTable(Table table) { foreach (Row row in table.Rows) { Sql.SqlScript sqlScript = new Sql.SqlScript(); sqlScript.Id = (string)row[0]; // the Db_ and Component_ columns are handled in FinalizeSqlScriptAndSqlStringTables sqlScript.BinaryKey = (string)row[3]; if (null != row[4]) { sqlScript.User = (string)row[4]; } int attributes = (int)row[5]; if (SqlCompiler.SqlContinueOnError == (attributes & SqlCompiler.SqlContinueOnError)) { sqlScript.ContinueOnError = Sql.YesNoType.yes; } if (SqlCompiler.SqlExecuteOnInstall == (attributes & SqlCompiler.SqlExecuteOnInstall)) { sqlScript.ExecuteOnInstall = Sql.YesNoType.yes; } if (SqlCompiler.SqlExecuteOnReinstall == (attributes & SqlCompiler.SqlExecuteOnReinstall)) { sqlScript.ExecuteOnReinstall = Sql.YesNoType.yes; } if (SqlCompiler.SqlExecuteOnUninstall == (attributes & SqlCompiler.SqlExecuteOnUninstall)) { sqlScript.ExecuteOnUninstall = Sql.YesNoType.yes; } if ((SqlCompiler.SqlRollback | SqlCompiler.SqlExecuteOnInstall) == (attributes & (SqlCompiler.SqlRollback | SqlCompiler.SqlExecuteOnInstall))) { sqlScript.RollbackOnInstall = Sql.YesNoType.yes; } if ((SqlCompiler.SqlRollback | SqlCompiler.SqlExecuteOnReinstall) == (attributes & (SqlCompiler.SqlRollback | SqlCompiler.SqlExecuteOnReinstall))) { sqlScript.RollbackOnReinstall = Sql.YesNoType.yes; } if ((SqlCompiler.SqlRollback | SqlCompiler.SqlExecuteOnUninstall) == (attributes & (SqlCompiler.SqlRollback | SqlCompiler.SqlExecuteOnUninstall))) { sqlScript.RollbackOnUninstall = Sql.YesNoType.yes; } if (null != row[6]) { sqlScript.Sequence = (int)row[6]; } this.Core.IndexElement(row, sqlScript); } }