From 7462108b714d07161126dcedda5312daef54ae13 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Fri, 24 May 2019 08:47:36 -0700 Subject: Add tuple.IsNull(), remove fields when set to default and other small fixes --- src/WixToolset.Data/IntermediateTupleExtensions.cs | 74 ++++++++++++++++------ 1 file changed, 53 insertions(+), 21 deletions(-) (limited to 'src/WixToolset.Data/IntermediateTupleExtensions.cs') diff --git a/src/WixToolset.Data/IntermediateTupleExtensions.cs b/src/WixToolset.Data/IntermediateTupleExtensions.cs index f5b30d47..dd488dc5 100644 --- a/src/WixToolset.Data/IntermediateTupleExtensions.cs +++ b/src/WixToolset.Data/IntermediateTupleExtensions.cs @@ -1,36 +1,26 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. namespace WixToolset.Data { public static class IntermediateTupleExtensions { - public static bool AsBool(this IntermediateTuple tuple, int index) - { - return tuple?.Fields[index].AsBool() ?? false; - } + public static bool AsBool(this IntermediateTuple tuple, int index) => tuple?.Fields[index].AsBool() ?? false; - public static bool? AsNullableBool(this IntermediateTuple tuple, int index) - { - return tuple?.Fields[index].AsNullableBool(); - } + public static bool? AsNullableBool(this IntermediateTuple tuple, int index) => tuple?.Fields[index].AsNullableBool(); - public static int AsNumber(this IntermediateTuple tuple, int index) - { - return tuple?.Fields[index].AsNumber() ?? 0; - } + public static int AsNumber(this IntermediateTuple tuple, int index) => tuple?.Fields[index].AsNumber() ?? 0; - public static int? AsNullableNumber(this IntermediateTuple tuple, int index) - { - return tuple?.Fields[index].AsNullableNumber(); - } + public static int? AsNullableNumber(this IntermediateTuple tuple, int index) => tuple?.Fields[index].AsNullableNumber(); - public static string AsString(this IntermediateTuple tuple, int index) - { - return tuple?.Fields[index].AsString(); - } + public static string AsString(this IntermediateTuple tuple, int index) => tuple?.Fields[index].AsString(); public static IntermediateField Set(this IntermediateTuple tuple, int index, bool value) { + if (value == default && NoFieldMetadata(tuple, index)) + { + return tuple.Fields[index] = null; + } + var definition = tuple.Definition.FieldDefinitions[index]; var field = tuple.Fields[index].Set(definition, value); @@ -40,6 +30,11 @@ namespace WixToolset.Data public static IntermediateField Set(this IntermediateTuple tuple, int index, bool? value) { + if (value == default && NoFieldMetadata(tuple, index)) + { + return tuple.Fields[index] = null; + } + var definition = tuple.Definition.FieldDefinitions[index]; var field = tuple.Fields[index].Set(definition, value); @@ -49,6 +44,11 @@ namespace WixToolset.Data public static IntermediateField Set(this IntermediateTuple tuple, int index, long value) { + if (value == default && NoFieldMetadata(tuple, index)) + { + return tuple.Fields[index] = null; + } + var definition = tuple.Definition.FieldDefinitions[index]; var field = tuple.Fields[index].Set(definition, value); @@ -58,6 +58,11 @@ namespace WixToolset.Data public static IntermediateField Set(this IntermediateTuple tuple, int index, long? value) { + if (value == default && NoFieldMetadata(tuple, index)) + { + return tuple.Fields[index] = null; + } + var definition = tuple.Definition.FieldDefinitions[index]; var field = tuple.Fields[index].Set(definition, value); @@ -67,6 +72,11 @@ namespace WixToolset.Data public static IntermediateField Set(this IntermediateTuple tuple, int index, int value) { + if (value == default && NoFieldMetadata(tuple, index)) + { + return tuple.Fields[index] = null; + } + var definition = tuple.Definition.FieldDefinitions[index]; var field = tuple.Fields[index].Set(definition, value); @@ -76,6 +86,11 @@ namespace WixToolset.Data public static IntermediateField Set(this IntermediateTuple tuple, int index, int? value) { + if (value == default && NoFieldMetadata(tuple, index)) + { + return tuple.Fields[index] = null; + } + var definition = tuple.Definition.FieldDefinitions[index]; var field = tuple.Fields[index].Set(definition, value); @@ -85,6 +100,11 @@ namespace WixToolset.Data public static IntermediateField Set(this IntermediateTuple tuple, int index, IntermediateFieldPathValue value) { + if (value == default && NoFieldMetadata(tuple, index)) + { + return tuple.Fields[index] = null; + } + var definition = tuple.Definition.FieldDefinitions[index]; var field = tuple.Fields[index].Set(definition, value); @@ -94,11 +114,23 @@ namespace WixToolset.Data public static IntermediateField Set(this IntermediateTuple tuple, int index, string value) { + if (value == default && NoFieldMetadata(tuple, index)) + { + return tuple.Fields[index] = null; + } + var definition = tuple.Definition.FieldDefinitions[index]; var field = tuple.Fields[index].Set(definition, value); return tuple.Fields[index] = field; } + + private static bool NoFieldMetadata(IntermediateTuple tuple, int index) + { + var field = tuple?.Fields[index]; + + return field?.Context == null && field?.PreviousValue == null; + } } } -- cgit v1.2.3-55-g6feb