aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core.WindowsInstaller/Bind
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2020-01-13 09:10:13 -0800
committerRob Mensching <rob@firegiant.com>2020-01-13 14:19:45 -0800
commit94b941ee95a294228516097c269e27dfa41593ab (patch)
tree208cb36a5a6a3e17f5d458cfaa679d6ca1a76e15 /src/WixToolset.Core.WindowsInstaller/Bind
parenta2b1235d9c0dfba48b1badac428d89d1137da698 (diff)
downloadwix-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')
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs66
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs22
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs20
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