/// <summary> /// Converts to a <see cref="SqlParameter"/>. /// </summary> /// <param name="stringInputParameter">The string input parameter.</param> /// <returns>SqlParameter.</returns> public static SqlParameter ToSqlParameter( this InputParameterDefinition <string> stringInputParameter) { stringInputParameter.MustForArg(nameof(stringInputParameter)).NotBeNull(); if (stringInputParameter.SqlDataType.GetType() == typeof(StringSqlDataTypeRepresentation)) { var stringDataType = (StringSqlDataTypeRepresentation)stringInputParameter.SqlDataType; var name = stringInputParameter.Name; name = name.StartsWith("@", StringComparison.Ordinal) ? name : "@" + name; var result = stringInputParameter.Value.CreateInputSqlParameter(name, stringDataType.SupportUnicode ? SqlDbType.NVarChar : SqlDbType.VarChar, stringDataType.SupportedLength); return(result); } else if (stringInputParameter.SqlDataType.GetType() == typeof(XmlSqlDataTypeRepresentation)) { var name = stringInputParameter.Name; name = name.StartsWith("@", StringComparison.Ordinal) ? name : "@" + name; var result = stringInputParameter.Value.CreateInputSqlParameter(name, SqlDbType.Xml); return(result); } else { throw new NotSupportedException(FormattableString.Invariant($"Cannot create a {nameof(SqlParameter)} from {nameof(InputParameterDefinition<string>)} with a datatype of {stringInputParameter.SqlDataType}.")); } }
/// <summary> /// Converts to a <see cref="SqlParameter"/>. /// </summary> /// <param name="dateTimeInputParameter">The nullable <see cref="DateTime"/> input parameter.</param> /// <returns>SqlParameter.</returns> public static SqlParameter ToSqlParameter( this InputParameterDefinition <DateTime?> dateTimeInputParameter) { dateTimeInputParameter.MustForArg(nameof(dateTimeInputParameter)).NotBeNull(); var name = dateTimeInputParameter.Name; name = name.StartsWith("@", StringComparison.Ordinal) ? name : "@" + name; var result = dateTimeInputParameter.Value.CreateInputSqlParameter(name); return(result); }
/// <summary> /// Converts to a <see cref="SqlParameter"/>. /// </summary> /// <param name="parameterDefinition">The parameter representation.</param> /// <returns>SqlParameter.</returns> public static SqlParameter ToSqlParameter( this ParameterDefinitionBase parameterDefinition) { parameterDefinition.MustForArg(nameof(parameterDefinition)).NotBeNull(); if (parameterDefinition is InputParameterDefinition <byte[]> binaryRepresentationInput) { return(binaryRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <decimal> decimalRepresentationInput) { return(decimalRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <int> intRepresentationInput) { return(intRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <int?> intNullableRepresentationInput) { return(intNullableRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <long> longRepresentationInput) { return(longRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <long?> longNullableRepresentationInput) { return(longNullableRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <string> stringRepresentationInput) { return(stringRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <DateTime> dateTimeRepresentationInput) { return(dateTimeRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <DateTime?> dateTimeNullableRepresentationInput) { return(dateTimeNullableRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <byte[]> binaryRepresentationOutput) { return(binaryRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <decimal> decimalRepresentationOutput) { return(decimalRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <int> intRepresentationOutput) { return(intRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <int?> intNullableRepresentationOutput) { return(intNullableRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <long> longRepresentationOutput) { return(longRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <long?> longNullableRepresentationOutput) { return(longNullableRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <string> stringRepresentationOutput) { return(stringRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <DateTime> dateTimeRepresentationOutput) { return(dateTimeRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <DateTime?> dateTimeNullableRepresentationOutput) { return(dateTimeNullableRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition.GetType().GetGenericArguments().SingleOrDefault()?.IsEnum ?? false) { var genericDefinition = parameterDefinition.GetType().GetGenericTypeDefinition(); if (genericDefinition == typeof(InputParameterDefinition <>)) { var enumValue = parameterDefinition.GetType() .GetProperty(nameof(InputParameterDefinition <string> .Value)) ?.GetValue(parameterDefinition); var stringParameter = new InputParameterDefinition <string>(parameterDefinition.Name, parameterDefinition.SqlDataType, enumValue?.ToString()); return(stringParameter.ToSqlParameter()); } else if (genericDefinition == typeof(OutputParameterDefinition <>)) { var stringParameter = new OutputParameterDefinition <string>(parameterDefinition.Name, parameterDefinition.SqlDataType); return(stringParameter.ToSqlParameter()); } else { throw new NotSupportedException(FormattableString.Invariant($"Param type {parameterDefinition.GetType().ToStringReadable()} is not supported.")); } } else { throw new NotSupportedException(FormattableString.Invariant($"{nameof(ParameterDefinitionBase)} {nameof(parameterDefinition)} of type {parameterDefinition.GetType().ToStringReadable()} is not a supported type parameter.")); } }
static InputParameterDefinitionTValueTest() { ConstructorArgumentValidationTestScenarios .RemoveAllScenarios() .AddScenario(() => new ConstructorArgumentValidationTestScenario <InputParameterDefinition <Version> > { Name = "constructor should throw ArgumentNullException when parameter 'name' is null scenario", ConstructionFunc = () => { var referenceObject = A.Dummy <InputParameterDefinition <Version> >(); var result = new InputParameterDefinition <Version>( null, referenceObject.SqlDataType, referenceObject.Value); return(result); }, ExpectedExceptionType = typeof(ArgumentNullException), ExpectedExceptionMessageContains = new[] { "name", }, }) .AddScenario(() => new ConstructorArgumentValidationTestScenario <InputParameterDefinition <Version> > { Name = "constructor should throw ArgumentException when parameter 'name' is white space scenario", ConstructionFunc = () => { var referenceObject = A.Dummy <InputParameterDefinition <Version> >(); var result = new InputParameterDefinition <Version>( Invariant($" {Environment.NewLine} "), referenceObject.SqlDataType, referenceObject.Value); return(result); }, ExpectedExceptionType = typeof(ArgumentException), ExpectedExceptionMessageContains = new[] { "name", "white space", }, }) .AddScenario(() => new ConstructorArgumentValidationTestScenario <InputParameterDefinition <Version> > { Name = "constructor should throw ArgumentException when parameter 'name' is not alphanumeric nor @ nor _", ConstructionFunc = () => { var referenceObject = A.Dummy <InputParameterDefinition <Version> >(); var result = new InputParameterDefinition <Version>( referenceObject.Name + "^", referenceObject.SqlDataType, referenceObject.Value); return(result); }, ExpectedExceptionType = typeof(ArgumentException), ExpectedExceptionMessageContains = new[] { "name", "alphanumeric", }, }) .AddScenario(() => new ConstructorArgumentValidationTestScenario <InputParameterDefinition <Version> > { Name = "constructor should throw ArgumentNullException when parameter 'sqlDataType' is null scenario", ConstructionFunc = () => { var referenceObject = A.Dummy <InputParameterDefinition <Version> >(); var result = new InputParameterDefinition <Version>( referenceObject.Name, null, referenceObject.Value); return(result); }, ExpectedExceptionType = typeof(ArgumentNullException), ExpectedExceptionMessageContains = new[] { "sqlDataType", }, }); EquatableTestScenarios .RemoveAllScenarios() .AddScenario(() => new EquatableTestScenario <InputParameterDefinition <Version> > { Name = "Default Code Generated Scenario", ReferenceObject = ReferenceObjectForEquatableTestScenarios, ObjectsThatAreEqualToButNotTheSameAsReferenceObject = new InputParameterDefinition <Version>[] { new InputParameterDefinition <Version>( ReferenceObjectForEquatableTestScenarios.Name, ReferenceObjectForEquatableTestScenarios.SqlDataType, ReferenceObjectForEquatableTestScenarios.Value), }, ObjectsThatAreNotEqualToReferenceObject = new InputParameterDefinition <Version>[] { new InputParameterDefinition <Version>( A.Dummy <InputParameterDefinition <Version> >().Whose(_ => !_.Name.IsEqualTo(ReferenceObjectForEquatableTestScenarios.Name)).Name, ReferenceObjectForEquatableTestScenarios.SqlDataType, ReferenceObjectForEquatableTestScenarios.Value), new InputParameterDefinition <Version>( ReferenceObjectForEquatableTestScenarios.Name, ReferenceObjectForEquatableTestScenarios.SqlDataType, A.Dummy <InputParameterDefinition <Version> >().Whose(_ => !_.Value.IsEqualTo(ReferenceObjectForEquatableTestScenarios.Value)).Value), }, ObjectsThatAreNotOfTheSameTypeAsReferenceObject = new object[] { A.Dummy <object>(), A.Dummy <string>(), A.Dummy <int>(), A.Dummy <Version>(), A.Dummy <Guid>(), A.Dummy <OutputParameterDefinition <Version> >(), }, }); }