@joebigelow / wix-1 / commits / 477561ad

Update TablesAndTuples for taking TupleDefinition. Update nullable field logic.

Update TablesAndTuples for taking TupleDefinition. Update nullable field logic.

Sean Hall committed Apr 13, 2020 at 20:23 UTC 477561ad2027979bb9dd3c9ab0a8ff1db9888ecb
2 files changed +28 -12
src/TablesAndTuples/Program.cs
+24 -11
@@ -100,6 +100,16 @@ namespace TablesAndTuples
100 {
101 type = "path";
102 }
103 + else if (columnDefinition.Type == ColumnType.Number && columnDefinition.Length == 2 &&
104 + columnDefinition.MinValue == 0 && columnDefinition.MaxValue == 1)
105 + {
106 + type = "bool";
107 + }
108 +
109 + if (columnDefinition.Type == ColumnType.Number && columnDefinition.Nullable)
110 + {
111 + type += "?";
112 + }
113
114 var field = new JsonObject
115 {
@@ -173,7 +183,7 @@ namespace TablesAndTuples
183 var clrType = ConvertToClrType(fieldType);
184 fieldType = ConvertToFieldType(fieldType);
185
176 - var asFunction = $"As{fieldType}()";
186 + var asFunction = $"As{(clrType.Contains("?") ? "Nullable" : "")}{fieldType}()";
187
188 yield return (Name: fieldName, Type: fieldType, ClrType: clrType, AsFunction: asFunction);
189 }
@@ -194,7 +204,8 @@ namespace TablesAndTuples
204 " {");
205 var startTableDef = String.Join(Environment.NewLine,
206 " public static readonly TableDefinition {1} = new TableDefinition(",
197 - " \"{1}\",",
207 + " \"{2}\",",
208 + " {3},",
209 " new[]",
210 " {");
211 var columnDef =
@@ -203,8 +214,6 @@ namespace TablesAndTuples
214 " },");
215 var unrealDef =
216 " unreal: true,";
206 - var tupleNameDef =
207 - " tupleDefinitionName: {1}TupleDefinitions.{2}.Name,";
217 var endTableDef = String.Join(Environment.NewLine,
218 " tupleIdIsPrimaryKey: {1}",
219 " );",
@@ -225,7 +234,8 @@ namespace TablesAndTuples
234 sb.AppendLine(startClassDef.Replace("{1}", ns).Replace("{2}", prefix));
235 foreach (var tableDefinition in tableDefinitions)
236 {
228 - sb.AppendLine(startTableDef.Replace("{1}", tableDefinition.Name));
237 + var tupleDefinition = tableDefinition.Tupleless ? "null" : $"{prefix}TupleDefinitions.{tableDefinition.TupleDefinitionName}";
238 + sb.AppendLine(startTableDef.Replace("{1}", tableDefinition.VariableName).Replace("{2}", tableDefinition.Name).Replace("{3}", tupleDefinition));
239 foreach (var columnDefinition in tableDefinition.Columns)
240 {
241 sb.Append(columnDef.Replace("{1}", columnDefinition.Name).Replace("{2}", columnDefinition.Type.ToString()).Replace("{3}", columnDefinition.Length.ToString())
@@ -277,16 +287,12 @@ namespace TablesAndTuples
287 {
288 sb.AppendLine(unrealDef);
289 }
280 - if (!tableDefinition.Tupleless)
281 - {
282 - sb.AppendLine(tupleNameDef.Replace("{1}", prefix).Replace("{2}", tableDefinition.TupleDefinitionName));
283 - }
290 sb.AppendLine(endTableDef.Replace("{1}", tableDefinition.TupleIdIsPrimaryKey.ToString().ToLower()));
291 }
292 sb.AppendLine(startAllTablesDef);
293 foreach (var tableDefinition in tableDefinitions)
294 {
289 - sb.AppendLine(allTableDef.Replace("{1}", tableDefinition.Name));
295 + sb.AppendLine(allTableDef.Replace("{1}", tableDefinition.VariableName));
296 }
297 sb.AppendLine(endAllTablesDef);
298 sb.AppendLine(endClassDef);
@@ -465,12 +471,15 @@ namespace TablesAndTuples
471 {
472 case "bool":
473 return "Bool";
474 + case "bool?":
475 + return "Number";
476
477 case "string":
478 case "preserved":
479 return "String";
480
481 case "number":
482 + case "number?":
483 return "Number";
484
485 case "path":
@@ -486,6 +495,8 @@ namespace TablesAndTuples
495 {
496 case "bool":
497 return "bool";
498 + case "bool?":
499 + return "bool?";
500
501 case "string":
502 case "preserved":
@@ -493,9 +504,11 @@ namespace TablesAndTuples
504
505 case "number":
506 return "int";
507 + case "number?":
508 + return "int?";
509
510 case "path":
498 - return "string";
511 + return "IntermediateFieldPathValue";
512 }
513
514 throw new ArgumentException(fieldType);
src/TablesAndTuples/WixTableDefinition.cs
+4 -1
@@ -9,15 +9,18 @@ namespace TablesAndTuples
9 public WixTableDefinition(string name, IEnumerable<WixColumnDefinition> columns, bool unreal, bool tupleless, string tupleDefinitionName, bool? tupleIdIsPrimaryKey)
10 {
11 this.Name = name;
12 + this.VariableName = name.Replace("_", "");
13 this.Unreal = unreal;
14 this.Columns = columns?.ToArray();
15 this.Tupleless = tupleless;
15 - this.TupleDefinitionName = tupleless ? null : tupleDefinitionName ?? name.Replace("_", "");
16 + this.TupleDefinitionName = tupleless ? null : tupleDefinitionName ?? this.VariableName;
17 this.TupleIdIsPrimaryKey = tupleIdIsPrimaryKey ?? DeriveTupleIdIsPrimaryKey(this.Columns);
18 }
19
20 public string Name { get; }
21
22 + public string VariableName { get; }
23 +
24 public string TupleDefinitionName { get; }
25
26 public bool Unreal { get; }