From 94b941ee95a294228516097c269e27dfa41593ab Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Mon, 13 Jan 2020 09:10:13 -0800 Subject: Provide Record enumerator on View that disposes fetched Records --- .../Bind/ExtractMergeModuleFilesCommand.cs | 66 ++++++++++------------ .../Bind/MergeModulesCommand.cs | 22 ++------ .../Bind/ProcessUncompressedFilesCommand.cs | 20 ++----- 3 files changed, 41 insertions(+), 67 deletions(-) (limited to 'src/WixToolset.Core.WindowsInstaller/Bind') diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs index 4105cb8f..5412c6f9 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs @@ -89,46 +89,38 @@ namespace WixToolset.Core.WindowsInstaller.Bind using (View view = db.OpenExecuteView("SELECT `File`, `Directory_` FROM `File`, `Component` WHERE `Component_`=`Component`")) { // add each file row from the merge module into the file row collection (check for errors along the way) - while (true) + foreach (Record record in view.Records) { - using (Record record = view.Fetch()) + // NOTE: this is very tricky - the merge module file rows are not added to the + // file table because they should not be created via idt import. Instead, these + // rows are created by merging in the actual modules. + var fileTuple = new FileTuple(wixMergeRow.SourceLineNumbers, new Identifier(AccessModifier.Private, record[1])); + fileTuple.Attributes = wixMergeRow.FileAttributes; + fileTuple.DirectoryRef = record[2]; + fileTuple.DiskId = wixMergeRow.DiskId; + fileTuple.Source = new IntermediateFieldPathValue { Path = Path.Combine(this.IntermediateFolder, wixMergeRow.Id.Id, record[1]) }; + + var mergeModuleFileFacade = new FileFacade(true, fileTuple); + + // If case-sensitive collision with another merge module or a user-authored file identifier. + if (indexedFileFacades.TryGetValue(mergeModuleFileFacade.File.Id.Id, out var collidingFacade)) { - if (null == record) - { - break; - } - - // NOTE: this is very tricky - the merge module file rows are not added to the - // file table because they should not be created via idt import. Instead, these - // rows are created by merging in the actual modules. - var fileTuple = new FileTuple(wixMergeRow.SourceLineNumbers, new Identifier(AccessModifier.Private, record[1])); - fileTuple.Attributes = wixMergeRow.FileAttributes; - fileTuple.DirectoryRef = record[2]; - fileTuple.DiskId = wixMergeRow.DiskId; - fileTuple.Source = new IntermediateFieldPathValue { Path = Path.Combine(this.IntermediateFolder, wixMergeRow.Id.Id, record[1]) }; - - var mergeModuleFileFacade = new FileFacade(true, fileTuple); - - // If case-sensitive collision with another merge module or a user-authored file identifier. - if (indexedFileFacades.TryGetValue(mergeModuleFileFacade.File.Id.Id, out var collidingFacade)) - { - this.Messaging.Write(ErrorMessages.DuplicateModuleFileIdentifier(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, collidingFacade.File.Id.Id)); - } - else if (uniqueModuleFileIdentifiers.TryGetValue(mergeModuleFileFacade.File.Id.Id, out collidingFacade)) // case-insensitive collision with another file identifier in the same merge module - { - this.Messaging.Write(ErrorMessages.DuplicateModuleCaseInsensitiveFileIdentifier(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, mergeModuleFileFacade.File.Id.Id, collidingFacade.File.Id.Id)); - } - else // no collision - { - mergeModulesFileFacades.Add(mergeModuleFileFacade); - - // Keep updating the indexes as new rows are added. - indexedFileFacades.Add(mergeModuleFileFacade.File.Id.Id, mergeModuleFileFacade); - uniqueModuleFileIdentifiers.Add(mergeModuleFileFacade.File.Id.Id, mergeModuleFileFacade); - } - - containsFiles = true; + this.Messaging.Write(ErrorMessages.DuplicateModuleFileIdentifier(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, collidingFacade.File.Id.Id)); } + else if (uniqueModuleFileIdentifiers.TryGetValue(mergeModuleFileFacade.File.Id.Id, out collidingFacade)) // case-insensitive collision with another file identifier in the same merge module + { + this.Messaging.Write(ErrorMessages.DuplicateModuleCaseInsensitiveFileIdentifier(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, mergeModuleFileFacade.File.Id.Id, collidingFacade.File.Id.Id)); + } + else // no collision + { + mergeModulesFileFacades.Add(mergeModuleFileFacade); + + // Keep updating the indexes as new rows are added. + indexedFileFacades.Add(mergeModuleFileFacade.File.Id.Id, mergeModuleFileFacade); + uniqueModuleFileIdentifiers.Add(mergeModuleFileFacade.File.Id.Id, mergeModuleFileFacade); + } + + containsFiles = true; } } } diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs index 7ee33997..8c11555e 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs @@ -220,14 +220,12 @@ namespace WixToolset.Core.WindowsInstaller.Bind string query = String.Format(CultureInfo.InvariantCulture, "SELECT * FROM {0} WHERE `Action` = '{1}'", row[0].ToString(), (string)row[1]); using (View view = db.OpenExecuteView(query)) + using (Record record = view.Fetch()) { - using (Record record = view.Fetch()) + if (null != record) { - if (null != record) - { - this.Messaging.Write(WarningMessages.SuppressMergedAction((string)row[1], row[0].ToString())); - view.Modify(ModifyView.Delete, record); - } + this.Messaging.Write(WarningMessages.SuppressMergedAction((string)row[1], row[0].ToString())); + view.Modify(ModifyView.Delete, record); } } } @@ -244,17 +242,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind using (View view = db.OpenExecuteView(String.Concat("SELECT `Action` FROM ", tableName))) { - while (true) + foreach (Record resultRecord in view.Records) { - using (Record resultRecord = view.Fetch()) - { - if (null == resultRecord) - { - break; - } - - this.Messaging.Write(WarningMessages.SuppressMergedAction(resultRecord.GetString(1), tableName)); - } + this.Messaging.Write(WarningMessages.SuppressMergedAction(resultRecord.GetString(1), tableName)); } } diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs index 64fb3e4d..373ada38 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs @@ -57,25 +57,17 @@ namespace WixToolset.Core.WindowsInstaller.Bind var mediaRows = this.Section.Tuples.OfType().ToDictionary(t => t.DiskId); - using (Database db = new Database(this.DatabasePath, OpenDatabase.ReadOnly)) + using (var db = new Database(this.DatabasePath, OpenDatabase.ReadOnly)) { - using (View directoryView = db.OpenExecuteView("SELECT `Directory`, `Directory_Parent`, `DefaultDir` FROM `Directory`")) + using (var directoryView = db.OpenExecuteView("SELECT `Directory`, `Directory_Parent`, `DefaultDir` FROM `Directory`")) { - while (true) + foreach (var directoryRecord in directoryView.Records) { - using (Record directoryRecord = directoryView.Fetch()) - { - if (null == directoryRecord) - { - break; - } + var sourceName = Common.GetName(directoryRecord.GetString(3), true, this.LongNamesInImage); - string sourceName = Common.GetName(directoryRecord.GetString(3), true, this.LongNamesInImage); + var resolvedDirectory = this.BackendHelper.CreateResolvedDirectory(directoryRecord.GetString(2), sourceName); - var resolvedDirectory = this.BackendHelper.CreateResolvedDirectory(directoryRecord.GetString(2), sourceName); - - directories.Add(directoryRecord.GetString(1), resolvedDirectory); - } + directories.Add(directoryRecord.GetString(1), resolvedDirectory); } } -- cgit v1.2.3-55-g6feb