aboutsummaryrefslogtreecommitdiff
path: root/src/internal
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2023-02-09 13:59:15 -0800
committerRob Mensching <rob@firegiant.com>2023-02-09 15:18:09 -0800
commitcff729a33833a963bbaeca9def11b7c09f8c2c0b (patch)
tree9fd34499f988442ce78f7a1209c71cf47b4dc134 /src/internal
parent4d0b22438b5795e7a92c227f1c824b8da853d859 (diff)
downloadwix-cff729a33833a963bbaeca9def11b7c09f8c2c0b.tar.gz
wix-cff729a33833a963bbaeca9def11b7c09f8c2c0b.tar.bz2
wix-cff729a33833a963bbaeca9def11b7c09f8c2c0b.zip
Improve instance transforms
Fix bug where the string `UpgradeCode` was being used instead of the GUID for the UpgradeCode in an instance transform. Also handle the case where the instance transform's Property does or does not exist when creating the transform. Fixes 7193
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/WixInternal.TestSupport/Query.cs127
1 files changed, 81 insertions, 46 deletions
diff --git a/src/internal/WixInternal.TestSupport/Query.cs b/src/internal/WixInternal.TestSupport/Query.cs
index 38f5df64..4b396454 100644
--- a/src/internal/WixInternal.TestSupport/Query.cs
+++ b/src/internal/WixInternal.TestSupport/Query.cs
@@ -26,6 +26,20 @@ namespace WixInternal.TestSupport
26 return results.ToArray(); 26 return results.ToArray();
27 } 27 }
28 28
29 public static string[] QueryDatabase(Database db, string[] tables)
30 {
31 var results = new List<string>();
32 var resultsByTable = QueryDatabaseByTable(db, tables);
33 var sortedTables = tables.ToList();
34 sortedTables.Sort();
35 foreach (var tableName in sortedTables)
36 {
37 var rows = resultsByTable[tableName];
38 rows?.ForEach(r => results.Add($"{tableName}:{r}"));
39 }
40 return results.ToArray();
41 }
42
29 /// <summary> 43 /// <summary>
30 /// Returns rows from requested tables formatted to facilitate testing. 44 /// Returns rows from requested tables formatted to facilitate testing.
31 /// If the table did not exist in the database, its list will be null. 45 /// If the table did not exist in the database, its list will be null.
@@ -39,68 +53,89 @@ namespace WixInternal.TestSupport
39 53
40 if (tables?.Length > 0) 54 if (tables?.Length > 0)
41 { 55 {
42 var sb = new StringBuilder();
43 using (var db = new Database(path)) 56 using (var db = new Database(path))
44 { 57 {
45 foreach (var table in tables) 58 results = QueryDatabaseByTable(db, tables);
59 }
60 }
61
62 return results;
63 }
64
65 /// <summary>
66 /// Returns rows from requested tables formatted to facilitate testing.
67 /// If the table did not exist in the database, its list will be null.
68 /// </summary>
69 /// <param name="db"></param>
70 /// <param name="tables"></param>
71 /// <returns></returns>
72 public static Dictionary<string, List<string>> QueryDatabaseByTable(Database db, string[] tables)
73 {
74 var results = new Dictionary<string, List<string>>();
75
76 if (tables?.Length > 0)
77 {
78 var sb = new StringBuilder();
79
80 foreach (var table in tables)
81 {
82 if (table == "_SummaryInformation")
46 { 83 {
47 if (table == "_SummaryInformation") 84 var entries = new List<string>();
48 { 85 results.Add(table, entries);
49 var entries = new List<string>(); 86
50 results.Add(table, entries); 87 entries.Add($"Title\t{db.SummaryInfo.Title}");
51 88 entries.Add($"Subject\t{db.SummaryInfo.Subject}");
52 entries.Add($"Title\t{db.SummaryInfo.Title}"); 89 entries.Add($"Author\t{db.SummaryInfo.Author}");
53 entries.Add($"Subject\t{db.SummaryInfo.Subject}"); 90 entries.Add($"Keywords\t{db.SummaryInfo.Keywords}");
54 entries.Add($"Author\t{db.SummaryInfo.Author}"); 91 entries.Add($"Comments\t{db.SummaryInfo.Comments}");
55 entries.Add($"Keywords\t{db.SummaryInfo.Keywords}"); 92 entries.Add($"Template\t{db.SummaryInfo.Template}");
56 entries.Add($"Comments\t{db.SummaryInfo.Comments}"); 93 entries.Add($"CodePage\t{db.SummaryInfo.CodePage}");
57 entries.Add($"Template\t{db.SummaryInfo.Template}"); 94 entries.Add($"PageCount\t{db.SummaryInfo.PageCount}");
58 entries.Add($"CodePage\t{db.SummaryInfo.CodePage}"); 95 entries.Add($"WordCount\t{db.SummaryInfo.WordCount}");
59 entries.Add($"PageCount\t{db.SummaryInfo.PageCount}"); 96 entries.Add($"CharacterCount\t{db.SummaryInfo.CharacterCount}");
60 entries.Add($"WordCount\t{db.SummaryInfo.WordCount}"); 97 entries.Add($"Security\t{db.SummaryInfo.Security}");
61 entries.Add($"CharacterCount\t{db.SummaryInfo.CharacterCount}"); 98
62 entries.Add($"Security\t{db.SummaryInfo.Security}"); 99 continue;
63 100 }
64 continue;
65 }
66 101
67 if (!db.IsTablePersistent(table)) 102 if (!db.IsTablePersistent(table))
68 { 103 {
69 results.Add(table, null); 104 results.Add(table, null);
70 continue; 105 continue;
71 } 106 }
72 107
73 var rows = new List<string>(); 108 var rows = new List<string>();
74 results.Add(table, rows); 109 results.Add(table, rows);
75 110
76 using (var view = db.OpenView("SELECT * FROM `{0}`", table)) 111 using (var view = db.OpenView("SELECT * FROM `{0}`", table))
112 {
113 view.Execute();
114
115 Record record;
116 while ((record = view.Fetch()) != null)
77 { 117 {
78 view.Execute(); 118 sb.Clear();
79 119
80 Record record; 120 using (record)
81 while ((record = view.Fetch()) != null)
82 { 121 {
83 sb.Clear(); 122 for (var i = 0; i < record.FieldCount; ++i)
84
85 using (record)
86 { 123 {
87 for (var i = 0; i < record.FieldCount; ++i) 124 if (i > 0)
88 { 125 {
89 if (i > 0) 126 sb.Append("\t");
90 {
91 sb.Append("\t");
92 }
93
94 sb.Append(record[i + 1]?.ToString());
95 } 127 }
96 }
97 128
98 rows.Add(sb.ToString()); 129 sb.Append(record[i + 1]?.ToString());
130 }
99 } 131 }
132
133 rows.Add(sb.ToString());
100 } 134 }
101 rows.Sort();
102 } 135 }
103 } 136
137 rows.Sort();
138 }
104 } 139 }
105 140
106 return results; 141 return results;