Beispiel #1
0
        internal void AppendParameter(ValueObject valueObject, string parameterKey, object parameterValue,
                                      Type parameterType, ValueNode node)
        {
            if (valueObject.Value == null)
            {
                _rawSqlBuilder.Append("null");
                _formattedSqlBuilder.Append("null");
                return;
            }

            var convertedValue = parameterValue;
            var isDateOnly     = false;

            if (valueObject.IsDateTime && node.UseBuiltinFunction)
            {
                convertedValue = valueObject.TruncateTime((DateTime)convertedValue);
                isDateOnly     = true;
            }
            if (valueObject.IsDateTimeOffset && node.UseBuiltinFunction)
            {
                convertedValue = valueObject.TruncateTime((DateTimeOffset)convertedValue);
                isDateOnly     = true;
            }

            if (valueObject.IsString && node.UseBuiltinFunction)
            {
                switch (node.BuiltinFunctionName)
                {
                case BuiltinFunctionName.StartsWith:
                    convertedValue = valueObject.GetStartsWithValue((string)convertedValue, node.EscapeChar);
                    break;

                case BuiltinFunctionName.Contains:
                    convertedValue = valueObject.GetContainsValue((string)convertedValue, node.EscapeChar);
                    break;

                case BuiltinFunctionName.EndsWith:
                    convertedValue = valueObject.GetEndsWithValue((string)convertedValue, node.EscapeChar);
                    break;

                case BuiltinFunctionName.Escape:
                    convertedValue = valueObject.GetEscapedValue((string)convertedValue, node.EscapeChar);
                    break;
                }
            }

            var param = _config.DataParameterCreator()
                        .AddName(parameterKey)
                        .AddValue(convertedValue);

            if (valueObject.EasySqlParameterAttribute != null)
            {
                param.AddDbType(valueObject.EasySqlParameterAttribute.DbType);
            }

            if (!SqlParameters.ContainsKey(parameterKey))
            {
                SqlParameters.Add(parameterKey, param);
            }

            // parameterKey is sql parameter name
            var localParameterKey = parameterKey;

            if (!_config.Dialect.EnableNamedParameter)
            {
                localParameterKey = _config.Dialect.ParameterPrefix;
            }

            _rawSqlBuilder.Append(localParameterKey);
            if (isDateOnly)
            {
                if (valueObject.IsDateTime)
                {
                    _formattedSqlBuilder.Append(valueObject.ToLogFormatDateOnly((DateTime)convertedValue));
                }

                if (valueObject.IsDateTimeOffset)
                {
                    _formattedSqlBuilder.Append(valueObject.ToLogFormatDateOnly((DateTimeOffset)convertedValue));
                }
            }
            else
            {
                _formattedSqlBuilder.Append(valueObject.ToLogFormat(convertedValue));
            }
        }