diff options
| author | Rob Mensching <rob@firegiant.com> | 2020-01-13 09:10:13 -0800 |
|---|---|---|
| committer | Rob Mensching <rob@firegiant.com> | 2020-01-13 14:19:45 -0800 |
| commit | 94b941ee95a294228516097c269e27dfa41593ab (patch) | |
| tree | 208cb36a5a6a3e17f5d458cfaa679d6ca1a76e15 /src/WixToolset.Core.WindowsInstaller/Bind | |
| parent | a2b1235d9c0dfba48b1badac428d89d1137da698 (diff) | |
| download | wix-94b941ee95a294228516097c269e27dfa41593ab.tar.gz wix-94b941ee95a294228516097c269e27dfa41593ab.tar.bz2 wix-94b941ee95a294228516097c269e27dfa41593ab.zip | |
Provide Record enumerator on View that disposes fetched Records
Diffstat (limited to 'src/WixToolset.Core.WindowsInstaller/Bind')
3 files changed, 41 insertions, 67 deletions
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 | |||
| 89 | using (View view = db.OpenExecuteView("SELECT `File`, `Directory_` FROM `File`, `Component` WHERE `Component_`=`Component`")) | 89 | using (View view = db.OpenExecuteView("SELECT `File`, `Directory_` FROM `File`, `Component` WHERE `Component_`=`Component`")) |
| 90 | { | 90 | { |
| 91 | // add each file row from the merge module into the file row collection (check for errors along the way) | 91 | // add each file row from the merge module into the file row collection (check for errors along the way) |
| 92 | while (true) | 92 | foreach (Record record in view.Records) |
| 93 | { | 93 | { |
| 94 | using (Record record = view.Fetch()) | 94 | // NOTE: this is very tricky - the merge module file rows are not added to the |
| 95 | // file table because they should not be created via idt import. Instead, these | ||
| 96 | // rows are created by merging in the actual modules. | ||
| 97 | var fileTuple = new FileTuple(wixMergeRow.SourceLineNumbers, new Identifier(AccessModifier.Private, record[1])); | ||
| 98 | fileTuple.Attributes = wixMergeRow.FileAttributes; | ||
| 99 | fileTuple.DirectoryRef = record[2]; | ||
| 100 | fileTuple.DiskId = wixMergeRow.DiskId; | ||
| 101 | fileTuple.Source = new IntermediateFieldPathValue { Path = Path.Combine(this.IntermediateFolder, wixMergeRow.Id.Id, record[1]) }; | ||
| 102 | |||
| 103 | var mergeModuleFileFacade = new FileFacade(true, fileTuple); | ||
| 104 | |||
| 105 | // If case-sensitive collision with another merge module or a user-authored file identifier. | ||
| 106 | if (indexedFileFacades.TryGetValue(mergeModuleFileFacade.File.Id.Id, out var collidingFacade)) | ||
| 95 | { | 107 | { |
| 96 | if (null == record) | 108 | this.Messaging.Write(ErrorMessages.DuplicateModuleFileIdentifier(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, collidingFacade.File.Id.Id)); |
| 97 | { | ||
| 98 | break; | ||
| 99 | } | ||
| 100 | |||
| 101 | // NOTE: this is very tricky - the merge module file rows are not added to the | ||
| 102 | // file table because they should not be created via idt import. Instead, these | ||
| 103 | // rows are created by merging in the actual modules. | ||
| 104 | var fileTuple = new FileTuple(wixMergeRow.SourceLineNumbers, new Identifier(AccessModifier.Private, record[1])); | ||
| 105 | fileTuple.Attributes = wixMergeRow.FileAttributes; | ||
| 106 | fileTuple.DirectoryRef = record[2]; | ||
| 107 | fileTuple.DiskId = wixMergeRow.DiskId; | ||
| 108 | fileTuple.Source = new IntermediateFieldPathValue { Path = Path.Combine(this.IntermediateFolder, wixMergeRow.Id.Id, record[1]) }; | ||
| 109 | |||
| 110 | var mergeModuleFileFacade = new FileFacade(true, fileTuple); | ||
| 111 | |||
| 112 | // If case-sensitive collision with another merge module or a user-authored file identifier. | ||
| 113 | if (indexedFileFacades.TryGetValue(mergeModuleFileFacade.File.Id.Id, out var collidingFacade)) | ||
| 114 | { | ||
| 115 | this.Messaging.Write(ErrorMessages.DuplicateModuleFileIdentifier(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, collidingFacade.File.Id.Id)); | ||
| 116 | } | ||
| 117 | else if (uniqueModuleFileIdentifiers.TryGetValue(mergeModuleFileFacade.File.Id.Id, out collidingFacade)) // case-insensitive collision with another file identifier in the same merge module | ||
| 118 | { | ||
| 119 | this.Messaging.Write(ErrorMessages.DuplicateModuleCaseInsensitiveFileIdentifier(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, mergeModuleFileFacade.File.Id.Id, collidingFacade.File.Id.Id)); | ||
| 120 | } | ||
| 121 | else // no collision | ||
| 122 | { | ||
| 123 | mergeModulesFileFacades.Add(mergeModuleFileFacade); | ||
| 124 | |||
| 125 | // Keep updating the indexes as new rows are added. | ||
| 126 | indexedFileFacades.Add(mergeModuleFileFacade.File.Id.Id, mergeModuleFileFacade); | ||
| 127 | uniqueModuleFileIdentifiers.Add(mergeModuleFileFacade.File.Id.Id, mergeModuleFileFacade); | ||
| 128 | } | ||
| 129 | |||
| 130 | containsFiles = true; | ||
| 131 | } | 109 | } |
| 110 | else if (uniqueModuleFileIdentifiers.TryGetValue(mergeModuleFileFacade.File.Id.Id, out collidingFacade)) // case-insensitive collision with another file identifier in the same merge module | ||
| 111 | { | ||
| 112 | this.Messaging.Write(ErrorMessages.DuplicateModuleCaseInsensitiveFileIdentifier(wixMergeRow.SourceLineNumbers, wixMergeRow.Id.Id, mergeModuleFileFacade.File.Id.Id, collidingFacade.File.Id.Id)); | ||
| 113 | } | ||
| 114 | else // no collision | ||
| 115 | { | ||
| 116 | mergeModulesFileFacades.Add(mergeModuleFileFacade); | ||
| 117 | |||
| 118 | // Keep updating the indexes as new rows are added. | ||
| 119 | indexedFileFacades.Add(mergeModuleFileFacade.File.Id.Id, mergeModuleFileFacade); | ||
| 120 | uniqueModuleFileIdentifiers.Add(mergeModuleFileFacade.File.Id.Id, mergeModuleFileFacade); | ||
| 121 | } | ||
| 122 | |||
| 123 | containsFiles = true; | ||
| 132 | } | 124 | } |
| 133 | } | 125 | } |
| 134 | } | 126 | } |
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 | |||
| 220 | string query = String.Format(CultureInfo.InvariantCulture, "SELECT * FROM {0} WHERE `Action` = '{1}'", row[0].ToString(), (string)row[1]); | 220 | string query = String.Format(CultureInfo.InvariantCulture, "SELECT * FROM {0} WHERE `Action` = '{1}'", row[0].ToString(), (string)row[1]); |
| 221 | 221 | ||
| 222 | using (View view = db.OpenExecuteView(query)) | 222 | using (View view = db.OpenExecuteView(query)) |
| 223 | using (Record record = view.Fetch()) | ||
| 223 | { | 224 | { |
| 224 | using (Record record = view.Fetch()) | 225 | if (null != record) |
| 225 | { | 226 | { |
| 226 | if (null != record) | 227 | this.Messaging.Write(WarningMessages.SuppressMergedAction((string)row[1], row[0].ToString())); |
| 227 | { | 228 | view.Modify(ModifyView.Delete, record); |
| 228 | this.Messaging.Write(WarningMessages.SuppressMergedAction((string)row[1], row[0].ToString())); | ||
| 229 | view.Modify(ModifyView.Delete, record); | ||
| 230 | } | ||
| 231 | } | 229 | } |
| 232 | } | 230 | } |
| 233 | } | 231 | } |
| @@ -244,17 +242,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 244 | 242 | ||
| 245 | using (View view = db.OpenExecuteView(String.Concat("SELECT `Action` FROM ", tableName))) | 243 | using (View view = db.OpenExecuteView(String.Concat("SELECT `Action` FROM ", tableName))) |
| 246 | { | 244 | { |
| 247 | while (true) | 245 | foreach (Record resultRecord in view.Records) |
| 248 | { | 246 | { |
| 249 | using (Record resultRecord = view.Fetch()) | 247 | this.Messaging.Write(WarningMessages.SuppressMergedAction(resultRecord.GetString(1), tableName)); |
| 250 | { | ||
| 251 | if (null == resultRecord) | ||
| 252 | { | ||
| 253 | break; | ||
| 254 | } | ||
| 255 | |||
| 256 | this.Messaging.Write(WarningMessages.SuppressMergedAction(resultRecord.GetString(1), tableName)); | ||
| 257 | } | ||
| 258 | } | 248 | } |
| 259 | } | 249 | } |
| 260 | 250 | ||
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 | |||
| 57 | 57 | ||
| 58 | var mediaRows = this.Section.Tuples.OfType<MediaTuple>().ToDictionary(t => t.DiskId); | 58 | var mediaRows = this.Section.Tuples.OfType<MediaTuple>().ToDictionary(t => t.DiskId); |
| 59 | 59 | ||
| 60 | using (Database db = new Database(this.DatabasePath, OpenDatabase.ReadOnly)) | 60 | using (var db = new Database(this.DatabasePath, OpenDatabase.ReadOnly)) |
| 61 | { | 61 | { |
| 62 | using (View directoryView = db.OpenExecuteView("SELECT `Directory`, `Directory_Parent`, `DefaultDir` FROM `Directory`")) | 62 | using (var directoryView = db.OpenExecuteView("SELECT `Directory`, `Directory_Parent`, `DefaultDir` FROM `Directory`")) |
| 63 | { | 63 | { |
| 64 | while (true) | 64 | foreach (var directoryRecord in directoryView.Records) |
| 65 | { | 65 | { |
| 66 | using (Record directoryRecord = directoryView.Fetch()) | 66 | var sourceName = Common.GetName(directoryRecord.GetString(3), true, this.LongNamesInImage); |
| 67 | { | ||
| 68 | if (null == directoryRecord) | ||
| 69 | { | ||
| 70 | break; | ||
| 71 | } | ||
| 72 | 67 | ||
| 73 | string sourceName = Common.GetName(directoryRecord.GetString(3), true, this.LongNamesInImage); | 68 | var resolvedDirectory = this.BackendHelper.CreateResolvedDirectory(directoryRecord.GetString(2), sourceName); |
| 74 | 69 | ||
| 75 | var resolvedDirectory = this.BackendHelper.CreateResolvedDirectory(directoryRecord.GetString(2), sourceName); | 70 | directories.Add(directoryRecord.GetString(1), resolvedDirectory); |
| 76 | |||
| 77 | directories.Add(directoryRecord.GetString(1), resolvedDirectory); | ||
| 78 | } | ||
| 79 | } | 71 | } |
| 80 | } | 72 | } |
| 81 | 73 | ||
