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; }