Example #1
0
        /// <summary>
        /// Recupera a quantidade de registros com base na Query.
        /// </summary>
        /// <param name="session">Sessão utilizada para a execução do comando.</param>
        /// <param name="query">Consulta usada.</param>
        /// <returns>Quantidade de registro encontrados com base na consulta.</returns>
        public long Count(GDASession session, IQuery query)
        {
            IProvider       provider = session != null && session.ProviderConfiguration != null ? session.ProviderConfiguration.Provider : GDA.GDASettings.DefaultProviderConfiguration.Provider;
            QueryReturnInfo qri      = query.BuildResultInfo2(provider, "COUNT(*)");

            return(Convert.ToInt64(ExecuteScalar(session, qri.CommandText, qri.Parameters.ToArray())));
        }
Example #2
0
        /// <summary>
        /// Recupera a média dos valores da propriedade especificada na consulta.
        /// </summary>
        /// <param name="session">Sessão utilizada para a execução do comando.</param>
        /// <param name="query">Consulta usada.</param>
        /// <returns>Valor medio encontrado ou zero.</returns>
        public double Avg(GDASession session, IQuery query)
        {
            IProvider       provider = session != null && session.ProviderConfiguration != null ? session.ProviderConfiguration.Provider : GDA.GDASettings.DefaultProviderConfiguration.Provider;
            QueryReturnInfo qri      = query.BuildResultInfo2(provider, "AVG(" + query.AggregationFunctionProperty + ")");
            object          result   = ExecuteScalar(session, qri.CommandText, qri.Parameters.ToArray());

            if (result == null)
            {
                return(0.0d);
            }
            else
            {
                return(Convert.ToDouble(result));
            }
        }
Example #3
0
        /// <summary>
        /// Recupera os valores da propriedade que se encontra no resultado da consulta.
        /// </summary>
        /// <param name="session">Sess�o para execu��o do comando.</param>
        /// <param name="query">Comando da consulta que ser� executada.</param>
        /// <param name="propertyName">Nome da propriedade que ser� recuperada.</param>
        /// <returns>Valores da propriedade encontrada.</returns>
        public IEnumerable <GDAPropertyValue> GetValues(GDASession session, IQuery query, string propertyName)
        {
            if (string.IsNullOrEmpty(propertyName))
            {
                throw new ArgumentNullException("propertyName");
            }
            if (query == null)
            {
                query = new Query();
            }
            query.ReturnTypeQuery = typeof(Model);
            QueryReturnInfo returnInfo = query.BuildResultInfo <Model>(this.Configuration);
            List <Mapper>   listAttr   = returnInfo.RecoverProperties;
            string          sqlQuery   = returnInfo.CommandText;
            IDbConnection   conn       = CreateConnection(session);
            IDbCommand      cmd        = CreateCommand(session, conn);

            cmd.CommandType = CommandType.Text;
            bool usingPaging = false;

            if (query.SkipCount > 0 || query.TakeCount > 0)
            {
                usingPaging = true;
            }
            if (listAttr.Count == 0)
            {
                throw new GDAException("Not found properties mappers to model {0}.", typeof(Model).FullName);
            }
            if (returnInfo.Parameters != null)
            {
                for (int i = 0; i < returnInfo.Parameters.Count; i++)
                {
                    try
                    {
                        string newName = (returnInfo.Parameters[i].ParameterName[0] != '?' ? returnInfo.Parameters[i].ParameterName : UserProvider.ParameterPrefix + returnInfo.Parameters[i].ParameterName.Substring(1) + UserProvider.ParameterSuffix);
                        sqlQuery = sqlQuery.Replace(returnInfo.Parameters[i].ParameterName, newName);
                    }
                    catch (Exception ex)
                    {
                        throw new GDAException("Error on make parameter name '" + returnInfo.Parameters[i].ParameterName + "'.", ex);
                    }
                    cmd.Parameters.Add(GDA.Helper.GDAHelper.ConvertGDAParameter(cmd, returnInfo.Parameters[i], UserProvider));
                }
            }
            if (usingPaging)
            {
                sqlQuery = UserProvider.SQLCommandLimit(listAttr, sqlQuery, query.SkipCount, query.TakeCount);
            }
            cmd.CommandText = sqlQuery;
            var property    = listAttr.Find(delegate(Mapper m) {
                return(m.PropertyMapperName == propertyName);
            });

            if (property == null)
            {
                throw new GDAException("Property {0} not found in {1}.", propertyName, typeof(Model).FullName);
            }
            IDataReader dReader = null;

            if (session == null)
            {
                try
                {
                    conn.Open();
                }
                catch (Exception ex)
                {
                    throw new GDAException(ex);
                }
                GDAConnectionManager.NotifyConnectionOpened(conn);
            }
            try
            {
                SendMessageDebugTrace("CommandText: " + cmd.CommandText);
                using (var executionHandler = Diagnostics.GDATrace.CreateExecutionHandler(cmd))
                    try
                    {
                        dReader = cmd.ExecuteReader();
                    }
                    catch (Exception ex)
                    {
                        ex = new GDAException(ex);
                        executionHandler.Fail(ex);
                        throw ex;
                    }
                if (dReader.FieldCount == 0)
                {
                    throw new GDAException("The query not return any field.");
                }
                var propertyExists = false;
                while (dReader.Read())
                {
                    var i = new GDADataRecord(dReader, null);
                    if (!propertyExists && i.GetOrdinal(property.Name) < 0)
                    {
                        yield break;
                    }
                    propertyExists = true;
                    yield return(new GDAPropertyValue(i.GetValue(property.Name), true));
                }
            }
            finally
            {
                if (session == null)
                {
                    try
                    {
                        conn.Close();
                    }
                    catch
                    {
                        SendMessageDebugTrace("Error close connection.");
                    }
                }
                if (dReader != null)
                {
                    dReader.Close();
                }
            }
        }