// initalize by value private void Initialize(DeclareArgument value) { var root = GetRoot(); chainMethod = Text.Method.Declare; CheckAndThrow(); var dataType = Mapping.ClrMapping[value.ArgType].DefaultDataType; var variable = new Variable(0, _variableName, dataType, IdentifierType.SqlVariable); root.TryAddVariableOrThrow(variable, chainMethod, false); Build = (buildContext, buildArgs) => { var sql = Text.GenerateSql(50) .NewLine(Text.Declare).S() .Append(_variableName).S() .Append(Text.As).S() .Append(dataType.Build()) .Terminate(); sql.NewLine(Text.Set).S() .Append(_variableName) .Append(Text._Equal_) .Append(value.Build(buildContext, buildArgs)); sql.Terminate(); return(sql.ToString()); }; }
internal DeclareChainer(Chainer prev, string variableName, DeclareArgument value) : base(prev) { if (Value.IsNull(value) || Value.IsNull(value.Original)) { Throw(QueryTalkExceptionType.ArgumentNull, String.Format("variable = {0}{1} value = null/NULL", variableName, Environment.NewLine), Text.Method.Declare); } _variableName = variableName; Initialize(value); }