aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-04-13 20:23:02 +1000
committerSean Hall <r.sean.hall@gmail.com>2020-04-13 20:25:55 +1000
commit477561ad2027979bb9dd3c9ab0a8ff1db9888ecb (patch)
tree996d0601ee825c02609084f641abced6dfcbbd87 /src
parentf5b9effe3945b7faf8a5b4876eb57dc52e7c7f96 (diff)
downloadwix-477561ad2027979bb9dd3c9ab0a8ff1db9888ecb.tar.gz
wix-477561ad2027979bb9dd3c9ab0a8ff1db9888ecb.tar.bz2
wix-477561ad2027979bb9dd3c9ab0a8ff1db9888ecb.zip
Update TablesAndTuples for taking TupleDefinition.
Update nullable field logic.
Diffstat (limited to 'src')
-rw-r--r--src/TablesAndTuples/Program.cs35
-rw-r--r--src/TablesAndTuples/WixTableDefinition.cs5
2 files changed, 28 insertions, 12 deletions
diff --git a/src/TablesAndTuples/Program.cs b/src/TablesAndTuples/Program.cs
index 99b15a8c..83766930 100644
--- a/src/TablesAndTuples/Program.cs
+++ b/src/TablesAndTuples/Program.cs
@@ -100,6 +100,16 @@ namespace TablesAndTuples
100 { 100 {
101 type = "path"; 101 type = "path";
102 } 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 }
103 113
104 var field = new JsonObject 114 var field = new JsonObject
105 { 115 {
@@ -173,7 +183,7 @@ namespace TablesAndTuples
173 var clrType = ConvertToClrType(fieldType); 183 var clrType = ConvertToClrType(fieldType);
174 fieldType = ConvertToFieldType(fieldType); 184 fieldType = ConvertToFieldType(fieldType);
175 185
176 var asFunction = $"As{fieldType}()"; 186 var asFunction = $"As{(clrType.Contains("?") ? "Nullable" : "")}{fieldType}()";
177 187
178 yield return (Name: fieldName, Type: fieldType, ClrType: clrType, AsFunction: asFunction); 188 yield return (Name: fieldName, Type: fieldType, ClrType: clrType, AsFunction: asFunction);
179 } 189 }
@@ -194,7 +204,8 @@ namespace TablesAndTuples
194 " {"); 204 " {");
195 var startTableDef = String.Join(Environment.NewLine, 205 var startTableDef = String.Join(Environment.NewLine,
196 " public static readonly TableDefinition {1} = new TableDefinition(", 206 " public static readonly TableDefinition {1} = new TableDefinition(",
197 " \"{1}\",", 207 " \"{2}\",",
208 " {3},",
198 " new[]", 209 " new[]",
199 " {"); 210 " {");
200 var columnDef = 211 var columnDef =
@@ -203,8 +214,6 @@ namespace TablesAndTuples
203 " },"); 214 " },");
204 var unrealDef = 215 var unrealDef =
205 " unreal: true,"; 216 " unreal: true,";
206 var tupleNameDef =
207 " tupleDefinitionName: {1}TupleDefinitions.{2}.Name,";
208 var endTableDef = String.Join(Environment.NewLine, 217 var endTableDef = String.Join(Environment.NewLine,
209 " tupleIdIsPrimaryKey: {1}", 218 " tupleIdIsPrimaryKey: {1}",
210 " );", 219 " );",
@@ -225,7 +234,8 @@ namespace TablesAndTuples
225 sb.AppendLine(startClassDef.Replace("{1}", ns).Replace("{2}", prefix)); 234 sb.AppendLine(startClassDef.Replace("{1}", ns).Replace("{2}", prefix));
226 foreach (var tableDefinition in tableDefinitions) 235 foreach (var tableDefinition in tableDefinitions)
227 { 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));
229 foreach (var columnDefinition in tableDefinition.Columns) 239 foreach (var columnDefinition in tableDefinition.Columns)
230 { 240 {
231 sb.Append(columnDef.Replace("{1}", columnDefinition.Name).Replace("{2}", columnDefinition.Type.ToString()).Replace("{3}", columnDefinition.Length.ToString()) 241 sb.Append(columnDef.Replace("{1}", columnDefinition.Name).Replace("{2}", columnDefinition.Type.ToString()).Replace("{3}", columnDefinition.Length.ToString())
@@ -277,16 +287,12 @@ namespace TablesAndTuples
277 { 287 {
278 sb.AppendLine(unrealDef); 288 sb.AppendLine(unrealDef);
279 } 289 }
280 if (!tableDefinition.Tupleless)
281 {
282 sb.AppendLine(tupleNameDef.Replace("{1}", prefix).Replace("{2}", tableDefinition.TupleDefinitionName));
283 }
284 sb.AppendLine(endTableDef.Replace("{1}", tableDefinition.TupleIdIsPrimaryKey.ToString().ToLower())); 290 sb.AppendLine(endTableDef.Replace("{1}", tableDefinition.TupleIdIsPrimaryKey.ToString().ToLower()));
285 } 291 }
286 sb.AppendLine(startAllTablesDef); 292 sb.AppendLine(startAllTablesDef);
287 foreach (var tableDefinition in tableDefinitions) 293 foreach (var tableDefinition in tableDefinitions)
288 { 294 {
289 sb.AppendLine(allTableDef.Replace("{1}", tableDefinition.Name)); 295 sb.AppendLine(allTableDef.Replace("{1}", tableDefinition.VariableName));
290 } 296 }
291 sb.AppendLine(endAllTablesDef); 297 sb.AppendLine(endAllTablesDef);
292 sb.AppendLine(endClassDef); 298 sb.AppendLine(endClassDef);
@@ -465,12 +471,15 @@ namespace TablesAndTuples
465 { 471 {
466 case "bool": 472 case "bool":
467 return "Bool"; 473 return "Bool";
474 case "bool?":
475 return "Number";
468 476
469 case "string": 477 case "string":
470 case "preserved": 478 case "preserved":
471 return "String"; 479 return "String";
472 480
473 case "number": 481 case "number":
482 case "number?":
474 return "Number"; 483 return "Number";
475 484
476 case "path": 485 case "path":
@@ -486,6 +495,8 @@ namespace TablesAndTuples
486 { 495 {
487 case "bool": 496 case "bool":
488 return "bool"; 497 return "bool";
498 case "bool?":
499 return "bool?";
489 500
490 case "string": 501 case "string":
491 case "preserved": 502 case "preserved":
@@ -493,9 +504,11 @@ namespace TablesAndTuples
493 504
494 case "number": 505 case "number":
495 return "int"; 506 return "int";
507 case "number?":
508 return "int?";
496 509
497 case "path": 510 case "path":
498 return "string"; 511 return "IntermediateFieldPathValue";
499 } 512 }
500 513
501 throw new ArgumentException(fieldType); 514 throw new ArgumentException(fieldType);
diff --git a/src/TablesAndTuples/WixTableDefinition.cs b/src/TablesAndTuples/WixTableDefinition.cs
index fde107ad..a826a174 100644
--- a/src/TablesAndTuples/WixTableDefinition.cs
+++ b/src/TablesAndTuples/WixTableDefinition.cs
@@ -9,15 +9,18 @@ namespace TablesAndTuples
9 public WixTableDefinition(string name, IEnumerable<WixColumnDefinition> columns, bool unreal, bool tupleless, string tupleDefinitionName, bool? tupleIdIsPrimaryKey) 9 public WixTableDefinition(string name, IEnumerable<WixColumnDefinition> columns, bool unreal, bool tupleless, string tupleDefinitionName, bool? tupleIdIsPrimaryKey)
10 { 10 {
11 this.Name = name; 11 this.Name = name;
12 this.VariableName = name.Replace("_", "");
12 this.Unreal = unreal; 13 this.Unreal = unreal;
13 this.Columns = columns?.ToArray(); 14 this.Columns = columns?.ToArray();
14 this.Tupleless = tupleless; 15 this.Tupleless = tupleless;
15 this.TupleDefinitionName = tupleless ? null : tupleDefinitionName ?? name.Replace("_", ""); 16 this.TupleDefinitionName = tupleless ? null : tupleDefinitionName ?? this.VariableName;
16 this.TupleIdIsPrimaryKey = tupleIdIsPrimaryKey ?? DeriveTupleIdIsPrimaryKey(this.Columns); 17 this.TupleIdIsPrimaryKey = tupleIdIsPrimaryKey ?? DeriveTupleIdIsPrimaryKey(this.Columns);
17 } 18 }
18 19
19 public string Name { get; } 20 public string Name { get; }
20 21
22 public string VariableName { get; }
23
21 public string TupleDefinitionName { get; } 24 public string TupleDefinitionName { get; }
22 25
23 public bool Unreal { get; } 26 public bool Unreal { get; }