Exemplo n.º 1
0
        public void Build(IDbDataParameter adoParameter)
        {
            IBindingMetadata          metadata = this.Field?.Identity.GetMetadata <IBindingMetadata>();
            IBindingParameterContract contract = metadata?.Parameter;

            adoParameter.ParameterName = this.Name;

            if (contract?.Convert != null)
            {
                adoParameter.Value = contract.Convert(this.Field?.Value);
            }
            else if (this.Field != null)
            {
                adoParameter.Value = this.Field.Value;
            }
            else
            {
                adoParameter.Value = DBNull.Value;
            }

            if (contract?.Write != null)
            {
                BindingParameterInfo paramInfo = new BindingParameterInfo()
                {
                    Metadata  = metadata,
                    Parameter = adoParameter,
                    Field     = this.Field,
                };

                contract.Write(paramInfo);
            }
        }
Exemplo n.º 2
0
        public void Build(IDbDataParameter adoParameter)
        {
            IBindingMetadata          metadata = this.Source?.Identity.Metadata.Require <IBindingMetadata>();
            IBindingParameterContract contract = metadata?.Parameter;

            adoParameter.ParameterName = this.Name;

            if (contract?.Convert != null)
            {
                adoParameter.Value = contract.Convert(this.Source?.Snapshot);
            }
            else if (this.Source != null)
            {
                adoParameter.Value = this.Source.Snapshot;
            }
            else
            {
                adoParameter.Value = DBNull.Value;
            }

            if (contract?.Write != null)
            {
                BindingParameterInfo paramInfo = new BindingParameterInfo()
                {
                    Metadata  = metadata,
                    Parameter = adoParameter,
                    Field     = this.Source,
                };

                contract.Write(paramInfo);
            }
        }
Exemplo n.º 3
0
        public IBindingParameterContract GetParameterContract(IBindingMetadata metadata)
        {
            IBindingParameterContract fallback = metadata.Parameter;

            if (metadata.Annotations.OfType <JsonAttribute>().Any())
            {
                return(new BindingParameterContract()
                {
                    Convert = fallback.Convert,
                    Write = pi =>
                    {
                        fallback?.Write?.Invoke(pi);

                        if (pi.Parameter is NpgsqlParameter npgParam)
                        {
                            npgParam.NpgsqlDbType = NpgsqlDbType.Json;
                        }
                    }
                });
        public IBindingParameterContract GetParameterContract(IBindingMetadata metadata)
        {
            if (metadata.Type == typeof(DateTime) || metadata.Type == typeof(DateTime?))
            {
                IBindingParameterContract fallback = metadata.Parameter;

                return(new BindingParameterContract()
                {
                    Convert = fallback.Convert,
                    Write = pi =>
                    {
                        fallback?.Write?.Invoke(pi);

                        pi.Parameter.DbType = DbType.DateTime2;
                    }
                });
            }

            return(null);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Appends a table-valued parameter from the current values, e.g. <c>@TP0</c>, to the projection buffer.
        /// </summary>
        /// <param name="projection">The current projection.</param>
        /// <returns>A new attribute containing the appended buffer.</returns>
        public static IProjectionAttribute TvpName(this IProjection projection)
        {
            if (projection.Source == null)
            {
                throw ProjectionException.ValueNotFound(projection);
            }
            else if (!projection.Attributes.Any())
            {
                throw ProjectionException.FromProjection(projection, "No attributes found.");
            }

            IProjectionMetadata metadata = TvpHelper.GetPreferredTvpMetadata(projection);
            IField source = new Relation(projection.Source, metadata.Identity.Name).Scalar();

            RelationIdentity identity = new RelationIdentity(metadata.Identity.Schema, projection.Attributes.Select(a => a.Metadata.Identity));

            IBindingParameterContract contract = TvpCache.GetParameterContract(identity);

            string paramName   = projection.Context.Lookup.Custom("TP", projection.Identity, field: source);
            string dialectName = projection.Context.Domain.Dialect.Parameter(paramName);

            return(projection.Attr().Append(dialectName).Append(new Parameter(paramName, source, contract)));
        }
Exemplo n.º 6
0
        public static IDbDataParameter CreateAdoParameter(IDbCommand adoCommand, IParameter parameter)
        {
            IDbDataParameter adoParameter = adoCommand.CreateParameter();

            IBindingMetadata          metadata = parameter.Field?.Identity.GetMetadata <IBindingMetadata>();
            IBindingParameterContract contract = parameter.Contract ?? metadata?.Parameter;

            adoParameter.ParameterName = parameter.Name;

            if (contract?.Convert != null)
            {
                adoParameter.Value = contract.Convert(parameter.Field?.Value);
            }
            else if (parameter.Field != null)
            {
                adoParameter.Value = parameter.Field.Value;
            }
            else
            {
                adoParameter.Value = DBNull.Value;
            }

            if (contract?.Write != null)
            {
                BindingParameterInfo paramInfo = new BindingParameterInfo()
                {
                    Metadata  = metadata,
                    Parameter = adoParameter,
                    Field     = parameter.Field,
                };

                contract.Write(paramInfo);
            }

            return(adoParameter);
        }
Exemplo n.º 7
0
 public Parameter(string name, IField field = null, IBindingParameterContract contract = null)
 {
     this.Name     = name ?? throw new ArgumentNullException(nameof(name));
     this.Field    = field;
     this.Contract = contract;
 }